我正在开发一个从数据库中获取大量对象的iPhone应用程序.我想使用Core Data存储这些内容,但我的关系存在问题.
详细信息包含任意数量的POI(兴趣点).当我从服务器获取一组POI时,它们包含一个详细ID.为了将POI与Detail(通过ID)相关联,我的过程如下:查询ManagedObjectContext以获取detailID.如果存在该详细信息,请将poi添加到其中.如果没有,则创建详细信息(它具有将懒惰填充的其他属性).
这个问题是性能问题.对Core Data执行常量查询的速度很慢,因为所涉及的多个关系,添加150个POI的列表需要一分钟.
在我的旧模型中,在Core Data(各种NSDictionary缓存对象)之前,这个过程非常快(在字典中查找一个键,然后在它不存在时创建它)
我有更多的关系,而不仅仅是这一个,但几乎每个人都必须做这个检查(有些是很多,他们有一个真正的问题).
有没有人对我如何帮助这个有任何建议?我可以执行更少的查询(通过搜索许多不同的ID),但我不确定这将有多大帮助.
一些代码:
POI *poi = [NSEntityDescription
insertNewObjectForEntityForName:@"POI"
inManagedObjectContext:[(AppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext]];
poi.POIid = [attributeDict objectForKey:kAttributeID];
poi.detailId = [attributeDict objectForKey:kAttributeDetailID];
Detail *detail = [self findDetailForID:poi.POIid];
if(detail == nil)
{
detail = [NSEntityDescription
insertNewObjectForEntityForName:@"Detail"
inManagedObjectContext:[(AppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext]];
detail.title = poi.POIid;
detail.subtitle = @"";
detail.detailType = [attributeDict objectForKey:kAttributeType];
}
-(Detail*)findDetailForID:(NSString*)detailID {
NSManagedObjectContext *moc = [[UIApplication sharedApplication].delegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Detail" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate …Run Code Online (Sandbox Code Playgroud)