2013-03-08 26 views
0

我刚开始学习obj-c,并对代表有疑问。我知道在SOF上有很多类似的线索,但我一直在寻找,并没有得到我的问题(也许是因为我是初学者)。这是我的问题:我想使用我自己的委托并从SlaveClass将信息传递给MainClass。在buttonDidClick:action中的SlaveClass中,我声明了等于NIL的委托。即使我不知道我该从哪里开始寻找错误。预先感谢任何类型的建议。这里是我的代码,是指委托:delegate = nil,VC之间传递信息问题

SlaveClass.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)]; 
    } 
} 

MainClass.h

@interface MainClass : UIViewController <slaveDelegate> 
@end 

MainClass.m

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

另外一个小尖给你。不要强烈声明委托。而不是强大的使用弱。 – 2013-03-08 04:44:41

回答

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); 
} 
+0

你的意思是[self presentViewController:slaveClass animated:YES completion:nil]? – rdelmar 2013-03-08 03:43:45

+0

@rdelmar ya ..我已更正 – 2013-03-08 03:46:01

+0

@Anil我在UIBarButtonItem的操作中推送SlaveClass之前就已经将它放到了 - 现在它可以工作。我之前试图粘贴'[slaveClass setMyOwnDelegate:self];'在ViewDidLoad和ViewWillAppear(都在Mainclass中),在这种情况下它也不工作..其实为什么?你可以解释吗? – Neru 2013-03-08 03:54:05

0

你设置了委托方的委托定制方法来设置委托。你错误地设置了代理的自定义委托方法show 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); 
} 

SlaveClass.h

@protocol slaveDelegate <NSObject> 

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

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

SlaveClass.m

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