【问题标题】:How to implement default of NSFetchedResultsControllerDelegate如何实现 NSFetchedResultsControllerDelegate 的默认值
【发布时间】:2012-01-09 12:07:45
【问题描述】:

如何使用默认实现将上述协议实现到我现有的视图控制器?

谢谢

【问题讨论】:

    标签: objective-c ios cocoa-touch core-data


    【解决方案1】:

    协议是一种影响另一个类的实例的行为或在另一个类的实例即将做某事、正在做某事或已经做某事时被告知的方式。

    要更改该类的实例的行为,您可以指定一个对象,有时是实例化该类的对象,作为它的委托,然后,当实例到达您可以影响它或它想要的点时让你知道一些事情,它会检查它是否有一个委托,然后看看那个委托是否甚至想要那个消息(即,如果委托实现了那个委托方法)。如果两者都为真,则发送协议中定义的消息。

    NSFetchedResultsControllerDelegate 协议有 5 个可以实现:

    响应变化

    – controllerWillChangeContent:
    – controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
    – controller:didChangeSection:atIndex:forChangeType:
    – controllerDidChangeContent:
    

    自定义部分名称

    – controller:sectionIndexTitleForSectionName:
    

    这些都不是@required 来实现协议,所以如果你说你的类符合<NSFetchedResultsControllerDelegate> 那么“默认实现”是不实现任何这些方法,但你最好不要在在那种情况下。

    如果您提供有关您想要完成的任务的更多详细信息,也许我们可以为您提供更多帮助。

    【讨论】:

    • 类没有委托。实例将检查它是否有委托并尝试向其发送消息。
    • @PeterHosey 是的。我澄清了。我不想只说对象,因为我试图强化协议如何帮助您“改变”其他类而不必子类化。
    【解决方案2】:

    您的问题对我来说似乎有点不清楚——jackslash 的答案是解释“默认实现”的一种方式(也是一个很好的答案)。但我怀疑你的意思可能是,“我如何实现NSFetchedResultsControllerDelegate 协议,以便用户看到与其他应用程序中相同的标准表格视图行为(例如,用于编辑、删除、插入、重新排序的动画) ?”

    如果是这样的话……确实,如果您从头开始,从协议文档中可以看出并不完全简单。

    但您不必从头开始。我建议您查看直接从 Xcode 4.3 中的模板获得的代码:使用 Master-Detail Application 模板制作一个新应用,并确保选中 Use Core Data,并且该项目将包含一个表格视图控制器,其协议的实现可以很好地处理您需要的所有内容。

    再次详细说明您所追求的结果以及您已经探索的途径,有助于我们更好地回答您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2022-06-23
      • 2011-04-29
      • 2014-12-06
      • 2017-04-04
      相关资源
      最近更新 更多