2011-01-14 36 views
0

我想從一個viewController發送數組到另一個使用協議和委託。我在viewcontroller B上聲明瞭委託,並在viewcontroller A中使用以下代碼將消息從A發送到B.協議的方法是didReceiveMessage。不幸的是,這個消息永遠不會到來。使用委託的ViewControllers之間的消息

附件是從的viewController甲

- (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

如果這是來自您的應用程序的代碼,它可能可能是從您的ViewDidLoad方法結束時釋放cvc。

的init想給它一個保留1計數,並釋放會讓它爲0

而且代碼似乎有點倒退,如果你想設置視圖A爲代表的觀點B,你會這樣做在視圖A.

除非有一個更復雜的理由使用委託,我沒有看到從代碼,我只是保持一個指針,如果你真的需要發送它的孩子消息。

+0

感謝您的回覆。關於如何將指針保留在周圍的任何建議。如果我從孩子分類視圖A,我將失去我需要的信息。 – jack 2011-01-15 20:31:03

0

和其他人一樣,你只是在創建它之後擺脫了Calculator VC。我建議在第二個VC中添加一個@property並使用它來存儲一個指向計算器的指針。它應該是一個retain屬性。然後將該屬性的委託設置爲self。

另外,您確保使用assign屬性作爲委託值,並嘗試儘可能使用屬性語法(self.delegate)。

可能有絕對更怎麼回事,因此,如果這實際上並沒有解決問題的嘗試,並張貼更多的代碼(頭文件,連接東西在IB製造等)

編輯:爲了記錄,該方法是-(void)viewDidLoad,而不是-(void)ViewDidLoad,因此可能導致該問題。

0

正如你說你正在嘗試通過從一個視圖控制器another.Well數組我在這個way.Here使用的代碼

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

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

哪裏myArray是數組中的GraphingViewController,你只需要使該屬性具有保留屬性,就像

@property(nonatomic,retain)NSMutableArray *myArray; 

而且您還需要合成它。

相關問題