2016-10-03 4 views
3

Я искал ответ на этот вопрос, но я не мог найти его, у подобных нет ответа вообще. В принципе, я хочу сохранить данные с помощью NSKeyedUnarchiver.archiveRootObject() и загрузить его с помощью .unarchiveObject (withFile). Он отлично работал с Swift 2.3, теперь он падает, заявляя, что разделяющая часть всегда возвращается назад. Я также проверяю файл, если он существует, и он делает это. Я действительно не знаю, что происходит. Это процедура загрузки:NSKeyedArchiver.unarchiveObject Swift 3 iOS 10

func loadnotifs(_ username:String)->[AFNotificationData]{ 
    let ArchiveURL = Constants.DocumentsDirectory.appendingPathComponent(username) 
     print("loading " + ArchiveURL.path) 
    if FileManager.default.fileExists(atPath: ArchiveURL.path) { 
     let unarchived = NSKeyedUnarchiver.unarchiveObject(withFile: ArchiveURL.path) as? [AFNotificationData] 
     if unarchived != nil { 
      return NSKeyedUnarchiver.unarchiveObject(withFile: ArchiveURL.path) as! [AFNotificationData] 
     } else { 
      return [] 
     } 
    } 
    else { 
     return [] 
    } 

} 

и это экономия:

func savenotifs(_ username:String){ 
    if username != "" { 
     let ArchiveURL = Constants.DocumentsDirectory.appendingPathComponent(username) 
     print("saving " + ArchiveURL.path) 
     } 

     let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(AFDatabase.sharedDatabase.notificationList, toFile: ArchiveURL.path) 
     if !isSuccessfulSave { 
      print("Failed to save notifs") 
     } 

    } 
} 

, но в конце концов, я всегда получаю «неустранимая ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение»

ответ

5

Я искал не то место. На самом деле процедура экономии и погрузок в порядке, проблема искомую INIT необходимо соблюдать протокол NSCoding: Я использовал

aDecoder.decodeObject(forKey:xxx) as! Bool 

вместо нового

aDecoder.decodeBool(forKey:xxx) 

Давать тот факт, что это было автоматически изменяются быстрым преобразователем 2.3-> 3 с использованием неправильной команды, следите за этим!

Кроме того, обратите внимание, потому что эта команда несовместима с булевыми/целыми числами от swift 2.3.

Смежные вопросы