0

私はobj-cを学び始めたばかりで、デリゲートについて質問があります。SOFには似たようなスレッドがたくさんあることは知っていますが、私は探していたのですが、実際には問題が発生しませんでした(おそらく私が初心者であるためです)。これが私の問題です。自分のデリゲートを使用して、SlaveClassからMainClassに情報を転送したいと思います。buttonDidClick:アクションのSlaveClassで、NILに等しいデリゲートを宣言します。どこからミスを探し始めたらいいのかわからない。どんな種類のアドバイスも事前に感謝します。デリゲートを参照する私のコードは次のとおりです。

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);
}
4

2 に答える 2

0

デリゲートを間違った場所に設定しています。slaveClass に行く前にデリゲートを設定する必要があります

mainClass.m
このようにスレーブ View Controller を提示する

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

カスタム デリゲート メソッドの外側にデリゲートを設定します。カスタム デリゲート メソッド内で、誤ってデリゲート ショー 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)];
    }
}
于 2013-03-08T03:49:04.080 に答える