2016-04-01 13 views
0

Üzgünüz, bu, birisinin kodumun hatalarını ayıklamasını istediğim bir sorudur, ancak bir günden fazla bir süredir bunun için takıldım.UISearchController dizini, indexPath üzerinde

Sorun şu ki: UISearchController uygulamalarım çalışmıyor ve indexPath.row üzerinde sıkışmış olduğuna inanıyorum. ,

string = [results objectAtIndex:indexPath.row]; 

ben yeterince benim searchResults dizide aslında, ve emin ne olduğunu görmek için * sonuç dizisini yaptı: İşte crashs çizgidir

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    SSPhotosCollectionViewCell *cell; 
    NSString *string; 
    if (self.galleryButton.selected) { 
     cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 
     if ([self.searchController isActive] && (![self.searchController.searchBar.text isEqualToString:@""])) { 
      NSArray *results = [self.searchResults mutableCopy]; 
      string = [results objectAtIndex:indexPath.row]; 
     } else { 
      string = [self.photoFileNames objectAtIndex:indexPath.row]; 
     } 
     cell.imageView.image = [UIImage imageNamed:string]; 
    } 
    else if (self.albumsButton.selected) { 
     cell = [collectionView dequeueReusableCellWithReuseIdentifier:albumIdentifer forIndexPath:indexPath]; 
     cell.imageView.image = [UIImage imageNamed:@"AlbumIcon.png"]; 
    } 
    return cell; 
} 

: Burada

bazı koddur düzgün bir şekilde filtreliyor. Ben bu görüntüleri içeren bir NSMutableArray vardır:

self.photoFileNames = [NSMutableArray arrayWithObjects:@"puppy-1", @"puppy-2", @"puppy-3", @"puppy-4", @"puppy-5", @"puppy-6", @"puppy-7", @"puppy-8", @"puppy-9", @"puppy-10", @"puppy-11", @"puppy-12", nil]; 

Ve dize "1" araması, ben doğru olan geri 4 sonuç almak.

enter image description here

ilk ifade "köpek-1" hem de doğru olduğu. Hiçbir şey için arama yoksa

enter image description here

, CollectionView'ın doğru görüntülerin listesini döndürür. Burada

Daha kodu:

#pragma mark - UISearchControllerDelegate 

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { 
    NSString *searchString = searchController.searchBar.text; 
    NSLog(@"%@", searchString); 
    if (searchString == nil) { 
     self.searchResults = [self.photoFileNames mutableCopy]; 
    } else { 
     self.searchResults = [[NSMutableArray alloc] init]; 

     for (NSString *name in self.photoFileNames) { 
      if ([name.lowercaseString containsString:searchString.lowercaseString]) { 
       [self.searchResults addObject:name]; 
      } 
     } 
    } 
    [self.collectionView reloadData]; 
} 
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope { 
    [self updateSearchResultsForSearchController:self.searchController]; 
} 

#pragma mark - UICollectionViewDataSource 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { 
    return 1; 
} 


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    if (self.galleryButton.selected) { 
     return self.photoFileNames.count; 
    } 
    else if (self.albumsButton.selected) { 
     return 7; 
    } else if (self.searchController.active) { 
     return self.searchResults.count; 
    } 
    return 0; 
} 
// in viewDidLoad 
self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; 
self.searchController.searchResultsUpdater = self; 
self.searchController.dimsBackgroundDuringPresentation = NO; 
self.searchController.searchBar.delegate = self; 
self.searchController.searchBar.scopeButtonTitles = @[]; 
self.collectionView.contentOffset = CGPointMake(0, CGRectGetHeight(self.searchController.searchBar.frame)); 
[self.collectionView addSubview:self.searchController.searchBar]; 
self.definesPresentationContext = YES; 

teşekkür ederiz.

DÜZENLEME:

Kilitlenme günlük: enter image description here enter image description here

+0

Tabanlı bir dizi hücre alıyorsunuz. İkincisi, hücreler oluştururken, eğer-eğer iyi bir uygulama değilse. Bunu, eğer-else olursa olsun yeniden yazınız. – n00bProgrammer

+0

Bir kilitlenme günlüğü ekledim (bunun ne olduğunu düşünüyorum) Özür dilerim, iOS programlamaya yeni başladım ve şimdiye kadar kilitlenme günlüğünü bile bilmiyordum. Yorum için teşekkürler, deneyeceğim! – sallyp

+0

Çarpışmadan önce sizden ne elde ettiğinizi kontrol ettiniz numberOfItemsInSection? Senin galleryButton seçiliyse ve searchController etkinse numberOfItemsInSection ve cellForRowAtIndexPath öğesinin ayarlanma yöntemi, photoFileNames.count öğesine göre bir dizi öğe alırsınız ve kilitlediğiniz yerde, arama sonuçları dizisindeki ancak indexPath.row öğesindeki nesneleri denetlersiniz Bu sayıyı geçmiş olacaktı çünkü fotoFileNames.count – zfetters

cevap

1

Eğer kazasında önce numberOfItemsInSection elde ettiğiniz kontrol ettiniz mi? Senin galleryButton seçiliyse ve searchController etkinse numberOfItemsInSection ve cellForRowAtIndexPath öğesinin ayarlanma yöntemi, photoFileNames.count öğesine göre bir dizi öğe alırsınız ve kilitlediğiniz yerde, arama sonuçları dizisindeki ancak indexPath.row öğesindeki nesneleri denetlersiniz Bu sayıyı geçmiş olacaktı çünkü fotoFileNames.count

İlgili konular