У меня есть приложение в производстве. Я пытаюсь преобразовать из Swift 2.2 в Swift 3. Я пробовал код Swift 3 как в XCode 8.1, так и в XCode 8.2.NSKeyedArchiver не содержит данных Swift 3
Следующая Swift 2 код работает отлично:
func saveItemsToCache() {
NSKeyedArchiver.archiveRootObject(items, toFile: itemsCachePath)
}
func loadItemsFromCache() {
if let cachedItems = NSKeyedUnarchiver.unarchiveObjectWithFile(itemsCachePath) as? [TruckItem] {
items = cachedItems
}
}
var itemsCachePath: String {
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let fileURL = documentsURL.URLByAppendingPathComponent("Trucks.dat")
return fileURL.path!
}
Но данные не сохранились, когда я использую тот же код преобразуется для Swift 3:
func saveItemsToCache() {
print("SAVED TRUCKS:", items)
NSKeyedArchiver.archiveRootObject(items, toFile: itemsCachePath)
}
func loadItemsFromCache() {
if let cachedItems = NSKeyedUnarchiver.unarchiveObject(withFile: itemsCachePath) as? [TruckItem] {
items = cachedItems
print("LOADED TRUCKS:", items)
}
}
var itemsCachePath: String {
let documentsURL = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsURL.appendingPathComponent("Trucks.dat")
return fileURL.path
}
Пример вывода консоли:
SAVED TRUCKS: [<TruckTelematics.TruckItem: 0xc852380>, <TruckTelematics.TruckItem: 0x9b23ba0>]
LOADED TRUCKS: []