Ios [\uu NSArrayM objectAtIndex:]:索引2超出范围[0..1]
我是一个新的iOS开发者;我有一个带有parse和dynamic cell的应用程序,但当我运行该应用程序时,我发现该应用程序由于标题“我的代码”上的原因而崩溃,如下所示Ios [\uu NSArrayM objectAtIndex:]:索引2超出范围[0..1],ios,nsarray,uicollectionview,icarousel,nsrangeexception,Ios,Nsarray,Uicollectionview,Icarousel,Nsrangeexception,我是一个新的iOS开发者;我有一个带有parse和dynamic cell的应用程序,但当我运行该应用程序时,我发现该应用程序由于标题“我的代码”上的原因而崩溃,如下所示 - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view { myArray = [[NSMutableArray alloc] init];
- (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;
}
- (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]);
}
我在第一个屏幕上使用UICollectionView,其中包含来自parse的动态数据,如下代码所示
pragma集合视图委托
我需要一些帮助来知道错误在哪里;
每次我在控制台[u NSArrayM objectAtIndex:]上收到此错误时:索引2超出界限[0..1]您的问题就在这一行:PFObject*object=[myArray objectAtIndex:index]
您的索引是2,但数组中只有2个对象。由于数组的最大索引为1 0..1,因此会崩溃。我建议查看该方法的调用位置以及如何获取超出范围的索引。这可能是以下两行之一:
PFObject *object = [myArray objectAtIndex:index];
或
问题是,第二种情况下的index或indexath.item包含值2,而myArray的大小为2,因此唯一有效的索引是0和1。问候和欢迎,新开发人员。您首先要了解的是异常发生的位置。为此,需要打开异常断点 具体操作方式因Xcode版本而异,感谢苹果。假设您使用的是Xcode 6,有一个简单的例子可以解释这一点 我认为你的旋转木马很可能漏报了它拥有的物品数量。或者出于某些其他原因,您试图获取一个不存在的旋转木马项……当旋转木马使用现有范围之外的单元格索引进行查询时,它可能期望为零,但您假设该索引有效并遇到数组边界异常。粗略猜测,错误可能在于以下几行:
…
myArray = [[NSMutableArray alloc] initWithArray:objects];
PFObject *object = [myArray objectAtIndex:index];
…
我猜该节不是myArray的有效索引
顺便说一下–myArray是对象数组的可变副本。你为什么这么做?您没有对myArray进行任何更改,因此它似乎没有必要
在集合视图委托中,可能有一个方法collectionView:numberOfItemsInSection:。或者如果你没有,你可能需要一个。目前的代码是什么?没有足够的信息。我们甚至不知道这次坠机的确切路线。 myArray中的实际对象数是多少? 收集时返回的内容查看:NumberOfItems部分: 等等 依我看,最简单的解决方案就是调试这个崩溃。并找出为什么索引大于objectAtIndex:预期。试试这个: 1打开断点导航器 2点击“+”按钮并选择添加异常断点选项
现在,应用程序将在调试时对任何异常使用此断点。最后,我发现问题出在哪里;我必须为iCarousel numberOfItems定义数组,因此代码如下
- (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;
}
- (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]);
}
所以我避开了索引问题
感谢大家与我分享请检查您使用的numberOfRowsInSection方法和数组计数。是;你是完全正确的,因为当我使用断点时,它在标记这一行,我使用po方法,当我把index等于2时,它的readnull;但我不知道如何解决这个问题;当我把索引设为1时,它工作得很好,但我在caresoulno上得到了相同的项;第一行的问题是因为当我使用断点时,它会标记在那一行上,但我不知道如何解决你指的是哪一行?我提到的第一个或您的函数中的第一个?PFObject*object=[myArray objectAtIndex:index];好啊现在添加这行代码NSLog@%i%i,index,myArray.count;就在上面。您将看到您正在尝试访问索引2,但数组的计数为2。您的问题是,您应该只在index