究竟是什么@implementation NSArray(查找)和它给出的警告?

时间:2010-10-27 05:04:48

标签: iphone nsarray implementation

关于以下代码的几个问题:

@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 :(得分:0)

  1. 此方法返回包含值对象的所有keyPath。

  2. 要使此类别有效,您应该执行以下操作: 创建NSArray(查找).h和NSArray(查找).m文件:

  3. 的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(查找).h导入.m文件,您要在其中使用您的类别:

    #import "NSArray(Find).h"
    

    findAllWhereKeyPath:equals:应该适用。