核心数据,用我的 JSON 填充我的 Coredata

Posted

技术标签:

【中文标题】核心数据,用我的 JSON 填充我的 Coredata【英文标题】:Core data, populating my Coredata with my jSON 【发布时间】:2012-04-30 15:50:48 【问题描述】:

我的问题在哪里?我想用我的 json 填充我的核心数据,但它只填充最后一个对象,我的意思是这个:

phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:1] valueForKey:@"name"];
        phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:1] valueForKey:@"number"] intValue]];

而不是以前的。

这是我的代码:

- (void) add
    NSManagedObjectContext *context = [app managedObjectContext];
    Phone *phone = [NSEntityDescription insertNewObjectForEntityForName:@"Phone" inManagedObjectContext:context];

    if (nameText.text.length <= 0 || numberText.text.length <= 0)
    
        NSLog(@" hey hey, t'as pas oublié kkchose ?");
    
    else
    
        phone.name = nameText.text;
        phone.number = [NSNumber numberWithInt:[ numberText.text intValue]];

        NSLog(@"ADD : %@", phone.name);

        [[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:self];

        [self dismissModalViewControllerAnimated:YES];
    


    NSString *urlString = [NSString stringWithFormat:@"http://localhost:8888/json.txt"];
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 
    NSError *err;

    NSMutableArray *json = (NSMutableArray* )[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&err];


   for (int i = 0; i != 2; i++)
    
        phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"name"];
        phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"number"] intValue]];
  


    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Phone" inManagedObjectContext:context];

    [request setEntity:entity];

    NSArray *array  = [context executeFetchRequest:request error:&err];

    for (Phone *pho in array)
    
        NSLog(@"NAME %@", pho.name);
        NSLog(@"PHONE %@", pho.number);
    


顺便说一句,如果你想让我不编写循环来填充核心数据,我会感谢你^^

【问题讨论】:

【参考方案1】:

您只在这一行中创建一个托管对象:

NSManagedObjectContext *context = [app managedObjectContext];

然后你在这些行中设置了 3 次 name 和 number 字段:

for (int i = 0; i != 2; i++)

    phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"name"];
    phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"number"] intValue]];

我猜你想创建和填充三个对象而不是一个。将托管对象的创建移到循环内。

for (int i = 0; i != 2; i++)

    Phone *phone = [NSEntityDescription insertNewObjectForEntityForName:@"Phone" inManagedObjectContext:context];
    phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"name"];
    phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"number"] intValue]];

【讨论】:

以上是关于核心数据,用我的 JSON 填充我的 Coredata的主要内容,如果未能解决你的问题,请参考以下文章

OleDb:为啥我不能用我的数据源中的完整模式和信息轻松地填充我的数据集?

预填充核心数据存储:使用 JSON 属性列表还是 XML 文件?

UIPickerView 无法显示 JSON 数组数据

Dojo 中的 DataGrid,带有来自 servlet 的 json 数据

Swift 用新数据更新 UITableView

使用外部 json 填充路由器