在 CoreData 的后台线程中创建实体

Posted

技术标签:

【中文标题】在 CoreData 的后台线程中创建实体【英文标题】:Creating an entity in a background thread in CoreData 【发布时间】:2016-11-02 03:48:23 【问题描述】:

我正在使用 MagicalRecord 并尝试在后台线程中创建一个实体,然后在主线程中使用它。这是我的代码:

var localRecipe: Recipe?
MagicalRecord.save( (localContext : NSManagedObjectContext!) in
    localRecipe = Recipe.createEntity()
    localRecipe?.name = "HiHi"

    , completion:  (success : Bool, error : Error?) in

        print(localRecipe?.name)
        let recipe = localRecipe?.mr_(in: NSManagedObjectContext.mr_default())
        print(recipe?.name)
)

当我尝试在主上下文中检索 localRecipe 时,持久存储中不存在该对象。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

我相信Recipe.createEntity() 正在默认上下文中创建Recipe

您应该使用块中提​​供的localContext 来创建您的Recipe 实体。例如: localRecipe = Recipe.createEntityInContext(localContext)

那么当 localContext 被保存时,它应该被合并到主上下文中,NSManagedObjectContext.mr_default()

【讨论】:

我不确定这是否是唯一的问题。告诉我你的进展情况。 就是这样!谢谢。 哇哦!没问题:)

以上是关于在 CoreData 的后台线程中创建实体的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:非法尝试建立关系+(空)上下文

Qt5中创建临时的后台线程。

如何在 C# 的后台线程中创建 BitmapImage 缓冲区? [复制]

核心数据-后台线程中的更新实体会自动更改主线程中的 NSManagedObject 而无需合并-为啥?

如何在python中创建一个在间隔函数调用上线程化的后台?

Core Data 3 托管对象上下文