Я загружаю свое приложение со списком свойств данных с веб-сайта.Этот файл списка свойств содержит NSArray из NSDictionaries, который сам содержит NSArray из NSDictionaries.В основном, я пытаюсь загрузить tableView категорий меню ресторана, каждая из которых содержит пункты меню.
Мой файл списка свойств в порядке.Я могу загрузить файл и пройтись по структуре узлов, создавая описания NSEntityDescription, и могу сохранить их в Core Data.Все работает нормально и ожидаемо, за исключением того, что в моем управляемом объекте категории меню у меня есть NSArray пунктов меню для этой категории.Позже, когда я получаю категории, указатели на пункты меню в категории теряются, и я получаю все пункты меню.Предполагаю ли я использовать предикаты или Core Data отслеживает мой граф объектов для меня?
Может кто-нибудь взглянуть на то, как я загружаю Core Data, и указать на ошибку в моей логике?Я довольно хорош как с SQL, так и с ООП, но 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]);
}