Что такое @implementation NSArray (Find) и предупреждение, которое он выдает? - PullRequest
0 голосов
/ 27 октября 2010

Пара вопросов относительно следующего кода:

@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- Что делает (Найти)?Я видел другие слова, подобные этим, когда выполнял эти реализации, так что именно он делает?Это ключевое слово, или только для меня, чтобы знать?

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

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

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

1 Ответ

0 голосов
/ 27 октября 2010
  1. Этот метод возвращает все keyPaths, которые содержат значение объекта.

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

NSArray (Найти) .h:

#import <Foundation/Foundation.h>

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

NSArray (Найти) .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 (Find) .h в файл .m, где вы хотите использовать свою категорию:

#import "NSArray(Find).h"

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

...