我在我的应用中使用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。
答案 0 :(得分:0)
有多少节目?您可以通过执行以下操作找到此信息:NSLog(@"Number of shows: %d.", shows.count);
,假设显示为NSArray
。可能是您的Core Data代码很好,JSON解析本身也有问题。
编辑:另外,您是否正确地将更改保存到持久性存储中?
答案 1 :(得分:0)
通常当您看到这样保存的几个对象中的一个时,问题是应该是多对的关系被不正确地设置为一个。无论您尝试添加多少个对象,都只设置最后一个,因为该关系只能包含一个值。
我认为在这种情况下,问题很可能出现在自定义子类的代码而不是数据模型本身,因为数据模型适用于通用的NSManagedObjects。