为什么removeObject在删除空字符串元素时会抛出异常?

时间:2012-05-23 00:22:14

标签: objective-c nsmutablearray

我试图使用以下内容从包含SPACE的NSMutableArray对象中删除任何元素:

[searchCriteria removeObject:[NSString stringWithString:@" "]];

我得到异常“ - [__ NSArrayI removeObject:]:无法识别的选择器发送到实例”。我做错了什么?

编辑: 好的,所以我尝试了以下

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

并获取错误无法解析格式字符串“SELF NOT CONTAINS''”'

如何在CONTAINS之后指定一个空字符串?

2 个答案:

答案 0 :(得分:4)

你有一个普通的NSArray而不是NSMutableArray。可能在某些时候你认为你的NSMutableArray被复制或序列化,导致一个不可变的数组。

顺便提一下,正如Lefteris所说,这将过滤掉仅由一个空格组成的字符串。要过滤掉任何位置有空格的字符串,您将按照他说的方式进行操作。如果您确实希望过滤掉单空格字符串,只需编写@" "而不是[NSString stringWithString:@" "]就可以了 - 它完全等效。

答案 1 :(得分:2)

您应该使用NSPredicate过滤掉任何有空格的项目。 请参见此处:https://stackoverflow.com/a/1057202/312312

你应该使用self contains谓词,而不是self以示例uses.l

开头