Основные данные – 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 simulator и 7.0.6 iPad Air.


ОБНОВЛЕНИЕ: Как ответил в другом потоке, я решил эту проблему, используя регулярное выражение.

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

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

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

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

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

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

Попробуй это:

 NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=nil AND name!="""]; 
  • CoreData: несколько разработчиков, версии и поддерживающие
  • Пример основных данных, Недопустимое обновление: недопустимое количество строк в разделе 0
  • iOS: автоматическая синхронизация в фоновом режиме с основными данными
  • - : непризнанный селектор, отправленный в экземпляр 0x7490da0 '
  • Почему coredata возвращает нулевой массив, пока я вставляю значения в таблицу
  • Взаимодействие данных и выборки во многих отношениях
  • NSFetchedResults Возврат старых данных после сохранения постоянной MOC
  • Решение для мониторинга и поддержания размера приложения на диске
  • Облачные хранилища с iOS
  • Основные данные для предварительно загруженной информации
  • Исправить поток для выполнения удаления, вставки и извлечения из / в базовые данные
  • Interesting Posts

    Создание двух целей в XCode 4

    UIActionSheet изменяет значения UIScrollView

    Как получить пользовательский оверлей для камеры UIImagePicker в полноэкранном режиме в iOS 7?

    Как импортировать векторные изображения в объекты изображения в xcode 8

    Как проверить настройку разных локалей для SKProductsRequest

    Как уменьшить обрезание при воспроизведении аудио с помощью трансляции?

    Отключение звукового графика при переадресации аудио сеанса

    UIImage imageNamed: не находит изображение в синей справочной папке Xcode

    Значок приложения не отображается на iPad

    Панель вкладок без TabBarController – добавьте элемент View Controller для панели вкладок в раскадровке

    Проблемы с SSL-подключением и AFNetworking 2.5.0 (ошибка NSURLErrorDomain -1012.)

    SDK iOS: как заставить просмотр переключиться при переключении камер

    Как получить название группы конкретного контакта

    NSNumber потеряет десятичные цифры

    Ошибка при создании заряда с помощью API Parse.com Stripe

    Давайте будем гением компьютера.