我想將數據從我的控制器傳遞給另一個控制器。爲了該目的我實現在第二視圖控制器委託(它被調用時使用抽頭「加」對第一視圖控制器按鈕):第二個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;
}
}
你是否符合'ViewController1.h'中''protocol'的委託? – casillas
是的,我做到了。也許我忘了在委託方法中傳遞給ViewControllerB的引用? –
你在哪裏設置viewController1中的addController引用 – zcui93