如何在 Core Data 中添加和更新多对多关系?

How do I add to and update a many to many relationship in Core Data?

我有两个具有多对多关系的核心数据模型设置。

class BuddyCD: NSManagedObject {
    @NSManaged var memberOfBunches: NSSet
}

class BunchCD: NSManagedObject {
    @NSManaged var bunchMembers: NSSet
}

旁注:CD 在这里表示核心数据 我在制作BunchCD的时候,想加很多小伙伴加入。

我在 Bunch 中有这个方法 class:

class func createInManagedObjectContext (moc: NSManagedObjectContext, members: [BuddyCD]?) -> BunchCD {

    let newBunch = NSEntityDescription.insertNewObjectForEntityForName(CoreDataConst.bunchModel, inManagedObjectContext: moc) as! BunchCD

    if let membersNonOptional = members {
        // Add members to this bunch

        for member in membersNonOptional {
            member.addToBunch(newBunch)
        }
    }
    return newBunch
}

好友里有这个方法class:

func addToBunch(bunch: BunchCD) {
    var bunches = self.mutableSetValueForKey("memberOfBunches")
    bunches.addObject(bunch)
}

我收到这个错误:

2015-07-19 01:00:38.587 MyApp[34979:1885727] -[__NSSetIobjectAtIndex:]: unrecognized selector sent to instance 0x7fb7d3ecde30 2015-07-19 01:00:38.603 LunchBunch[34979:1885727] ***Terminating app due to uncaught exception'NSInvalidArgumentException', reason: '-[__NSSetI objectAtIndex:]: unrecognized selector sent to instance 0x7fb7d3ecde30'

将成员添加到核心数据中的多对多关系的最佳做法是什么?

您的代码似乎没问题。错误必须源自其他地方。也许您可以通过单步执行代码来找出位置。

所以错误源于其他地方,我猜测是我的应用程序的多线程组件造成的(这不是故意的)。这些错误很可能源于使用 Alamofire 异步请求和在请求回调中使用托管对象上下文。因此,我围绕托管对象上下文访问添加了代码,以确保它(MOC)在主线程上被使用:

dispatch_async(dispatch_get_main_queue()) {
    // Managed Object Context access here
}