Objective c _PFBatchFaultingArray对象索引:

Objective c _PFBatchFaultingArray对象索引:,objective-c,xcode4.3,Objective C,Xcode4.3,有什么问题 它就在主干道中断。所以我甚至不知道是哪条线引起的 提示:在模拟器上运行。在我的iPhone上运行。没有在我朋友的iPhone上运行。您确实没有提供足够的信息进行任何猜测。。。但你在这里: 您是否使用核心数据?有人认为您的CoreData包含数据,但当被问到时却没有。当有人向fetchedResultsController.FetchedObject请求第一个对象(崩溃报告中提到的索引0)时,会发生崩溃,但该对象不存在(超出崩溃报告中的界限0) “索引超出边界”是一个与数组相关的通用错

有什么问题

它就在主干道中断。所以我甚至不知道是哪条线引起的


提示:在模拟器上运行。在我的iPhone上运行。没有在我朋友的iPhone上运行。

您确实没有提供足够的信息进行任何猜测。。。但你在这里:

  • 您是否使用核心数据?有人认为您的CoreData包含数据,但当被问到时却没有。当有人向fetchedResultsController.FetchedObject请求第一个对象(崩溃报告中提到的索引0)时,会发生崩溃,但该对象不存在(超出崩溃报告中的界限0)
  • “索引超出边界”是一个与数组相关的通用错误注释。错误报告说有人请求数组的第一项(索引0),但该数组为空(边界0)。那是撞车
  • 解决方法是在你向索要数据之前,确保有数据。一种方法是检查

    2012-06-15 17:53:25.532 BadgerNew[3090:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (0) beyond bounds (0)'
    *** First throw call stack:
    (0x353f688f 0x3779d259 0x353f6789 0x353f67ab 0x35d5fee3 0x5a5c9 0x59fd3 0x43819 0x32e63c8b 0x38153 0x38309 0x32e63c8b 0x4142d 0x32e63c8b 0x32ec363d 0x32ec35db 0x32ec2f15 0x32ec2c49 0x35d21 0x32e62cab 0x32e5c7dd 0x32e2aac3 0x32e2a567 0x32e29f3b 0x36fe922b 0x353ca523 0x353ca4c5 0x353c9313 0x3534c4a5 0x3534c36d 0x32e5b86b 0x32e58cd5 0x35a73 0x35a54)
    terminate called throwing an exception(lldb) 
    
    无论如何,我最好的猜测是PFBatchFaultingArray指的是CoreData,这意味着没有简单的答案


    您是否有身份验证失败,这迫使CoreData更新,但FRC仍指向旧数据?当“旧”frc认为仍然有和上次一样多的数据,但CoreData中的“新”数据实际上数量较少时,崩溃就会发生。然后,UITableView自动更新将请求行的数据,该行不再存在==崩溃。然后,在任何人尝试使用数据之前,您需要刷新FRC。只有您知道何时何地可以进行刷新。

    好的,我想我已经找到了原因。这是因为NSFetchedResultsController中存在缓存。糟透了。如果您甚至将NSSortDescriptor从升序更改为降序,则必须手动删除缓存

    因此,当上下文发生变化而缓存没有意识到这一点时,它会变得恼怒,并抛出与您看到的错误类似的错误。当您在XCode中点击build时可能会发生这种情况:上下文没有保存(并且丢失了数据),但是缓存认为它应该保存,当它以零数据重新启动时,它会感到惊讶,并且不知道如何处理它

    删除缓存可以解决此问题。我认为这可能是苹果停止在UICollectionViewController中使用它的原因。就是这样一个问题

    编辑:检查行/节是否未超过NSFetchedResultsController的相应计数不起作用,因为它认为数据应该在那里,但它不在那里。

    如果在NSFetchRequest上设置“PropertiesTotch”,并且如果数据库中的这些属性为零,则也会出现此错误

    解决方法是使该属性成为可选属性,而不预取它

    例如:

    如果“学生背包”是你的模型

    if ([myArray count] > index)
        value = [myArray objectAtIndex:index];
    

    背包为零时会发生崩溃。

    NSFetchedResultsController.deleteCacheWithName()
        let fetchRequest = ...
        fetchRequest.propertiesToFetch = ["backpack"]
    
        ...