2012-10-05 24 views
0

我創建了三個視圖控制器,即FirstViewControllerSecondViewController & ThirdViewControllerFirstViewControllerSecondViewController,同樣SecondViewControllerThirdViewController未直接導航時不會調用代理

ThirdViewController是一個UITableViewController。

SecondViewControllerThirdViewController有自定義協議。他們都使用他們各自的代表向FirstViewController傳遞一些價值。

問題是SecondViewController已成功將值傳遞到FirstViewController,但ThirdViewController無法完成此操作。

是不是因爲SecondViewController直接正在從FirstViewController導航,所以它能夠通過它,ThirdViewController不與FirstViewController所以它不能夠通過數據連接?

任何幫助,將不勝感激。

編輯:

FirstViewController只是推SecondViewController通過一個按鈕動作。

SecondViewController.h是:

@protocol secondViewDelegate <NSObject> 

-(void)didCompleteSending:(NSArray *)array; 

@end 


@interface secondView : UIViewController 
@property (nonatomic,strong) NSArray *footballPlayers; 
@property (assign) id<secondViewDelegate>delegate; 
- (IBAction)btnAction:(id)sender; 
- (IBAction)btnGoToThirdView:(id)sender; 

SecondViewController.m是:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view from its nib. 

footballPlayers = [[NSArray alloc]initWithObjects:@"Rooney",@"Van Persie",@"Ronaldo",@"Kagawa", nil]; 
} 

- (IBAction)btnAction:(id)sender { 
[delegate didCompleteSending:footballPlayers]; 
} 
- (IBAction)btnGoToThirdView:(id)sender { 
thirdView *objthirdView = [[thirdView alloc]init]; 
objthirdView.delegate=self; 
[self.navigationController pushViewController:objthirdView animated:YES]; 
} 

同樣地,我有ThirdViewController

FirstViewController.h - (無效)didSendDetailsFromThirdView:(的NSString *)顏色{ 的NSLog(@ 「選定的字符串是=%@」,顏色); }

-(void)didCompleteSending:(NSArray *)array{ 
    for (NSString *str in array) { 
    NSLog(@"%@",str); 
    } 
} 

-(void)didSendDetailsFromThirdView:(NSString *)colors並沒有得到所謂的 'ThirdViewController'。

第二個編輯

- (IBAction)btnGoToThirdView:(id)sender { 
FirstViewController *objFirstViewController = [FirstViewController alloc]init]; 
thirdView *objthirdView = [[thirdView alloc]init]; 
objthirdView.delegate=objFirstViewController; 
[self.navigationController pushViewController:objthirdView animated:YES]; 
} 
+1

因此FirstViewController是ThirdViewController和SecondViewController的委託嗎? – Pfitz

+1

你可以發佈你的代碼嗎? –

+0

是! FirstViewController是ThirdViewController和SecondViewController的委託。 – footyapps27

回答

0

您在該SecondViewController .M的ThirdViewController的代表設置自

objthirdView.delegate=self; 

這意味着ThirdViewController的代表是SecondViewController,而不是FirstViewController。請在SecondViewController中保留對FirstViewController的引用,並將其用作這樣的代表。

objthirdView.delegate=myFirstViewController; 

假設是不可能從ThirdViewController流行的FirstViewController你也許可以濫用SecondViewController經由你已經實現了委託方法將數據送回給FirstViewController。但我不會推薦它 - 這不是一個好設計。

+0

我做到了,現在它拋出一個異常,說明訪問不好! – footyapps27

+0

它一直說'secondViewDelegate'被錯誤地放置,然後拋出錯誤的訪問異常。任何想法如何去/ – footyapps27

+0

你如何添加視圖控制器?你可以發佈一些代碼嗎? – Pfitz