我有一个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中合成。
想发布更多代码,但没有更多相关代码。
答案 0 :(得分:0)
这一行...
Sub-category *sub = [[Sub-category alloc] initWithNibName:@"Sub-category" bundle:nil];
...创建一个新的Sub-category
。由于它是新的,它不知道有什么信息被提供给其他Sub-category
对象。如果要访问其数据,则需要获取对现有对象的引用。
答案 1 :(得分:0)
当你alloc
一个对象时,你正在为它分配内存空间。然后,当您使用init
(例如initWithNibName
)时,您正在初始化它。因此,当您为sub
分配内存空间并初始化它时,您有一个对象。但是再次alloc
和init
,这会创建一个全新的(并且完全不相关的)对象。确保删除任何可能破坏旧对象的内容。
此外,*
符号表示sub
是一个指针(它指向一个内存位置)。每当你使用赋值运算符(=
)时,你都会告诉它指向一个新东西。你正在做的是告诉label.text
指针指向sub
指向的内容。但是,如果您更改sub
所指向的内容并将label.text
指向同一个内容,则两者都不会指向您想要的值。
希望这很清楚,如果它没有尝试发布更多代码,也许有人可以建议确切的更改。
<强> - 编辑 - 强>
如果你想要一个对象的引用,你只能通过几种方式获得它。重要的是要知道你不能真正“创建”对现有对象的引用。您必须与该对象建立一些连接。
Category c = [[Category alloc] init];
之类的内容声明您希望引用的文件内的对象。记住这会创建一个新对象,它不会创建对现有对象的引用。但是,在另一个对象内部创建对象意味着一个“拥有”另一个对象,并且可以随心所欲地做任何事情(显然包括访问属性和调用方法)。topfile.otherfile.objectyouwant
。最明显的例子是获取对子视图所拥有的对象的引用。这基本上是基本的;请记住,没有任何“全局”对象可以通过名称调用。如果您的问题没有得到解决,请查看一些示例代码并尝试弄清引用的工作方式,或发布与您的问题更密切相关的其他问题