核心数据仅存储JSON Feed的最后一个对象

时间:2011-06-22 14:50:30

标签: iphone objective-c xcode json core-data

我在我的应用中使用Core Data作为本地存储。我已正确设置并为每个实体创建NSManagedObject的子类。但是,当我尝试将值插入到我的商店时,它只会插入我的JSON Feed中的最后一个对象。

res = [JSONHandler requestJSONResponse:jsonString];
shows = [res valueForKeyPath:@"Show.Name"];
NSUInteger showIndex = 0;
for(NSString *showName in shows){
    showObject = [NSEntityDescription insertNewObjectForEntityForName:@"Show" inManagedObjectContext:managedObjectContext_];
    showObject.name = showName;
    showObject.iD = [[res valueForKeyPath:@"Show.Id"]objectAtIndex:showIndex];
    showObject.desc = [[res valueForKeyPath:@"Show.Description"]objectAtIndex:showIndex];
    showObject.activityType = [[res valueForKeyPath:@"Show.ActivityType"]objectAtIndex:showIndex];

    showIndex++;
}

这只存储我的JSON Feed中的最后一个对象。知道为什么吗?

编辑:当我这样做时,它工作正常:

res = [JSONHandler requestJSONResponse:jsonString];

shows = [res valueForKeyPath:@"Show.Name"];

NSUInteger index = 0;

for(NSString *showName in shows){
    show = [NSEntityDescription insertNewObjectForEntityForName:@"Show" inManagedObjectContext:managedObjectContext_];
    [show setValue:showName forKey:@"name"];
    [show setValue:[[res valueForKeyPath:@"Show.Id"]objectAtIndex:index] forKey:@"iD"];
    [show setValue:[[res valueForKeyPath:@"Show.Description"]objectAtIndex:index] forKey:@"desc"];
    [show setValue:[[res valueForKeyPath:@"Show.ActivityType"]objectAtIndex:index] forKey:@"activityType"];

    index++;
}

这基本上是一回事,不是吗?但我想使用NSManagedObject的子类而不是像上面那样做。因为在上面的代码片段中显示的是NSManagedObject * show而不是它应该是什么:Show * show。

2 个答案:

答案 0 :(得分:0)

有多少节目?您可以通过执行以下操作找到此信息:NSLog(@"Number of shows: %d.", shows.count);,假设显示为NSArray。可能是您的Core Data代码很好,JSON解析本身也有问题。

编辑:另外,您是否正确地将更改保存到持久性存储中?

答案 1 :(得分:0)

通常当您看到这样保存的几个对象中的一个时,问题是应该是多对的关系被不正确地设置为一个。无论您尝试添加多少个对象,都只设置最后一个,因为该关系只能包含一个值。

我认为在这种情况下,问题很可能出现在自定义子类的代码而不是数据模型本身,因为数据模型适用于通用的NSManagedObjects。