3

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ファイルからアプリ内にドキュメントを作成する代わりに)使用できるようにします。どんな助けでも大歓迎です!

4

1 に答える 1

1

とにかく、初期データは静的であるように見えます。このコードを実行し、シミュレーターでデータベースのコピーを作成してから、そのデータベースをリソースバンドルに含めてみませんか。

そのデータベースを実稼働データベースにコピーするか、2番目のPSCを使用して、提供されたデータベースを読み取り専用としてマークすることもできます。Appleは、ユーザーが作成しないドキュメントの内容に眉をひそめるので、これには追加の利点があります。

于 2012-09-15T15:36:22.280 に答える