2012-05-31 55 views
1

這可能是一個長鏡頭,但我有很多屬性的對象。這些對象的值由從數據庫請求創建的NSDictionary填充。因此,這些NSDictionaries中可能會包含NSNull值,這些值將自動分配給屬性。我需要屬性自動丟棄不正確類型的值/對象。目前我這樣做:@synthesize和值類型檢查的使用

- (void) setViewID:(NSString *)viewID{ 
    if (!viewID || [viewID isKindOfClass:[NSString class]]) _viewID = viewID; 
} 

但是,當我有30-50個屬性時,最終會有很多額外的代碼。有沒有合成這種行爲的方法?這看起來似乎是一個普遍的要求,但我似乎無法找到一種辦法來完成這一切。

回答

2

當你閱讀字典時,爲什麼不檢查NSNull?例如。

for (NSString *key in dictionary) { 
    id value = [dictionary objectForKey:key]; 
    if (value == [NSNull null]) { 
     value = nil; 
    } 
    [self setValue:value forKey:key]; 
} 
+0

主要是因爲它更容易過濾NSNull屬性和NSNull不是我唯一關心的。有相當多的方法可以接受NSDict並填充特定的對象。找到所有這些'入口'點將是一個PITA。我考慮過其他設計選項,比如讓我的數據庫層從字典中省略NULL項而不是添加NSNull,但我需要真正考慮它對我的程序的影響。另外,我想要現有代碼提供的冗餘保護。如果我的財產收到一個NSString時,它應該收到一個NSNumber我想它放棄,而不是崩潰。 –

+0

我會繼續接受這個,主要是因爲我不認爲有辦法做我想做的事情,最後我決定省略'[NSNull null]'項目,它運行良好。我想這個教訓是,從NSDictionaries中完全省略NSNull通常會更好,更容易,如果需要的話,檢查是否爲零。 –