使用Magical Record删除实体时,iOS应用程序会冻结

时间:2016-06-13 10:14:31

标签: ios core-data magicalrecord

我正在使用MagicalRecord框架来“清理”核心数据代码。当应用程序启动或从后台恢复时,程序将尝试使用以下代码清理一些数据:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
          NSDate *date = [[NSDate date] dateByAddingTimeInterval:-259200]; 

    NSFetchRequest *request = [NGCOwner MR_requestAllSortedBy:@"updatedTime" ascending:YES withPredicate:[NSPredicate predicateWithFormat:@"updatedTime < %@", date]];

    NSArray *results = [NGCOwner executeFetchRequest:request inContext:localContext];

    NSInteger count = MAX(0,[results count]-100); //do not delete the lastest 100 results

    for (NSInteger i = 0; i < count; i++) {
        NGCOwner *owner = [results objectAtIndex:i];
        if([userId isEqualToString:owner.userId]){
            continue;
        }
        [localContext deleteObject:owner];
    }
}];

实体“NGCOwner”有17个关系,并将删除规则设置为Cascade。当程序删除NGCOwner实体(大约170 NGCOwner)时,它会使NSPersistentStoreCoordinator忙碌并冻结应用程序。

我可以强制NSPersistentStoreCoordinator不在主线程中执行吗?

enter image description here

启用核心数据日志后,我发现父上下文花费大部分时间来预取关系数据(这是正常的吗?)。

0 个答案:

没有答案