简体   繁体   中英

Passing a dictionary between two viewcontrollers?

I have an application in which I have a webservice call that returns data as a dictionary. I want to access this dictionary in another view controller for loading the values into a table.

Can anybody demonstrate how to pass this response dictionary from one view controller to another?

You could define an NSDictionary property in your AnotherViewController and set it from the previous controller. I'll give a brief example below.

//.h
@interface AnotherViewController {

  NSDictionary *data;
}
@property(nonatomic,retain) NSDictionary *data;
@end

//.m
@implementation AnotherViewController
@synthesize data;

Now from the current controller, after initializing AnotherViewController you set the dictionary before presenting it.

AnotherViewController *controller = [[AnotherViewController alloc] init];
controller.data = myCurrentDictionary;

Now AnotherViewController has a data property with the value of the previous controller.

Hope this helps.

I am assuming that the webservice is called because something happened (button clicked, viewDidLoad / viewDidAppear ). If this is the case, passing a reference of the UIViewController to the webservice class is a perfect valid option. Keep in mind that for this relationship you should create a protocol, so on your webservice class you have something like this:

id<ViewControllerResponseProtocol> referenceToViewController;

This ViewControllerResponseProtocol would define a method like this:

-(void)responseFromWebservice:(NSDictionary*)myDictionary;

So when the webservice class has build the NSDictionary you can the above method from the referenceToViewController :

[referenceToViewController responseFromWebservice:myDictionary];

If there isn't any kind of relationship between both, you use could NSNotificationCenter for it.

PS : The solution of skram is perfectly valid if you already have the NSDictionary from the webservice on the initial UIViewController and now you want to pass it to a new UIViewController . Although I don't think that's what you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM