0

我刚开始学习 obj-c,我对代表有疑问。我知道在 SOF 上有很多类似的线程,但我一直在寻找并且真的没有得到我的问题(可能是因为我是初学者)。这是我的问题:我想使用自己的委托并将信息从 SlaveClass 传输到 MainClass。在 buttonDidClick: 动作中的 SlaveClass 中,我声明委托等于 NIL。即使我不知道我应该从哪里开始寻找错误。提前感谢任何类型的建议。这是我引用委托的代码:

从类.h

@protocol slaveDelegate <NSObject>

 -(void)transferNameDidClick:(NSString *)text;

@end
// --------------------------------------------------------------------------------
@interface SlaveClass : UIViewController
@property (nonatomic, strong) id <slaveDelegate> myOwnDelegate;
@end

SlaveClass.m(这里显示为 NIL)

-(void)buttonDidClick:(id)sender
{
    if ([_myOwnDelegate respondsToSelector:@selector(transferNameDidClick:)])
    {
        [_myOwnDelegate transferNameDidClick:(_textField.text)];
    }
}

主类.h

@interface MainClass : UIViewController <slaveDelegate>
@end

主类.m

-(void)transferNameDidClick:(NSString *)text
{
    SlaveClass *delegate = [[SlaveClass alloc] init];
    [delegate setMyOwnDelegate:self];
    [_label setText:text];
    NSLog(@"text: %@",text);
}
4

2 回答 2

0

您将代表设置在错误的位置。您必须在进入 slaveClass 之前设置委托

mainClass.m
像这样呈现从视图控制器

SlaveClass *slaveClass = [[SlaveClass alloc] init]
[slaveClass setMyOwnDelegate:self];
[self presentViewController:slaveClas animated:YES completion:nil]; 


-(void)transferNameDidClick:(NSString *)text
{
 // This is the method getting called by the slaveClass. So it should know the delegate to call this. 
[_label setText:text];
NSLog(@"text: %@",text);
}
于 2013-03-08T03:33:20.540 回答
0

将您委托到自定义委托方法之外。您错误地在自定义委托方法中设置了 y 委托显示 nil。像这样使用。

主类.M

-(IBAction)nextView
{
    nextView = [[ViewController2 alloc]init];
    nextView.myOwnDelegate = self;
    [self presentViewController:nextView animated:YES completion:nil];


}

-(void)transferNameDidClick:(NSString *)text;
{
    NSLog(@"Value from Slave Delegate %@",text);
}

从类.h

@protocol slaveDelegate <NSObject>

 -(void)transferNameDidClick:(NSString *)text;

@end
// --------------------------------------------------------------------------------
@interface SlaveClass : UIViewController
@property (nonatomic, strong) id <slaveDelegate> myOwnDelegate;
@end

从类.m

-(void)buttonDidClick:(id)sender
{
    if ([_myOwnDelegate respondsToSelector:@selector(transferNameDidClick:)])
    {
        [_myOwnDelegate transferNameDidClick:(_textField.text)];
    }
}
于 2013-03-08T03:49:04.080 回答