呈现模态视图控制器时崩溃

时间:2011-07-23 00:39:36

标签: iphone core-data uiviewcontroller presentmodalviewcontroller

在我的应用程序中,我有一个功能,当按下一个按钮时,它会显示一个模态视图控制器。有时我必须以编程方式调用相同的函数。但是,每当我必须以编程方式呈现视图时,它就会崩溃。我已经确定这是使它崩溃的代码行。

[self presentModalViewController:controller animated:YES];

我收到错误

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Website''

即使我没有在我的实体中插入新对象。

编辑: 这是以编程方式调用的函数,当按下小节按钮时。

- (void) presentController {
WebController *webController = [[WebController alloc] initWithNibName:@"WebController" bundle:nil];
webController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
webController.delegate = self;
[self presentModalViewController:webController animated:YES];
[webController release];
 }

这是发生错误的代码。

- (NSFetchedResultsController *)fetchedResultsController {

if (fetchedResultsController_ != nil) {
    return fetchedResultsController_;
}

/*
 Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Website" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

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

// Edit the sort key as appropriate.

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];

NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
    /*
     Replace this implementation with code to handle the error appropriately.

     abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return fetchedResultsController_;

}

编辑:当我的应用程序从后台状态恢复时,我从appDelegate调用函数presentController,所以我尝试在我的viewController的viewDidLoad函数中调用相同的函数,并且它不会崩溃。

3 个答案:

答案 0 :(得分:0)

在尝试呈现控制器之前,您确定要初始化控制器吗?

此外,如果您正在使用笔尖,请确保所有插座均已正确连接。

答案 1 :(得分:0)

根据错误消息的片段,问题在于包含以下内容的行:

+[NSEntityDescription entityForName:inManagedObjectContext:]

...方法。

最有可能的,就是你让实体为获取请求提供实体。

答案 2 :(得分:0)

我使用NSNotificationCenter向我的viewController发送消息,告诉它调用方法presentController,该方法在从我的appDelegate发送通知时有效。