5

辞書の配列である plist ファイルがあります。各辞書には一連の文字列が含まれています。各ディクショナリは有名人を表します。

私がやりたいことは、アプリケーションの最初の起動時にこの plist の内容を Core Data に入力することです。その後、何らかの方法で Core Data にデータが存在するかどうかを確認し、データがある場合はそこからロードします。それ以外の場合は、plist ファイルから初期データを再度読み込みます。

plist からコア データを入力することが可能であることはわかっていますが、私が提案しているのは実行可能な解決策ですか? または、より良いアプローチがありますか?

ジャック

4

2 に答える 2

0

これは同じことを行っていますが、格納される「トピック」に関するデータを表す辞書の配列を含む、少し複雑な pList を使用しています。デバッグ ログの一部がまだ残っています。それが誰かに役立つことを願っています。

NSManagedObjectContext *context = self.managedObjectContext;
NSError *error;

NSFetchRequest *topicRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *topicEntityDescription = [NSEntityDescription entityForName:@"Topic" inManagedObjectContext:context];
[topicRequest setEntity:topicEntityDescription];
NSManagedObject *newTopic = nil;
NSArray *topics = [context executeFetchRequest:topicRequest error:&error];
if (error) NSLog(@"Error encountered in executing topic fetch request: %@", error);

if ([topics count] == 0)  // No topics in database so we proceed to populate the database
{
    NSString *topicsPath = [[NSBundle mainBundle] pathForResource:@"topicsData" ofType:@"plist"];
    NSArray *topicsDataArray = [[NSArray alloc] initWithContentsOfFile:topicsPath];
    int numberOfTopics = [topicsDataArray count];

    for (int i = 0; i<numberOfTopics; i++)
    {
        NSDictionary *topicDataDictionary = [topicsDataArray objectAtIndex:i];
        newTopic = [NSEntityDescription insertNewObjectForEntityForName:@"Topic" inManagedObjectContext:context];
        [newTopic setValuesForKeysWithDictionary:topicDataDictionary];
        [context save:&error];
        if (error) NSLog(@"Error encountered in saving topic entity, %d, %@, Hint: check that the structure of the pList matches Core Data: %@",i, newTopic, error);
    };
}
于 2013-01-17T09:25:04.803 に答える