使用 setDataSource 升级到 Xcode 4.6 后出现编译器错误
Posted
技术标签:
【中文标题】使用 setDataSource 升级到 Xcode 4.6 后出现编译器错误【英文标题】:Compiler error after upgrading to Xcode 4.6 using setDataSource 【发布时间】:2013-08-20 16:28:36 【问题描述】:我正在升级一些项目以使用 Xcode 4.6 和 Clang LLVM 编译器,但我遇到了一个错误。我不是最大的 obj-c 极客,所以我有点卡在这里。我认为这个question 触及了我的问题的基础,但并没有给我一个解决方案。
我的类派生自 NSTableView (@interface MyClass : NSTableView
) 但当我进行以下调用时:
[self setDataSource:self];
我收到以下错误:
Cannot initialize a parameter of type 'id<NSTableViewDataSource>' with an lvalue of type 'MyClass *'
使用 Xcode 3.2.6 并没有遇到此调用的问题,但现在我很难理解为什么会出现错误。我确实在此调用之前添加了一些表列并设置了一些属性,但基本上我从上面的调用中得到了错误。
感谢任何帮助。
【问题讨论】:
你的类似乎没有实现数据源协议。 【参考方案1】:首先,您的表格视图应该不是它自己的数据源。这打破了 Cocoa 使用的MVC model。视图应该只关心显示/呈现数据,它不应该存储数据(这是模型的工作),也不应该是视图与模型接口的类(这是控制器的工作)。
通常,数据源将是符合NSTableViewDataSource
和协议的NSViewController
:
@interface MyViewController : NSTableViewController <NSTableViewDataSource, NSTableViewDelegate>
【讨论】:
是否可以在不添加新类和接口的情况下做到这一点? 至少,您必须实现NSTableViewDataSource
协议。不过,我非常建议重构您的架构。它目前已损坏,使您的代码的可重用性降低,并且难以调试和单独测试。与其让它溃烂,不如现在就把它扼杀在萌芽状态。
感谢您的 cmets! :)以上是关于使用 setDataSource 升级到 Xcode 4.6 后出现编译器错误的主要内容,如果未能解决你的问题,请参考以下文章
MediaPlayer.setDataSource(String) 不适用于本地文件
如何使用 Kendo UI Grid 的 SetDataSource 方法
Android:MediaPlayer.setDataSource(FileDescriptor fd) vs MediaPlayer.setDataSource(FileDescriptor fd,