NSUSerDefaults
действительно быстро реализовать, но в основном, как растет ваше приложение, вы хотите сохранить все больше и больше, я пошел прямо на Plist файлов.
В основном, люди хотят сохранить список чего-то, поэтому вот моя доля о том, как это сделать с NSDictionary.Это не требует, чтобы создать файл Plist первым, он будет создан в первой экономии времени что-то
Xcode 7 бета, Swift 2,0
экономии
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
}
}
записочку из документов:
NSDictionary.writeToFile (путь: атомно :)
Этот метод рекурсивно проверяет, что все содержащиеся в нем объекты в список свойств объектов (экземпляры NSData
, NSDate
, NSNumber
, NSString
, NSArray
или NSDictionary
) перед записью из файла, и возвращает NO, если все объекты не являются собственностью поскольку результирующий файл не будет действительным списком свойств.
Так что все, что вы установили в dict.SetObject()
, должно быть одним из вышеупомянутых типов.
загрузки
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
}
Я реализовал решение PList для списка недавно использованных URL-адресов. Кажется, что PList был правильным подходом к моей проблеме. Но я должен сказать, что после того, как он сделал то же самое на Android, это было удивительно гораздо больше связано с кривой обучения и общим усилием. Поэтому я должен прокомментировать и сказать спасибо за пример кода выше ... – user574771
Вопрос ... когда вы говорите «вы не можете писать в свои ресурсы приложений», вы имеете в виду, что мы не можем писать на plist, мы создаем и заполняем изнутри xcode? – crazyCoder
Вы можете писать только в папке «Документы» вашего приложения. Таким образом, вы можете скопировать этот слой из каталога «Ресурсы» в каталог «Документы» во время выполнения, а затем отредактировать его. – doppioslash