【发布时间】:2014-05-31 23:51:42
【问题描述】:
我有两个实体 Drink 和 Breweries。我有 Json 中的数据,我正在为每个数据构建核心数据表并建立关系(饮料与啤酒厂一对一)。但是,在构建 Drink 对象时尝试设置它显然会大大减慢该过程,因为我每次创建新饮料时都必须查询核心数据(有几千个饮料和大约 1000 家啤酒厂)。目前,啤酒厂有一个与饮料属性相匹配的唯一 ID。在不大大减慢加载时间的情况下,最好的方法是什么?我正在考虑只使用一个实体并将啤酒厂放在同一张表中,即使这是不好的数据库做法。
这是从 json 中构建饮料表的代码,其中添加啤酒厂的代码已注释掉。
[jsonCategories enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
Drink *drink = [NSEntityDescription insertNewObjectForEntityForName:@"Drink" inManagedObjectContext:importContext];
//drinkType.id = [obj objectForKey:@"id"];
drink.name = [obj objectForKey:@"name"];
drink.alcoholByVolume = [obj objectForKey:@"abv"];
drink.drinkType = beerDrinkType;
drink.breweryId = [obj objectForKey:@"brewery_id"];
// NSArray *fetchedObjects;
// NSFetchRequest *fetch = [[NSFetchRequest alloc]init];
// NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Breweries" inManagedObjectContext:importContext];
// [fetch setEntity:entityDescription];
// [fetch setPredicate:[NSPredicate predicateWithFormat:@"id =%@", drink.breweryId]];
// NSError *errorBrewery;
// [fetch setFetchLimit:1];
// fetchedObjects = [importContext executeFetchRequest:fetch error:&errorBrewery];
// if (fetchedObjects && [fetchedObjects count] > 0){
// Breweries *fetchedBrewery = [fetchedObjects objectAtIndex:0];
// drink.breweries = fetchedBrewery;
// }
}];
【问题讨论】: