2013-02-05 3 views
5

Я нашел эти учебники Стэнфорда https://itunes.apple.com/us/course/ipad-iphone-app-development/id495052415 и слушал лекцию о основных данных, что действительно здорово.UIManagedDocument и основные данные

Он показывает, как получить доступ к данным ядра через UIManagedDocument ... Единственное, что я не понимаю, как UIManagedDocument знает, какую модель использовать, потому что я не вижу его в любом месте?

Чтобы суммировать его при использовании UIManagedDocument, как вы определяете модель базы данных, которая будет использоваться?

ответ

6

Я нашел ответ:

'UIManagedDocument' принимает все модели из основного пакета приложения, и объединяет эти моделей. Если у вас есть только одна модель, используемая модель.

Это может быть изменено путем переопределения класса «UIManagedDocument».

+0

спасибо ... Я искал это целый день. но серьезно яблоко, для основных данных и ios вообще есть просто слишком много шаблонов, которые нужно написать. – user1297061

1

Загрузка модели данных В некоторых случаях вам не нужно писать код для загрузки модели. Если вы используете приложение на основе документов в OS X, NSPersistentDocument управляет задачей поиска и загрузки модели вашего приложения для вас. Если вы используете Xcode для создания приложения без документов, использующего Core Data (для OS X или для iOS), делегат приложения включает код для извлечения модели. Имя модели, представленной именем файла, используемым для ее хранения на диске, не имеет значения во время выполнения. Когда модель загружается Core Data, имя файла бессмысленно и не имеет смысла, поэтому вы можете назвать файл модели по своему усмотрению.

Если вы хотите загрузить модель самостоятельно, есть два механизма, вы можете использовать:

Вы можете загрузить одну модель из определенного URL, используя метод экземпляра initWithContentsOfURL :. Это обычно предпочтительный метод. Обычно приложение имеет одну модель, и с помощью этого метода вы обеспечиваете загрузку только этой модели. Вы также можете загружать отдельные модели по URL-адресам, а затем объединять их с помощью modelByMergingModels: до создания экземпляра координатора с ними.

В случаях, когда у вас более одной модели, и особенно в тех случаях, когда модели представляют разные версии одной и той же схемы, знание того, какая модель для загрузки имеет важное значение (объединение моделей с одинаковыми объектами во время выполнения в одну коллекцию приведет к возникновению именования коллизий и ошибок). Этот метод также полезен, если вы хотите сохранить модель за пределами пакета для своего приложения, и поэтому необходимо ссылаться на него через URL-адрес файловой системы.

Вы можете создать объединенную модель из определенной коллекции пучков, используя метод класса mergedModelFromBundles :. Этот метод может быть полезен в тех случаях, когда сегрегация моделей не имеет значения - например, вы можете знать свое приложение и структуру, к которой они привязаны, и у них есть модели, которые вам нужны или которые нужно загрузить. Метод класса позволяет легко загружать все модели сразу, не задумываясь о том, что такое имена, или поместить в специализированный код инициализации, чтобы убедиться, что все ваши модели найдены.

Доступ и использование управляемой модели объектов во время выполнения

NSManagedObjectModel *model = <#Get a model#>; 
NSFetchRequest *requestTemplate = [[NSFetchRequest alloc] init]; 
NSEntityDescription *publicationEntity = 
    [[model entitiesByName] objectForKey:@"Publication"]; 
[requestTemplate setEntity:publicationEntity]; 

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat: 
    @"(mainAuthor.firstName like[cd] $FIRST_NAME) AND \ 
     (mainAuthor.lastName like[cd] $LAST_NAME) AND \ 
     (publicationDate > $DATE)"]; 
[requestTemplate setPredicate:predicateTemplate]; 

[model setFetchRequestTemplate:requestTemplate 
    forName:@"PublicationsForAuthorSinceDate"]; 

Использование выборки шаблона запроса

NSManagedObjectModel *model = <#Get a model#>; 
NSError *error = nil; 
NSDictionary *substitutionDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
    @"Fiona", @"FIRST_NAME", @"Verde", @"LAST_NAME", 
    [NSDate dateWithTimeIntervalSinceNow:-31356000], @"DATE", nil]; 
NSFetchRequest *fetchRequest = 
    [model fetchRequestFromTemplateWithName:@"PublicationsForAuthorSinceDate" 
      substitutionVariables:substitutionDictionary]; 
NSArray *results = 
    [aManagedObjectContext executeFetchRequest:fetchRequest error:&error]; 
+0

Я не думаю, что вы поняли вопрос, или я, по крайней мере, не понял вашего ответа ... Я дам вам проголосовать за попытку ... – MegaManX

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