1

3つの属性を持つコアデータに「Categories」という名前のエンティティが1つあります。

  1. parent_id
  2. category_id
  3. 種別名

ルートディクショナリの下のCategoriesFile.plistに、次の名前の3つの配列を作成しました。

  1. parent_id
  2. category_id
  3. 種別名

そして、これらの配列に適切なデータを入力しました。

今、私はデータを挿入するために次のコードを書きました

   NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"CategoriesFile.plist"];
        if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
        {
            // if not in documents, get property list from main bundle
            plistPath = [[NSBundle mainBundle] pathForResource:@"CategoriesFile" ofType:@"plist"];
        }

        // read property list into memory as an NSData object
        NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
        NSString *errorDesc = nil;
        NSPropertyListFormat format;

        // convert static property list into dictionary object
        NSDictionary *thisGardenDictionary = [[NSDictionary alloc] init];
        NSDictionary *plistDictionary = (NSDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
        if (!plistDictionary)
        {
            NSLog(@"Error reading plist: %@, format: %d", errorDesc, format);
        }

        [plistDictionary enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id key, id object, BOOL *stop) {
            NSManagedObject *manObj = [NSEntityDescription insertNewObjectForEntityForName:@"Categories" inManagedObjectContext:context];

            [manObj setValue:[thisGardenDictionary objectForKey:@"category_id"]  forKey:@"category_id"];
        [manObj setValue:[thisGardenDictionary objectForKey:@"parent_id"] forKey:@"parent_id"];
        [manObj setValue:[thisGardenDictionary objectForKey:@"category_name"] forKey:@"category_name"];


             }];
 NSError *error;
    if(![context save:&error])
    {
        NSLog(@"Whoops, couldn't save %@",[error localizedDescription]);
    }

しかし、私は空白の結果を取得します。

誰かが私が欠けているものを言うことができますか?

4

2 に答える 2

0

これでうまくいくはずです(plistが正しく読み取られていることを確認したと思います):

NSDictionary *allArrays = [NSDictionary dictionaryWithContentsOfFile:plistPath];
for (int i = 0; i < [[allArrays objectForKey:@"parent_id"] count]; i++) {
   NSManagedObject *object = [NSEntityDescription 
    insertNewObjectForEntityForName:@"Categories" 
             inManagedObjectContext:context];
    for (NSString *s in @[@"parent_id", @"category_id", @"category_name"]) {
      [object setValue:[[allArrays objectForKey:s] objectAtIndex:i] forKey:s];
    }
}
// save

ただし、これはデータを整理するための非常に扱いにくい方法であることに注意してください。辞書の配列の方がはるかに優れています。あなたの設定で、すべての配列が同じ数の要素を持たない場合、結果は壊滅的になります。

于 2012-12-10T21:27:16.170 に答える
0

NSManagedObject あなたの例のプロパティを設定します

[manObj setName:@"Name"];

など..次に、コンテキストを保存して、CoreData db に値を保存します。

if (![context save:&error]) {
   NSLog(@"Unresolved error : %@", [error userInfo]);
}
于 2012-12-06T08:08:00.577 に答える