2009-06-10 13 views
7

Piszę aplikację na iPhone'a 3.0, która używa danych podstawowych do utrwalenia modelu. Chciałbym, aby aplikacja była instalowana z domyślnym zestawem danych. Podczas tworzenia dla iPhone'a < 3.0 użyłem skryptu SQL do zainicjowania bazy danych przed uruchomieniem kompilacji, a następnie wdrożono przygotowany plik .sqlite jako zasób aplikacji. Jakie jest najlepsze podejście do Core Data.Domyślny zestaw danych dla aplikacji iPhone opartej na rdzeniach danych

Wniosek: W końcu napisałem ogólny program obsługi XML. Nazwy elementów są odwzorowywane na nazwy klas i nazwy właściwości klasy Objective-C. Wartości PCDATA w elementach zostały przekonwertowane na typ zadeklarowany we właściwości nazwanej przez element. Elementy potomne lub elementy właściwości zostały rozwiązane w celu zgłaszania instancji - a zatem podczas analizowania dokumentu XML został zbudowany wykres obiektowy. Musiałem uporać się z Objective-C pierwszym starcie chociaż :-)

Przykład klas docelowych:

@interface Widget : NSObject { 
@private 
    NSString* name; 
    NSSet* sprockets; 
} 
@property (nonatomic, retain) NSString* name; 
@property (nonatomic, retain) NSSet* sprockets; 
- (void)addSprocketsObject:(Sprocket*)value;  
@end 

@interface Sprocket : NSObject { 
@private 
    NSString* name; 
    NSNumber* canFly; 
    NSNumber* wheels; 
} 
@property (nonatomic, retain) NSString* name; 
@property (nonatomic, retain) NSNumber* canFly; 
@property (nonatomic, retain) NSNumber* wheels; 
@end 

Przykład domyślny danych:

<data> 
    <Sprocket id="sprocket-1"> 
     <name>Sprocket1</name> 
     <wheels>4</wheels> 
    </Sprocket> 
    <Widget id="widget-1"> 
     <name>MyWidget</name> 
     <sprockets> 
      <Sprocket ref-id="sprocket-1"/> 
      <Sprocket id="sprocket-2"> 
       <name>Sprocket2</name> 
       <canFly/> 
      </Sprocket> 
      <Sprocket id="sprocket-3"> 
       <name>Sprocket3</name> 
      </Sprocket> 
     </sprockets> 
    </Widget> 
</data> 
+3

Byłem zapełnianie baz danych coredata w pierwszej aplikacji uruchamianej z plists, powodując bardzo długi czas ładowania pierwszego uruchomienia. Wciąż widzę, jak ludzie mówią "używaj wstępnie wypełnionych baz danych .sqlite, które generujesz w pakiecie aplikacji". Przykład książek CoreData pokazuje, jak użyć pliku .sqlite, gdy już go znajdziesz, ale gdzie jest on na pierwszym miejscu? Znalazłem odpowiedź tutaj: http://ablogontech.wordpress.com/2009/07/13/using-a-pre-populated-sqlite-database-with-core-data-on-iphone-os-3-0/ – Prairiedogg

Odpowiedz

6

dwie opcje wiosny do pamiętać:

  1. Napisz importera z jakiegoś rozsądnego formatu danych (XML, JSON itp.) I zaimportuj go do kontekstu danych podstawowych na początku uruchom, a następnie zapisz kontekst do magazynu trwałego.
  2. Jeśli Twoja aplikacja potrzebuje tylko jednego magazynu trwałego, możesz go wstępnie wypełnić i wdrożyć magazyn trwały przy użyciu zasobów aplikacji. Jeśli potrzebujesz wielu trwałych sklepów, wszystkie wstępnie wypełnione tymi samymi domyślnymi danymi, opcja 1 prawdopodobnie będzie łatwiejsza, ale możesz użyć opcji migratePersistentStore NSPersistenStoreCoordinator: toURL: options: withType: error: (lub odpowiednika w iPhone Core Data - - nadal w ramach NDA), aby utworzyć nowy sklep z wstępnie zainstalowanego sklepu dla każdego nowego potrzebnego sklepu.

Z mojego doświadczenia wynika, że ​​kod implementujący opcję 1 jest prawie taki sam, jak wymagany do wstępnego wypełnienia magazynu trwałego, więc być może istnieje tylko jedna opcja z dwoma punktami widzenia.

4

Możesz użyć Plist do przechowywania początkowych danych i zapełnienia magazynu trwałego przy pierwszym uruchomieniu. Takie podejście jest łatwiejsze niż pisanie własnego niestandardowego analizatora składni XML.

Powiązane problemy