ios - 使用 prepareForSegue : sender: or tableView: didSelectedRowAtIndexPath: 移动到另一个 View Controller

标签 ios objective-c core-data uitableview

我现在正在构建一个基于核心数据的 iOS 应用程序,我希望用户在基于核心数据和 NSFetchedResultsController 的 UITableViewController 中点击一个单元格,让他移动到另一个 View Controller ,他可以看到那里有详细的项目。

在 iOS Master-Detail 模板应用程序中,当用户点击任何单元格时, View Controller 会使用 Storyboard转场移动到详细 View Controller 以显示详细项目。

但是,我不知道为什么这个方法 prepareForSegue: sender: 可以响应用户的点击并被调用以移动到详细 View 。如果您使用的是 UITableView,还有一个名为 tableView: didSelecteRowAtIndexPath: 的委托(delegate)方法,它应该对用户的点击操作做出准确的 react 。

实际上,当我尝试编写后一种方法以移动到详细 View Controller 时,转换失败了,因为我显然同时调用了这两种方法。

所以我的问题是,1) prepareForSegue: sender: 方法如何响应用户的点击操作并相应地处理其内部实现,以及 2) 如果我可以同时使用 prepareForSegue : sender:tableView: didSelecteRowAtIndexPath:,我应该使用哪一个?

无论采用何种方式,我都想使用 NSFetchedResultsController 从 Persistent Store 中获取被点击的单元格的详细数据,并将它们显示在详细 View Controller 中。如果是这样,那么我应该在哪里编写获取的代码(在上面的任一方法中,或者在详细 View Controller 的 viewDidLoad: 方法中)?

我使用 iOS 7 和 Xcode 5。谢谢。

最佳答案

如果您将 segue 从一个 View Controller 连接到另一个 View Controller ,而不是直接从 UI 元素连接,您可以使用 performSegue:withIdentifier: 在您需要执行时准确执行 segue .

因此,在 TableView 转入其他 View 的情况下,在 didSelectRowAtIndexPath: 方法中,您将从所选行中获取一些数据,并准备将其发送到目的地 View Controller 。

然后在此结束时,调用 performSegue:withIdentifer:

作为 segue 过程的一部分,prepareForSegue:sender: 被调用(在这种情况下,在原始 TableView Controller 上调用)。在这个方法中,你有一个对源 View Controller 的引用(通过 self)和目标 View Controller (通过 [segue destinationViewController]),所以它在这个方法中您将数据从 self 传递到 [segue destinationViewController]

本质上,您应该使用 didSelectRowAtIndexPath: 来处理任何行选择逻辑并准备要传递的数据(也许将其保存到 @property),然后在 prepareForSegue 中,您执行传递数据所需的所有逻辑。

关于ios - 使用 prepareForSegue : sender: or tableView: didSelectedRowAtIndexPath: 移动到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354696/

相关文章:

ios - 向网络服务发送参数

java - Objective C 中的构造函数、静态方法和类变量

iphone - AppStore核心数据更新

ios - 使用 Objective C 创建并从 Swift 获取的核心数据

ios - NSPredicate 收集 NSManagedObject 请求失败

ios - 如何在 iOS 中打开和关闭通知?

ios - 试图添加一个已经有父节点 : <SKScene> name :'(null)' frame:{{0, 0}, {1, 1}} 的 SKNode

objective-c - 无法调用从 Obj-C 抛出并返回非 void 的 Swift 类中的方法

ios - 在哪些错误之后应该重新启动网络任务?

objective-c - Objective-C 何时隐式转换为 BOOL?