如何在 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
}
我有两个具有多对多关系的核心数据模型设置。
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
}