由于未捕获的异常'NSRangeException'终止应用程序,原因:'*** - [__ NSArrayI objectAtIndex:]:索引3超出边界[0 .. 2]

时间:2013-10-01 16:19:48

标签: ios objective-c nsarray nsrangeexception

当我运行iOS时,然后显示主菜单,以及主菜单类别和产品的两个部分。当我点击类别时,会出现此错误:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2] 

守则是:

#import "IMScategoriesViewController.h"
#import "IMSAddCategoryViewController.h"
#import "IMSAppDelegate.h"
#import "Category.h"

@interface IMScategoriesViewController ()
@property (strong) NSMutableArray *categories;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@end

@implementation IMScategoriesViewController
- (NSManagedObjectContext *)managedObjectContext
{
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate performSelector:@selector(managedObjectContext)]) {
        context = [delegate managedObjectContext];
    }
    return context;
}
- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}
//- (void)viewDidAppear:(BOOL)animated
//{
//    [super viewDidAppear:animated];

   - (void)viewDidLoad
{
    [super viewDidLoad];
    // Fetch the devices from persistent data store
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Category"];
    self.categories = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    [self.tableView reloadData];
}
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        // Return the number of sections.
        return 1;
    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        // Return the number of rows in the section.
        return self.categories.count;
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        // Configure the cell...
        NSManagedObject *category = [self.categories objectAtIndex:indexPath.row];
        [cell.textLabel setText:[NSString stringWithFormat:@"%@ %@", [category valueForKey:@"name"], [category valueForKey:@"itemtype"]]];
        //[cell.detailTextLabel setText:[device valueForKey:@"company"]];

      //Category *category = [array objectAtIndex:indexPath.row];

       // cell.textLabel.text =[category  name];
       cell.detailTextLabel.text = [category description];

        return cell;


    }

2 个答案:

答案 0 :(得分:1)

Log categories数组。我看到numberOfRowsInSection是基于数组的计数定义的,但是类别可能有一个nil对象。

因此,类别的数量是4,但尝试访问它时崩溃。

NSManagedObject *category = [self.categories objectAtIndex:indexPath.row];

答案 1 :(得分:-1)

这显然意味着您正在尝试访问超出其限制的某个数组的索引。找出此异常涉及哪个数组的最佳方法是为所有异常设置一个断点并尝试调试。

相关问题