使用 NSFetchedResultsController 和 CoreData 将选定的行传递给另一个表视图控制器

Posted

技术标签:

【中文标题】使用 NSFetchedResultsController 和 CoreData 将选定的行传递给另一个表视图控制器【英文标题】:Passing a Selected Row to Another Table View Controller With NSFetchedResultsController and CoreData 【发布时间】:2013-11-14 18:30:05 【问题描述】:

我对这个问题有点缺乏了解,如果能提供任何帮助,我们将不胜感激。

我有一个带有加号按钮的表格视图;用户会看到一个模态视图,然后在文本字段中插入一些文本。当他们单击保存时,它被添加到核心数据数据库并保存到表视图中。

这完全没有问题。

我想要实现的是允许用户单击任何单元格并在新的表格视图上推送该特定条目,以显示有关已单击该单元格的更多信息。有了这个,我想将新视图控制器的标题设置为所选行的信息等。

我理解这个概念,而且我知道这似乎并不难实现,但由于这是我的第一个应用程序,我忽略了一些基本概念,我发现很难理解这个概念.

第一个问题是:我是实现 didSelectRowAtIndexPath 还是 prepareForSegue?

NSManagedObjectContext 正在从 App Delegate 中使用,因此我希望传递所选单元格的信息,以便在更改视图控制器的标题时可以从核心数据中显示信息。

通过阅读多个问题和资源,我似乎并没有更接近于理解我将如何实现这一目标。

我是否必须在新视图控制器中创建一个属性来“保存”传递的值?

我对此感到迷茫,因此我们将不胜感激!

【问题讨论】:

【参考方案1】:

当用户选择一个单元格时调用方法 didSelectRowAtIndexPath。这样,您的应用将知道用户正在选择哪个单元格,并且您可以在用户选择单元格后处理来自该单元格的触发操作的信息。

当你告诉你的应用去另一个 View Controller 使用时,方法 prepareForSegue 被调用

 [self performSegueWithIdentifier:@"YourIdentifier" sender:self]. 

在 prepareForSegue 上,您将设置目标 View Controller 以及在该应用更改视图之前要传递哪些信息。重要的是要知道您需要在目标视图控制器上创建属性(NSString、NSArray 等)才能访问第一个。

如果我理解您的问题,您可以在用户选择一行 (didSelectRowAtIndexPath) 时调用 [self performSegueWithIdentifier:@"YourIdentifier" sender:self],然后设置您想在第二个视图控制器上显示的信息。

如果您需要示例代码,请告诉我。祝你好运!

【讨论】:

非常感谢 scollaco!这非常有帮助!我仍然有点困惑,但这确实为我指明了正确的方向。我不完全确定我会在我的应用程序中使用哪种方法。我只需要将选定的单元格传递给下一个视图,它始终是我传递给它的同一个视图控制器。一旦我传递了单元格,我就可以使用获取请求和谓词来显示来自核心数据的该单元格的信息..任何示例代码都会非常有帮助,因为我仍然有点迷茫!谢谢 你需要传递什么样的对象? NSArray、NSString、NSDictionary?我只是要求写一些示例代码:)

以上是关于使用 NSFetchedResultsController 和 CoreData 将选定的行传递给另一个表视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

核心数据保存竞争条件错误

在 Swift 3 中难以配置 NSFetchedResultsController

为啥 beginUpdates/endUpdates 会重置表视图位置以及如何阻止它这样做?

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?