ios - CoreData写对象慢

标签 ios objective-c core-data

我正在从网络服务下载地址列表(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];

}

最佳答案

想通了!

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

刚刚移动了这一行:

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

下面的for循环。

关于ios - CoreData写对象慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205534/

相关文章:

ios - Swift - 带有 Objective-C 选择器 '*()' 的方法 '*' 与具有相同 Objective-C 选择器的父类(super class) '*' 的 'NSObject' 的 getter 冲突

ios - CGImageCreateWithMaskingColors 不适用于 iOS7

ios - UIView切换过渡?

objective-c - iOS 长按选择文本

ios - 以编程方式定义的不同行为 NSLayoutConstraints 与 'greaterThanOrEqual' 的 Storyboard 约束

ios - Interface Builder 在使用 Cocoapods 1.0 的框架项目上损坏

objective-c - 在 iOS 6 的 Objective-C 中调整 MKMapView 的框架

ios - 抽象实体上的核心数据关系

ios - 了解 iOS Swift 中的 CoreData

ios - 通过 Segue 传输核心数据 - Objective-C (Xcode)