2010-07-15 5 views
0

Je suis nouveau à cela et dans mon application j'utilise UISearchBar. Quand j'entre un mot pour y chercher, l'application plante.iPhone: App tombe en panne lorsque la barre de recherche utilisée dans TableView

Dans mon projet j'utilise sqlite et les valeurs sont récupérées à partir de la base de données dans AppDelegate et enregistrées dans un NSMutableArray nommé docArray.

RootViewController.m

- (void)viewDidLoad{ 
     listOfItems = [[NSMutableArray alloc] init]; 
     NSDictionary *value = [NSDictionary dictionaryWithObject:appDelegate.docArray forKey:@"doctors"]; 
     [listOfItems addObject:value]; 
     // Intialize copy array that will store the result of search result 
     copyListOfItems = [[NSMutableArray alloc] init]; 
      // Add Search bar to main view ..... 
     self.tableView.tableHeaderView = searchBar; 
     searchBar.autocorrectionType = UITextAutocorrectionTypeNo; 
     searching = NO; 
     letUserSelectRow = YES; 
    } 

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
     if (searching) 
     return 1; 
    else 
     return 1; 
    } 


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    { 
     if (searching) 
     return [copyListOfItems count]; 
    else 
     return [appDelegate.arryData count]; 
    } 


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     static NSString *CellIdentifier = @"Cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
             reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    if (searching) 
    { 
     waitsup *wu = [copyListOfItems objectAtIndex:indexPath.row]; 

     [cell.textLabel setText:[NSString stringWithFormat:@"%@ %@ %@", wu.first_name, wu.last_name, wu.title]]; 
     cell.imageView.image = [UIImage imageNamed:@"wudoc.jpg"]; 
     [cell.detailTextLabel setText:[NSString stringWithFormat:@"%@ %@ %@", wu.city, wu.state, wu.zipcode]]; 

     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 
     else 
    { 
     waitsup *wu = [appDelegate.arryData objectAtIndex:indexPath.row]; 

     [cell.textLabel setText:[NSString stringWithFormat:@"%@ %@ %@", wu.first_name, wu.last_name, wu.title]]; 
     cell.imageView.image = [UIImage imageNamed:@"wudoc.jpg"]; 
     [cell.detailTextLabel setText:[NSString stringWithFormat:@"%@ %@ %@", wu.city, wu.state, wu.zipcode]]; 

     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 

     return cell; 
    } 

    -(void)searchBarTextDidBeginEditing :(UISearchBar *)theSearchBar { 
    NSLog(@"Now in searchBarTextDidBeginEditing"); 

    searching = YES; 
    letUserSelectRow = NO; 

    self.tableView.scrollEnabled = NO; 

    // Add Done button ........ 
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
               initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
               target:self action:@selector(doneSearching_clicked:)] 
               autorelease]; 

} 


-(NSIndexPath *)tableView :(UITableView *)theTableView willSelectRowAtIndexPath :(NSIndexPath*)indexPath { 
    NSLog(@"will select Row At Index Path"); 

    if (letUserSelectRow) 
    { 
     return indexPath; 
    } 
    else 
    { 
     return nil; 
    } 

} 


-(void)searchBar :(UISearchBar*)theSearchBar textDidChange :(NSString*)searchText { 
    NSLog(@"textDidChange"); 

    // it is done so that data can be selected as new search 
    [copyListOfItems removeAllObjects]; 

    if ([searchText length] > 0) 
    { 
     searching = YES; 
     letUserSelectRow = YES; 
     self.tableView.scrollEnabled = YES; 

     [self searchTableView]; 
    } 
    else 
    { 
     searching = NO; 
     letUserSelectRow = NO; 
     self.tableView.scrollEnabled = NO; 
    } 

    [self.tableView reloadData]; 

} 


-(void)searchBarSearchButtonClicked :(UISearchBar*)theSearchBar { 
    NSLog(@"searchBarSearchButtonClicked"); 
    [self searchTableView]; 
} 


