我找不到太多关于这个的信息,所以我不知道从哪里开始。我要做的是在我的详细信息视图上添加一个 UIButton,这样当我按下它时,它将从表视图加载下一个核心数据对象,类似于“Notes”应用程序。关于如何做到这一点的任何建议?谢谢
4 回答
委托模式怎么样?
使主视图控制器成为详细视图控制器的委托。当您按下“下一步”按钮时,向委托(您的表格视图控制器)发送一条消息。然后,委托将使用下一个对象设置详细视图。
我不会向详细视图控制器添加任何代码来确定下一个对象。您的 tableview 控制器已经有这些方法。
您可以为您的详细信息视图设置一个委托,询问它的主视图在按下按钮时要做什么(或者只是为给定项目提供下一个项目),这是我认为的最佳解决方案,或者保留列表视图控制器都可以访问和查询的单独对象中的模型对象。虽然这不是一个很好的模式,也没有真正反映视图的层次结构,也没有反映面向对象编程的关键规则之一:最小特权规则。
您最好的选择是执行一个获取请求,该请求获取您希望连续加载的所有对象。这实际上不会获取数据,但会“错误”对象。故障基本上为您提供对核心数据实体的引用,而无需实际检索该实体。您的请求将返回一个 NSArray,该 NSArray 根据您加载到获取请求对象中的排序描述符进行排序。然后,您可以拥有一个本地属性来跟踪您当前在 NSArray 中的哪个索引,并在按下 UIButton 时简单地加载数组中的下一个对象。当您从数组加载对象时,核心数据将自动检索该实体的所有属性。
如果您的模型具有与 tableView 中的每个对象对应的唯一值,您可以将对象属性加载到 prepareForSegue 中的字典数组中并将其传递给详细视图,确保它们之间存在一一对应的关系indexPath.row 中的对象和数组的 objectAtIndex。
确保您抓住所选行的索引以确定您在列表中的位置,然后您可以在每次点击 UIButton 时遍历字典数组。如果您需要做的不仅仅是填充详细视图,您可以获取与每个字典对象对应的唯一模型对象。
它不像使用原始对象那样干净,但它解决了 MySpecialPurpose 提到的错误问题。