2011-03-10 65 views
0

我想,以確定是否一個NSString的值保持高於NULL /零以外的值,而我沒有做正確:確定是否NSString的包含一個值以外的NULL/NIL

NSString *strWord; 
strWord = [NSString stringWithFormat: @"%@", [someArray objectAtIndex:x]]; 

// THIS IS WRONG: 

if (strWord != nil) { 
    // do something 
} else { 
    // don't do something 
} 

任何幫助表示讚賞! LQ

+0

爲什麼這是錯的?對於!= nil的檢查看起來對我來說完全合理。您可能需要在聲明它時設置strWord = nil。 – 2011-03-10 02:20:17

+0

@Stephen:聲明時設置strWord = nil根本不會做任何事情,因爲該值將立即被'[NSString stringWithFormat:...]'的結果覆蓋' – 2011-03-10 02:23:49

+0

您正在通過調用' + stringWithFormat:'。它永遠不會返回零。你打算測試什麼? – 2011-03-10 02:27:28

回答

2

我懷疑你的問題是strWord實際上包含@"(null)",這是如果你在+stringWithFormat:傳遞nil%@格式令牌會發生什麼。相反,您要檢查[someArray objectAtIndex:x]是否爲nil。幸運的是,有一條捷徑。只要用這個代替:

NSString *strWord = [[someArray objectAtIndex:x] description]; 

這等同於[NSString stringWithFormat:@"%@", [someArray objectAtIndex:x]]除非[someArray objectAtIndex:x]nil然後strWord將包含nil,而不是@"(null)"。原因是%@格式令牌簡單地在傳遞的參數上調用-description,除了特殊情況nil並將其轉換爲@"(null)"。然而,直接調用-description將直接跳過nil檢查,如果在nil上調用,則只需返回nil

+0

是的,它返回@「(null)」,但我無法找出一種方法來檢查@「(null)」值,因爲這不起作用:if(strWord!= null)...謝謝許多! – 2011-03-10 02:31:57

+0

對不起,使用:NSString * strWord = [[someArray objectAtIndex:x] description];仍然包含(null)並正在通過:if(strWord!= nil)檢查。 – 2011-03-10 14:52:42

+0

這意味着''someArray objectAtIndex:x]'本身正在返回'@「(null)」'。要麼是這個,要麼'strWord'實際上有'@「」',這意味着你有'[NSNull null]'而不是。你應該仔細看看'[someArray objectAtIndex:x]'正在返回。 – 2011-03-10 22:39:17

1

@Kevin Ballard的技術很有用,但請記住[someArray objectAtIndex:x]不能返回零,除非someArray爲零(您不能在NSArray中將無)。最接近它可以返回+[NSNull null],這是不一樣的事情。所以如果你在這裏得到「(null)」,那表明你的數組實際上是零。我可能會在你的方法中早些檢查,而不是在字符串中尋找@「(null)」的特殊情況。

相關問題