我已经完成了Aaron Hillegass的MAC OS X可可编程,并完成了所有与NStablevIEw和可变数组相关的练习,我一直在尝试修改它们以满足我的需求.
但是,它们似乎都没有使用带有对象作为数据源的数组,它似乎使用tablevIEw作为数据源.
我正在尝试实现Jonas Jongejan对我的代码here的“重做”,使用Cocoa前端来显示结果.
我知道的任何指示或建议应该很简单,但我在这里的荒野中迷失了.
我可以通过设置数组填充表
解决方法 一旦你理解它(当然!),它真的很简单.您不能直接将NSArray用作表源.您需要创建一个实现 NSTableViewDataSource的自定义对象,或者在某个现有类中实现该协议 – 通常是控制器.如果使用Xcode创建基于标准文档的应用程序,文档控制器类(它将被称为Mydocument)是一个很好的类.您需要至少实现以下两种方法:
– numberOfRowsIntableVIEw:– tableVIEw:objectValueFortableColumn:row:
如果您有一个可变数组,其值要在具有一列的表视图中使用,则以下内容应作为开头:
– numberOfRowsIntableVIEw: (NStableVIEw*) atableVIEw{ return [myMutableArray count];}– tableVIEw: (NStableVIEw*) atableVIEw objectValueFortableColumn: (NStableColumn *)atableColum row: (NSInteger)rowIndex{ return [myMutableArray objectAtIndex: rowIndex];}
我刚刚想到你可以将上面两个方法作为一个类别添加到NSArray中,用self替换myMutableArray然后你可以使用一个数组作为数据源.
无论如何,使用可变数组,重要的是每次更改它时,都需要让表视图知道它已被更改,因此您需要发送表视图-reloadData.
如果您的表视图有多个列,并且您希望使用数组中的对象属性填充它,那么您可以采用一种技巧来使自己更容易.假设数组中的对象是一个名为Person的类的实例,并定义了两个方法:
-(Nsstring*) givenname;-(Nsstring*) familyname;
并且您希望表视图具有每个列的列,您可以将每列的标识符属性设置为该列显示的Person属性的名称,并使用如下所示的内容:
– tableVIEw: (NStableVIEw*) atableVIEw objectValueFortableColumn: (NStableColumn *)atableColum row: (NSInteger)rowIndex{ Person* item = [myMutableArray objectAtIndex: rowIndex]; return [item valueForKey: [tableColumn IDentifIEr]];}
如果用valueForKeyPath:替换valueForKey:并且Person类也有以下方法:
-(Person*) mother;-(Person*) father;-(Nsstring*) fullname; // concatenation of given name and family name
您可以添加具有以下标识符的表列:father.fullname或mother.familyname,这些值将自动填充.
总结以上是内存溢出为你收集整理的objective-c – 从可变数组中填充NSTableview全部内容,希望文章能够帮你解决objective-c – 从可变数组中填充NSTableview所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)