-[__NSArrayM objectAtIndex:]:索引 0 超出了带有 userInfo 的空数组的界限(null)

Posted

技术标签:

【中文标题】-[__NSArrayM objectAtIndex:]:索引 0 超出了带有 userInfo 的空数组的界限(null)【英文标题】:-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array with userInfo (null) 【发布时间】:2014-07-09 16:26:18 【问题描述】:

我尝试将非某些 Core Data 对象与 Core Data 对象混合,我使用 TLIndexPathTools 这样做。

- (TLIndexPathDataModel *)controller:(TLIndexPathController *)controller willUpdateDataModel:(TLIndexPathDataModel *)oldDataModel withDataModel:(TLIndexPathDataModel *)updatedDataModel

    NSMutableArray *sectionInfos = [NSMutableArray array];
    TLIndexPathSectionInfo *section0 = [[TLIndexPathSectionInfo alloc] initWithItems:@[@"item1", @"item2"] name:@"section0"];
    [sectionInfos addObject:section0];
    [sectionInfos addObjectsFromArray:updatedDataModel.sections];
    return [[TLIndexPathDataModel alloc] initWithSectionInfos:sectionInfos identifierKeyPath:nil];

我正在使用 TLIndexPathTableViewController 并像这样设置 TLIndexPathController:

- (void)setupIndexPathController


    NSFetchRequest *fetchRequest;

    NSString *sectionNameKeyPath;
    if (self.product) 


        fetchRequest = [SubMenus getSubMenusForProduct:self.product];

        sectionNameKeyPath = @"group.name";        


    else if (self.cartProduct) 

        fetchRequest = [SubMenuProductCart getSubMenusForProductCart:self.cartProduct];

        sectionNameKeyPath = @"group.subMenusGroup.name";

    


    [TLIndexPathController deleteCacheWithName:@"SubMenuGroupTitles"];

    self.indexPathController = nil;
    self.indexPathController = [[TLIndexPathController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:sectionNameKeyPath identifierKeyPath:nil cacheName:@"SubMenuGroupTitles"];

 NSError *error;
    [self.indexPathController performFetch:&error];

在我的 viewDidAppear 中调用此设置方法以获取和刷新对象。

但是当我调用 [self.indexPathController.dataModel itemAtIndexPath:indexPath];在我的 DidSelectRow 方法中,我遇到了以下崩溃:

 CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  *** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array with userInfo

【问题讨论】:

这可能无关,但您最近是否更改了数据模型文件?如果是这样,请尝试从模拟器/测试设备中完全擦除应用程序并重新编译/安装/运行。 对不起,我刚看到这个(我是 TLIPT 的作者)。在我的脑海中,我看不出这个错误是如何由 TLIPT 引起的(它没有观察到NSManagedObjectContextObjectsDidChangeNotification 通知)。你能发布完整的堆栈跟踪吗? 【参考方案1】:

崩溃似乎是您访问空数组。因此,请始终检查数组中的 nil 和计数大于零的条件,以确保不会发生崩溃。并且还要检查在将对象添加到数组之前,您是否已经初始化了数组。否则它永远不会添加任何对象

【讨论】:

以上是关于-[__NSArrayM objectAtIndex:]:索引 0 超出了带有 userInfo 的空数组的界限(null)的主要内容,如果未能解决你的问题,请参考以下文章

NSArrayM objectAtIndex:索引 6 超出范围

NSArrayM insertObject:atIndex:]: 对象不能为 nil

NSArrayM replaceObjectAtIndex:withObject: 对象不能为 nil'