【发布时间】:2011-01-04 05:50:57
【问题描述】:
我正在使用来自网站的数据属性列表加载我的应用程序。这个属性列表文件包含一个 NSDictionaries 的 NSArray,它本身包含一个 NSDictionaries 的 NSArray。基本上,我正在尝试加载餐厅菜单类别的 tableView,每个类别都包含菜单项。
我的属性列表文件很好。我能够加载文件并循环通过创建 NSEntityDescriptions 的节点结构并能够保存到核心数据。除了在我的菜单类别托管对象中,我有一个用于该类别的菜单项的 NSArray 之外,一切正常且符合预期。稍后,当我获取类别时,指向类别中菜单项的指针丢失了,我得到了所有菜单项。我是想使用谓词还是 Core Data 会为我跟踪我的对象图?
谁能看看我如何加载核心数据并指出我的逻辑缺陷?我自己对 SQL 和 OOP 都很好,但对 ORM 有点困惑。我认为我应该能够在我的托管对象中使用聚合,并且框架会为我跟踪指针,但显然不是。
NSError *error;
NSURL *url = [NSURL URLWithString:@"http://foo.com"];
NSArray *categories = [[NSArray alloc] initWithContentsOfURL:url];
NSMutableArray *menuCategories = [[NSMutableArray alloc] init];
for (int i=0; i<[categories count]; i++){
MenuCategory *menuCategory = [NSEntityDescription
insertNewObjectForEntityForName:@"MenuCategory"
inManagedObjectContext:[self managedObjectContext]];
NSDictionary *category = [categories objectAtIndex:i];
menuCategory.name = [category objectForKey:@"name"];
NSArray *items = [category objectForKey:@"items"];
NSMutableArray *menuItems = [[NSMutableArray alloc] init];
for (int j=0; j<[items count]; j++){
MenuItem *menuItem = [NSEntityDescription
insertNewObjectForEntityForName:@"MenuItem"
inManagedObjectContext:[self managedObjectContext]];
NSDictionary *item = [items objectAtIndex:j];
menuItem.name = [item objectForKey:@"name"];
menuItem.price = [item objectForKey:@"price"];
menuItem.image = [item objectForKey:@"image"];
menuItem.details = [item objectForKey:@"details"];
[menuItems addObject:menuItem];
}
[menuCategory setValue:menuItems forKey:@"menuItems"];
[menuCategories addObject:menuCategory];
[menuItems release];
}
if (![[self managedObjectContext] save:&error]) {
NSLog(@"An error occurred: %@", [error localizedDescription]);
}
【问题讨论】:
标签: iphone cocoa-touch orm core-data