gpt4 book ai didi

iphone - 将 ManagedObjectContext 传递给第二个 View

转载 作者:太空狗 更新时间:2023-10-30 03:30:32 26 4
gpt4 key购买 nike

我正在编写我的第一个 iPhone/Cocoa 应用程序。它在导航 View 中有两个 TableView 。当您触摸第一个 TableView 中的一行时,您将被带到第二个 TableView 。我希望第二个 View 显示与您在第一个 View 中触摸的行相关的 CoreData 实体的记录。

我在第一个表格 View 中显示了 CoreData 数据。您可以触摸一行并转到第二个表格 View 。我能够将所选对象的信息从第一个 View 传递到第二个 View 。但是我无法让第二个 View 进行自己的 CoreData 获取。在我的一生中,我无法将 managedObjectContext 对象传递给第二个 View Controller 。我不想在第一个 View 中进行查找并传递字典,因为我希望能够使用搜索字段来优化第二个 View 中的结果,以及从那里向 CoreData 数据插入新条目。

这是从第一个 View 转换到第二个 View 的函数。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here -- for example, create and push another view controller.
NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];

secondViewController.tName = [[selectedObject valueForKey:@"name"] description];
secondViewController.managedObjectContext = [self managedObjectContext];

[self.navigationController pushViewController:secondViewController animated:YES];
[secondViewController release];
}

这是崩溃的 SecondViewController 中的函数:

- (void)viewDidLoad {
[super viewDidLoad];

self.title = tName;

NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) { // <-- crashes here
// Handle the error...
}
}

- (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.
// **** crashes on the next line because managedObjectContext == 0x0
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SecondEntity" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

// <snip> ... more code here from Apple template, never gets executed because of the crashing

return fetchedResultsController;
}

关于我在这里做错了什么有什么想法吗?

managedObjectContext 是一个保留的属性。

更新:我插入了一个 NSLog([[managedObjectContext registeredObjects] description]);在 viewDidLoad 中,看起来 managedObjectContext 被传递得很好。不过,还是崩溃了。

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“+entityForName:无法找到实体名称“SecondEntity”的 NSManagedObjectModel”

最佳答案

您可以通过首先转换您的应用程序委托(delegate)来抑制协议(protocol)中未找到的“-managedObjectContext”警告:

if (managedObjectContext == nil) { managedObjectContext = [(MyAppDelegateName *)[[UIApplication sharedApplication] delegate] managedObjectContext]; }

关于iphone - 将 ManagedObjectContext 传递给第二个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1074539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com