2015-09-26 4 views
0

У меня есть объект, называемый media_item, который имеет кучу свойств, связанных с ним, но одним из свойств является набор стран, которые являются строками. То, что я хочу сделать, это получить набор (уникальный список) всех доступных счетчиков во всех элементах мультимедиа. Например, например, у меня есть 2 объекта. object1.countries[us,gbr,spa] и object2.countries[us,chi,fre]. То, что я хочу сделать, это создать другой набор этих объектов и отобразить их пользователю. Итак, результат должен быть newArray[us,gbr,spa,chi,fre] Я пробовал использовать NSPredicate, но я не могу понять, что он форматирует строку heres, как я думал, будет работать.как фильтровать этот массив с помощью предиката?

NSMutableArray *all_media_items = [[[[NSMutableArray arrayWithArray:_presentations]arrayByAddingObjectsFromArray:_videos]arrayByAddingObjectsFromArray:_brochures]mutableCopy]; 
NSSet *all_available_countries_set = [[NSSet setWithArray:all_media_items]filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"self.countries"]]; 

В этом случае self будет считаться медиа-объектом правильно? а затем точечный аксессуар говорит о просмотре всех индексов массива и помещает их в новый атрибут, если они не дублируются. Это выглядит правильно, но я не могу понять это. Есть идеи?

ответ

0

я понял, как сделать это без использования NSPredicate как так

NSMutableArray *all_media_items = [[[_presentations arrayByAddingObjectsFromArray:_brochures]arrayByAddingObjectsFromArray:_videos]mutableCopy]; 
NSMutableSet *all_countries = [NSMutableSet set]; 
[all_media_items enumerateObjectsUsingBlock:^(UFPMediaObject *media_object, NSUInteger idx, BOOL *stop) { 
    [media_object.countries enumerateObjectsUsingBlock:^(NSString* country, BOOL *stop) { 
     [all_countries addObject:country]; 
    }]; 
}]; 

Какой штраф и денди, но я хочу знать, как сделать это с NSPredicate