2016-10-03 28 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 [] 
    } 

} 

、これは貯蓄です:

答えて

5
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") 
     } 

    } 
} 

が、最後に、私はいつも「予想外にオプションの値をアンラップしながら、nilを見つけ致命的なエラー」を取得

私は間違った場所を探していました。私はそれがあったという事実を与える代わりに、新しい

aDecoder.decodeBool(forKey:xxx) 

aDecoder.decodeObject(forKey:xxx) as! Bool 

を使用していた :実際の保存と読み込みの手順は大丈夫です、問題はNSCodingプロトコルに準拠するために必要なinitが必要です迅速な2.3-> 3コンバータによって間違ったコマンドを使って自動的に変更されました。

さらに、このコマンドはswift 2.3のブール値/整数と互換性がないため注意してください。

関連する問題