访问其他类的财产

时间:2012-07-02 14:21:16

标签: objective-c properties

我有一个UIViewController有三个视图:Category - >子类别 - >详细视图。子类别和详细信息视图的内容取决于在“类别”视图中单击的行。这是通过名为“categoryClicked”的属性完成的,并在sub-category.m文件中声明。它的值在category.m文件中由以下代码行给出。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];

    sub.categoryClicked = [_categoryArray objectAtIndex:indexPath.row];
    [self.navigationController pushViewController:rubrieken animated:YES];

}

这完全正常,直到我想在Detail View中使用categoryClicked的值。在category.m和DetailView.m子类别中都导入了.m。出于测试目的,我在Detail View.m文件中添加了一个标签,我有以下代码:

Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];

label.text = sub.categoryClicked;

我确信这段代码应该可以完成这项工作,但事实上我得到了一个空标签。有没有人能告诉我我做错了什么。

修改
categoryClicked是在Sub-category.h中声明的属性,并在Sub-category.m中合成。 想发布更多代码,但没有更多相关代码。

2 个答案:

答案 0 :(得分:0)

这一行...

Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];

...创建一个新的Sub-category。由于它是新的,它不知道有什么信息被提供给其他Sub-category对象。如果要访问其数据,则需要获取对现有对象的引用。

答案 1 :(得分:0)

当你alloc一个对象时,你正在为它分配内存空间。然后,当您使用init(例如initWithNibName)时,您正在初始化它。因此,当您为sub分配内存空间并初始化它时,您有一个对象。但是再次allocinit,这会创建一个全新的(并且完全不相关的)对象。确保删除任何可能破坏旧对象的内容。

此外,*符号表示sub是一个指针(它指向一个内存位置)。每当你使用赋值运算符(=)时,你都会告诉它指向一个新东西。你正在做的是告诉label.text指针指向sub指向的内容。但是,如果您更改sub所指向的内容并将label.text指向同一个内容,则两者都不会指向您想要的值。

希望这很清楚,如果它没有尝试发布更多代码,也许有人可以建议确切的更改。

<强> - 编辑 -

如果你想要一个对象的引用,你只能通过几种方式获得它。重要的是要知道你不能真正“创建”对现有对象的引用。您必须与该对象建立一些连接。

  • 使用Category c = [[Category alloc] init];之类的内容声明您希望引用的文件内的对象。记住这会创建一个新对象,它不会创建对现有对象的引用。但是,在另一个对象内部创建对象意味着一个“拥有”另一个对象,并且可以随心所欲地做任何事情(显然包括访问属性和调用方法)。
  • 使用对象的“链”来获取对象的引用。因此,如果您的文件拥有拥有所需对象的文件,则可以使用topfile.otherfile.objectyouwant。最明显的例子是获取对子视图所拥有的对象的引用。

这基本上是基本的;请记住,没有任何“全局”对象可以通过名称调用。如果您的问题没有得到解决,请查看一些示例代码并尝试弄清引用的工作方式,或发布与您的问题更密切相关的其他问题