代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

在对象中使用自我?

  •  0
  • fuzzygoat  · 技术社区  · 15 年前

    我本来以为这是可行的,只是想如果我在本地声明了另一个名为“TableView”的变量,它就会失败。

    NSLog(@"X: %@", [tableView delegate]); // Fails: tableView undeclared
    

    .

    NSLog(@"X: %@", [[self tableView] delegate]); // Works:
    

    这是因为您需要自己引用实际对象上的项吗?

    NB: 此代码位于UITableViewController内,因此委托是UITableView上的属性。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Dave DeLong    15 年前

    这是因为第一个选项正试图访问一个名为 tableView 不存在。(您可以通过转到“文件”菜单,选择“快速打开”,然后键入“uitableviewcontroller.h”来验证这一点。你会看到 UITableViewController 没有 表格视图 伊瓦尔)

    第二个是通过方法访问TableView -tableView 这是获得批准的方法。

    顺便说一下,如果这是 表格控制器 子类,然后 [[self tableView] delegate] 应该是 self (但我假设你知道这一点)。

        2
  •  3
  •   Firoze Lafeer    15 年前

    对象中的实例变量与属性(objc中的@property语法)之间存在差异。

    当你说

    [tableView delegate]
    

    您所引用的实例变量“TableView”实际上不存在。通常,uikit中的实例变量以下划线开头,消息是您不应该直接使用它们。

    另一方面:

    [[self tableView] whatever...] //OR
    [self.tableView whatever]
    

    引用了名为“TableView”的UITableView上的属性。确实存在。属性是访问该视图的文档化方式,所以这就是您真正想要访问它的方式。

    希望有帮助。

    编辑:哎呀,又慢了!前面的答案是相同的。