我是一名新的iOS开发者;我有一个解析和动态单元格的应用程序,但当我运行应用程序时,我发现应用程序崩溃,因为标题上的原因我的代码如下
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
myArray = [[NSMutableArray alloc] init];
//create new view if no view is available for recycling
// view = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 250.0f, 300.0f)] autorelease];
FXImageView *imageView = [[[FXImageView alloc] initWithFrame:CGRectMake(0, 0, 250.0f, 350.0f)] autorelease];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.asynchronous = YES;
// imageView.reflectionScale = 0.5f;
// imageView.reflectionAlpha = 0.25f;
// imageView.reflectionGap = 10.0f;
imageView.shadowOffset = CGSizeMake(0.0f, 2.0f);
imageView.shadowBlur = 5.0f;
imageView.cornerRadius = 10.0f;
view = imageView;
[ProgressHUD dismiss];
NSString *string1 = [[NSUserDefaults standardUserDefaults] stringForKey:@"Class"];
PFQuery *query = [PFQuery queryWithClassName:[NSString stringWithFormat:@"%@",string1]];
query.cachePolicy = kPFCachePolicyNetworkElseCache;
//show loader view
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
myArray = [[NSMutableArray alloc] initWithArray:objects];
PFObject *object = [myArray objectAtIndex:index];
[file getDataInBackgroundWithBlock:^(NSData *data1, NSError *error) {
if (!error) {
((UIImageView *)view).image = [UIImage imageWithData:data1];
//[HUD hideUIBlockingIndicator];
}
}];
}
}];
return view;
}
我用于第一个屏幕UICollectionView,其中包含来自解析的动态数据,如以下代码
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
CALayer *layer = cell.layer;
[layer setCornerRadius:8.0f];
[layer setMasksToBounds:YES];
// [layer setBorderWidth:1.0f];
// layer.backgroundColor = [UIColor whiteColor].CGColor;
//can you click
PFObject *imageObject = [myArray objectAtIndex:indexPath.item];
PFFile *imageFile = [imageObject objectForKey:@"image"];
NSString *name = [imageObject objectForKey:@"name"];
[imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
UIImageView *imageView = (UIImageView *)[cell viewWithTag:100];
imageView.image = [UIImage imageWithData:data];
UILabel *title2 = (UILabel *)[cell viewWithTag:200];
title2.text = [NSString stringWithFormat:@"%@",name];
title2.font = [UIFont fontWithName:@"GESSTextMedium-Medium" size:12];
}
}];
return cell;
}
我需要一些帮助才能知道错误在哪里;
每次我在控制台[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]
答案 0 :(得分:6)
没有足够的信息。我们甚至不知道这次事故的确切线路。
myArray
中的实际对象数是多少?
你在collectionView:numberOfItemsInSection:
上的回报
等等..
objectAtIndex:
预期。试试这个:
1)打开"断点导航器"
2)点击' +'按钮并选择"添加例外断点"选项
现在,app会在调试时对任何异常使用此断点。
答案 1 :(得分:1)
致敬和欢迎,新开发者。您要了解的第一件事是发生异常的地方。要做到这一点,你需要打开“异常断点”。
您的确切方式因Xcode版本而异(感谢Apple)。假设您使用的是Xcode 6,则可以使用video here来解释它。
我认为您的旋转木马很可能会错过报告其所拥有的物品数量。或者由于某些其他原因,您试图获得一个不存在的轮播项目...当轮询使用现有范围之外的单元格索引进行查询时,可能轮播要求nil
,但您假设索引有效并命中数组边界异常。在一个疯狂的猜测,可能错误是在这里的行:
…
myArray = [[NSMutableArray alloc] initWithArray:objects];
PFObject *object = [myArray objectAtIndex:index];
…
我猜测section
不是myArray
中的有效索引。
(顺便说一下 - myArray
是objects
数组的可变副本。你为什么要这样做?你没有对myArray
进行任何更改,所以似乎没有必要。)
您的集合视图委托中可能有方法collectionView: numberOfItemsInSection:
。或者如果你不这样做,你可能需要一个。目前的代码是什么?
答案 2 :(得分:0)
您的问题出在这一行:PFObject *object = [myArray objectAtIndex:index];
你的索引是2,但你的数组中只有2个对象。由于数组的最大索引是1(0..1),它会崩溃。我建议看看调用该方法的位置以及如何获得超出范围的索引。
答案 3 :(得分:0)
这可能是以下两行之一:
PFObject *object = [myArray objectAtIndex:index];
或
PFObject *imageObject = [myArray objectAtIndex:indexPath.item];
问题是索引(或第二种情况下的indexPath.item)包含值2,但myArray的大小为2(因此唯一有效的索引是0和1)。
答案 4 :(得分:0)
最后我发现问题所在;我必须为iCarousel numberOfItems定义数组,所以代码将如下所示
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
//return the total number of items in the carousel
return ([myArray count]);
return ([titleArray count]);
return ([priceArray count]);
return ([sapArray count]);
}
所以我逃脱了索引问题
感谢所有人与我分享
答案 5 :(得分:0)
请检查您正在使用的numberOfRowsInSection方法和数组计数。