2017-05-30 103 views
0

我需要一些幫助,我斯威夫特新秀編程...OBJECTID多對多的關係

許多一對多關係,我有一個NSManagedObjectID是I`ve從另一個視圖控制器segued。

以檢索從它的數據我已經使用這個:

var elevid :NSManagedObjectID? 

let person = context.object(with: studentId!) 

nameTextField.text = person.value(forKey: "name") as? String 

這工作得很好,但是當我試圖從一個關係我真的卡住的屬性。

從來就試過這樣:

let isAtSchool = person.value(forKeyPath: "isAtSchool.monday") as! Bool 

,但我得到一個錯誤,告訴我:

無法投類型的值 '__NSSingleObjectSetI'(0x10ac63aa8)到 '的NSNumber'(0x109e5a4a8) 。

如果我後作爲代替!返回nil使用?

有人知道如何做到這一點?

+0

你能描述關係的性質和任何相關屬性嗎?尤其是,'isAtSchool'和'monday'在這裏是什麼? –

+0

嗨! isAtSchool是一個具有多對多關係的實體。星期一是這個實體的一個屬性。 managedObjectId來自一個名爲「Students」的實體,並被NSFetchedResultsController讀取,並從另一個叫做「Pupils」的viewController中尋找。我試圖檢索數據然後更新它們,當我使用valueForKey而不是valueForKeyPath時,它工作正常。一點點乾杯 – Petter

回答

0

當您要求name屬性時,您要求提供單個值,所以這沒有問題。但是當你使用這個關鍵路徑時,你正在穿越一對多的關係。可能會有2或10或100萬個相關對象,但是您要求單個Bool。這應該如何工作?

目前還不清楚你在這種情況下實際需要什麼。在那些潛在的數百萬相關對象中,你想如何計算那個值爲Bool也許你想要做的是從這些(潛在的)數百萬箇中挑出一個相關的對象,並從該單個實例中獲取Bool。但就我所知,您可能需要掃描所有這些數據,並查看最常見的值是什麼。

如何更改您的代碼取決於您真正需要什麼,應該如何確定這個單一的Bool值。無論如何,您需要從(潛在的)數百萬個相關對象中獲得單一的Bool--而且您無法通過關鍵路徑查找來完成此操作。

+0

嗨!感謝您的回答,我如何使用NSmanagedObject ID並從一對多的關係中獲取單個屬性?或者我不能那樣做?對不起,我在這裏不清楚。至今 :) – Petter