我已經編寫了一些代碼將數據從服務器映射到CoreData對象,並且這一切都按預期工作。但是,我在日誌中收到很多無法識別的選擇器警告。這基本上是由於服務器對不同對象類型具有相同的密鑰名稱。我的代碼如下:CoreData/NSManagedObject映射,如何檢查對象屬性是否支持傳遞類型
for (id key in dict)
{
if ([UsefulFunctions objectContainsData:dict[key]])
{
if (mapping[key])
{
SEL selector = NSSelectorFromString(mapping[key]);
if ([entity respondsToSelector:selector])
{
@try {
// try and set the value, might not work if dict[key] is unexpected type
[entity setValue:dict[key] forKey:mapping[key]];
}
@catch (NSException *exception) {
// deal with the exception
}
}
}
}
}
基本上這個代碼所做的是循環通過服務器傳遞的對象的'字典'。它檢查它們包含的數據,然後創建基於所述映射字典我已經安裝(在下面的例子)選擇:
@"id" : @"nID",
然後,它檢查該實體(NSManagedObject)響應所創建的選擇器(NID例如),然後嘗試應用數據來檢查它的有效性。就像上面提到的,這一切工作正常,但是,由於不匹配的類型,我在日誌中打印了很多煩人的錯誤。有沒有更好的方法來測試NSManagedObject是否可以處理傳遞給它的數據?
例如,nID包含一個數字,但如果服務器傳遞一個字符串,應用程序將崩潰。所以我用try/catch來包裝它,以阻止這種情況的發生。如果沒有嘗試/捕捉,有沒有辦法做到這一點,或者這是正確的做法?我不只是想壓制警告。
感謝您的任何幫助。
非常感謝您指點我正確的方向,將嘗試實施這種方法。 –
是的,完美的工作,謝謝。 –