2013-09-23 7 views
5

にフェッチ私はNSFileProtectionKeyはこのような属性を使用してファイルのセキュリティを使用していたとき:だからファイルのセキュリティデバイスがロックされていると、背景がiOS7

[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey : NSFileProtectionComplete} ofItemAtPath:coreDataFilePath error:NULL]; 

デバイスは、パスコードロックされている場合、そのパスにはファイルを開くことができません。問題は、デバイスがロックされている間でもiOS7 Appsがバックグラウンドで実行できることです。そのCoredata [NSManagedObjectContext save:]のように実行しているときにエラーで失敗します:

、このようなケースを処理する方法

NSCocoaErrorDomain, 134030, The operation couldn’t be completed. (Cocoa error 134030.) { NSSQLiteErrorDomain = 23; NSUnderlyingException = "Updating max pk failed: authorization denied"; }

答えて

7

まず、WWDC 2013ビデオのセッション204「マルチタスクの新機能」を参照してください。このケースをカバーしています。

がセキュリティ優先順に、あなたが取ることができるいくつかの方法があります。

  • は別の場所にデータを書き込み、デバイスのロックが解除されるまで(NSFileProtectionCompleteUnlessOpenを使用して)、その後、マージ。これは一般的には好ましいアプローチです。
  • メインデータベースをNSFileProtectionCompleteUnlessOpenに設定し、開いたままにしておきます。
  • データベースをNSFileProtectionCompleteUntilFirstUserAuthenticationに設定します。これは一般に最悪の方法です。
+0

「デバイスをロック解除してからマージするまでは、NSFileProtectionCompleteUnlessOpenを使用して別の場所にデータを書き込む」ことが一般的には望ましい方法です。ユーザーがデバイスのロックを解除することを決定するまで、コアデータに書き込まれるデータをどのように格納しますか? – user3687

+0

ネットワーク形式(多くの場合、JSON)を記述します。またはNSCodingでオブジェクトをシリアライズする。どちらの場合でも、Core Dataがロックされるまでファイルに保存します。 –

+0

RAWファイルをディスクに保存しないと、アプリケーションのセキュリティ上のリスクが発生します。とにかく、コアデータがロックされていないかどうかを検出する方法に関する提案はありますか? – user3687