2011-02-16 81 views
0

我有一個核心數據實體,其中有四個布爾型非可選屬性,默認爲NO。一個類在類被初始化時獲取實體對象,所以這不是NSFetchResquest的結果,並且這四個屬性中的一個將被設置爲YES。 該類需要知道哪個屬性爲YES。查找核心數據實體的屬性值

當然,我可以使用嵌套的IF/Else語句(或三元)來找出哪個屬性是YES,但是我想知道是否有更好的(意味着更多的可可)方法來查看實體並說'你的屬性中是否有布爾值是'?

另外,我可以重新佈局,使布爾值沒有作爲默認值,並且只查找具有YES的布爾值,但似乎是同一個問題。

回答

0

那麼有幾種不同的可能性。使用四個不同的布爾屬性是一個乾淨的解決方案。然後您必須使用if ... elsif語句來查明發生了什麼。

這樣做的更多C方法是定義可以OROR在一起並存儲爲NSUInteger的位掩碼。如果這在語義上有意義,你可以將它們組合在一起,但這就是C方式。

您也可以定義NSManagedObject的自定義子類並編寫一些便捷方法來檢查這些選項。取決於他們的優點。

+0

由於實體已經是NSManagedObject的子類,我可以編寫一些方法來檢查,然後使用需要知道的類。感謝慢跑我的大腦! – lulu 2011-02-16 15:15:05

0

您可以使用反射(例如,class_copyPropertyListclass_getProperty)檢查什麼屬性類有,並檢查它們的值,但是這是一個非常嚴厲的方法時,你已經知道了這四個屬性是相關的。我不會建議這種方法,我不會更多地稱它爲Cocoa-ish,只是更抽象。

如果您正在查看特定的狀態組合,我認爲GorillaPatch的建議是正確的:您可以將這四個布爾變成單個4位整數,並將其與代表您感興趣的各種組合的位掩碼進行比較

相關問題