0

Я использую NSManagedObjectContext performBlock{} Но, Моего приложения всегда врезаться здесь«Может использовать только -performBlock: в NSManagedObjectContext, который был создан с очередью». Ошибка

*** Нагрузочного приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «Можно использовать только -performBlock: на NSManagedObjectContext, который был создан с очередь.'

Как узнать правильную тему о NSManagedObjectContext. создать NSManagedObjectContext код здесь

Person *aPerson = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[CoreDataManager sharedInstance].managedObjectContext]; 

Пожалуйста, дайте некоторые комментарии

+0

Почему вы хотите знать тему? –

+0

Ошибки швов, которые нам нужны, знают нить. –

+0

Нет, ошибка говорит о очередях, а не о потоках. Вы прочитали руководство по программированию многопоточности fr Core Data? –

ответ

0

Создайте ManagedObjectContext как этот

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] 
        initWithConcurrencyType:NSMainQueueConcurrencyType]; 

NSMainQueueConcurrencyType создает контекст, связанный с основной очереди отправки и, таким образом, основной нить. Вы можете использовать такой контекст, чтобы связать его с объектами, которые необходимы для запуска в основном потоке, например элементы пользовательского интерфейса.

NSPrivateQueueConcurrencyType создает и управляет частной диспетчерской очередью для работы. Вы должны использовать новые методы executeBlock: или performBlockAndWait :. Затем контекст выполнит переданные блоки в собственной частной очереди.

И, наконец, NSConfinementConcurrencyType является типом по умолчанию и может использоваться только внутри потока, где он был создан.

0

Ошибка не говорит о том, что вы используете неправильную нить. В нем говорится, что вы можете использовать -performBlock: только в контекстах, созданных с помощью очереди. Как описано в ссылке на класс NSManagedObjectContext/Concurrency, это только контексты, которые создаются с одним из опций NSPrivateQueueConcurrencyType или NSMainQueueConcurrencyType.

Вы используете контексты, используя типы параллелизма на основе очереди в сочетании с performBlock: и performBlockAndWait :.

 Смежные вопросы

  • Нет связанных вопросов^_^