关于以下代码的几个问题:
@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,但我一直收到警告。那么,我该如何解决这个问题?
答案 0 :(得分:0)
此方法返回包含值对象的所有keyPath。
要使此类别有效,您应该执行以下操作: 创建NSArray(查找).h和NSArray(查找).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(查找).h导入.m文件,您要在其中使用您的类别:
#import "NSArray(Find).h"
findAllWhereKeyPath:equals:
应该适用。