我有一个iPhone应用程序,我在MyView1Controller
:
MyView2Controller *myV2C = [[MyView2Controller alloc] initWithNibName:@"MyView2" bundle:nil];
myV2C.shareObject = self.shareObject;
[self.navigationController pushViewController:myV2C animated:YES];
[myV2C release];
所以我将shareObject
推送到下一个ViewController。在viewDidLoad
中,我设置了shareObject
这样的属性:
self.shareObject.myText = @"Test String";
所以在MyView2Controller中,一切正常,String已设置。但是使用左上方的“后退”按钮返回上一个MyView1Controller
,shareObject.myText
的值未设置为Test String
。
那么,我该怎么做呢?我想给View2Controller一个可以修改的对象,以及我希望在View1Controller中进行的修改。
有谁知道吗?提前谢谢你&最诚挚的问候,蒂姆。
答案 0 :(得分:1)
您可以使用委托模式和/或键值观察
编辑: 你可以创建一个单独的对象,然后在所有类中使用该对象,无论你想要什么。为此你可以使用单例类,或者你可以创建一个类方法。例如:如果我有A类,并且我想在B类中推送一些值,那么如果我修改B中的值,则可以在过去或任何其他类中检索新更新的值。在这种情况下,您可以创建一个不同的类(通常是NSObject的子类),然后在其中编写getter / settor方法。
假设这个新创建的类的名称是Manager,然后是Manager。 m创建getter / setter方法,比如
NSString *strGlobal;
+(void)setString:(NSString *)strTemp
{
if(!strGlobal)
{
strGlobal = [[NSString alloc] init];
}
//point to same location
strGlobal = strTemp;
}
+(NSString *)getMySavedString
{
return strGlobal;
}
现在在你想要将值发送到B类控制器的A类中,调用setter方法来设置值,如: -
-(void)navigateto_ClassB
{
//Setting the value, that should be sent to the other controller
[ManagerClass setString:@"Hello"];
[self.navigationController pushViewController:[[[ClassB alloc]init] autorelease] animated:YES];
}
现在在B级(或者您想要获取保存值的任何地方,使用getter方法,如: -
NSString *strSavedValue = [ManagerClass getMySavedString];
不会有值,如果要从任何地方更新值,请再次使用新值调用setter方法。例如,我想更新B类中的值,然后
[ManagerClass setString:@"Hello Upadted"];
现在,此值将更新到相同的内存位置,使用在Manager类中创建的getter方法从任何位置检索它。
正如我之前所说,这是最简单但不是最好的方法。或者,您可以使用委托模式,KVO(键值观察)和/或单例类来实现相同的功能。
答案 1 :(得分:1)
或者您甚至可以尝试使用Singleton模式
答案 2 :(得分:0)
tia是对的:“你已经做对了,所以某处肯定有问题”。 这是我的错,所以我的问题中的源代码是正确的。