나는이 문제에 대해 생각할 수있는 모든 가능한 해결책을 시도하는데 며칠을 보냈지만 아무것도 작동하지 않는 것 같습니다.코어 데이터와 함께 다중 컨텍스트를 사용할 때 오류 133000
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
Media *localMedia = [media inContext:localContext];
UIImage *image = localMedia.thumbnail;
dispatch_async(dispatch_get_main_queue(), ^{
[thumbnails setObject:image forKey:[NSNumber numberWithInt:i]];
[contentDict setObject:thumbnails forKey:@"MediaItems"];
[cell.entryView setNeedsDisplay];
});
}];
또는이 같은 :
dispatch_queue_t cellSetupQueue = dispatch_queue_create("com.Journalized.SetupTimelineThumbnails", NULL);
dispatch_async(cellSetupQueue, ^{
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [NSManagedObjectContext contextForCurrentThread].persistentStoreCoordinator;
[newMoc setPersistentStoreCoordinator:coordinator];
NSNotificationCenter *notify = [NSNotificationCenter defaultCenter];
[notify addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:newMoc];
Media *localMedia = [media inContext:[NSManagedObjectContext contextForCurrentThread];
UIImage *image = localMedia.thumbnail;
dispatch_async(dispatch_get_main_queue(), ^{
[thumbnails setObject:image forKey:[NSNumber numberWithInt:i]];
[contentDict setObject:thumbnails forKey:@"MediaItems"];
[cell.entryView setNeedsDisplay];
});
}];
이 둘 다있는 UIImage뿐만 전무 객체를 반환하고, Cocoa Error 133000
로 나에게 충돌을주고
는이 같은 배경 스레드를 실행합니다.
다른 모든 백그라운드 스레딩 코드를 제거하고이를 확인하기 위해 주 스레드에 직접 저장했습니다. 위의 코드를 주 스레드에서 실행해도 작동하지만 내 UI는 멈 춥니 다. 이러한 모든 노력에도 불구하고 위의 코드는 매번 충돌합니다.
이 작업을 수행하기 위해 무엇을해야할지 모르겠습니다.
편집 :
내 질문은, 구체적으로 어떻게 충돌없이이 일을해야합니까입니까? 그것은 하나의 컨텍스트에서 다른 개체에 존재하지 않는 개체에 문제가있는 것처럼 보이지만 어떻게 그들을 다른 컨텍스트에서 존재하게합니까?
귀하의 질문은 무엇입니까? RestKit을 사용하고 있습니까? 그리고 코드 스 니펫은 매우 불완전합니다. 나는 어떤 것도 따라갈 수 없습니다. Observer 메서드는 거의 확실하게 원하는 것이 아니며 saveInBackgroundWithBlock 내부의 무언가로 인해 첫 번째 예제가 충돌 할 수 있습니다. –
코어 데이터가 스레드로부터 안전하지 않기 때문에 이런 일이 발생할 수 있습니다. 시도해 봤어 [localContext performBlock :^{}]; –
@PauldeLange RestKit을 사용하고 있지 않습니다. 대신에 관찰자 방법으로 무엇을 가져야합니까? – Andrew