2010-10-27 53 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-是什麼(找)呢?我在做這些實現時看到過類似的其他詞語,那麼究竟是幹什麼的?這是一個關鍵字,還是隻爲我知道?

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? – 2010-10-27 05:22:13

+0

最後一句話只是說明了我所做的所有試驗和錯誤,試圖讓它發揮作用。 – elcool 2010-10-27 06:03:29

回答

0
  1. 此方法返回包含值對象的所有keyPaths。

  2. 爲了使這一類工作,你應該做到以下幾點: 創建的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:應該工作即可。

+0

第一個問題是(Foo)的含義。你的回答給了我一個警告,因爲它返回一個NSMutableArray,它需要一個NSArray。 – elcool 2010-10-27 06:07:57

+0

@elcool你絕對應該閱讀關於objective-c中的類別:http://macdevelopertips.com/objective-c/objective-c-categories.html。 Re NSMutableArray問題 - 請發佈警告。我在這裏沒有看到任何問題,但是如果你真的想返回非可變對象,你可以用「return [NSArray arrayWithArray:matches];」替換return語句。 – kovpas 2010-10-27 06:12:10

+0

謝謝,這解決了這個問題。我創建了.h和.m文件,並使用NSMutableArray和NSArray進行了遊戲。是的,我會閱讀有關類別,謝謝 – elcool 2010-10-27 18:16:33