我正在尝试使用协议和委托将数组从一个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");
}
任何建议都将不胜感激。
答案 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;
你也需要综合它。