Как получить объекты после объединенного Контекста CoreData

Я пытался сохранить данные и слияние с 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 после слияния в другом потоке?

Спасибо.

5
задан Emmettoc 5 June 2010 в 13:48
поделиться

2 ответа

Похоже, слияние вашего контекста не удалось.

Документация разработчика об ошибке 133000

NSManagedObjectReferentialIntegrityError = 133000

NSManagedObjectReferentialIntegrityError Код ошибки для обозначения попытки вызвать ошибку, указывающую на несуществующий объект. Магазин доступен, но объект, соответствующий неисправности, не может быть найден. Доступно в Mac OS X v10.4 и новее. Заявлено в CoreDataErrors.h.

2
ответ дан 14 December 2019 в 01:02
поделиться

Сначала вам нужно развернуть ошибки. Измените вывод на:

NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]);

Это даст вам гораздо больше информации.

Во-вторых, если вы работаете с одним контекстом в нескольких потоках, вы делаете это неправильно. Вам нужно просмотреть документацию по Core Data и потокам. Основное правило таково: Один контекст на поток; точка. Если вам нужно управлять данными в нескольких потоках, рассмотрите возможность просмотра уведомлений о сохранении из фоновых потоков в основном потоке. Я бы посоветовал просмотреть мои статьи в Mac Developer Network для примеров этого.

0
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: