Это хорошая практика, чтобы использовать этот NSManagedObjectContext во всем приложении - PullRequest
1 голос
/ 03 апреля 2012

Мое приложение использует Core Data, я использовал шаблон CoreData при создании своего проекта в XCode, поэтому я уже получил объект NSManagedObjectContext в своем файле AppDelegate, но рекомендуется ли использовать этот контекст во всем приложении (переместите его от одного viewController к другому)?
а может лучше выделять больше по разным причинам?

Ответы [ 4 ]

2 голосов
/ 04 апреля 2012

Для большинства приложений, которые я сделал, я обычно создаю новый managedObjectContext, только если собираюсь работать в фоновом потоке.

Я обычно передаю managedObjectContext из представленного viewController в представленный viewController, назначая ivar или, если контроллер просто не будет работать без какой-либо магии CoreData, я поместил его в назначенный метод init.

Если я выбираю строку в таблице и представляю новый viewController, я просто передам выбранный управляемый объект, а затем, если мне нужен управляемый текст управляемого объекта, я могу просто использовать [managedObject managedObjectContext];

Мне не нравится идея синглтона, поскольку материал Core Data уже достаточно сложен, чтобы его можно было изолировать для тестирования без нарушения правил "не спрашивай".

2 голосов
/ 03 апреля 2012

Это нормально делать. Что вы должны заметить, так это то, что, если вы хотите управлять несколькими записями базы данных с помощью многопоточности, вы должны использовать блокировку в контексте вашего объекта и создавать несколько контекстов объекта для достижения более высокой безопасности, гарантируя, что более одного контекста не будет записывать в одну и ту же базу данных в одно и то же время, а также избегать многократных обращений к одному и тому же контексту, что приведет к мертвой блокировке в вашей базе данных.

1 голос
/ 03 апреля 2012

Это абсолютно нормально (по крайней мере, если вы остаетесь в GUI-теме). Но вы спрашивали о хорошей практике. Вот где шаблон основных данных Xcode может быть улучшен. Прочитайте это Blogentry , чтобы узнать, как Apple должна была сделать это лучше.

0 голосов
/ 03 апреля 2012

Да, ты хорош в этом.Скопируйте этот NSManagedObjectContext из AppDelegate файла, когда вам это нужно в любом классе. Используйте эту строку, чтобы скопировать его.Я использую его в своем проекте и работает круто:

 if (self.managedObjectContext == nil) 
{ 
    self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@", self.managedObjectContext);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...