iOS:[self.fetchedResultsController performFetch:&error];让我的应用崩溃
Posted
技术标签:
【中文标题】iOS:[self.fetchedResultsController performFetch:&error];让我的应用崩溃【英文标题】:iOS: [self.fetchedResultsController performFetch:&error]; makes my app to crash 【发布时间】:2011-05-11 07:09:34 【问题描述】:我有一个 UITableViewController,我想为它提供核心数据模型的内容。 但是,当我获取内容时,我的应用程序崩溃了。这是 init 方法(我将 NSManagedObjectContext 传递给它)。
- (id)initInManagedObjectContext:(NSManagedObjectContext *)context
self = [super initWithStyle:UITableViewStylePlain];
if (self)
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:context];
request.predicate = nil;
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"idDoc"
ascending:YES]];
/*
NSError *error = nil;
NSManagedObject *retrievedDocument = [[context executeFetchRequest:request error:&error] lastObject];
NSLog(@"retrievedDocument %@", retrievedDocument);
*/
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:@"CollectionCache"];
self.fetchedResultsController = frc;
[frc release];
[request release];
//HERE IT CRASHES
NSError *error;
[self.fetchedResultsController performFetch:&error];
if (error)
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//exit(-1); // Fail
return self;
我确定上下文已正确传递,因为如果我取消注释已注释的 sn-p,则存储的数据将正确打印。
我的猜测是 fetchedResultsController 出了点问题。
谢谢
【问题讨论】:
崩溃发生后堆栈跟踪和控制台说什么? @Nick Weaver 控制台什么也没说。 xCode 高亮显示实例 DisplayResutsTableViewController *resultsTableView = [[DisplayResutsTableViewController alloc] initInManagedObjectContext:self.managedObjectContext];带有以下消息:“线程 1:程序接收到的信号:”EXC_...”我无法阅读完整的消息,但我想这是关于内存访问的。 @Patrick Enable NSZombie 为您的活动可执行文件,看看控制台输出是否产生新的东西。 @Nick Weaver 我已经在我的 xCode4 (d.pr/vuye) 中设置了它,我还尝试从你的链接中添加代码行,看看它是否有效。仍然检测到他们线路中的 BAD Memory Access 错误,但我的控制台仍然没有说任何东西,奇怪。 嗯,好吧,让我们尝试划掉一些东西:属性 fetchedResultsController 是如何声明的? 【参考方案1】:异常与您错误使用performFetch:
有关
它返回一个 BOOL,告诉您获取成功。如果你得到一个 NO 返回,你就可以检查 NSError 对象。否则你不能碰它。
可能所有使用 &error 的方法都应该这样使用:
NSError *error;
if (![self.fetchedResultsController performFetch:&error])
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//exit(-1); // Fail
【讨论】:
【参考方案2】:异常与 fetchedResultsController 无关,但由于未初始化 NSError
NSError *error = nil;
【讨论】:
您没有正确使用 API。见Handling Error Objects Returned from Methods。以上是关于iOS:[self.fetchedResultsController performFetch:&error];让我的应用崩溃的主要内容,如果未能解决你的问题,请参考以下文章