Когда вызывается appOlegject's managedObjectContext - PullRequest
0 голосов
/ 20 октября 2011

Каков наилучший способ получить доступ к моему managedObjectContext. В соответствии с этим post я не должен делать это в FinishLoad: метод.

Это хорошая практика, чтобы получить доступ к моему managedObjectContext таким образом из ЛЮБОЙ из моделей моего приложения:

(MyAppDelegate *) [[UIApplication sharedApplication] делегат]). ManagedObjectContext

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

Я согласен с Винке. Нет ничего плохого в доступе к вашему стеку основных данных в application:didFinishLaunchingWithOptions:, если вы не начинаете обработку данных в рамках этого метода. Вы должны загрузить новый контроллер представления, установить его контекст управляемого объекта и запустить процесс асинхронно после загрузки этого представления.

Из вашего вопроса мне неясно, пытаетесь ли вы получить доступ к контексту управляемого объекта внутри делегата приложения или пытаетесь получить к нему доступ из другого класса. Если вы обращаетесь к нему из другого класса, предлагаемый код создает тесную связь, которая уменьшает возможность повторного использования вашего кода. Лучше было бы установить свойство при создании экземпляра класса. При кодировании классов контроллера представления убедитесь, что вы настроили синтезированное свойство для контроллера представления:

// CustomViewControllerClass.h
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

// CustomViewControllerClass.m
@synthesize managedObjectContext = __managedObjectContext;

Когда вы загружаете свой контроллер представления в делегат приложения, передайте контекст управляемого объекта делегата приложения в контроллер представления:

// MyAppDelegate.m (inside application:didFinishLaunchingWithOptions:)
        CustomViewController *controller = (CustomViewController *)masterNavigationController.topViewController;
        controller.managedObjectContext = self.managedObjectContext;

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

0 голосов
/ 20 октября 2011

Посмотрите на мой ответ на этот пост:

Передача managedObjectContext - это эффективно?

По сути, я создаю синглтон, используя макрос Мэтта Галлахера, идоступ к этому где-нибудь, как это:

[[MyPersistentStoreController sharedMyPersistentStoreController] managedObjectContext]];

Вы найдете все детали и ссылку на пост Мэтта в ссылке выше.

0 голосов
/ 20 октября 2011

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

В сообщении, которое вы упоминаете, я не думаю, что г-н Зарра советует против любого доступа к контексту из applicationDidFinishLaunching. Он предостерегает вас не использовать контекст на данном этапе для обработки изменений по всей базе данных или для извлечения больших объемов данных. Если вам нужно получить доступ к одному или двум управляемым объектам, чтобы управлять отображением вашего пользовательского интерфейса из applicationDidFinishLaunching, все должно быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...