#objective-c #core-data
#objective-c #ядро-данные
Вопрос:
У меня есть таблица с целочисленным полем. Я хочу выбрать все строки, где это поле содержит любое из нескольких разных значений.
Я использую это:
[NSPredicate predicateWithFormat:@"myIntValue IN {1,2,3,4}"]
но это возвращает только строки, где myIntValue
равно 1.
Что я делаю не так?
Ответ №1:
Это работает:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSArray *idList = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:4],
nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idealForId IN $IDLIST"];
request.predicate = [predicate predicateWithSubstitutionVariables:
[NSDictionary dictionaryWithObject:idList forKey:@"IDLIST"]];
Комментарии:
1. Core Data хранит только объекты, поэтому вам всегда приходится преобразовывать скаляры в объекты при создании предикатов.
Ответ №2:
Вы пробовали это?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"myIntValue IN %@",
[NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil]];
Здесь может быть полезна документация.
Комментарии:
1. Я считаю, что это может сработать для строк, но, похоже, это не работает для целых чисел. Я попробовал [NSNumber numberWithInt: 1] вместо @»1″, но это тоже не сработало.
2. @»1″ — это NSString, @1 — это NSNumber
Ответ №3:
Я не знаю, изменилось ли это с момента первоначальной публикации вопроса, но я получаю точно такой же предикат из всех трех из них.
[NSPredicate predicateWithFormat:@"myIntValue IN {1, 2, 3, 4}"];
[NSPredicate predicateWithFormat:@"myIntValue IN {%d, %d, %d, %d}", 1, 2, 3, 4];
[NSPredicate predicateWithFormat:@"myIntValue IN %@", @[@1, @2, @3, @4]];
Поэтому нет необходимости оборачивать все в объекты.