2011-04-21 93 views
2

我正在使用核心數據並且有一個叫做Person(它是Core Data中的實體)的NSManagedObject的子類。 Person對象具有多個屬性(例如firstName,lastName等)和關係(例如friends,coWorkers)。其中一些屬性是可選的,而其他屬性是強制性的。確定NSManagedObject屬性是否可選

給定Person對象如何有效地確定特定屬性或關係是可選還是強制?

我想盡量避免必須通過Person對象的每個屬性進行某種低效的循環,因爲我需要經常調用代碼,所以類似於以下僞代碼的內容將是完美的:

if ([[aPerson getProperty:@"firstName"] isOptional]) { 

    // do stuff 

} 

...但我不確定它是否可以簡單地完成。上面的僞代碼也只會檢查屬性,所以我猜測其他的東西需要在被檢查的屬性是關係的情況下完成。

我意識到,做一個循環並將所有強制屬性的名稱存儲在數組中可能更有效(然後檢查該數組是否存在屬性名稱),這就是我在做的這一刻,但不幸的是,它並沒有真正與我的代碼結構一起工作(因此需要更多的「按需」方法)。

任何幫助,將不勝感激:)

+0

我認爲你是管理對象混亂實體寫一個函數。 「可選」僅是實體的屬性。這是在託管對象模型文件中定義的,並且一旦上下文分配給它就不能更改。如果實體具有可選關係,那麼用該實體初始化的所有被管理對象都具有該可選關係,並且永遠不會改變。您無需檢查託管對象是否存在可選關係,並且您應該知道模型中的關係。 – TechZen 2011-04-21 17:38:34

回答

6

你可以在你的基地子

NSDictionary *d = [[self entity] attributesByName]; 
NSAttributeDescription *attr = (NSAttributeDescription *)[d objectForKey:@"test"]; 
BOOL isopt = [attr isOptional]; 
+0

太棒了。謝謝埃利亞斯!我在NSManagedObject上做了這個類,並且它工作得很棒:) – Skoota 2011-04-21 12:42:57

+0

+1這個方法可行,但是毫無意義。 (請參閱上面的我的評論。)您從不需要檢查特定託管對象關係的配置,因爲使用同一個實體初始化的所有對象都具有完全相同的關係配置。 – TechZen 2011-04-21 17:40:03

相關問題