iphone - 如何为从应用程序中的不同位置创建的对象实现委托(delegate)

标签 iphone ios delegates nsuserdefaults

更具体地说,我有一个应用程序,它有多个 tableViews,可以向下钻取数据以在详细 View 中显示图像。显示详细 View 时,应用程序会将此 View 图像(其名称)添加到最近查看的图像数组中。最近查看的图像显示在应用程序第一个屏幕的表格 View 中。

问题在于详细 View 是由 tableView 列表行末尾的 tableView 创建的。当点击最近的项目时,详细信息 View 也会由第一个 tableView 创建。

我尝试将第一个 tableView 设置为详细 View 的委托(delegate),以接收新图像已在详细 View 中显示的通知。我意识到当输入新项目时它永远不会调用委托(delegate)方法,因为详细 View 是在其他地方创建的。

我认为我需要重新考虑我的应用程序设计以及谁应该保存最近查看的图像的数据。我认为第一个 View 应该保存该数据,因为它是显示数据的 View ,但我对如何以考虑良好的代码设计的方式做到这一点感到有点困惑。我可以让它与 NSUserDefaults 一起使用,但我不确定这是否真的应该用于它的用途,或者这是否是最佳实践。

我感谢所有的意见。

杰米

最佳答案

我会在这里看到一些解决方案:

1)继续使用 NSUserDefaults,LRU(我猜是最近使用的)列表通常会保存到用户首选项中,无论设计是好是坏。如果它不需要太多空间并且适合您,就继续吧。

2) 为 LRU 建立一个公共(public)上下文,可能使用单例,可以从整个应用程序访问它,将图像放在那里并在需要时随时取回它们。实际上,您可以使用类方法创建其接口(interface),而不必费心使其成为真正的单例。类方法委托(delegate)了一个易于访问的良好静态上下文。在 ObjC 中,它们甚至可以被覆盖!与 Java 相比,这有点酷。

3) 使用工厂模式创建 View :有一个工厂类知道委托(delegate),创建新 View 将再次使用类方法实现:每个创建方法都会为每个 View 设置一个已知委托(delegate),无论创作点。

4)现在这个确实有点矫枉过正,但非常非常“不耦合”:使用最近使用的图像发送通知。那些有兴趣了解它们的人会注册成为观察者,然后获取图像......

关于iphone - 如何为从应用程序中的不同位置创建的对象实现委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6172871/

相关文章:

ios - Swift:在 Struct 中声明委托(delegate)

iphone - 黑白 imageNamed 和 imageWithContentsOfFile 的区别

iphone - iOS 智能应用横幅 - 在 iPad 上显示,而不是在 iPhone 上显示

objective-c - RGB 到 HSL 的转换似乎在数值上还可以,但在视觉上却不是这样

ios - 我应该在哪里加载 UISwitch 的状态?

.net - VB.NET:线程函数调用比直接调用函数慢?

iOS 委托(delegate)不使用 performSegueWithIdentifier?

ios - 在 iOS 的 subview 中放置 Facebook SDK 按钮

ios - 添加行后如何更新 UITableView?

iphone - 将数据传回前一个 View Controller