我有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];
}
答案 0 :(得分:1)
为什么需要对象的索引路径?这是表视图的实现细节,它管理对象的表示。
如果您需要该对象,为什么不将托管对象作为发件人传递?
[self performSegueWithIdentifier:@"viewThreadSegue" sender:managedThread];
现在,在您的performSeque中,您可以将托管对象传递给视图控制器。无需使用与您正在执行的操作不自然的索引路径污染所有代码。
注意:您可以询问对象的托管对象上下文...
managedThread.managedObjectContext
答案 1 :(得分:0)
据我所知,为Mac OS X学习cocoa,您不需要实现数据源协议。您只需将数组控制器拖到界面构建器,在身份检查器中将模式设置为实体名称,然后键入您创建的数据源实体的名称。此后,您只需将表视图的每一列绑定到要表示的数组控制器的键。