2013-02-05 13 views
5

Znalazłem te samouczki Stanforda https://itunes.apple.com/us/course/ipad-iphone-app-development/id495052415 i słuchałem wykładu na temat podstawowych danych, który jest naprawdę świetny.UIManagedDocument and Core Data

Pokazuje, jak uzyskać dostęp do danych podstawowych za pośrednictwem UIManagedDocument ... Jedyne, czego nie rozumiem, to w jaki sposób powinien on używać modelu, ponieważ nie widzę go nigdzie ustawionego?

Podsumowując, używając definicji UIManagedDocument, jak zdefiniujesz model bazy danych, który będzie używany?

Odpowiedz

6

znalazłem odpowiedź:

'UIManagedDocument' bierze wszystko modele z głównego pakietu aplikacji i łączy je modele. Jeśli masz tylko jeden model, ten model jest używany.

Można to zmienić, zastępując klasę "UIManagedDocument".

+0

dziękuję ... Szukałem przez cały dzień. ale na poważnie jabłko, w przypadku danych podstawowych i ios w ogóle jest po prostu zbyt wiele rzeczy, o których trzeba pisać. – user1297061

1

Ładowanie modelu danych W niektórych przypadkach nie trzeba pisać żadnego kodu, aby załadować model. Jeśli korzystasz z aplikacji opartej na dokumentach w systemie OS X, NSPersistentDocument zarządza zadaniem znalezienia i załadowania Twojego modelu aplikacji. Jeśli używasz Xcode do tworzenia aplikacji nie dokumentowej, która używa danych podstawowych (dla OS X lub dla iOS), delegat aplikacji zawiera kod do pobrania modelu. Nazwa modelu - reprezentowana przez nazwę pliku używaną do przechowywania go na dysku - nie jest istotna w środowisku wykonawczym. Po załadowaniu modelu przez Core Data, nazwa pliku jest bez znaczenia i nie ma żadnego zastosowania, więc możesz nazwać plik modelu, jak tylko chcesz.

Jeśli chcesz załadować model samodzielnie, istnieją dwa mechanizmy można użyć:

można załadować jeden model z określonego adresu URL, stosując metodę instancji initWithContentsOfURL :. To jest ogólnie preferowana technika. Zazwyczaj aplikacja ma jeden model i przy użyciu tej metody zapewnia ładowanie tylko tego modelu. Można również załadować poszczególne modele za pomocą adresów URL, a następnie ujednolicić je za pomocą modelu ModelByMergingModels: przed utworzeniem z nimi koordynatora.

W przypadku, gdy istnieje więcej niż jeden model, a szczególnie w przypadkach, gdy modele reprezentują różne wersje tego samego schematu, wiedząc, który model jest ważny, łączenie modeli z tymi samymi obiektami w czasie wykonywania w pojedynczą kolekcję spowoduje kolizje nazw i błędy). Ta metoda jest również przydatna, jeśli chcesz przechowywać model poza pakietem dla aplikacji, a więc trzeba odwoływać się do niego za pośrednictwem adresu URL systemu plików.

Można utworzyć scalony model z określonej kolekcji pakietów, używając metody class mergedModelFromBundles :. Ta metoda może być przydatna w przypadkach, gdy segregacja modeli nie jest ważna - na przykład, możesz znać swoją aplikację i strukturę, do której one prowadzą, do modeli, które potrzebujesz lub chcesz załadować. Metoda klasy pozwala na łatwe ładowanie wszystkich modeli naraz bez konieczności zastanawiania się, jakie są imiona lub w wyspecjalizowanym kodzie inicjującym, aby zapewnić znalezienie wszystkich modeli.

dostępu i korzystania z zarządzanego Object Model w czasie wykonywania

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"]; 

Korzystanie żądania pobierania szablon

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

Nie sądzę, że rozumiesz to pytanie, a przynajmniej nie zrozumiałem twojej odpowiedzi ... Dam ci głos na próbę ... – MegaManX

Powiązane problemy