1

我有一个UITableView使用 CoreData SQLLite 数据源的NSManagedObjectContext.

如果我没有正确理解这个术语,请原谅我,因为我现在才几天,所以我只是在学习。

我刚刚完成了一个模式视图的设置,让我可以将新项目添加到我的数据源中。所以,我现在的逻辑基本上是:将项目添加到数据源,刷新表格视图,我现在可以看到我的新项目已列出。

不过,我想更进一步,并执行我已设置的 segue,然后在UITableViewCell单击任何项​​目时发生。因此,我将使用该performSegueWithIdentifier:sender方法在代码中启动该 segue。但是,发件人必须是UITableViewCell

所以,鉴于我拥有的东西,我有刚刚添加到数据源中的数据,但不知道数据源中新项目的索引。我需要使用该数据来定位UITableViewCell新创建的项目。

关于如何做到这一点的任何想法?我一直在环顾四周,但没有看到任何看起来像我期望看到的示例代码。

下面是我将新项目从我的模式视图添加到数据源的代码:

#pragma mark - ComposeThreadViewControllerDelegate Methods

- (void)composeThreadViewController:(ComposeThreadViewController *)controller didFinishComposing:(Thread *)thread {

    // get the context
    NSManagedObjectContext *context = [(id)[[UIApplication sharedApplication] delegate] managedObjectContext];

    // add this new thread to our local cache
    NSManagedObject *managedThread = [NSEntityDescription insertNewObjectForEntityForName:@"Thread" inManagedObjectContext:context];

    [managedThread setValue:thread.id forKey:@"id"];
    [managedThread setValue:thread.title forKey:@"title"];
    [managedThread setValue:thread.author forKey:@"author"];
    [managedThread setValue:thread.text forKey:@"text"];
    [managedThread setValue:thread.location forKey:@"location"];

    //save the new thread
    [context save:nil];

    // begin refreshing the list of threads
    [self.tableView reloadData];

    // dismiss the modal view
    [self dismissModalViewControllerAnimated:YES];

    // bring up the view item view
    [self performSegueWithIdentifier:@"viewThreadSegue" sender:self];

}
4

2 回答 2

1

为什么需要对象的索引路径?这是表视图的实现细节,它管理对象的表示。

如果您需要对象,为什么不将托管对象作为发送者传递呢?

[self performSegueWithIdentifier:@"viewThreadSegue" sender:managedThread];

现在,在您的 performSeque 中,您可以将托管对象传递给视图控制器。无需使用与您正在做的事情不自然的索引路径来污染您的所有代码。

注意:您可以向对象询问其托管对象上下文...

managedThread.managedObjectContext
于 2012-08-06T02:47:19.407 回答
0

据我所知,为 Mac OS X 学习可可,您不需要实现数据源协议。您只需将数组控制器拖到界面生成器中,在身份检查器中将模式设置为实体名称,然后输入名称您创建的数据源实体。在此之后,您只需将表视图的每一列绑定到您要表示的数组控制器的键。

于 2012-08-06T02:09:48.227 回答