Objective c Can';我不知道该怎么做
我是一名.net开发人员,正在尝试学习如何在mac上进行cocoa编程。我遇到了一个似乎无法解决的问题 我创建了以下类:Objective c Can';我不知道该怎么做,objective-c,xcode,cocoa,cocoa-bindings,Objective C,Xcode,Cocoa,Cocoa Bindings,我是一名.net开发人员,正在尝试学习如何在mac上进行cocoa编程。我遇到了一个似乎无法解决的问题 我创建了以下类: ITObject-NSObject的子类 ITPlayer-ITObject的子类 ITEnemy-ITObject的子类 在我的main menu.xib文件中,我有一个包含以下控件的窗口: NSArrayController-链接到应用程序委托(iTObject) NSTableView-链接到NSArrayController(arrangedObjects) N
-NSObject的子类ITObject
-ITObject的子类ITPlayer
-ITObject的子类ITEnemy
main menu.xib
文件中,我有一个包含以下控件的窗口:
-链接到应用程序委托(iTObject)NSArrayController
-链接到NSArrayController(arrangedObjects)NSTableView
-链接到同一个NSArrayController(selection.player)NSTextBox
N/A
”,如果有,我希望绑定显示该值。现在,它什么也没做
有关对象的详细信息:
项目的代码如下所示:
@interface ITObject:NSObject <NSCoding>{
int initiativeRoll, initiativeBonus, initiativeKicker;
}
@property int initiativeRoll, initiativeBonus, initiativeKicker;
@property (readonly) int initiativeTotal, initiativeCalc;
@end
- (void)init{
self = [super init]
if (self){
player = @"undefined";
}
return self;
}
还有一个initWithCoder:method,但我还没有使用它,所以我不认为这是可疑的
非常感谢你的帮助 我通常不向新的Cocoa开发人员推荐绑定,当然也不推荐复杂的绑定。不幸的是,当绑定的配置有一点点错误时,就会倾向于“什么都不做”。这使得它们很难调试,即使对于有经验的开发人员也是如此。绑定在处理与
NSUserDefaults
关联的一大页配置选项时工作得非常好,但是用它构建复杂的UI是一件痛苦的事情
另一方面,你的设置似乎很奇怪。main menu.xib
的所有者几乎总是NSApplication
。您应该将一个新的NSArrayController
拖到XIB上,并按照所述将其连接起来,而不是将其作为文件所有者
我希望您在日志中看到异常。可能“NSArrayController
不响应选择器setDelegate:
”或类似命令。如果您看到这一点,那是因为默认的main菜单
nib文件被配置为将应用程序委托连接到文件所有者
首先,只需引用下面的一段话来强化关于绑定的观点: 使用Cocoa绑定填充基于视图的表视图被认为是一个高级主题。虽然它需要的代码要少得多(在某些情况下根本不需要代码),但是如果您不熟悉该接口,就很难看到绑定。有人严厉地建议,在继续Cocoa绑定之前,您应该熟悉以编程方式使用基于视图的表视图的技术 我喜欢这一节中的“严厉”一词。经过多年的有绑定和无绑定的开发,我倾向于避免使用它们,除非是在最简单的情况下(比如偏好面板,它们非常有用) 如果没有绑定,您将按照中的说明进行操作。基本上,您将实现
numberOfRowsInTableView:
和(假设为10.7+)tableView:viewForTableColumn:row:
。对于每一行和每一列,您都会返回一个包含所需数据的视图。这是从iOS的方式做事情,非常好,非常灵活
如果您需要10.7之前的版本,那么事情会稍微复杂一些,但仍然比绑定更简单。看见这将使用NSCell
而不是NSView
。如果您只需要一个简单的表来显示类似字符串的数据,这并不难。只需实现numberOfRowsInTableView:
和tableView:objectValueForTableColumn:row:
。后者应该返回可以强制转换为字符串的内容
如果您需要10.7之前版本的自定义
NSCell
,请使用文档自行试用,然后您可能会有一些新问题要发布。您的描述很好。建议您包含代码,以便更容易帮助您进行调试。实际上没有太多代码可显示。大多数ITObject都有几个属性,ITPlayer和ITEnemy还有几个属性。我想这更多是因为我对Cocoa绑定缺乏了解……我不知道如何发布,哈哈。你是对的,它与文件的所有者无关,而是链接到AppDelegate类的“App Delegate”对象。你能告诉我如何在不使用绑定的情况下处理这个问题吗?感谢您。+1为新开发人员避免绑定。当绑定是全新的(10.3?)时,我开始了OS X开发,它的简单性吸引了我,但正如你所说的,最轻微的复杂性和它的一切都停止了,作为一个新的开发人员,你已经无处可去了(在那些日子里不是这样!)我在帖子中做了更正,以显示NSArrayController链接到我的.xib文件中的App Delegate对象。一切正常,除了我不能绑定到子类属性,因为我有使用超类(ITOBject)的NSArrayController。如果有人能给我指一篇教程或文章,或者一些可以描述另一种方法来做我想做的事情的东西,我会非常感激。这很有帮助,但我认为我(在实现这一点之后)遇到的主要问题是,我不完全理解在objective c中子类是如何工作的。在.net中,我可以这样做:ITObject myObj=newitplayer()代码>这将转换为目标c,作为ITObject*myObj=[[ITPLayer alloc]init]
但是当我为播放器向myObj发送消息(比如:[myObj player]
)字符串时,它什么也不做。这是谁
- (void)init{
self = [super init]
if (self){
player = @"undefined";
}
return self;
}