如何在核心数据中添加和更新多对多关系?

时间:2015-07-19 08:06:50

标签: ios swift core-data ios8

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

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

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

旁注:CD表示核心数据 我在创建BunchCD时,我想作为成员添加许多好友。

我在Bunch类中有这个方法:

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
}

我在Buddy课程中有这个方法:

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'

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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