2010-09-09 4 views
2

Я хотел бы знать, как следующие работы в Objective-CОсновные данные - Основные вопросы

  1. в моем файле заголовка у меня есть следующие, инициализируется с другого контроллера представления

    @interface UserLookup : UIViewController { 
        NSManagedObjectContext *referringObject; 
    } 
    

и в моем файле реализации я должен передать этот NSManagedObjectContext 2 контроллеру детского вида, а затем имеет значение, какой контроллер открывается первым ... и делает NSManagedObjectContext c помещается в любой из дочерних контроллеров?

С уважением

ответ

1

Вы на самом деле не нужно передавать его на каждый контроллер вида, где вам потребуется доступ Core Data - просто использовать

NSManagedObjectContext* moc = [(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 

managedObjectContext должны быть доступны Ивар вашего приложения делегата.

Это делает его концептуально похожим. Существует один NSManagedObjectContext (в большинстве несложных приложений, которые, как считается, вы можете иметь кратные), принадлежащие вашему делегату приложения. Вы никогда не сохраняете и не выпускаете его (кроме случаев, когда он создается в делете приложения, при первом доступе, если вы используете код шаблона Apple, и когда он выпущен в приложении делегата dealloc.

+0

Спасибо за ответ. Это решило проблему. Однако из-за ограничения характера здесь я должен был отправить другой вопрос для вас отдельно и был бы очень признателен, если вы можете посмотреть на это. @ Http://stackoverflow.com/questions/3689022/fetchresultscontroller-issue-or-managed -объект-контекст – Accilies

0

ASFAIK это не должно иметь значение, которое ViewController используется первым. Подумайте о NSManagedObjectContext как указатель на физический источник данных.

Вы можете добавлять и удалять NSManagedObjects из контекста. Но эти изменения сохраняются только на диске при вызове метода save:.

Это вообще помогает?

0

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

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

- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification 
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag 

Возможно, этот документ поможет вам понять более подробно. http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html

И код примера CoreDataBooks Apple использует дополнительный контекст.

+0

Благодарим вас за ответ. Я помог мне понять некоторые основные понятия. Надеюсь, я скоро смогу ответить на вопросы :) (y) – Accilies

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