Ü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.
ilk ifade "köpek-1" hem de doğru olduğu. Hiçbir şey için arama yoksa
, 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:
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
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
Ç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