iphone - 将 ManagedObjectContext 传递给第二个 View

标签 iphone objective-c cocoa-touch core-data

我正在编写我的第一个 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/

相关文章:

iPhone:UILabel 文本不符合我想要的方式

php - 如何从ios正确上传大文件?

iphone - 如何检查一个词是否在 cocoa touch 的英语词典中定义?

iphone - iPad 照片库中相册的属性

iphone - 为什么我不能设置按钮的阴影颜色?

ios - iphone 上的 CSS 输出与 PC 不同

iphone - 如何在不共享 View 的情况下制作通用的 iPhone/iPad 应用程序?

ios - JSON 文本未以数组或对象开头,并且未设置允许片段的选项

ios - 如何创建一个包含键值对的子NSArray?

ios - 如何在 Parse 的安装类中应用更新删除查询?