Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 未调用第二个ViewController中的委托方法_Ios_Objective C_Delegates - Fatal编程技术网

Ios 未调用第二个ViewController中的委托方法

Ios 未调用第二个ViewController中的委托方法,ios,objective-c,delegates,Ios,Objective C,Delegates,我想将数据从一个控制器传递到另一个控制器。为此,我在第二个视图控制器中实现了委托(在第一个视图控制器上使用点击“加号”按钮时调用该委托): 代表声明: @protocol AddTaskDelegate <NSObject> -(void)addTask:(NSString*)task byDate:(NSDate*)date; @end - (IBAction)addTask:(id)sender { if ([self.addTextField.text leng

我想将数据从一个控制器传递到另一个控制器。为此,我在第二个视图控制器中实现了委托(在第一个视图控制器上使用点击“加号”按钮时调用该委托):

代表声明:

@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");
    }

}
视图控制器1
中:

addController.delegateObj = self;
...
然后:

但是,
addTask
方法未被调用(它假定返回在第二视图控制器中计算的值)。我错过了什么

更新:

我更新了下面的
addTask
方法,并确定我的委托对象为nil:

- (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");
    }



}
现在在控制台中,我可以看到“Alarm”输出,它告诉我self.delegateObj出于某种原因是nil

更新。之后解决(并从实现中删除对AddTask controller的引用):


您是否在
视图控制器1.h
中实现了以下功能

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

此外,我强烈建议您查看以下帖子,特别是@Tibidabo的答案:

您是否在
ViewController1.h
中的
协议中确认了代表的身份?是的。也许我忘了在委托方法中传递对ViewControllerB的引用?在哪里设置对addController的引用viewController1@zcui93在实现中:AddViewController*addController;,然后在viewDidLoad中:addController.delegateObj=self;能否在AddController中包含将委托设置为viewController1实例的代码
- (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;
    }

}
@interface ViewController1<AddTaskDelegate>
// ...
@end
@property (nonatomic, weak) id <AddTaskDelegate> delegate;
@synthesize delegate;