Предикат простого массива iOS

В моем приложении используются основные данные. У меня есть источник данных (NSMutableArray), загруженный основными данными. Чтобы отфильтровать записи, я использую текстовое поле (JSTokenField), в котором есть делегат UITextField в файле.m.

Когда я фильтрую результаты поиска, я использую простой предикат:

-(void)textFieldChanged
{
 NSString *fieldText =_toField.textField.text;
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cLastName contains[cd] %@",fieldText];
 NSArray *testArr = [coreDataSource filteredArrayUsingPredicate:predicate]; //coreDataSource is my MutableArray with all core data records
 NSLog(@"%@",predicate);
 NSLog(@"Testarr %@",testArr);
}

NSLog возвращает пустой массив:

2013-11-05 20:53:36.765 MyApp[3045:60b] cLastName CONTAINS[cd] "​a"
2013-11-05 20:53:36.766 Myapp[3045:60b] Testarr (
)

Однако, когда я меняю (жесткий код) свою предикатную строку следующим образом: NSString * fieldText = @"a"; в моем коде я получаю действительные результаты.

2013-11-05 21:00:34.917 MyApp[3054:60b] cLastName CONTAINS[cd] "a"
2013-11-05 21:00:34.929 MyApp[3054:60b] Testarr (
 "<myuser: 0x1566fed0=""> (entity: MyUser; id: 0x156dbc30 <x-coredata: 33798ae4-9768-4a2f-a0e8-c094f32972ad="" myuser="" p5565=""> ; data: {\n activities = \"<relationship fault:="" 0x1551c540="" 'activities'="">\";\n etc...
</relationship></x-coredata:></myuser:>

Я действительно потерялся, так как почему он не работает с подклассовым текстовым полем...

btw, coreDataSource array - это массив настраиваемых объектов с различными свойствами (одним из них является cLastName)

1 ответ

Как вы сказали в комментарии, fieldText преобразованный в UTF-8, равен e2 80 8b 41.

UTF-8 e2 80 8b - Unicode U+200B (ZERO WIDTH SPACE).

Я не могу сказать вам, откуда этот специальный символ пространства, но если это происходит только в начале или в конце строки, вы можете избавиться от него с помощью

fieldText = [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

licensed under cc by-sa 3.0 with attribution.