2012-08-30 39 views
0

我有一個NSString存儲在覈心數據。它是可選的,我相信在sqlite數據庫意味着它可以爲空。我有一個方便的方法我稱之爲「isEmptyOrWhitespace」如下圖所示:無NSString方法

- (BOOL)isEmptyOrWhiteSpace { 
    return self == nil || 
    self.length == 0 || 
    [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0; 
} 

當我從核心數據字符串是零,它似乎並沒有調用這個方法,那就是斷點從不打。這是特別煩人,因爲一個代碼塊這樣的:

if(![string isEmptyOrWhitespace]) { 
    [string doSomething]; 
} 

doSomething如果字符串是零,顯然不是我的意圖正在運行。有沒有辦法解決這個問題,而不檢查我的字符串是否爲零之前調用一個方法?或者這是Objective-C的一個「特性」,即方法不能在零對象上運行?

+1

'self == nil'是無意義的。如果條件成立,代碼將永遠不會運行。 –

+0

@ W'rkncacnter我明白了。我會留下來,所以沒有人會犯同樣的錯誤。 –

回答

3

如果stringnil,那麼[string isEmptyOrWhitespace]什麼也不做,因爲發送消息到nil是無操作的。

編輯:正如@Jim指出,這個答案是不正確的。 [nil isEmptyOrWhitespace]返回0,這就是if()塊如果string = nil未被執行的真正原因。

+4

更確切地說,它不會「什麼都不做」,它返回「0」/「nil」,它被解釋爲「NO」。 – Jim

+0

我會在11分鐘內接受:)。謝謝。 –

+1

如果你通過反轉你的便捷方法的邏輯來解決這個問題,那麼你還需要檢查是否等於'[NSNull null]'。 – Jim

-1

Martin的回答很準確。你需要的是在覈心數據實體類上使用一種方便的方法來驗證該字符串的長度。如果字符串爲零,則長度將爲零,並且您可以知道它是空還是零。