在两个viewcontrollers之间传递字典?

时间:2012-06-12 06:51:43

标签: objective-c ios cocoa-touch

我有一个应用程序,其中我有一个webservice调用,它将数据作为字典返回。我想在另一个视图控制器中访问此字典,以将值加载到表中。

有人能演示如何将这个响应字典从一个视图控制器传递到另一个视图控制器吗?

2 个答案:

答案 0 :(得分:3)

您可以在NSDictionary中定义AnotherViewController属性,并从之前的控制器进行设置。我将在下面举一个简短的例子。

//.h
@interface AnotherViewController {

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

//.m
@implementation AnotherViewController
@synthesize data;

现在从当前的控制器,在初始化AnotherViewController之后,在呈现字典之前设置字典。

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

现在AnotherViewController的{​​{1}}属性具有前一个控制器的值。

希望这有帮助。

答案 1 :(得分:1)

我假设调用了webservice是因为发生了某些事情(点击了按钮,viewDidLoad / viewDidAppear)。如果是这种情况,将UIViewController的引用传递给webservice类是一个完美的有效选项。请记住,对于这种关系,你应该创建一个协议,所以在你的webservice类上你有这样的东西:

id<ViewControllerResponseProtocol> referenceToViewController;

这个ViewControllerResponseProtocol会定义一个这样的方法:

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

因此,当webservice类构建NSDictionary时,您可以使用referenceToViewController中的上述方法:

[referenceToViewController responseFromWebservice:myDictionary];

如果两者之间没有任何关系,则可以NSNotificationCenter使用它。

PS :如果您已在初始NSDictionary的网络服务中拥有UIViewController,则skram的解决方案完全有效,现在您想将其传递给新的UIViewController。虽然我认为这不是你想要的。