2014-01-27 2 views
0

검색 할 때 글자를 입력 할 때 약 4 초 동안 지연되고 아무 것도 할 수 없습니다. 다른 모든 것은 잘 작동합니다. UISearchDisplayController는 내가 원하는 것을 찾았고, segue는 훌륭하게 작동합니다. 내 코드에서 메모리 또는 실수에 관한 것이 확실하지 않습니다. 누구든지 나를 도울 수 있습니까? 감사합니다UISearchDisplayController 결과가 3-6 초 지연됩니다.

내 코드

TableViewController.m 같은 문제가 모두 들어

@implementation TableViewController 

@synthesize colorsTable; 
@synthesize searchBar; 
@synthesize searchController; 
@synthesize searchResults; 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showDetail"]) { 
     { 
      DetailViewController *sdvc = (DetailViewController *)[segue destinationViewController]; 


      if(self.searchDisplayController.active) { 
       NSIndexPath *indexPath = [[self tableView] indexPathForSelectedRow]; 
       PFObject *object = [self.objects objectAtIndex:indexPath.row]; 

       object = (PFObject *)[[self searchResults]objectAtIndex:[[[[self searchDisplayController]searchResultsTableView]indexPathForSelectedRow]row]]; 
       sdvc.detailItem = object; 

      } else { 

       NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
       PFObject *object = [self.objects objectAtIndex:indexPath.row]; 
       DetailViewController *detailViewController = [segue destinationViewController]; 
       detailViewController.detailItem = object; 


      } 

     } 
    } 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self performSelector:@selector(runThisMethod) withObject:nil afterDelay:1.9f]; 
    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; 

    self.tableView.tableHeaderView = self.searchBar; 

    self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; 

    self.searchController.searchResultsDataSource = self; 
    self.searchController.searchResultsDelegate = self; 
    self.searchController.delegate = self; 


    CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height); 
    self.tableView.contentOffset = offset; 

    self.searchResults = [NSMutableArray array]; 



-(void)filterResults:(NSString *)searchTerm { 

    [self.searchResults removeAllObjects]; 

    PFQuery *query = [PFQuery queryWithClassName: self.parseClassName]; 
    [query whereKeyExists:@"MestoName"]; //this is based on whatever query you are trying to accomplish 
    [query whereKey:@"MestoName" containsString:searchTerm]; 

    NSArray *results = [query findObjects]; 

    NSLog(@"%@", results); 
    NSLog(@"%u", results.count); 

    [self.searchResults addObjectsFromArray:results]; 
} 


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    [self filterResults:searchString]; 
    return YES; 
} 

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

    if (tableView == self.tableView) { 
     //if (tableView == self.searchDisplayController.searchResultsTableView) { 

     return self.objects.count; 

    } else { 

     return self.searchResults.count; 

    } 

} 
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView 
{ 
    tableView.rowHeight = 90.0f; 
} 



- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 

} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object { 

    static NSString *uniqueIdentifier = @"colorsCell"; 

    CustomCell *cell = nil; 

    cell = (CustomCell *) [self.tableView dequeueReusableCellWithIdentifier:uniqueIdentifier]; 


    [cell.imagevieww setImageWithURL:[NSURL URLWithString:[object objectForKey:@"ImageURL"]] 
        placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 


    cell.cellTitle.text = [object objectForKey:@"MestoName"]; 
    cell.cellDescript.text = [object objectForKey:@"MestoSubname"]; 


    if (!cell) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"colorsCell" owner:nil options:nil]; 

     for (id currentObject in topLevelObjects) 
     { 
      if([currentObject isKindOfClass:[CustomCell class]]) 
      { 
       cell = (CustomCell *)currentObject; 
       break; 
      } 
     } 
    } 


     if (tableView == self.tableView) { 
      cell.cellTitle.text = [object objectForKey:@"MestoName"]; 
     } else { 

      PFUser *obj2 = [self.searchResults objectAtIndex:indexPath.row]; 
      PFQuery *query = [PFQuery queryWithClassName:@"Mesta"]; 
      PFObject *searchedUser = [query getObjectWithId:obj2.objectId]; 

      NSString *boottext = [searchedUser objectForKey:@"MestoName"]; 
      cell.cellTitle.text = boottext; 

      NSString *bootsubtext = [searchedUser objectForKey:@"MestoSubname"]; 
      cell.cellDescript.text = bootsubtext; 

      NSString *bootimage = [searchedUser objectForKey:@"ImageURL"]; 
      [cell.imagevieww setImageWithURL:[NSURL URLWithString:bootimage]]; 


      NSLog(@"Content: %@", boottext); 

     } 
      return cell; 

     } 



@end 
+0

자세한 내용은 .. – codercat

+0

를 필요로하는 코드는 내가 마지막으로 이유를 알 것 같아요. 내가 무언가를 검색 할 때마다 모든 객체 셀 1 API를 얻습니다. 그래서 검색 문자 R에 추가하면 5 개의 객체가 나에게 6 개의 API를 제공합니다. 취소를하면 6 API가 다시 계산됩니다. 그렇게 오래 걸리는 이유 일 수 있습니다. 나는 줄이는 방법을 모른다. 더 많은 정보가 무엇을 의미합니까? – Milan1111

답변

0

. 나는 이미 해결책을 얻었다. 나는 모든 코드를 다시 작성하고 마침내 작동하고있다.

는 Here`s

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object { 

    NSString *uniqueIdentifier = @"MainCell"; 
    CustomCell3 *cell = nil; 
    cell = (CustomCell3 *) [self.tableView dequeueReusableCellWithIdentifier:uniqueIdentifier]; 




    if (!cell) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MainCell" owner:nil options:nil]; 

     for (id currentObject in topLevelObjects) 
     { 
      if([currentObject isKindOfClass:[CustomCell3 class]]) 
      { 
       cell = (CustomCell3 *)currentObject; 
       break; 
      } 
     } 
    } 

    if (tableView == self.tableView) { 
     cell.MainTitle.text = [object objectForKey:@"CountryTitle"]; 
     cell.DescriptTitle.text = [object objectForKey:@"DescriptTitle"]; 
     [cell.FlagTitle setImageWithURL:[NSURL URLWithString:[object objectForKey:@"ImaURL"]] 
         placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 


    }; 

if(tableView == self.searchDisplayController.searchResultsTableView) { 

     PFObject *searchedUser = [self.searchResults objectAtIndex:indexPath.row]; 
     NSString *content = [searchedUser objectForKey:@"CountryTitle"]; 
     NSString *desco = [searchedUser objectForKey:@"DescriptTitle"]; 
     cell.DescriptTitle.text = desco; 
     cell.MainTitle.text = content; 
     NSString *image = [searchedUser objectForKey:@"ImaURL"]; 

    [cell.FlagTitle setImageWithURL:[NSURL URLWithString:image] 
        placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 



     }; 




     return cell; 
    }