Сбой CoreDatagetPermanentIDsForObjects с Xcode 6 Beta 6

Я использую MagicalRecord и импортирую данные для объекта следующим методом:

+(void)importEnduserOnBackgroundFromResponse:(id)responseObject
                                     success:(void (^)(QNEnduser *provider))success
                                  andFailure:(void (^)(NSError *error))failure
{
    __block NSManagedObjectID *enduserID;
    __block NSError *importError;
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
        QNEnduser *enduser = [QNEnduser MR_importFromObject:enduserDict inContext:localContext];

        [localContext obtainPermanentIDsForObjects:localContext.insertedObjects.allObjects error:&importError];
        enduserID = enduser.objectID;
    } completion:^(BOOL successFlag, NSError *saveError) {
        // Check for errors (importError and saveError), if no errors import the entity in the main context and call the success block
        QNEnduser *newEnduser = (QNEnduser*)[[NSManagedObjectContext MR_defaultContext] objectWithID:enduserID];
    }];
}

Обратите внимание, что я убрал часть кода в блоке завершения, потому что это не важно для этой задачи.

В Xcode 5 этот код работает. Но в Xcode 6 Beta 6 возникает исключение в [localContext obtainPermanentIDsForObjects:localContext.insertedObjects.allObjects error:&importError];

Я нашел похожие проблемы (Получение ошибок потока при вызовеgetPermanentIDsForObjects, Основные данные: выполните дочерние контексты когда-либо получали постоянные идентификаторы объектов для вновь вставленных объектов?), но они старше, и их решение не работает в моем случае, как видите, я уже пытаюсь получить постоянные идентификаторы для всех вставленных объектов (хотя это все равно не имеет значения, других вставленных объектов нет).

Кто-нибудь еще сталкивался с этой проблемой, это известная ошибка в бета-версии 6 и есть ли известный обходной путь? Или это все-таки моя вина?

ИЗМЕНИТЬ

Почему-то я не могу получить исключение - у меня есть точка останова исключения в Xcode, но когда я помещаю @try/@catch вокруг плохой строки, ничего не перехватывается.

При остановке в точке останова исключения это обратная трассировка:

* thread #4: tid = 0x2f2a0, 0x0000000103f19973 libobjc.A.dylib`objc_exception_throw, queue = 'NSManagedObjectContext Queue', stop reason = breakpoint 1.3
  frame #0: 0x0000000103f19973 libobjc.A.dylib`objc_exception_throw
  frame #1: 0x0000000102333dd2 CoreData`-[NSPersistentStoreCoordinator(_NSInternalMethods) obtainPermanentIDsForObjects:error:] + 1458
  frame #2: 0x00000001023aa16d CoreData`__99-[NSManagedObjectContext(_NestedContextSupport) _parentObtainPermanentIDsForObjects:context:error:]_block_invoke + 1037
  frame #3: 0x0000000104f5772d libdispatch.dylib`_dispatch_client_callout + 8
  frame #4: 0x0000000104f465d0 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 57
  frame #5: 0x000000010233df92 CoreData`_perform + 114
  frame #6: 0x00000001023a9bde CoreData`-[NSManagedObjectContext(_NestedContextSupport) _parentObtainPermanentIDsForObjects:context:error:] + 446
  frame #7: 0x0000000102333592 CoreData`-[NSManagedObjectContext obtainPermanentIDsForObjects:error:] + 498
* frame #8: 0x000000010206fc28 QonnectAPIPod`__75+[QNImportHelper importEnduserOnBackgroundFromResponse:success:andFailure:]_block_invoke(.block_descriptor=<unavailable>, localContext=0x00007fd078dd8d60) + 568 at QNImportHelper.m:129
  frame #9: 0x0000000102142abd QonnectAPIPod`__51+[MagicalRecord(.block_descriptor=0x00007fd078d026b0) saveWithBlock:completion:]_block_invoke + 25 at MagicalRecord+Actions.m:28
  frame #10: 0x00000001023a461e CoreData`developerSubmittedBlockToNSManagedObjectContextPerform_privateasync + 78
  frame #11: 0x0000000104f5772d libdispatch.dylib`_dispatch_client_callout + 8
  frame #12: 0x0000000104f46dcf libdispatch.dylib`_dispatch_queue_drain + 481
  frame #13: 0x0000000104f46b94 libdispatch.dylib`_dispatch_queue_invoke + 112
  frame #14: 0x0000000104f479fc libdispatch.dylib`_dispatch_root_queue_drain + 81
  frame #15: 0x0000000104f47d12 libdispatch.dylib`_dispatch_worker_thread2 + 40
  frame #16: 0x00000001052ebef8 libsystem_pthread.dylib`_pthread_wqthread + 314
  frame #17: 0x00000001052eefb9 libsystem_pthread.dylib`start_wqthread + 13

person MeXx    schedule 27.08.2014    source источник
comment
Вставьте свое исключение и трассировку стека   -  person bhargavg    schedule 27.08.2014
comment
Вы действительно объявляете importError вне блока? У меня не очень хорошее предчувствие по этому поводу. 1. Я не уверен, что указатель NSError** является атомарным. 2. Если NSError* помещается в &NSError, что увеличивает его счетчик удержания вне контекста вашего блока, если он был объявлен вне блока? Освобождается ли NSError * до того, как на него ссылаются вне блока... и т. д. Или, может быть, вы тоже отредактировали это.   -  person stevesliva    schedule 28.08.2014
comment
О, вы правы, я добавил объявление об ошибке туда, где оно должно быть.   -  person MeXx    schedule 28.08.2014
comment
Это не является предполагаемым или поддерживаемым использованием obtainPermanentIDsForObjects. Вместо этого сохраните контекст. В своем коде получите пользовательский объект и идентификатор после сохранения в обработчике завершения.   -  person quellish    schedule 30.08.2014
comment
@quellish не могли бы вы предоставить образец? Я пробовал что-то подобное, но мне сказали, что перенос управляемого объекта в разные потоки — плохая идея в это обсуждение, хотя я просто обращался к идентификатору объекта в другом потоке. Для меня это имело смысл, в конце концов, Apple также говорит об этом (используйте идентификаторы объектов).   -  person MeXx    schedule 30.08.2014