我會盡量保持這個簡短,但基本上,我有一個應用程序,在某種模式下,可以近乎連續地記錄位置和其他數據,並捕捉照片(使用AVFoundation)並將其全部存儲在覈心數據中。正如我懷疑的那樣,我發現所有這些都需要通過線程......否則UI會變得非常緩慢。核心數據多線程 - 我在做什麼錯
我從來沒有試圖將Core Data與併發性結合起來,所以我儘可能地閱讀了它。我覺得我明白自己應該做什麼,但出於某種原因,這是不對的。我碰到這個錯誤:「非法嘗試建立不同上下文中對象之間的關係」managedDataPoint「。我知道這意味着什麼,但我認爲我的下面將會避免這種情況(我正在追蹤我讀過的內容)。 。因爲我從主要上下文中獲取對象ID引用,並使用它來獲取對象的新引用並將其傳遞給「temp」上下文...但這不起作用,因爲Core Data仍聲稱我是在嘗試創建跨環境(在哪裏?)的關係。感謝所有幫助。謝謝!
-(void)snapPhotoForPoint:(ManagedDataPoint*)point
{
if (!_imageCapturer)
{
_imageCapturer = [[ImageCapturer alloc] init];
}
if (!_tempContext) {
_tempContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
_tempContext.parentContext = self.managedObjectContext;
}
__block NSManagedObjectID* pointID = [point objectID];
[_tempContext performBlock:^{
NSError *error = nil;
Photo *newPhoto = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:_tempContext];
UIImage *image = [_imageCapturer takePhoto];
newPhoto.photoData = UIImageJPEGRepresentation(image, 0.5);
ManagedDataPoint *tempPoint = (ManagedDataPoint*)[self.managedObjectContext objectWithID:pointID];
newPhoto.managedDataPoint = tempPoint; // *** This is where I crash
if (![_tempContext save:&error]) { // I never get here.
DLog(@"*** ERROR saving temp context: %@", error.localizedDescription);
}
}];
}
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/Concurrency.html –