2012-05-23 61 views
0

我試圖刪除從一個NSMutableArray對象使用包含空格的任何元素如下:爲什麼removeObject在刪除空字符串的元素時會拋出異常?

我得到的例外「 - [__ NSArrayI的removeObject:]:無法識別的選擇發送到實例」。我究竟做錯了什麼?

編輯: OK,所以我嘗試以下

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF NOT CONTAINS ' '"]; 
NSArray *nonEmptyElements = [searchCriteria filteredArrayUsingPredicate: predicate]; 

並且得到錯誤無法解析格式字符串「SELF NOT CONTAINS'「「」

如何指定一個空字符串CONTAINS之後?

+0

這不是如何刪除包含「空格」字符的對象。 – WrightsCS

+0

那麼我該怎麼做呢? – ChrisP

回答

4

你有一個普通的NSArray而不是一個NSMutableArray。可能在某些時候,你認爲你所擁有的NSMutableArray被複制或序列化,導致一個不可變數組。順便提一下,正如Lefteris所說,這將過濾掉只包含一個空格的字符串。要濾除任何空間中任何空間的字符串,您需要按照他所說的方式進行操作。如果你想過濾掉單個空格字符串,只需要編寫@" "而不是[NSString stringWithString:@" "] - 這是相當簡單的。

+0

我確實想刪除只包含空白區域的元素。該數組是使用(NSMutableArray *)[searchText componentsSeparatedByString:@「」]創建的,它應該將結果轉換爲NSMutableArray正確嗎? – ChrisP

+2

@ChrisP:不,你不能投這樣的對象。對象總是由指針表示,並且將指針從一種類型轉換爲另一種類型不會改變它指向的實際對象。要將你的數組轉換爲NSMutableArray,你需要從'[searchText mutableCopy]'中獲得一個(然後當你不使用ARC時,不要忘記釋放可變數組)。 – Chuck

+0

感謝Chuck的澄清。原來這是問題的根源。我來自C#,那裏的演員實際上會將searchText轉換爲可變的。 – ChrisP

2

您應該使用NSPredicate過濾掉任何空間項目。 看到這裏如何做到這一點:https://stackoverflow.com/a/1057202/312312

您應該使用自包含謂詞雖然,而不是自我beginswith的例子uses.l

+0

雖然事實證明我不需要使用NSPredicate,但瞭解它的功能是很有幫助的。感謝Lefteris。 – ChrisP

相關問題