2010-11-12 4 views
0

Je joue depuis un certain temps avec un outil de recherche pour ma vue de la table des applications, essayant maintenant de le faire fonctionner mais je continue d'avoir la même erreur dans ma console.TableView UISearchBar sur le contrôleur de barre d'onglets tombe en panne pendant la recherche

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' [NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance

Je crois que cette section suivante peut être le problème que je l'ai essayé passer quelques entrées NSLog dans l'instruction if et il semble passer au travers, mais le problème est quand je clique sur la barre de recherche et départ en tapant, la première lettre que je tape appelle l'erreur et annule mon application.

Voici où le problème est

Dans la vue apparaîtrez "Food" Array est initialisé comme ci-dessous:

NSString *myDBnew [email protected]"/Users/taxsmart/Documents/rw3app.sql"; 

database = [[Sqlite alloc] init]; 

[database open:myDBnew]; 

NSString *quer = [NSString stringWithFormat:@"Select category from foodcat"]; 

Food = [database executeQuery:quer]; 

//[database executeNonQuery:quer]; 

[database close]; 

Méthode de recherche délégué de la barre où l'erreur est rencontrée:

(void) searchTableView 

{ 

    NSString *searchText = searchBar.text; 

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

// [searchArray addObjectsFromArray:Food]; 

    for(NSDictionary *dictionary in Food) 
    { 
     NSString temp1 = [dictionary objectForKey:@"category"]; 
     [searchArray addObject:temp1]; 
    } 

    for (NSString *sTemp in searchArray) 

    { 

       NSLog(@"Value: %@",NSStringFromClass([sTemp class])); 

     NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

      if (titleResultsRange.length > 0) 

       [copyListOfItems addObject:sTemp]; 
    } 

     [searchArray release]; 

     searchArray = nil; 
} 

Que dois-je faire?

Aidez-nous s'il vous plaît.

S'il vous plaît Proposer

Merci

+0

Veuillez corriger le formatage de votre code, il est difficile à lire. – raidfive

+0

J'ai fait le formatage maintenant. Donc s'il vous plaît suggérer quelque chose –

Répondre

0

Il semble que le résultat de la requête de base de données (Food) est un dictionnaire contenant un dictionnaire. Ce code:

for(NSDictionary *dictionary in Food) 
{ 
    NSString temp1 = [dictionary objectForKey:@"category"]; 
    [searchArray addObject:temp1]; 
} 

peut être remplacé par:

for(NSDictionary *dictionary in Food) 
{ 
    NSObject *ob = [dictionary objectForKey:@"category"]; 
    if([ob isKindOfClass: [NSString class]]) 
    { 
     [searchArray addObject:ob]; 
    } 
    else if([ob isKindOfClass: [NSDictionary class]]) 
    { 
     NSDictonary *dic1 = (NSDictionary*)ob; 
     // ... at this point you can get the string for desired dictionary key 
     // or you can ignore it 
    } 
} 

Avec ce code, nous pouvons être sûr que seules les chaînes sont mises en searchArray.

Si vous souhaitez effectuer l'analyse complète de l'arborescence pour la 'catégorie' souhaitée, vous devez effectuer une recherche récursive dans le dictionnaire.

Vous pouvez sauvegarder la variable Food sur la console pour voir à quelle feuille correspond le résultat que vous recherchez. Mettez le point de rupture et dans le type de console 'po Food'.

0

semble qu'il y ait un NSDictionary dans votre tableauDonnees. Ajouter un

NSLog(@"%@",NSStringFromClass([description class]])); 

Pour voir quelles classes votre tableauDonnees contient.

+0

Il montre une seule entrée qui est NSCFDictionary que dois-je faire? –

+0

Pouvez-vous poster le code de l'initialisation de dataArray? – MathieuF

+0

J'ai édité ma question et mis les codes liés à l'initialisation de tableau dans la question elle-même. Ici, un changement est que "dataArray" est "searchArray" et "description" est "sTemp" –

Questions connexes