NSUSerDefaults
thực sự nhanh chóng triển khai, nhưng chủ yếu là khi ứng dụng của bạn phát triển, bạn muốn lưu trữ nhiều hơn và nhiều hơn nữa, tôi đã truy cập trực tiếp các tệp plist.
Chủ yếu, mọi người muốn lưu trữ danh sách thứ gì đó, vì vậy đây là phần chia sẻ của tôi về cách thực hiện điều này với NSDictionary.Điều này không yêu cầu bạn phải tạo một file plist đầu tiên, nó sẽ được tạo ra ở lần đầu tiên tiết kiệm một cái gì đó
xcode 7 beta, Swift 2,0
tiết kiệm
func SaveItemFavorites(items : Array<ItemFavorite>) -> Bool
{
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let docuDir = paths.firstObject as! String
let path = docuDir.stringByAppendingPathComponent(ItemFavoritesFilePath)
let filemanager = NSFileManager.defaultManager()
let array = NSMutableArray()
for var i = 0 ; i < items.count ; i++
{
let dict = NSMutableDictionary()
let ItemCode = items[i].ItemCode as NSString
dict.setObject(ItemCode, forKey: "ItemCode")
//add any aditional..
array[i] = dict
}
let favoritesDictionary = NSDictionary(object: array, forKey: "favorites")
//check if file exists
if(!filemanager.fileExistsAtPath(path))
{
let created = filemanager.createFileAtPath(path, contents: nil, attributes: nil)
if(created)
{
let succeeded = favoritesDictionary.writeToFile(path, atomically: true)
return succeeded
}
return false
}
else
{
let succeeded = notificationDictionary.writeToFile(path, atomically: true)
return succeeded
}
}
ít lưu ý từ tài liệu:
NSDictionary.writeToFile (path: atomically :)
Phương pháp này một cách đệ quy xác nhận rằng tất cả các đối tượng chứa là những đối tượng danh sách tài sản (trường hợp của NSData
, NSDate
, NSNumber
, NSString
, NSArray
, hoặc NSDictionary
) trước khi viết ra các tập tin, và trả về NO nếu tất cả các đối tượng không phải là bất động sản liệt kê các đối tượng, vì tệp kết quả sẽ không phải là một danh sách thuộc tính hợp lệ.
Vì vậy, bất cứ điều gì bạn đặt ở dict.SetObject()
phải là một trong các loại được đề cập ở trên.
tải
private let ItemFavoritesFilePath = "ItemFavorites.plist"
func LoadItemFavorites() -> Array<ItemFavorite>
{
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let docuDir = paths.firstObject as! String
let path = docuDir.stringByAppendingPathComponent(ItemFavoritesFilePath)
let dict = NSDictionary(contentsOfFile: path)
let dictitems : AnyObject? = dict?.objectForKey("favorites")
var favoriteItemsList = Array<ItemFavorite>()
if let arrayitems = dictitems as? NSArray
{
for var i = 0;i<arrayitems.count;i++
{
if let itemDict = arrayitems[i] as? NSDictionary
{
let ItemCode = itemDict.objectForKey("ItemCode") as? String
//get any additional
let ItemFavorite = ItemFavorite(item: ItemCode)
favoriteItemsList.append(ItemFavorite)
}
}
}
return favoriteItemsList
}
Tôi đã triển khai giải pháp PList cho danh sách các URL được sử dụng gần đây. Có vẻ như PList là cách tiếp cận chính xác cho vấn đề của tôi. Nhưng tôi phải nói rằng sau khi đã làm tương tự trên Android, điều này đáng ngạc nhiên hơn nhiều liên quan đến xa như một đường cong học tập và nỗ lực tổng thể. Vì vậy, tôi phải bình luận và cảm ơn rất nhiều cho mã ví dụ trên ... – user574771
Câu hỏi ... khi bạn nói "bạn không thể viết vào tài nguyên ứng dụng của mình", bạn có nghĩa là chúng tôi không thể viết thư cho một plist chúng ta tạo ra và cư trú từ bên trong xcode? – crazyCoder
Bạn chỉ có thể viết trong thư mục Tài liệu của ứng dụng. Vì vậy, bạn có thể sao chép plist đó từ thư mục Resources vào thư mục Documents lúc runtime và sau đó chỉnh sửa nó. – doppioslash