2015-11-10 54 views
1

我想將數據從我的控制器傳遞給另一個控制器。爲了該目的我實現在第二視圖控制器委託(它被調用時使用抽頭「加」對第一視圖控制器按鈕):第二個ViewController中的委託方法不叫

委託的聲明:

@protocol AddTaskDelegate <NSObject> 

-(void)addTask:(NSString*)task byDate:(NSDate*)date; 

@end 

代表的執行情況:

- (IBAction)addTask:(id)sender { 

    if ([self.addTextField.text length] >0){ 

     NSDate *now = [NSDate date]; 

     [self.delegateObj addTask:self.addTextField.text byDate:now]; 
     [self dismissViewControllerAnimated:YES completion:nil]; 

    } else { 

     NSLog(@"You should type something"); 
    } 

} 

viewController1

addController.delegateObj = self; 
... 

然後:

-(void)addTask:(NSString *)task byDate:(NSDate *)date { 

    myDateToFill = date; 
    myStringToFill = task; 
    NSLog(@"myStringToFill is - %@", task); 
    NSLog(@"method called"); 

} 

但是,沒有調用addTask方法(它假設返回第二個視圖控制器中計算的值)。我錯過了什麼?

UPDATE:

更新我addTask方法如下,並找出我的委託對象是零:

- (IBAction)addTask:(id)sender { 

    if ([self.addTextField.text length] >0){ 

     NSDate *now = [NSDate date]; 
     NSLog(@"Prepare for repair"); 

     if (self.delegateObj == nil){ 
      NSLog(@"ALARM"); 
     } 

     [self.delegateObj customMethod]; 
     [self.delegateObj taskAdded:self addTask:self.addTextField.text byDate:now]; 
     [self dismissViewControllerAnimated:YES completion:nil]; 

    } else { 

     NSLog(@"You should type something"); 
    } 



} 

現在,在控制檯我可以看到「報警」的輸出,這告訴我,自我。由於某種原因,delegateObj無效。

已更新。

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    // Если нету navigation Controller'a 

    if ([segue.identifier isEqualToString:@"add"]){ 

     UINavigationController *navController = [segue destinationViewController]; 
     AddViewController *addController = (AddViewController*)([navController viewControllers][0]); 
     addController.delegate = self; 
    } 

} 
+0

你是否符合'ViewController1.h'中''protocol'的委託? – casillas

+0

是的,我做到了。也許我忘了在委託方法中傳遞給ViewControllerB的引用? –

+0

你在哪裏設置viewController1中的addController引用 – zcui93

回答

1

你有沒有實現在ViewController1.h以下內容:(從執行和刪除參考AddTask控制器)後解決了嗎?

@interface ViewController1<AddTaskDelegate> 
// ... 
@end 

在AddTaskDelegate.h

,下面一行缺少

@property (nonatomic, weak) id <AddTaskDelegate> delegate; 

在AddTaskDelegate.m,添加以下

@synthesize delegate; 

此外,我強烈建議你看看下面的線程特別@ Tibidabo的回答:How do I create delegates in Objective-C?

+0

@casillias是的,我確實包含了它.. –