APIから取得したデータをJSON形式で表示するiPadアプリを作成しています。私のコアデータモデルにはいくつかのエンティティ(国、イベント、トークなど)があります。エンティティごとに、エンティティのすべてのインスタンスとその属性、およびその関係を含む1つの.jsonファイルがあります。
アプリの起動前にコアデータデータモデルにこれらのエンティティを入力したいと思います(そうでない場合、iPadがファクトリメソッドを使用していくつかのJSONファイルからエンティティのすべてのインスタンスを作成するのに約15分かかります)。
私は現在、次のようにデータをCoreDataにインポートしています。
-(void)fetchDataIntoDocument:(UIManagedDocument *)document
{
dispatch_queue_t dataQ = dispatch_queue_create("Data import", NULL);
dispatch_async(dataQ, ^{
//Fetching data from application bundle
NSURL *countriesurl = [[NSBundle mainBundle] URLForResource:@"contries" withExtension:@"json"];
NSURL *eventsurl = [[NSBundle mainBundle] URLForResource:@"events" withExtension:@"json"];
//converting the JSON files to NSDictionaries
NSError *error = nil;
NSDictionary *countries = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:countriesurl] options:kNilOptions error:&error];
countries = [countries objectForKey:@"countries"];
NSDictionary *events = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:eventsurl] options:kNilOptions error:&error];
events = [events objectForKey:@"events"];
//creating entities using factory methods in NSManagedObject Subclasses (Country / Event)
[document.managedObjectContext performBlock:^{
NSLog(@"creating countries");
for (NSDictionary *country in countries) {
[Country countryWithCountryInfo:country inManagedObjectContext:document.managedObjectContext]; //creating Country entities
}
NSLog(@"creating events");
for (NSDictionary *event in events) {
[Event eventWithEventInfo:event inManagedObjectContext:document.managedObjectContext]; // creating Event entities
}
NSLog(@"done creating, saving document");
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL];
}];
});
dispatch_release(dataQ);
}
これにより、さまざまなJSONファイルが1つのUIManagedDocumentに結合され、それに対してfetchRequestsを実行して、tableViews、mapViewなどにデータを入力できます。
アプリケーションの外部でこのドキュメントを作成し、mainBundleに追加する方法を探しています。次に、それをアプリのDocumentsDirectoryに一度コピーして、(元のJSONファイルからアプリ内にドキュメントを作成する代わりに)使用できるようにします。どんな助けでも大歓迎です!