2015-11-14 5 views
1

У меня есть ошибка (желтый предупреждающий сигнал) на моей модели на линии:Swift - 'Init()' осуждался в прошивкой 9.0: Использование -initWithConcurrencyType: вместо

var managedObjectContext = NSManagedObjectContext() 

'init()' was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead

Что вызывает это? Как я могу исправить эту проблему?

ответ

7

Изменить это:

var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) 

Вы можете скачать документ Apple, чтобы увидеть больше деталей.

NSConfinementConcurrencyType
Определяет, что контекст будет использовать шаблон удержания нити.
Доступен в iOS 3.0 и новее.
Устаревший в iOS 9.0.

Или Command + Нажмите "NSManagedObjectContext" прямо на NSManagedObjectContext.h:

@available(iOS, introduced=3.0, deprecated=9.0, message="Use another NSManagedObjectContextConcurrencyType") 
case ConfinementConcurrencyType 

@available(iOS, introduced=3.0, deprecated=9.0, message="Use -initWithConcurrencyType: instead") 
public convenience init() 

Таким образом, кажется NSManagedObjectContext() используют "ConfinementConcurrencyType" в init.When Apple, устаревшее "ConfinementConcurrencyType" в прошивкой 9.0, для ради согласованности Apple не изменила поведение метода init(). Так что лучше использовать другой NSManagedObjectContextConcurrencyTypes (PrivateQueueConcurrencyType, MainQueueConcurrencyType) с другим методом INIT:

init(concurrencyType: NSManagedObjectContextConcurrencyType) 
+0

Я использовал ваш главный смен, и это сработало для меня. Ура! – senty

3

Apple изменила работу основных данных. Не используйте init(), вместо этого используйте initWithConcurrencyType по мере необходимости/рекомендуется.

Основная причина связана с безопасностью потоков и асинхронным доступом к основным объектам данных.

1

В общем, когда Apple, говорит вам, что что-то осуждается, вы всегда получите сообщение, как

'init()' was deprecated in iOS 9.0: Use -initWithConcurrencyType: instead 

И ясно, что вам нужно сделать, следуя очень сильному намеку на то, что вам дали: Не используйте init. Прочитайте, что такое initWithConcurrencyType: делает, выясняет, как правильно вы его назовете, и замените свой вызов init вызовом initWithConcurrencyType:

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