2017-03-04 162 views
0

我使用magicalrecord在我的应用程序来管理coredata,每一件事情现在是完美的,但我有一个问题,我创建使用此代码10K实体:MagicalRecord节省花费时间

[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext * _Nonnull localContext) { 

Person *person = [Person MR_createEntityInContext:localContext]; 
person.organization = [Organization MR_findfirstInContext:localContext]; 
person.name = name; 
person.id = id; 
person.age = age; 

]}; 

创建10K记录时后我使用魔法记录在数据库中执行任何更改,它会在保存到根上下文时停留4或5秒,这使得UI Freez无论它在主线程还是后台线程上都可用。

编辑: 我已经找到了问题,如果我删除的关系(即组织)从保存阻止它不被卡住,如果我是从侧的块中提取的组织和分配在内部保存阻止它抛出组织在不同情况下创建的例外。

+1

为什么创建10K实体应该是快?只是不要使用阻止呼叫并向用户显示进度指示器。 – Sulthan

+0

不是我的问题不是关于快速创建,而是关于如果我有10k个实体或更多存储到根上下文需要时间。 –

+0

您可能需要创建10k个实体,然后保存在该上下文中,而不是创建1个实体,将其保存在该上下文中,然后重复10k。 – Larme

回答

0
//case A 
[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) { 

    NSLog(@"current thread is main thread %d and thread is %@", [NSThread isMainThread], [NSThread currentThread]); 

    //some ManagedObject code 
    ... 
}]; 

//case B 
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 

    NSLog(@"current thread is main thread %d and thread is %@", [NSThread isMainThread], [NSThread currentThread]); 

    //some ManagedObject code 
    ... 
}]; 

测试这段代码,你会发现情况A总是在MainThread运行,如果你有10K实体店,UI会被卡住。

enter image description here

看这个https://github.com/magicalpanda/MagicalRecord/blob/master/Docs/Saving-Entities.md