0

サーバーからデータを取得すると、 を使用して永続ストアに保存されますEntity mapping

次に、 deleteそれらのオブジェクトですmanually

同じデータを再度プルしようとすると、HTTP 応答を nil ターゲット オブジェクトにマッピングするというエラーが表示されます...RKObjectmapperoperation失敗しました。

メイン スレッドの get がブロックされている可能性があります。これは、削除後にレスト キットのマネージド コンテキストにオブジェクト グラフが含まれていない可能性があります。このエラーを解決する方法がわかりません。永続ストアをリセットしようとしました。

アップデート

- (void)saveThreadedContext {
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

[defaultCenter addObserver:self
                      selector:@selector(mergeThreadedContextChangesIntoMainContext:)
                      name:NSManagedObjectContextDidSaveNotification
                    object:self.threadedContext];

if ([[self threadedContext] hasChanges]) {

    NSError *error;

    BOOL contextDidSave = [[self threadedContext] save:&error];

    if (!contextDidSave) {

        // If the context failed to save, log out as many details as possible.
        NSLog(@"Failed to save to data store: %@", [error localizedDescription]);

        NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];

        if (detailedErrors != nil && [detailedErrors count] > 0) {

            for (NSError* detailedError in detailedErrors) {
                NSLog(@"  DetailedError: %@", [detailedError userInfo]);
            }
        } else {
            NSLog(@"  %@", [error userInfo]);
        }
    }
}

[defaultCenter removeObserver:self name:NSManagedObjectContextDidSaveNotification object:[self threadedContext]];
self.threadedContext = nil;
}

#pragma mark -
#pragma mark PrivateMethods
- (void)mergeThreadedContextChangesIntoMainContext:(NSNotification *)notification {
NSLog(@"%@:%@ merging changes", self, NSStringFromSelector(_cmd));
 NSManagedObjectContext * context = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).managedObjectContext;
[context     performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)     withObject:notification waitUntilDone:YES];
}

[self saveThreadedContext];オブジェクトを削除した後、スレッド コンテキストを保存してマージするために使用します。

[context           performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
        withObject:notification waitUntilDone:YES];

ロックを保持するcontextと、restkit がそのコンテキストをマージしようとしたときにブロックが発生します。オブジェクトの削除に使用される threadContext の作成中に使用する同時実行の種類を知りたいと考えました。試しwaitunitdone:NOてみましたが、ブロックは再び発生しませんでした..理由の説明が必要です

4

0 に答える 0