Я пытался сохранить данные и слияние с CoreData и мультираспараллелить для приложения для iPhone. Но я не могу получить управляемые объекты в основном потоке после слияния.
Я написал код точно так же, как это:
[managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
[self performSelectorOnMainThread:@selector(didMerged:) withObject:objectIds waitUntilDone:YES];
Таким образом, я пытался передать objectIds для получения экземпляров NSManagedObject в основном потоке, которые были сгенерированы в другом потоке. Сначала я попробовал "objectWithId" метод, но он генерировал объекты отказа. Затем я попробовал "existingObjectWithID" метод, но он генерировал объекты частично, и другие были нолем со следующей Ошибкой:
[Error] Error Domain=NSCocoaErrorDomain Code=133000 "Operation could not be completed. (Cocoa error 133000.)"
Что не так? Есть ли какой-либо путь, как получить все объекты objectIds после слияния в другом потоке?
Спасибо.
Похоже, слияние вашего контекста не удалось.
Документация разработчика об ошибке 133000
NSManagedObjectReferentialIntegrityError = 133000
NSManagedObjectReferentialIntegrityError Код ошибки для обозначения попытки вызвать ошибку, указывающую на несуществующий объект. Магазин доступен, но объект, соответствующий неисправности, не может быть найден. Доступно в Mac OS X v10.4 и новее. Заявлено в CoreDataErrors.h.
Сначала вам нужно развернуть ошибки. Измените вывод на:
NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]);
Это даст вам гораздо больше информации.
Во-вторых, если вы работаете с одним контекстом в нескольких потоках, вы делаете это неправильно. Вам нужно просмотреть документацию по Core Data и потокам. Основное правило таково: Один контекст на поток; точка. Если вам нужно управлять данными в нескольких потоках, рассмотрите возможность просмотра уведомлений о сохранении из фоновых потоков в основном потоке. Я бы посоветовал просмотреть мои статьи в Mac Developer Network для примеров этого.