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

Проверить объект coredata на nil

Я хочу узнать объекты в основных данных, мой код:

Типы:

signedDate (Дата)

alarmDate (Дата)

starTime (NSDate)

endTime (NSDate)

NSString *str = @"(signedDate >= %@) AND (signedDate < %@) AND (alarmDate == nil)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:str, starTime, endTime];
[request setPredicate:predicate];
NSArray *results=[context executeFetchRequest:request error:nil];
Предикат

неверен? Как судить о объекте coredata является ноль? Каким должен быть предикат?

4b9b3361

Ответ 1

Я не думаю, что синтаксис предиката вызывает == nil. Используйте только один =

NSString *str = @"(signedDate >= %@) AND (signedDate < %@) AND (alarmDate = nil)";

Вы правильно указываете код выше. Если должно быть ДА, так как оно равно нулю.

BOOL ok;
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];
ok = [predicate evaluateWithObject:[NSDictionary dictionary]];

ok = [predicate evaluateWithObject:
[NSDictionary dictionaryWithObject:[NSNull null] forKey:@"firstName"]]; 

Ответ 2

Из apple docs

Тестирование для Null

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

predicate = [NSPredicate predicateWithFormat:@"(firstName == %@) || (firstName = nil)", firstName];
filteredArray = [array filteredArrayUsingPredicate:predicate];
NSLog(@"filteredArray: %@", filteredArray);

// Output:
// filteredArray: ( { lastName = Turner; }, { birthday = 1972-03-23 20:45:32 -0800; firstName = Ben; lastName = Ballard; }

Подразумевается, что тест для null, который соответствует нулевому значению, возвращает true. В следующем фрагменте кода ok устанавливается как YES для обеих оценок предикатов.

BOOL ok;
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"];
ok = [predicate evaluateWithObject:[NSDictionary dictionary]];

ok = [predicate evaluateWithObject:
    [NSDictionary dictionaryWithObject:[NSNull null] forKey:@"firstName"]];