2012-05-23 3 views
0

Я пытаюсь удалить все элементы из объекта NSMutableArray, которые содержат пробел, используя следующие:Почему removeObject генерирует исключение при удалении элементов, которые являются пустыми?

я получаю исключение «- [__ NSArrayI removeObject]: непризнанные селектор направил к экземпляру». Что я делаю не так?

EDIT: ОК, так что я попытался следующие

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

и получить ошибку Невозможно разобрать строку формата «SELF НЕ СОДЕРЖИТ '«"»

Как указать пустую строку после СОДЕРЖАНИЯ?

+0

Это не то, как вы удаляете объект, содержащий символ «пробел». – WrightsCS

+0

Итак, как бы я это сделал? – ChrisP

ответ

4

У вас есть простой NSArray, а не NSMutableArray. Вероятно, в какой-то момент NSMutableArray, который, как вы считали, был скопирован или сериализован, приводит к неизменяемому массиву.

Кстати, как говорит Лефтерис, это отфильтровывает строки, состоящие только из одного пространства. Чтобы отфильтровать любую строку, в которой есть место в любом месте, вы захотите сделать это так, как он говорит. И если вы хотите отфильтровать однопространственные строки, проще просто написать @" " вместо [NSString stringWithString:@" "] - это точно эквивалентно.

+0

Я хочу удалить элементы, состоящие только из пустого пространства. Массив создается с помощью (NSMutableArray *) [searchText componentsSeparatedByString: @ ""], который должен привести результат к правилу NSMutableArray? – ChrisP

+2

@ChrisP: Нет, вы не можете бросать подобные объекты. Объекты всегда представлены указателями, а приведение указателя от одного типа к другому не изменяет фактический объект, на который он указывает. Чтобы преобразовать массив в NSMutableArray, вам нужно получить его из '[searchText mutableCopy]' (а затем не забудьте выпустить измененный массив, когда вы закончите, если вы не используете ARC). – Chuck

+0

Спасибо Чак за это разъяснение. Это оказалось причиной проблемы. Я прихожу из C#, где этот кастинг фактически преобразил бы searchText, чтобы быть изменчивым. – ChrisP

2

Вы должны использовать NSPredicate для фильтрации любых предметов с пробелом. Смотрите здесь, как это сделать: https://stackoverflow.com/a/1057202/312312

Вы должны использовать само содержит предикат, хотя, вместо того, чтобы я beginswith этого примера uses.l

+0

Хотя оказывается, что мне не нужно использовать NSPredicate, полезно знать о его функциональности. Спасибо, Лефтерис. – ChrisP

Смежные вопросы