2012-08-14 68 views
0

创建NSFetchedResultsController对象时越来越objc_exception_throw创建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函数有两个输入,一个是管理对象,第二个是获取请求。

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

** **解决方案 看来,排序描述符是强制性的,感谢罗格

+0

您可以发布在控制台中打印的异常消息吗? – 2012-08-14 16:23:25

+0

在该行放置一个断点。检查'initWith ...'的所有输入是否有效。 – Mundi 2012-08-14 16:47:40

+0

@mundi检查我的编辑请 – Anand 2012-08-16 11:28:16

回答

3

其实,这是一个非常有用的错误。如果你打算用objective-c编程,你需要习惯于读取堆栈跟踪。

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

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

单击断点窗格(在左侧,带有向右箭头的图标)。底部是一点+。点击它。选择“添加异常断点”并让它在所有异常点处抛出。

现在,你可以看看实际的异常,它会引导你。很可能,它会告诉你取回请求没有正确配置。它也可能是你给它一个糟糕的MOC或其他参数。

+0

检查我的编辑请求 – Anand 2012-08-16 11:28:31

+0

猜猜这是提取请求毕竟,我没有提供排序描述符,这真的很奇怪,因为我不关心它。 – Anand 2012-08-16 11:44:20