ios - 将关系插入核心数据的正确方法

标签 ios swift core-data

我有这个核心数据模型:

enter image description here

有时,当我尝试插入“BoissonCave”元素时,我的应用程序会崩溃。这就是它发生的地方(我正在从包含 JSON 数据的数组“值”中读取数据):

let boissonCave = BoissonCave(context: context)
[...]
if let _regionId = values["regionId"] as? Int16 {
    let region = CoreDataStack.sharedInstance.getRegion(ofId: Int(_regionId))
    boissonCave.fromRegion = region
}

我遇到了不同的错误,无论是在核心数据获取“区域”时,还是在我尝试分配 boissonCave 的 fromRegion 时。要么是

EXC_BAD_ACCESS

'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'

甚至*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x174259c80> was mutated while being enumerated.'

我怀疑这是一个上下文问题,Core Data 试图在一个上下文中获取一个区域,并在另一个上下文中插入一个 BoissonCave?我应该如何解决这个问题?

最佳答案

基于 CoreDataStack .为什么不使用 1 个静态核心数据堆栈?并在需要时创建子上下文。您始终可以将对子项的更改合并到主上下文中。这是我自 iOS 10.0 以来使用的上述 url 的略微修改版本

class CoreDataStack {

    static let shared = CoreDataStack()

    lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "Almanapp")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error {
                fatalError("Unresolved error \(error)")
            }
        })
        return container
    }()

    var context : NSManagedObjectContext {
        return self.persistentContainer.viewContext
    }

    func saveContext() {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch let error as NSError {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        }
    } 
}

关于ios - 将关系插入核心数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702876/

相关文章:

ios - 使用 UIAlertControllerStyle.ActionSheet 在 UIAlertController 中取消按钮

ios - 如何在自定义 TitleView 的 subview 上添加 subview

iphone - 如何为通用 iPhone/iPad 应用程序指定图标?

arrays - 将值从数组添加到 int 的问题

swift - 判断NSImageView是否高亮

swift - Swift 中隐式展开的惯用用法

iPhone - 从手机复制 sqlite 文件以在模拟器中使用

core-data - 更新 CoreData 中的数据及其在 View 中的值

iphone - 如何在Core Plot中制作半对数图?

ios - 核心数据模型——实体和逆