Основные данные - основные вопросы - PullRequest
2 голосов
/ 10 сентября 2010

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

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

    @interface UserLookup : UIViewController {
        NSManagedObjectContext *referringObject;
    }
    

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

Привет

Ответы [ 3 ]

1 голос
/ 10 сентября 2010

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

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

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

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

делегата приложения
0 голосов
/ 11 сентября 2010

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

Каждый контекст имеет каждого менеджера отмены, поэтому вы можете контролировать изменения управляемых объектов в контексте. Вы можете сохранить изменения только в одном контексте, даже если другой контекст также имеет некоторые изменения. После сохранения контекста можно объединить изменения двух контекстов с помощью следующих методов экземпляра 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

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

0 голосов
/ 10 сентября 2010

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

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

Помогает ли это вообще?

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