Подтвердить что ты не робот

Основные данные - NSPredicate для фильтрации пустой строки, работающей некорректно

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

Чтобы прояснить проблему, я создал образец проекта и добавил несколько выборочных данных в базу данных. Скажем, это "Образец", "+ образец", "Образец +".

Здесь фрагмент кода, который я использовал для фильтрации пустой строки. "text" - это имя свойства string, а moc - экземпляр NSManagedObjectContext.

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"BasicEntity"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"text.length > 0"];
[request setPredicate:predicate];

NSArray *samples = [moc executeFetchRequest:request error:&error];

Массив результатов содержит только 2 объекта, которые являются "Sample" и "Sample +".

Я даже пробовал один и тот же предикат (конечно, используя self.length вместо text.length) на простой массив, содержащий выше пример строк, и я правильно все 3.

Интересно, кто-то испытал такую ​​же проблему. Или я что-то пропустил в использовании Core Data? Протестировано на симуляторе iOS 7.0.3 и 7.0.6 iPad Air.


UPDATE: как было сказано в другом потоке, я решил эту проблему, используя регулярное выражение.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"text MATCHES %@", @".{1,}"];

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

4b9b3361

Ответ 1

Это то, что вы хотите

[NSPredicate predicateWithFormat:@"%K != %@", @"text", @""]

Если вам также нужно проверить nil/NULL, выполните следующие действия:

[NSPredicate predicateWithFormat:@"%K != NULL && %K != %@", @"text", @"text", @""]

Ответ 2

Попробуйте следующее:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=nil AND name!="""];