【问题标题】:CoreData writing objects slowCoreData 写入对象慢
【发布时间】: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/… 您使用了来自NSManagedObjectsave: 方法,您可以使用来自NSManagedObjectContextsave: 方法。创建所有NSManagedObject,然后使用上下文执行保存。
  • 是的,是的,是的!我每次迭代这个数组时都保存了 moc,它应该只在完成迭代后保存。

标签: ios objective-c core-data


【解决方案1】:

想通了!

问题是我每次都保存 managedObjectContext ,只有在迭代完成时才应该保存。

刚刚移动了这一行:

if ([managedObjectContext save:&error] == NO) {
                NSAssert(NO, @"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
            }

在for循环下面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2011-02-07
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多