-(void)searchTableView { 
    NSLog(@"searchTableView"); 

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

    for (NSDictionary *dictionary in listOfItems) 
    { 
     NSArray *array = [dictionary objectForKey:@"first_name"]; 
     [searchArray addObjectsFromArray:array]; 
    } 


    for (waitsup *sTemp in searchArray) 
    { 
     NSRange titleResultsRange = [[NSString stringWithFormat:@"%@ %@",sTemp.first_name, sTemp.last_name] rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

     if (titleResultsRange.length > 0) 
     { 
      NSLog(@"%@", sTemp); 
      [copyListOfItems addObject:sTemp]; 
     } 

    } 


    [searchArray release]; 
    searchArray = nil; 
} 


-(void)doneSearching_clicked:(id)sender { 
    NSLog(@"doneSearching_clicked"); 

    searchBar.text = @" "; 
    [searchBar resignFirstResponder]; 

    letUserSelectRow = YES; 
    searching = NO; 

    self.navigationItem.rightBarButtonItem = nil; 
    self.tableView.scrollEnabled = YES; 

    [self.tableView reloadData];  
} 

console show erreur suivante:

2010-07-22 13:36:16.002 wu2[1077:207] Processing Element: array 

2010-07-22 13:36:16.004 wu2[1077:207] Processing Element: XML_Serializer_Tag 

2010-07-22 13:36:16.005 wu2[1077:207] Processing Element: id 

2010-07-22 13:36:16.005 wu2[1077:207] Processing Value: 1 

2010-07-22 13:36:16.006 wu2[1077:207] Processing Element: first_name 

2010-07-22 13:36:16.007 wu2[1077:207] Processing Value: Prateek 

2010-07-22 13:36:16.007 wu2[1077:207] Processing Element: middle_name 

2010-07-22 13:36:16.008 wu2[1077:207] Processing Value: K 

2010-07-22 13:36:16.008 wu2[1077:207] Processing Element: last_name 

2010-07-22 13:36:16.009 wu2[1077:207] Processing Value: Bhanot 

2010-07-22 13:36:16.009 wu2[1077:207] Processing Element: title 

2010-07-22 13:36:16.010 wu2[1077:207] Processing Value: Er. 

2010-07-22 13:36:16.011 wu2[1077:207] Processing Element: org_name 

2010-07-22 13:36:16.011 wu2[1077:207] Processing Value: Cyber 

2010-07-22 13:36:16.012 wu2[1077:207] Processing Element: upin 

2010-07-22 13:36:16.014 wu2[1077:207] Processing Value: 34242 

2010-07-22 13:36:16.014 wu2[1077:207] Processing Element: npi 

2010-07-22 13:36:16.015 wu2[1077:207] Processing Value: 2343242 

2010-07-22 13:36:16.015 wu2[1077:207] Processing Element: address1 

2010-07-22 13:36:16.015 wu2[1077:207] Processing Value: Maler Kotla 

2010-07-22 13:36:16.016 wu2[1077:207] Processing Element: address2 

2010-07-22 13:36:16.016 wu2[1077:207] Processing Value: Mohali 

2010-07-22 13:36:16.018 wu2[1077:207] Processing Element: city 

2010-07-22 13:36:16.018 wu2[1077:207] Processing Value: Chandigarh 

2010-07-22 13:36:16.018 wu2[1077:207] Processing Element: state 

2010-07-22 13:36:16.019 wu2[1077:207] Processing Value: Punja 

2010-07-22 13:36:16.020 wu2[1077:207] Processing Element: zipcode 

2010-07-22 13:36:16.020 wu2[1077:207] Processing Value: 12345 

2010-07-22 13:36:16.021 wu2[1077:207] Processing Element: country 

2010-07-22 13:36:16.022 wu2[1077:207] Processing Value: India 

2010-07-22 13:36:16.022 wu2[1077:207] Processing Element: county 

2010-07-22 13:36:16.023 wu2[1077:207] Processing Element: office_phone1 

2010-07-22 13:36:16.025 wu2[1077:207] Processing Value: 13123131 

2010-07-22 13:36:16.027 wu2[1077:207] Processing Element: fax1 

2010-07-22 13:36:16.028 wu2[1077:207] Processing Value: 2131231 

2010-07-22 13:36:16.028 wu2[1077:207] Processing Element: gender 

2010-07-22 13:36:16.029 wu2[1077:207] Processing Value: male 

2010-07-22 13:36:16.030 wu2[1077:207] Processing Element: status 

2010-07-22 13:36:16.030 wu2[1077:207] Processing Value: active 

2010-07-22 13:36:16.031 wu2[1077:207] Processing Element: profiletype 

2010-07-22 13:36:16.031 wu2[1077:207] Processing Value: user 

2010-07-22 13:36:16.032 wu2[1077:207] Processing Element: entity 

2010-07-22 13:36:16.033 wu2[1077:207] Processing Value: practice 

2010-07-22 13:36:16.034 wu2[1077:207] Processing Element: XML_Serializer_Tag 

2010-07-22 13:36:16.035 wu2[1077:207] Processing Element: id 

2010-07-22 13:36:16.035 wu2[1077:207] Processing Value: 2 

2010-07-22 13:36:16.036 wu2[1077:207] Processing Element: first_name 

2010-07-22 13:36:16.036 wu2[1077:207] Processing Value: Hitu 

2010-07-22 13:36:16.037 wu2[1077:207] Processing Element: middle_name 

2010-07-22 13:36:16.038 wu2[1077:207] Processing Value: k 

2010-07-22 13:36:16.038 wu2[1077:207] Processing Element: last_name 

2010-07-22 13:36:16.039 wu2[1077:207] Processing Value: bansal 

2010-07-22 13:36:16.040 wu2[1077:207] Processing Element: title 

2010-07-22 13:36:16.040 wu2[1077:207] Processing Value: Doctor 

2010-07-22 13:36:16.041 wu2[1077:207] Processing Element: org_name 

2010-07-22 13:36:16.041 wu2[1077:207] Processing Value: Cyebertron 

2010-07-22 13:36:16.042 wu2[1077:207] Processing Element: upin 

2010-07-22 13:36:16.042 wu2[1077:207] Processing Value: 34242 

2010-07-22 13:36:16.043 wu2[1077:207] Processing Element: npi 

2010-07-22 13:36:16.043 wu2[1077:207] Processing Value: 2343242 

2010-07-22 13:36:16.044 wu2[1077:207] Processing Element: address1 

2010-07-22 13:36:16.045 wu2[1077:207] Processing Value: Mohali 

2010-07-22 13:36:16.045 wu2[1077:207] Processing Element: address2 

2010-07-22 13:36:16.046 wu2[1077:207] Processing Value: chd 

2010-07-22 13:36:16.046 wu2[1077:207] Processing Element: city 

2010-07-22 13:36:16.047 wu2[1077:207] Processing Value: Chandigarh 

2010-07-22 13:36:16.048 wu2[1077:207] Processing Element: state 

2010-07-22 13:36:16.048 wu2[1077:207] Processing Value: Punja 

2010-07-22 13:36:16.049 wu2[1077:207] Processing Element: zipcode 

2010-07-22 13:36:16.049 wu2[1077:207] Processing Value: 12345 

2010-07-22 13:36:16.050 wu2[1077:207] Processing Element: country 

2010-07-22 13:36:16.050 wu2[1077:207] Processing Value: India 

2010-07-22 13:36:16.051 wu2[1077:207] Processing Element: county 

2010-07-22 13:36:16.051 wu2[1077:207] Processing Value: jljljlkj 

2010-07-22 13:36:16.052 wu2[1077:207] Processing Element: office_phone1 

2010-07-22 13:36:16.053 wu2[1077:207] Processing Value: 12-32-3-3 

2010-07-22 13:36:16.053 wu2[1077:207] Processing Element: fax1 

2010-07-22 13:36:16.054 wu2[1077:207] Processing Value: 12331331 

2010-07-22 13:36:16.054 wu2[1077:207] Processing Element: gender 

2010-07-22 13:36:16.055 wu2[1077:207] Processing Value: male 

2010-07-22 13:36:16.056 wu2[1077:207] Processing Element: status 

2010-07-22 13:36:16.056 wu2[1077:207] Processing Value: active 

2010-07-22 13:36:16.057 wu2[1077:207] Processing Element: profiletype 

2010-07-22 13:36:16.057 wu2[1077:207] Processing Value: dr411 

2010-07-22 13:36:16.058 wu2[1077:207] Processing Element: entity 

2010-07-22 13:36:16.058 wu2[1077:207] Processing Value: provider 

2010-07-22 13:36:16.059 wu2[1077:207] No Errors 

2010-07-22 13:36:20.923 wu2[1077:207] Now in searchBarTextDidBeginEditing 

2010-07-22 13:36:22.899 wu2[1077:207] textDidChange 

2010-07-22 13:36:22.900 wu2[1077:207] searchTableView 

2010-07-22 13:36:22.901 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:22.985 wu2[1077:207] textDidChange 

2010-07-22 13:36:22.986 wu2[1077:207] searchTableView 

2010-07-22 13:36:22.987 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:23.073 wu2[1077:207] textDidChange 

2010-07-22 13:36:23.074 wu2[1077:207] searchTableView 

2010-07-22 13:36:23.075 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:23.249 wu2[1077:207] textDidChange 

2010-07-22 13:36:23.250 wu2[1077:207] searchTableView 

2010-07-22 13:36:23.250 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:23.449 wu2[1077:207] textDidChange 

2010-07-22 13:36:23.450 wu2[1077:207] searchTableView 

2010-07-22 13:36:23.450 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:23.625 wu2[1077:207] textDidChange 

2010-07-22 13:36:23.626 wu2[1077:207] searchTableView 

2010-07-22 13:36:23.626 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:23.777 wu2[1077:207] textDidChange 

2010-07-22 13:36:23.778 wu2[1077:207] searchTableView 

2010-07-22 13:36:23.778 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:24.377 wu2[1077:207] searchBarSearchButtonClicked 

2010-07-22 13:36:24.377 wu2[1077:207] searchTableView 

2010-07-22 13:36:24.378 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:26.157 wu2[1077:207] doneSearching_clicked 

2010-07-22 13:36:26.161 wu2[1077:207] textDidChange 

2010-07-22 13:36:26.161 wu2[1077:207] searchTableView 

2010-07-22 13:36:26.162 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:26.162 wu2[1077:207] <waitsup: 0x6e16100> 

2010-07-22 13:36:27.071 wu2[1077:207] Now in searchBarTextDidBeginEditing 

2010-07-22 13:36:28.329 wu2[1077:207] textDidChange 

2010-07-22 13:36:28.330 wu2[1077:207] searchTableView 

2010-07-22 13:36:30.221 wu2[1077:207] doneSearching_clicked 

2010-07-22 13:36:30.224 wu2[1077:207] textDidChange 

2010-07-22 13:36:30.224 wu2[1077:207] searchTableView 

2010-07-22 13:36:30.225 wu2[1077:207] <waitsup: 0x6e14fc0> 

2010-07-22 13:36:30.226 wu2[1077:207] <waitsup: 0x6e16100> 
+0

Merci pour les informations mises à jour, voir ma solution suggérée ci-dessous. La seule chose à apprendre de cela, c'est que l'erreur de base est la suivante: '- [waitsup rangeOfString: options:]: sélecteur non reconnu envoyé à l'instance 0x6d0f8e0' pour les raisons exposées ci-dessous. – mvds

Répondre

0

pour une chose, s'il vous plaît condenser votre code pour que nous n'ont pas de faire défiler tous les sauts de ligne. De plus, est-ce DataSource de votre point de vue de la table, et si oui, où sont:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

ils doivent accéder copyListOfItems, qui peut échouer et être la source de votre accident. Que montre la console quand elle se bloque?

modifier: merci de fournir les informations supplémentaires. Votre problème est ici:

for (NSString *sTemp in searchArray) 

searchArray contient "waitsup" objets, je pense, pas NSString. Vous l'avez lancé sur un pointeur NSString, mais il vous appartient de pointer vers un objet NSString. Par conséquent vous obtenez l'erreur que rangeOfString est appelée sur un waitsup, qui est "non reconnu". Vous ne pouvez pas ensuite appeler rangeOfString sur l'objet waitsup, si vous n'avez pas fourni la méthode rangeOfString vous-même.

En regardant le reste de votre code, je pense que vous pouvez le fixer comme ceci:

for (waitsup *sTemp in searchArray) { 
    NSRange titleResultsRange = [sTemp.name_last rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
    if (titleResultsRange.length > 0) 
     [copyListOfItems addObject:sTemp]; 
} 

mais seulement name_last est recherché. Étendre ceci pour inclure plus de champs est trivial.

+0

Merci frère, mais j'ai quand même un problème que je peux entrer un seul alphabet après ce plantage de l'application. –

+0

pourriez-vous mettre à jour la question avec le code que vous avez maintenant, et les erreurs que vous obtenez maintenant? – mvds

+0

maintenant vous pouvez vérifier –

Questions connexes