【发布时间】:2016-07-05 22:38:16
【问题描述】:
我正在从网络服务下载地址列表(15.000 个地址)。获取所有地址可能需要 800 毫秒,另外需要 15 秒才能将它们写入 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”获得更多信息,例如:stackoverflow.com/questions/4145888/ios-coredata-batch-insert -
@Larme 有什么提示吗?我对 cd 没有太多经验。
-
developer.apple.com/library/prerelease/content/documentation/… 您使用了来自
NSManagedObject的save:方法,您可以使用来自NSManagedObjectContext的save:方法。创建所有NSManagedObject,然后使用上下文执行保存。 -
是的,是的,是的!我每次迭代这个数组时都保存了 moc,它应该只在完成迭代后保存。
标签: ios objective-c core-data