2010-10-27 2 views
0

Несколько вопросов по следующему коду:Что такое @implementation NSArray (Find) и предупреждение, которое оно дает?

@implementation NSArray (Find) 
- (NSArray *)findAllWhereKeyPath:(NSString *)keyPath equals:(id)value { 
    NSMutableArray *matches = [NSMutableArray array]; 
    for (id object in self) { 
    id objectValue = [object valueForKeyPath:keyPath]; 
    if ([objectValue isEqual:value] || objectValue == value) [matches addObject:object];   
    } 
    return matches; 
} 

1- Что (Find) делать? Я видел другие слова, подобные этому при выполнении этих реализаций, и что именно он делает? Это ключевое слово или просто для меня?

2- я получил код здесь: http://probablyinteractive.com/2009/2/13/keypaths.html Но когда я устанавливаю его на мой проект и назовите его

NSArray *filterResults = [allResults findAllWhereKeyPath:@"firstname" equals:firstname]; 

возвращает предупреждение «NSArray» может не реагировать на «-findAllWhereKeyPath: равна: ', и если я запустил его, он сработает. Я поместил код в начале .m, в .h и изменил его на NSMutableArray, но я продолжаю получать предупреждение. Итак, как мне это решить?

+0

«Найти» - это категория, которую вы добавили в NSArray. Итак, где и в каких файлах .m и .h вы добавили это? И что вы имеете в виду, вы изменили его на NSMutableArray? –

+0

В этом последнем предложении говорилось только о всех проб и ошибок, которые я сделал, чтобы попытаться заставить его работать. – elcool

ответ

0
  1. Этот метод возвращает все keyPaths, который содержит объект value.

  2. Чтобы сделать эту категорию работу, которую вы должны сделать следующее: Создать NSArray (Найти) .h и NSArray (Найти) .m файлы:

NSArray (Найти) .h:

#import <Foundation/Foundation.h> 

@interface NSArray(Find) 
- (NSArray *)findAllWhereKeyPath:(NSString *)keyPath equals:(id)value; 
@end 

NSArray (Find) .m:

@implementation NSArray (Find) 
- (NSArray *)findAllWhereKeyPath:(NSString *)keyPath equals:(id)value { 
    NSMutableArray *matches = [NSMutableArray array]; 
    for (id object in self) { 
    id objectValue = [object valueForKeyPath:keyPath]; 
    if ([objectValue isEqual:value] || objectValue == value) [matches addObject:object];   
    } 
    return matches; 
} 

Оба файла должны быть добавлены к вашему проекту. Импорт NSArray (Найти) .h к файлу .m, где вы хотите использовать категорию:

#import "NSArray(Find).h" 

findAllWhereKeyPath:equals: должен работать тогда.

+0

Первый вопрос был для значения (Foo). Ваш ответ дал мне предупреждение, так как он возвращает NSMutableArray и хочет NSArray. – elcool

+0

@elcool вы определенно должны прочитать о категориях в объективе-c: http://macdevelopertips.com/objective-c/objective-c-categories.html. Re NSMutableArray проблема - Пожалуйста, отправьте предупреждение. Я не вижу здесь никаких проблем, но если вы действительно хотите вернуть неперемещаемый объект, вы можете заменить оператор return «return [NSArray arrayWithArray: matches];» – kovpas

+0

Спасибо, это решило проблему. Я создал файлы .h и .m и играл с NSMutableArray и NSArray. И да, я буду читать о категориях, спасибо – elcool

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