2010-10-27 13 views
0

Quelques questions concernant le code suivant:Qu'est-ce que @implementation NSArray (Find) et l'avertissement qu'il donne?

@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- Qu'est-ce que (FIND) faire? J'ai vu d'autres mots comme ça quand on fait ces implémentations, alors qu'est-ce que ça fait exactement? Est-ce un mot-clé, ou juste pour moi de savoir?

2- Je suis le code d'ici: http://probablyinteractive.com/2009/2/13/keypaths.html Mais quand je place sur mon projet et appelle

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

renvoie l'avertissement « NSArray » ne peut pas répondre à « -findAllWhereKeyPath: est égal à: ' et si je l'exécute, il se bloque. J'ai placé le code au début du fichier .m, au format .h et l'ai modifié en NSMutableArray, mais je continue à recevoir l'avertissement. Alors, comment dois-je résoudre cela?

+0

"Rechercher" est une catégorie que vous avez ajoutée à NSArray. Alors, où et dans quels fichiers .m et .h avez-vous ajouté ceci? Et que voulez-vous dire que vous l'avez changé en NSMutableArray? –

+0

Cette dernière phrase indiquait simplement tout le procès et les erreurs que j'ai faites pour essayer de le faire fonctionner. – elcool

Répondre

0
  1. Cette méthode renvoie tous les chemins de clé, qui contiennent un objet valeur.

  2. Pour faire ce travail de la catégorie, vous devez effectuer les opérations suivantes: Créer NSArray (FIND) .h et NSArray (FIND) fichiers .m:

NSArray (FIND) .h:

#import <Foundation/Foundation.h> 

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

NSArray (Recherche) .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; 
} 

Les deux fichiers doivent être ajoutés à votre projet. Importation NSArray (FIND) .H au fichier .m où vous souhaitez utiliser votre catégorie:

#import "NSArray(Find).h" 

findAllWhereKeyPath:equals: devrait fonctionner alors.

+0

La première question portait sur la signification de (Foo). Votre réponse m'a donné un avertissement car il retourne un NSMutableArray et il veut un NSArray. – elcool

+0

@elcool vous devriez certainement lire sur les catégories dans l'objectif-c: http://macdevelopertips.com/objective-c/objective-c-categories.html. Re problème NSMutableArray - S'il vous plaît poster un avertissement. Je ne vois aucun problème ici, mais si vous voulez vraiment retourner un objet non mutable vous pouvez remplacer l'instruction return par "return [NSArray arrayWithArray: matches];" – kovpas

+0

Merci, cela a résolu le problème. J'ai créé les fichiers .h et .m et joué avec NSMutableArray et NSArray. Et oui, je vais lire sur les catégories, merci – elcool