2010-10-13 22 views
0

comparé il semble que mon problème n'est pas un problème pour tous les eles parce que je n'ai rien trouvé à son sujet. donc ce n'est peut-être pas un gros problème mais pour moi ça l'est.Recherche d'un NSMutableArray avec une chaîne et retour de l'ensemble de la matrice

J'ai ce MutableArray rempli de beaucoup de données d'un fichier XML. -Nom -Age -Address La recherche porte sur le nom, et le filtrage fonctionne assez bien jusqu'à présent. Ce que je fais est de rechercher le tableau avec rangeOfString mais qui retourne seulement la chaîne (-Name) et non le tableau avec son contenu comme le tableau d'origine parce que c'est seulement une chaîne maintenant.

quelqu'un peut me dire comment puis-je accomplir cette

C'est ma recherche jusqu'à présent

if ([[self searcher] length] != 0) 
{ 
    for (NSString *currentString in [self listOfContent]) 
    { 
     if ([currentString rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound) 
     { 
      [[self filteredListOfContent] addObject:currentString]; 
     } 

secouriste est la chaîne dans la barre de recherche. ou existe-t-il un autre moyen plus efficace ou est-il possible de rechercher n'importe quelle valeur dans le MutipleArry?!?

Toutes les idées et suggestions sont les bienvenus

J'ai changé le code à ce

NSString *searchText = searchBar.text; 
NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

for (NSDictionary *dictionary in listOfContent) 
{ 
    //NSArray *array = [dictionary objectForKey:LNAME]; 
    [searchArray addObject:dictionary]; 

} 

for (NSString *sTemp in searchArray) 
{ 
    NSLog(@"array %@", searchArray); 

    if ([sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch].location != NSNotFound) 

     [filteredListOfContent addObject:searchArray]; 
} 

le journal montre que le filtre semble fonctionner mais je reçois cette erreur

2010-10-22 16:18:09.708 TableView[6114:207] -[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x5c3f540 
2010-10-22 16:18:09.712 TableView[6114:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x5c3f540' 

peut Quelqu'un me dit quel est le problème

Et toujours aucune solution trouvée I modifié le code à ceci:

NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

     for (NSDictionary *dictionary in contentsList) 
     { 
      NSArray *array = [dictionary allValues]; 
      [searchArray addObjectsFromArray:array]; 
     } 
     for (NSDictionary *dict in searchArray) 
     { 
      if ([[dict valueForKey:@"NAME"] rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound) { 
       NSLog(@"Filter %@", dict); 
       [searchResults addObject:dict]; 
      } 

maintenant j'ai le tableau avec les valeurs, mais toujours obtenir l'erreur

2010-10-28 16:23:46.124 TableViews[8373:207] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x5a5eb00' 

quelqu'un peut me expliquer waht taht cette erreur signifie ou waht je fait de mal?!?

+0

Comment analysez-vous le XML dans votre tableau de chaînes? – JeremyP

+0

via NSXMLParser – zim

+0

Sans plus d'informations sur la structure du tableau, le XML utilisé pour construire le tableau, et comment vous transformez ce XML en tableau, il sera très difficile de vous donner des conseils utiles. –

Répondre

0
2010-10-28 16:23:46.124 TableViews[8373:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x5a5eb00' 

Cette erreur signifie que vous avez traité un NSString comme si elle était un NSDictionary en envoyant le message -objectForKey: à lui.

0

Hey Jeremy mon xml-parser ressemble à ceci

- (void)parseXMLFileAtURL:(NSString *)URL 
{ 
listOfContent = [[NSMutableArray alloc] init]; 

    NSURL *xmlURL = [NSURL URLWithString:URL]; 

    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [rssParser setDelegate:self]; 
    [rssParser setShouldProcessNamespaces:NO]; 
    [rssParser setShouldReportNamespacePrefixes:NO]; 
    [rssParser setShouldResolveExternalEntities:NO]; 
    [rssParser parse]; 

} 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { 
NSString * errorString = [NSString stringWithFormat:@"Unable to download feed from web site (Error code %i)", [parseError code]]; 

UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[errorAlert show]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    

currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"ENTITY"]) { 
    item = [[NSMutableDictionary alloc] init]; 
    currentDATE = [[NSMutableString alloc] init]; 
    currentLASTNAME = [[NSMutableString alloc] init]; 
    currentFIRSTNAME = [[NSMutableString alloc] init]; 
} 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{  
if ([elementName isEqualToString:@"ENTITY"]) { 
    [item setObject:currentLASTNAME forKey:@"LASTNAME"]; 
    [item setObject:currentFIRSTNAME forKey:@"FIRSTNAME"]; 
    [item setObject:currentDATE forKey:@"DATE"]; 

    [listOfContent addObject:[item copy]]; 

} 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
if ([currentElement isEqualToString:@"LASTNAME"]) { 
    [currentLASTNAME appendString:string]; 
} else if ([currentElement isEqualToString:@"FIRSTNAME"]) { 
    [currentFIRSTNAME appendString:string]; 
} else if ([currentElement isEqualToString:@"DATE"]) { 
    [currentDATE appendString:string]; 
} 

} 

et le fichier xml est standart comme celui-ci

<All> 
    <ENTITY> 
     <Lastname>A</Lastname> 
     <Firstname>B</Firstname> 
     <Date>25</Date> 
    </ENTITY> 
    ... 
</All> 

juste Mation ce fichier XML parser est correctement affiché dans le tableau jusqu'à Je commence à taper dans le champ de recherche.

quand je remplacerai

[dict objectForKey:LNAME] //LNAME is defined for Lastname 

avec

searchText 

le filtre fonctionne très bien mais je reçois l'erreur que j'essaie d'envoyer plus de une chaîne à la nouvelle vue wenn je sélectionne une rangée .

Je suis reconnaissant pour toute aide