2011-12-07 39 views
0

我有這段代碼讓我發瘋。其顯示4個屬性,其中2是NSString的和2的cellForRowAtIndexPath是的NSNumber:在if-else中被識別爲NSString的NSNumber

//THIS LOGS THE OBJECT BEFORE PROCESSING 
NSLog(@"NO DATE EDITING"); 
NSLog(@"eFK: %@, eFN: %@",editedFieldKey, editedFieldName); 
NSLog(@"editedObject vWA is:%@", editedObject); 
NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No"); 
//THIS TESTS TO SEE IF ITS A NSSTRING 
if ([editedFieldName isKindOfClass:[NSSTRING class]]) { 
    NSLog(@"its nsstring"); 
    textField.text = [editedObject valueForKey:editedFieldKey]; 
    NSLog(@"its NOT nsstring"); 
    } 
} else { 
//ELSE ITS A NUMBER SO GET ITS STRING VALUE BEFORE ASSIGNING 
    textField.text = [[editedObject valueForKey:editedFieldKey] stringValue]; 
    // And we set the switch to ON if YES, OFF if NO... 
    if ([editedObject valueForKey:editedFieldKey]) { 
     NSLog(@"itemreceived equal to 1"); 
     itemReceived.on = YES; 
    } else { 
     NSLog(@"itemreceived equal to 0"); 
     itemReceived.on = NO; 
} 
[textField becomeFirstResponder]; 

我有4個字段,2個NSString的和2個NSNumbers。當我點擊字符串字段時,我得到它的一個字符串,它工作正常。但是,如果我點擊次數的領域之一,我得到了一個字符串和NSCFNumber isNaturallyRTL ......無法識別選擇在發送到實例:

textField.text = [editedObject valueForKey:editedFieldKey]; 

爲什麼我的測試失敗?爲什麼即使當我選擇一個不是字符串的數字時,應用程序也會像第一個字符串一樣通過第一個條件?

+0

您需要編輯您的問題以包含您的程序打印的完整的確切錯誤消息,而不是僅僅告訴我們其中的一部分。 –

回答

0

嗯。這只是一個猜測......但首先:

NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No"); 

在這裏,你看看editedFieldKey

if ([editedFieldName isKindOfClass:[NSSTRING class]]) { 

這裏您正在查看editedFieldName。在任何情況下,我看起來好像你在測試實際值。

+0

這正是事實證明。發佈後幾秒鐘,我意識到這一點,現在它的工作完美。謝謝 – marciokoko

3

如果我不得不猜測,我會說你正在測試錯誤變量的類型。相反的:

... 
if ([editedFieldName isKindOfClass:[NSSTRING class]]) { 
... 

正是基於您的變量名稱(如你的問題是缺乏細節位),看來你不是想:

... 
if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSSTRING class]]) { 
... 

我離開你的錯別字的片段 - 這不能編譯。你不是在用[NSString class]而是用[NSSTRING class]嗎?請注意大寫差異。