0

例外ブレークポイントが設定されており、UIManagedDocument で (void)saveToURL:(NSURL *)url forSaveOperation:(UIDocumentSaveOperation)saveOperation completionHandler:(void (^)(BOOL success))completionHandler を呼び出すと、次のエラーが発生することがあります。

* thread #3: tid = 0x2003, 0x357a8238 libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 1.1
    frame #0: 0x357a8238 libobjc.A.dylib`objc_exception_throw
    frame #1: 0x3154a122 CoreData`-[NSPersistentStore(_NSInternalMethods) _preflightCrossCheck] + 758
    frame #2: 0x314bb296 CoreData`-[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 970
    frame #3: 0x31523286 CoreData`-[NSManagedObjectContext save:] + 522
    frame #4: 0x33d0ac5a UIKit`__84-[UIManagedDocument writeContents:toURL:forSaveOperation:originalContentsURL:error:]_block_invoke_0 + 30
    frame #5: 0x3152d3ee CoreData`developerSubmittedBlockToNSManagedObjectContextPerform + 74
    frame #6: 0x344fa7e6 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 26
    frame #7: 0x344fa646 libdispatch.dylib`dispatch_barrier_sync_f$VARIANT$mp + 62

そして、オーガナイザーのコンソールログインで、これを見ました:

-NSUnderlyingError-=-0-x-5-e-8-0-2-0 -"-The -operation -could-n'-t -be -completed-. -(-Cocoa -error -4-.- )-"-, -NSFilePath-=-/-var-/-mobile-/-Applications-/-F-1-A-7-0-2-6-C---5-ADD---4- FAF---9-C-8-C---8-8-7-5-1-4-F-6-EACA-/-Documents-/-PLDB-/-StoreContent-/-persistentStore-} Apr 9 12:45:47 不明な地区 [232]: (エラー) com.apple.UIKit.UIDocument: UIDocument の回復不能なエラーと説明: 操作を完了できませんでした。-(-Cocoa -error -1-3-4-0-3-0-.-) -reason-: -(-null-) Apr 9 12:45:47 unknown District[232]: (エラー) com. apple.UIKit.UIDocument: 説明のエラーから回復できませんでした: The operation could'-t -be -completed-.

毎回ではないので、タイミングの問題でしょうか。プログラムはクラッシュしませんが、例外ブレークポイントで中断し、ブロックの成功値は NO です。

4

1 に答える 1

1

UIManagedDocument を使用してコア データを保存することについて、さまざまな意見を聞いたことがあります。最初にドキュメントを作成するときを除いて、saveToUrl を呼び出してはいけないと言う人もいます。ただし、スタンフォード iOS コースで、明示的に保存したい場合に saveToUrl... を呼び出しても問題ないことを学んだことを覚えています。使うと言う人もいます

[document updateChangeCount:UIDocumentChangeDone]

保存する必要があることをコア データに通知します。時間を節約できると言う人もいます。一時的な ID の問題を解決するには、MSManagedObjectContext で次のカテゴリのように [context acquirePermanentIDsForObjects: ...] を使用できると言う人もいます。

- (BOOL)obtainPermanentIDsForInsertedObjects:(NSError **)error
{
    NSSet * inserts = [self insertedObjects];

    if ([inserts count] == 0) return YES;

    return  [self obtainPermanentIDsForObjects:[inserts allObjects]
                                         error:error];
}

答えを知りたいのですが、私の問題は、saveToUrlを呼び出していたことだと思います... あまりにも多く。最初の呼び出しを除くすべての saveToUrl.. 呼び出しを削除したところ、動作が改善され、高速になったようです。何らかの理由でドキュメントを保存する必要がある場合は、前の方法のいずれかを試してください。

于 2012-04-21T01:20:11.420 に答える