Objective-C:在两个视图控制器之间共享对象

时间:2011-02-13 17:13:17

标签: iphone objective-c

我有一个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已设置。但是使用左上方的“后退”按钮返回上一个MyView1ControllershareObject.myText的值未设置为Test String

那么,我该怎么做呢?我想给View2Controller一个可以修改的对象,以及我希望在View1Controller中进行的修改。

有谁知道吗?提前谢谢你&最诚挚的问候,蒂姆。

3 个答案:

答案 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模式

http://www.cocoadev.com/index.pl?SingletonDesignPattern

答案 2 :(得分:0)

tia是对的:“你已经做对了,所以某处肯定有问题”。 这是我的错,所以我的问题中的源代码是正确的。