Singleton managedObjectContext

I want to use the singleton UIApplication to access the managedObjectContext of the AppDelegate. Но когда я пишу

[[[UIApplication sharedApplication] delegate] managedObjectContext]

или же

[[[UIApplication sharedApplication] delegate] __managedObjectContext]

это не работает

But this line works fine:

NSLog(@"Seeking for the AppDelegate : %@", [[[UIApplication sharedApplication] delegate] class]);

У тебя есть решение? Нильс

2 ответа

Решение

Try casting it to your actual app delegate implementation, like

 [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

And to add

#import "MyAppDelegate.h"

в верхней части файла.

Использование синглтона, подобного этому, является плохой практикой и даже явно не рекомендуется в документации Core Data:

http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html

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

Когда вы создаете контроллер представления, вы передаете ему контекст. Вы передаете существующий контекст или (в ситуации, когда вы хотите, чтобы новый контроллер управлял дискретным набором правок) новый контекст, который вы создаете для него. Обычно ответственность за создание контекста для первого отображаемого контроллера представления лежит на делегате приложения.

Внедрение зависимостей (то есть предоставление контроллера представления того, что ему нужно) лучше почти во всех ситуациях. Это действительно не приятно видеть [[UIApplication sharedApplication] delegate] по всему коду приложения, потому что это делает код трудным для повторного использования, для написания тестов и т. д.

Другие вопросы по тегам