2013-03-08 50 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)]; 
    } 
}