Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Can';我不知道该怎么做_Objective C_Xcode_Cocoa_Cocoa Bindings - Fatal编程技术网

Objective c Can';我不知道该怎么做

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

我是一名.net开发人员,正在尝试学习如何在mac上进行cocoa编程。我遇到了一个似乎无法解决的问题

我创建了以下类:

  • ITObject
    -NSObject的子类
  • ITPlayer
    -ITObject的子类
  • ITEnemy
    -ITObject的子类
在我的
main menu.xib
文件中,我有一个包含以下控件的窗口:

  • NSArrayController
    -链接到应用程序委托(iTObject)
  • NSTableView
    -链接到NSArrayController(arrangedObjects)
  • NSTextBox
    -链接到同一个NSArrayController(selection.player)
ITObject是一个NSMutableArray,我使用它来包含任何ITObject类。NSArrayController已设置为使用ITObject作为类。当我将ITPlayer添加到ITObject属性时,文本框不会读取player属性

player属性对于ITPlayer是唯一的。如果player属性不是类的一部分,我希望在文本框中显示“
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;
}