0
我正在从webservice(15.000地址)下载地址列表。花费800毫秒可以获得所有地址,并花费额外的15秒将它们写入CoreData。请给些建议,我是错的:CoreData写入对象缓慢
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext;
for (NSDictionary *dict in addresses) {
[self saveAddressesToCoreDataWithDictionary:dict andManagedObject:managedObjectContext];
}
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"alreadyDownloaded"];
和方法:
-(void)saveAddressesToCoreDataWithDictionary:(NSDictionary *)dict andManagedObject:(NSManagedObjectContext *)managedObject
{
NSManagedObject *address;
address = [NSEntityDescription insertNewObjectForEntityForName:@"Address" inManagedObjectContext:managedObject];
[address setValue:[[dict objectForKey:@"lat"] stringValue] forKey:@"lat"];
[address setValue:[[dict objectForKey:@"lon"] stringValue] forKey:@"lon"];
[address setValue:[dict objectForKey:@"addressLong"] forKey:@"addressLong"];
[address setValue:[dict objectForKey:@"addressShort"] forKey:@"addressShort"];
NSError *error;
[managedObject save:&error];
}
如果我没有记错的话,你可以将所有的'NSDictionary'对象转换成'Address'实体('NSManagedObject'),并将它们全部保存(使用'NSManagedObjectContext'),而不是一个接一个地保存它们花更多的时间。您可以通过查找“Core Data Save Batch”来获得更多信息,就像那里:http://stackoverflow.com/questions/4145888/ios-coredata-batch-insert – Larme
@Larme任何提示?我没有太多的CD经验。 – Stefan
https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/CoreData/CreatingObjects.html#//apple_ref/doc/uid/TP40001075-CH5-SW4您使用了'save:'方法从'NSManagedObject',你可以在'NSManagedObjectContext'中使用'save:'方法。创建所有的'NSManagedObject',然后用上下文执行保存。 – Larme