Ios 数组objectAtIndex核心数据上的RangeException

Ios 数组objectAtIndex核心数据上的RangeException,ios,arrays,core-data,nsrangeexception,Ios,Arrays,Core Data,Nsrangeexception,编程新手** 尝试从可变数组访问对象时获取越界异常。错误为objectAtIndex显示了一个很长的数字,但数组当前只有三个对象 这是错误消息:由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*-[\uu NSArrayM objectAtIndex:]:索引2147483647超出边界[0..2]” 我使用的是核心数据 当我选择通过核心数据填充的tableview的第一行时,应用程序正在崩溃 可变数组称为allDates 可能导致此问题的代码位于此处的prepare

编程新手**

尝试从可变数组访问对象时获取越界异常。错误为objectAtIndex显示了一个很长的数字,但数组当前只有三个对象

这是错误消息:由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*-[\uu NSArrayM objectAtIndex:]:索引2147483647超出边界[0..2]”

我使用的是核心数据

当我选择通过核心数据填充的tableview的第一行时,应用程序正在崩溃

可变数组称为allDates

可能导致此问题的代码位于此处的prepareForSegue方法中:

DateTableViewController.m的一部分

DateTableViewController.h

如果这是个愚蠢的问题,请告诉我。欢迎任何类型的资源

感谢您的帮助

indexOfObject:返回2147483647这一事实绝非偶然。2147483647等效于NSNotFound等效于NSIntegerMax,这是indexOfObject返回的值:当指定的对象在数组中的任何索引中都不存在,或者换句话说,找不到时

对应数组值等于某个对象的最低索引。 如果数组中没有一个对象等于一个对象,则返回 没有找到

这让我们明白了为什么你的应用程序会崩溃。显然,您无法访问数组中任何索引大于小于数组计数一的元素,并且2147483647的数值比数组的计数大得多,这将导致引发范围异常。幸运的是,这个问题很容易解决,您所要做的就是在索引大于或等于数组的计数时防止对数组的访问。下面是一个例子:

if (index < allDates.count) {
    _string = [NSMutableString stringWithFormat:@"%@", [allDates[(int)index] valueForKey:@"date_idea"]];
   vc.dateIdeaLabelText = self.string;
}else{
    // do something else..
    vs.dateIdeaLabelText = @"Something went wrong!";
}

看起来您是在向数组询问indexpath的索引。我不认为这是一个数组的indexpath

您应该只执行allDates[SelectedRowindXPath.row]


还可以尝试将该行拆分为多个部分,以便更好地调试。

谢谢@WilliamFalcon,尝试过,但仍然抛出相同的错误。想法?看起来您是在向数组询问索引XPath的索引。我不认为这是一系列的间接解释。。。您应该只执行allDates[SelectedRowindXPath.row]。也试着把这一行分成几个部分,这样你就能更好地调试了。@WilliamFalcon,就是这样。如果你想加上它作为回答,我很乐意接受。非常感谢。很好的解释@0x7fffffff!因此,正如您所解释的,应用程序不再崩溃,但是我想要的标签不会传递给label text属性,因为所选行的索引太大,即if语句的先行项为false。所以,我想我的问题是,为什么索引是数组中第一行元素的最大值?当我改为使用allDates[0]时,它会传递发生错误时正在选择的行。谢谢你给新手的精彩解释!
#import <UIKit/UIKit.h>
#import "LifeBook.h"
#import "LifeBookAppDelegate.h"
#import "DateIdeaDetailViewController.h"

@interface DateTableViewController : UITableViewController 

@property (strong, nonatomic) NSMutableArray *allDates;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (weak, nonatomic) IBOutlet UITableViewCell *tableViewCell1;
@property (strong, nonatomic) NSMutableString *string;

@property (strong, nonatomic) NSString *label;


@end
if (index < allDates.count) {
    _string = [NSMutableString stringWithFormat:@"%@", [allDates[(int)index] valueForKey:@"date_idea"]];
   vc.dateIdeaLabelText = self.string;
}else{
    // do something else..
    vs.dateIdeaLabelText = @"Something went wrong!";
}