2012-06-26 81 views
0

我有一个UIViewControllerUINavigationController的根。我在那里做的是我正在实例化另一个相同类型的UIViewController,设置一些属性并将它推到栈顶。同一个UIViewController的多个实例

这里的问题是,父视图控制器也在改变它的属性。

这里是我如何做它:

RootViewController *rootViewController = [[RootViewController alloc] initWithRequest:request]; 
[self.navigationController pushViewController:rootViewController animated:YES]; 

这究竟是为什么?这是不是创建视图控制器的新实例,并将相同的确切属性复制到不同的对象实例?

+0

“父视图控制器也在改变它的属性”是什么意思?当您回到父视图控制器时会发生什么变化?你能指出这段代码片段在哪里,我假设你的视图控制器在某个地方。 – jrturton

回答

1

这两个视图控制器现在都有一个指向同一对象的指针request。您所做的任何更改都反映在两个控制器中。如果控制器能够对其进行修改,则可能需要复制request对象。

+0

哦..这是为什么呢? 'alloc init'不是实例化一个新的不同的对象吗?或者Objective-C中的默认值与C/C++不同?我尝试在'request'上使用'copy'属性,但这不起作用。那我该如何复制呢? – darksky

+0

你只分配/引入视图控制器。这是一个不同的对象,但是从问题中的有限信息来看,控制器中显示的内容可能取决于'request'的属性,这是你没有描述的。如果它是一个自定义对象,则需要实现自己的复制。有关详细信息,请参阅NSCopying协议。 – jrturton

+0

是的 - 我从AppDelegate分配它。然后从应用程序本身再次如上所示。这是不是意味着两个不同的对象具有相同属性的单独副本?请求持有一个'NSURLRequest'。它在视图控制器中的'UIWebView'中被处理。这里是属性:'@property(nonatomic,strong)NSURLRequest * request;'。我将如何复制?使用'NSCopying'? – darksky

相关问题