开发者

Objective-C: Share object between two view controllers

I have an iPhone application and I do this in my MyView1Controller:

MyView2Controller *myV2C = [[MyView2Controller alloc] initWithNibName:@"MyView2" bundle:nil];
myV2C.shareObject = self.shareObject;
[self.navigationController pushViewController:myV2C animated:YES];
[myV2C release];

So I push shareObject to the next ViewController. There, in viewDidLoad, I set a property of shareObject like this:

self.shareObject.myText = @"Test String";

So in MyView2Controller, everything is okay, the String is set. But going back to the previous MyView1Controller with the left upper "back" Button, the value of shareObject.myText is not set to Test String.

So, how can I do this? I want to give the View2Controller an object which can be modified, and the modifications I want to have in the View1Controller.

Does anyone know? Thank开发者_Go百科 you in advance & Best Regards, Tim.


OR you can even try using the Singleton pattern

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


You can use delegation pattern and/or key value observations

EDIT: You can achieve this my creating a single object, and then use that object in all classes, wherever you want. For this you can use singleton class, Or you can create a class method. For ex:If I have class A, and I want to push some values in B class, So if I modify the values in B, the newly updated value can be retrieved in a too, or in any other class. In that case, you can create a different class (usually subclass of NSObject),and then write the getter/settor methods in that.

Suppose the name of this newly created class is Manager, then in Manager. m create getter/setter methods, like

NSString *strGlobal;
+(void)setString:(NSString *)strTemp
{
if(!strGlobal)
{
    strGlobal = [[NSString alloc] init];
}

//point to same location
strGlobal = strTemp;
}

+(NSString *)getMySavedString
{
    return strGlobal;
}

Now In you class A , where you want to send the value to Class B controller, call the setter method to set the value, like: -

-(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];
}

Now In class B (Or wherever you want to get the saved value, use getter method, like:-

     NSString *strSavedValue = [ManagerClass getMySavedString];

No you will have the value, If you want to update the value from anywhere, the again call the setter method, with new value. For ex, i want to update the value in class B, then

 [ManagerClass setString:@"Hello Upadted"];

Now this value is updated to same memory location, retrieve it from anywhere using getter method created in Manager class.

As I stated earlier, this is the easiest but not the best approach. Alternatively, you can achieve same functionality with delegate patterns, KVOs (Key value observations) and/or singleton class.


tia was right: "You did it right already, so there must be something wrong somewhere". It was my fault, so the source code in my question is correct.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