使用委托的ViewControllers之间的消息传递

时间:2011-01-14 21:25:33

标签: iphone objective-c

我正在尝试使用协议和委托将数组从一个viewController发送到另一个。我在viewcontroller B上声明了委托,并在viewcontroller A中使用以下代码将消息从A发送到B.协议的方法是didReceiveMessage。不幸的是,消息永远不会到来。

附件是来自viewController A的代码

- (IBAction) graphPressed:(UIButton *)sender {

 GraphingViewController *gvc=[[GraphingViewController alloc] initWithNibName:nil bundle:nil];
 [self presentModalViewController:gvc animated:YES];
 [gvc release];

 [delegate didReceiveMessage:brain.internalExpression];

}

和来自viewcontrollerB的代码

- (IBAction) ViewdidLoad {
 CalculatorViewController *cvc =[[CalculatorViewController alloc] init];
 cvc.delegate=self;
 [cvc release];  
}

- (void) didReceiveMessage:(NSMutableArray *)expression {

 NSLog(@"message received from CalculatorAppDelegate");
}

任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:0)

我不确定你在第二个样本中做了什么?您创建了一个对象,分配其委托属性然后将其释放。为什么呢?

答案 1 :(得分:0)

如果这是您应用程序中的代码,则可能是在ViewDidLoad方法结束时发布cvc。

init会给它一个保留计数为1,释放将把它恢复为0。

此外,代码似乎有些倒退,如果您想将视图A设置为视图B的委托,则可以在视图A中执行此操作。

除非有更复杂的理由使用我从代码中看不到的委托,否则如果你真的需要发送消息,我只会指示一个指针。

答案 2 :(得分:0)

就像其他人发布的那样,你只是在创建它之后摆脱了计算器VC。我建议将@property添加到第二个VC并使用它来存储指向计算器的指针。它应该是retain属性。然后将该属性的委托设置为self。

此外,您确保使用assign属性作为委托值,并尽可能尝试使用属性语法(self.delegate)。

这里肯定会有更多的事情发生,所以如果这实际上没有解决问题,请尝试发布更多代码(头文件,在IB中建立什么连接等)。

编辑:对于记录,该方法为-(void)viewDidLoad,而不是-(void)ViewDidLoad,因此可能导致此问题。

答案 3 :(得分:0)

正如你所说,你试图将一个数组从一个视图控制器传递到另一个视图控制器。我用这种方式。这是代码

- (IBAction) graphPressed:(UIButton *)sender {

 GraphingViewController *gvc=[[GraphingViewController alloc] initWithNibName:nil bundle:nil];
 gvc.myArray=infoArray;
 [self presentModalViewController:gvc animated:YES];
 [gvc release];
}

在MapingViewController中myArray是数组的位置,你只需要使用retain属性赋予这个数组的属性,就像

一样
@property(nonatomic,retain)NSMutableArray *myArray;

你也需要综合它。