在创建NSFetchedResultsController时获取objc_exception_throw

时间:2012-08-14 16:15:18

标签: ios core-data

创建NSFetchedResultsController对象时出现以下错误

修改

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Subscriptions" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];

编辑结束

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];


#0  0x977109c6 in __pthread_kill ()
#1  0x96296f78 in pthread_kill ()
#2  0x96287bdd in abort ()
#3  0x0022eb71 in uncaught_exception_handler ()
#4  0x024b70fc in __handleUncaughtException ()
#5  0x0264af0f in _objc_terminate ()
#6  0x052fb8de in safe_handler_caller ()
#7  0x052fb946 in std::terminate ()
#8  0x052fcab2 in __cxa_throw ()
#9  0x0264ade1 in objc_exception_throw ()
#10 0x00617f39 in -[NSFetchedResultsController initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:] ()

我应该开始寻找问题的任何想法。这个错误没有任何帮助。

我已经设置了一个断点并且已经检查了输入 init函数有两个输入,一个是托管对象,第二个是获取请求。

这两个对象都是有效的,不像下面的答案中提到的那样。

**解决方案** 由于Rog

,似乎排序描述符是必需的

1 个答案:

答案 0 :(得分:3)

实际上,这是一个非常有用的错误。如果要在objective-c中编程,则需要习惯于读取这些堆栈跟踪。

它说你给了initWithFetchRequest一些不好吃的东西。事实上,它是如此糟糕,以至于它抛出异常。此外,我们知道你没有异常处理程序,因为调用了std :: terminate,最终程序中止了。

你可以@catch异常并自己处理它以查看问题,或者更好的是,设置一个断点来捕获所有异常(一个很好的建议,因为在objective -c中,异常实际上是例外)。

单击断点窗格(在左侧,带有右箭头看图标)。在底部是一点+。点击它。选择“添加异常断点”,并在抛出它们时使其中断所有异常。

现在,您可以查看实际的异常,它将指导您。最有可能的是,它会告诉您未正确配置提取请求。也可能是你输入了一个糟糕的MOC或其他参数。