ios - 核心数据(魔术记录)在提取时暂停主线程

标签 ios multithreading core-data nsmanagedobjectcontext magicalrecord

我有一个看起来像这样的方法:

+ (Cat *)fetchCatWithId:(NSString *)catId {
    NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"id ==[c] %@", catId];
    Cat* cat = [Cat MR_findFirstWithPredicate:predicate inContext:context];
    return cat;
}

Xcode Time Profiler表现出了很大的成功
Cat* cat = [Cat MR_findFirstWithPredicate:predicate inContext:context];

确实,发生这种情况时,我的应用程序中的UI会短暂冻结。因此,显然我需要在后台线程上执行此操作。所以我有三个问题:
  • 有没有一种方法可以更快地执行获取?
  • 如果没有,我如何在后台线程上获取?
  • 此方法返回Cat对象。显然,应用程序的其他部分正在请求Cat。那么,我现在是否需要在此方法中添加完成处理程序,并重构所有内容以仅在完成获取操作时执行操作?这似乎不正确。
  • 最佳答案

    试试这个:

    + (Cat *)fetchCatWithId:(NSString *)catId {
       Cat *cat = [Cat MR_findFirstByAttribute: @"id" withValue: catID];
       return cat;
    }
    

    关于ios - 核心数据(魔术记录)在提取时暂停主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22776051/

    相关文章:

    ios - 如何保存到RestKit中的Core Data RKMappingResult对象?

    ios - 使用 CollectionView 删除 Core Data 中的记录

    ios - Kinvey:由于错误而未保存对象:无法映射 'X' ,一个不存在的属性

    ios - TestFlight 崩溃报告在 ruby​​motion 中不起作用

    html - Webkit 溢出滚动导致 div 不显示?

    java - 为什么我们必须使用相同的 volatile 字段来使用 volatile 关键字建立 happens-before 关系?

    objective-c - 使用 Core Data 生成的访问器的问题

    ios - 未检测 SpriteKit 中边界框和 SKNode 之间的碰撞

    c++ - 为什么这个 tbb 程序无法编译?

    java - java调试中是否可以在外部完成线程?