【发布时间】:2014-04-17 12:42:42
【问题描述】:
- (void)tranformJSONItems:(NSArray *)jsonItems inCoreDataItem:(Item *)item {
/* Get the managed object context */
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
[jsonItems enumerateObjectsUsingBlock:^(NSDictionary *jsonItem, NSUInteger idx, BOOL *stop) {
Item *newItem = (Item *)[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Item class]) inManagedObjectContext:managedObjectContext];
newItem.label = jsonItem[@"label"];
newItem.itemID = [self.numberFormatter numberFromString:jsonItem[@"id"]];
if (nil!=item) {
[item addSubItemsObject:newItem];
}
NSArray *subitems = jsonItem[@"items"];
if (nil!=subitems) {
[self tranformJSONItems:subitems inCoreDataItem:newItem];
}
}];
if (nil==item)
[self saveChanges];
}
我想制作一个可以解析 JSON 并将其转换为 Core Data 的应用程序,但是我拥有的 JSON 非常奇怪和困难(它是嵌套和递归的)。
在我的 JSON 中,我有一个 NSDictionary 的结果,其中包含许多项目数组。每个“主要”项目都有一个标签、一个 ID 和另一个项目(它是一个子项目)。
当我使用这个递归函数时,但我的问题是我的递归函数是无限的:
我所有的主要项目都有一个像 (100,200,...) 这样的 id,所以我在主要项目的谓词中使用了模数 100。我的子项目都有一个对应于它们的 Principal 项目的 ID。例如,对于 100,您的子项的 ID 为 101 102 .. 我对这些子项使用最大和最小谓词(我使用 NSRange)作为我的 idToLoad、我的 NSminPredicate 的位置和一个 @ 987654325@ 代表我的 NSmaw 谓词。
【问题讨论】:
-
我们能看到一些 JSON,以及解析该 JSON 的结果的描述吗?
-
{ "status": true, "code": 0, "display": true, "message": null, "results": { "items": [ { "id": "0100", "label": "Actualités", "cover": null, "coverFrom": null, "coverTo": null, "coverOrder": null, "items": [ { "id": "0101", "label": "Actualité / Infos", "cover": null, ....
标签: objective-c json parsing core-data recursion