我有我的代碼有點問題,我使用的CollectionView與segmentedControl但在這裏,當我按下segmetedControl第2或3,我滾動的CollectionView,我得到這個錯誤的CollectionView和UISegmentedControl錯誤
*終止應用程序由於未捕獲的異常 'NSRangeException',原因: '* - [__ NSArrayI objectAtIndex:]:索引16超出範圍[0 .. 15]'
#define API_V3_CHANNEL_URL @"examples.json"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self fetchEntries];
[self fetchEntriesWinner];
[self fetchEntriesPhotos];
}
- (void)fetchEntries
{
NSString *searchURL = [API_V3_CHANNEL_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *searchData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]];
NSDictionary *searchDict =[NSJSONSerialization JSONObjectWithData:searchData options:NSJSONReadingMutableContainers error:nil];
//self.readArray = [searchDict objectForKey:@"CONTESTS"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", @"LIVE"];
self.readArray = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:predicate];
NSLog(@"%@", self.readArray);
}
- (void)fetchEntriesWinner
{
NSString *searchURL = [API_V3_CHANNEL_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *searchData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]];
NSDictionary *searchDict =[NSJSONSerialization JSONObjectWithData:searchData options:NSJSONReadingMutableContainers error:nil];
//self.readArray = [searchDict objectForKey:@"CONTESTS"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", @"ARCHIVED"];
self.readArrayWinner = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:predicate];
NSLog(@"winner array : %@", self.readArrayWinner);
}
- (void)fetchEntriesPhotos
{
NSString *searchURL = [API_V3_CHANNEL_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData *searchData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]];
NSDictionary *searchDict =[NSJSONSerialization JSONObjectWithData:searchData options:NSJSONReadingMutableContainers error:nil];
//self.readArray = [searchDict objectForKey:@"CONTESTS"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", @"LIVE"];
self.readArrayPhotos = [[searchDict objectForKey:@"CONTESTS"] filteredArrayUsingPredicate:predicate];
NSLog(@"%@", self.readArray);
}
- (IBAction)segmentedControlAction:(id)sender
{
[self.collectionView reloadData];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
switch (_segmentedControl.selectedSegmentIndex) {
case 0:
return [self.readArray count];
break;
case 1:
return [self.readArrayWinner count];
break;
case 2:
return [self.readArrayPhotos count];
break;
default:
break;
}
return 0;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"pictureCell";
MSContestListCollectionViewCell *cell = (MSContestListCollectionViewCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
NSDictionary *searchResult = [self.readArray objectAtIndex:indexPath.item];
NSDictionary *searchResult2 = [self.readArrayWinner objectAtIndex:indexPath.item];
NSDictionary *searchResult3 = [self.readArrayPhotos objectAtIndex:indexPath.item];
cell.titleContest.adjustsFontSizeToFitWidth = YES;
cell.titleContest.minimumScaleFactor = 0.5;
cell.pictureImageView.layer.cornerRadius = 5;
cell.pictureImageView.clipsToBounds = YES;
cell.titleView.layer.cornerRadius = 5;
cell.titleView.clipsToBounds = YES;
switch (_segmentedControl.selectedSegmentIndex) {
case 0: {
NSString *stringImage = [searchResult objectForKey:@"featuredImage"];
NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];
[cell.pictureImageView sd_setImageWithURL:[NSURL URLWithString:image]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.titleContest.text = [searchResult objectForKey:@"description"];
cell.statusContest.text = [searchResult objectForKey:@"status"];
break;
}
case 1: {
NSString *stringImage = [searchResult2 objectForKey:@"featuredImage"];
NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];
[cell.pictureImageView sd_setImageWithURL:[NSURL URLWithString:image]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.titleContest.text = [searchResult2 objectForKey:@"description"];
cell.statusContest.text = [searchResult2 objectForKey:@"status"];
break;
}
case 2: {
NSString *stringImage = [searchResult3 objectForKey:@"featuredImage"];
NSString *image = [NSString stringWithFormat:@"https://srv.mediaswapp.com/%@", stringImage];
[cell.pictureImageView sd_setImageWithURL:[NSURL URLWithString:image]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.titleContest.text = [searchResult3 objectForKey:@"description"];
cell.statusContest.text = [searchResult3 objectForKey:@"status"];
break;
}
default:
break;
}
return cell;
}
@end
非常感謝,它的工作原理,我只是最後一個問題,當我點擊一個單元格時,什麼也沒有發生,當我點擊顯示前一個單元格的數據的第二個單元格時(或者我單擊的單元格)我認爲它顯示了錯誤的index.item(詳細視圖) –
@victorbill這是一個不同的問題,因爲它與您當前的問題無關。如果你不能自己追蹤這個問題,你可以試着問第二個問題。 – luk2302
鏈接:http://stackoverflow.com/questions/34949499/click-collectionviewcell-error –