2016-08-11 2 views
-1
NSArray *sectionNames = [NSArray arrayWithObjects: @"aa", @"bb", nil]; 

RLMResults<Department *> *filteredDepartments = [Department objectsWhere: 
              [NSString stringWithFormat:@"SUBQUERY(sections, $section, $section.name IN %@)[email protected] > 0",[NSArray arrayWithArray:sectionNames]]]; 

Это модель департамента.Подзапрос IN сборник выписок

@interface Department : RLMObject 

@property NSString *name; 

@property (nonatomic, strong) RLMArray<Section> *sections; 

@end 

У меня есть эта ошибка. sectionNames - это массив имен объекта сечения.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "SUBQUERY(sections, $section, $section.name IN (
))[email protected] > 0"' 

ответ

0

Вместо использования NSString «сек интерполяции строки через +[NSString stringWithFormat:], вы должны использовать NSPredicate» S заместительную аргумент поддержки:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(sections, $section, $section.name IN %@)[email protected] > 0", sectionNames]; 
RLMResults<Department *> *filteredDepartments = [Department objectsWithPredicate:predicate]; 

Поскольку это такая общая картина, Realm предоставляет обертку, которая заботится построения NSPredicate для вас, в виде +[RLMObject objectsWhere:]:

RLMResults<Department *> *filteredDepartments = [Department objectsWhere:@"SUBQUERY(sections, $section, $section.name IN %@)[email protected] > 0", sectionNames]; 

NSString. Интерполяция вставляет строковое представление переменной в строку. Строковое представление вашего массива - (aa, bb), которое равно not valid in an NSPredicate format string. Использование замены NSPredicate заменяет объект в предикат, не беспокоясь о том, соответствует ли представление строки тому, что ожидает NSPredicate.

+0

он работает и благодарит за ваш ответ. Но я думаю, что что-то не так. В моем списке массивов разделов есть 3 суб-отдела. 2 подраздела принадлежат «Департаменту», а одно подразделение принадлежит «Департаменту B». но после того, как в массиве фильтрованных отложений он возвращает только «A Department». как я могу отслеживать эту ошибку? – Aye

+0

Трудно сказать без дополнительной информации. Я бы предложил опубликовать новый вопрос с более подробной информацией, чтобы люди могли помочь вам в этом. – bdash

+0

http://stackoverflow.com/questions/38890556/subquery-and-in-statement-in-realm Я снова спросил. пожалуйста, помогите мне проверить. что не так. большое спасибо. – Aye

Смежные вопросы