2015-07-19 71 views
0

我有一個有多對多關係的雙核數據模型設置。如何添加並更新核心數據中的多對多關係?

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

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

旁註:CD意味着核心數據在這裏 我創建BunchCD的時候,我想很多哥們將其添加爲成員。

我在一堆類此方法:

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 
} 

我在好友類此方法:

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' 

什麼是將成員添加到核心數據中多對多關係的最佳實踐?

+0

從我學過的東西--_many-to-many_不是一個好方法,你應該嘗試創建一箇中介表,它將使用_one-to-many_連接來連接它們。 (例如客戶和產品表需要一個交易表才能正確連接......) –

+0

@IslamQ。不,多對多是推薦的方式。如果連接本身需要存儲其他數據,則只應具有「連接」表。 – Mundi

+0

@Mundi我同意,感謝您的確認......在Swift的基礎上,這似乎並不容易或很常用,因爲缺乏多對多關係的教程......您知道任何好的關係嗎? – hoffware

回答

0

所以這個錯誤來自其他地方,我猜從我的應用程序的多線程組件(這不是故意的)。這些錯誤很可能源於使用Alamofire異步請求並在請求回調中使用Managed Object Context。因此,我添加了代碼以管理對象上下文訪問,以確保它(MOC)在主線程中使用:

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

你的代碼似乎沒問題。錯誤必須發生在其他地方。也許你可以通過單步執行代碼來找到。