我使用Core Data进行离线支持。从外部API获取JSON响应,并在后台登录时将数据插入本地存储。导入检索5000多条记录,大约需要1.5分钟。
这是我将数据插入本地数据库的代码。
- (void)insertProspectListDataInProspectTable:(NSMutableDictionary*)tempDict
{
int prospectID = [[tempDict valueForKey:@"ProspectID"] intValue];
Prospects *prospect = nil;
NSMutableArray *prospectListArray = [self isProspectAlreadyExistsWithProspectID:prospectID];
if ([prospectListArray count] > 0) {
prospect = [prospectListArray objectAtIndex:0];
}else {
prospect = (Prospects *)[NSEntityDescription insertNewObjectForEntityForName:PROSPECTS_ENTITY inManagedObjectContext:self.managedObjectContext];
}
//Prospect ID
[prospect setProspectID:[NSNumber numberWithInt:prospectID]];
//Subscriber Name
[prospect setSubscriberName:[tempDict valueForKey:@"SubscriberName"]];
//Attention
[prospect setAttention:(([tempDict valueForKey:@"Attention"] == [NSNull null] )?@"":[tempDict valueForKey:@"Attention"])];
//Email
[prospect setEMail:(([tempDict valueForKey:@"EMail"] == [NSNull null] )?@"":[tempDict valueForKey:@"EMail"])];
//Lead Date
NSString *leadDate = (([tempDict valueForKey:@"LeadDate"] == [NSNull null])?@"":[tempDict valueForKey:@"LeadDate"]);
[prospect setLeadDate:[GenricUI convertToMMDDYYYYFromYYYYMMDDFormate:leadDate]];
NSError *error;
if (![self.managedObjectContext save:&error]) {
// This is a serious error saying the record could not be saved.
// Advise the user to restart the application
}else {
// [self showSavedSuccessAlert];
}
}
我想提高应用程序的性能。任何食谱?
答案 0 :(得分:0)
这需要很长时间,因为对于每个收到的对象,您正在进行单独的提取。我能想到三种可能的解决方案:
NSDictionary
的{{1}},并保留所有数据库对象。答案 1 :(得分:0)
没有足够的信息来确切地知道问题所在。第一步是使用TimeProfiler工具检查运行。这将使我们能够专注于瓶颈的确切位置。
进行了几项改进:
答案 2 :(得分:0)
最好你可以用后台模式创建一个'ManageObjectContext`来更新核心数据库,而不会阻塞主线程。
您可以从以下教程中了解有关多上下文的信息: 1. http://www.cocoanetics.com/2012/07/multi-context-coredata/ 2. http://robots.thoughtbot.com/core-data