Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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 委托不响应选择器_Ios_Objective C_Uiviewcontroller_Delegates_Protocols - Fatal编程技术网

Ios 委托不响应选择器

Ios 委托不响应选择器,ios,objective-c,uiviewcontroller,delegates,protocols,Ios,Objective C,Uiviewcontroller,Delegates,Protocols,基本上,我现在打算使用委托在视图控制器之间传递值 视图控制器的流程是使用push segue的A->B->C 当用户在“C”视图控制器中执行某些操作时,如何将值传递回第一个视图控制器,即“A” 在我的代码中,“self.delegate”始终为零,并且从不触发委托方法 下面是第一个VC和第三个VC的代码: 第一个VC.m: #import "ViewController.h" #import "ThirdViewController.h" @interface ViewController (

基本上,我现在打算使用委托在视图控制器之间传递值

视图控制器的流程是使用push segue的A->B->C

当用户在“C”视图控制器中执行某些操作时,如何将值传递回第一个视图控制器,即“A”

在我的代码中,“self.delegate”始终为零,并且从不触发委托方法

下面是第一个VC和第三个VC的代码:

第一个VC.m:

#import "ViewController.h"
#import "ThirdViewController.h"

@interface ViewController ()<PassValueProtocal>
@property (weak, nonatomic) IBOutlet UILabel *myLabel;

@end

@implementation ViewController
{
    ThirdViewController *thirdVC;
}

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

- (void) passValueBack:(NSString *)value
{
    NSLog(@"HAHAH");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (IBAction)segueToSecondVC:(UIButton *)sender
{
    thirdVC = [ThirdViewController sharedManager];

    thirdVC.delegate = self;
}

@end
你的代码

- (IBAction)segueToSecondVC:(UIButton *)sender
{
    thirdVC = [ThirdViewController sharedManager];

    thirdVC.delegate = self;
}
不应该在这里。您应该实现函数
prepareForSegue
,并将此代码移到那里。差不多

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
ThirdViewController *thirdVC = (ThirdViewController *)segue.destinationViewController;
thirdVC.delegate = self;

}

其中是您推送第三个DVC的SecondVC代码。此时,您需要将委托从第二个传递到第三个。这样ThirdVC就有了委托。@iosDev82你的意思是委托只能与两个彼此有序列关系的视图控制器进行通信吗?无意冒犯,但你的问题真的很糟糕。一开始你说的是3个VC,但是你的代码有2个视图控制器。@iosDev82对不起。我只是把第二个VC留白,因为我认为这是第一个VC和第三个VC之间的沟通。我需要为第二个VC写些什么?它有桥梁的作用吗?抱歉,我是新学员,无法授权…如果您从情节提要创建UIViewController,它将不会调用sharedManager。它将为ThirdViewController分配一个新对象。因此,即使您将委托设置为第三个DVIEWController,但它并不是由系统分配的,非常感谢!我知道如何在两个视图控制器之间使用委托,只需使用您提供的方法即可。但是这个似乎是从第一个VC直接到第三个VC?因为第一个VC的目标VC应该是第二个VC而不是第三个VC。因此,有没有办法将值从thirdVC传递回firstVC,但是segue经过firstVC->secondVC->thirdVC?此外,是否可以将值从thirdVC直接传递回firstVC?在您共享的代码中,有一个按钮可以从firstVC到thirdVC进行某种顺序的传递。在这两种情况下,您都应该在SecondVC的
prepareforsgue
中设置委托,并在
prepareforsgue
中执行相同的操作。这次您应该将SecondVC的委托(即fristVC)传递给ThirdVC委托。一旦在ThirdVC中有了委托,就可以直接将消息传递给它。
- (IBAction)segueToSecondVC:(UIButton *)sender
{
    thirdVC = [ThirdViewController sharedManager];

    thirdVC.delegate = self;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
ThirdViewController *thirdVC = (ThirdViewController *)segue.destinationViewController;
thirdVC.delegate = self;

}