2017-03-29 19 views
0

私はすべてのCoreDataがData Protectionを使用して確実に保護されるようにしています。コンテナにNSPersistentStoreDescriptionを設定しようとすると、CoreDataオブジェクトは保存されません。以下に示す行をコメントアウトすると、すべてのオブジェクトが保存され、読み込まれます。私が行を有効にすると、何も保存されません(あるいは、読み込みが静かに失敗するかもしれません)。エラーは発生せず、ログも生成されません。私はプロビジョニング・プロファイル(完全なUnnlessOpenと一致)にData Protection資格を持っています。私は非常に基本的な何かを逃している必要があります。persistentStoreDescriptionsを設定すると、CoreDataオブジェクトは保存されません

これはXcodeの8.2.1(8C1002)

誰もが任意の洞察力/アドバイスを提供することはできますか?

lazy var persistentContainer: NSPersistentContainer = { 
    let container = NSPersistentContainer(name: "my_app") 
    let description = NSPersistentStoreDescription() 

    description.shouldInferMappingModelAutomatically = true 
    description.shouldMigrateStoreAutomatically = true 
    description.setOption(FileProtectionType.completeUnlessOpen as NSObject?, forKey: NSPersistentStoreFileProtectionKey) 

    // *** ALLOWING THIS NEXT LINE TO EXECUTE CAUSES PROBLEM *** 
    container.persistentStoreDescriptions = [description] 

    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 
      print("Unresolved error \(error), \(error.userInfo)") 
      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } 
    }) 
    return container 
}() 
+0

これはの出力を印刷して確認することができますか? – sschale

+0

それは私がその答えを知りたいと思う大きな質問です。これがデフォルトで起こると言う文書を私に教えてください。 – bz13

+0

私は 'let attributes = try FileManager.default.attributesOfItem(atPath:url.relativePath)'でそれを確認しました。私のファイルはデフォルトでは 'NSFileProtectionComplete'です。 – sschale

答えて

0

エラーは、実際にコアデータに関連するオプションを設定しているためです。ファイル保護は、FileManagersetAttributes関数呼び出しで行われます。

しかし、基本的な質問に対する答えは、ファイル保護を個々のファイルに追加する必要がないということです。ファイル保護は、資格で宣言したデフォルトの保護に設定されています。あなたが指定した保護のための資格を持っている場合は、なぜあなたは、個々のファイルに対して、ファイルの保護を追加する必要があります

let attributes = try FileManager.default.attributesOfItem(atPath: url.relativePath)

関連する問題