0

カスタムデリゲートを作成しようとするのは初めてです。基本的な機能をチェックする小さなテストを作成しました。

基本的shareRoutineに、デリゲートのメソッドが呼び出されますが、変数の戻り値は、NSLogmyが適切に呼び出されていないか、取得されていないNULLことを意味しています。- (NSString*) shareRoutineDel

これが機能しない理由を誰かが指摘できますか?

<shareDelegate>this の .h ファイルに含めましUIViewControllerたが、それ以上のことは行っておらず、デリゲート メソッドは別のクラスで呼び出されます。

- (IBAction)share:(UIButton *)sender {
    _share = [[share alloc]init];
    [_share shareRoutine];
}
- (NSString*) shareRoutineDel {
    NSString* a= @"test";
    return a;
}

私のデリゲートクラス

.h
 @class share;
    @protocol shareDelegate

    @optional
    -(NSString*) shareRoutineDel;
    @end

    @interface share : NSObject
    @property (nonatomic, weak) id<shareDelegate> delegate;
    - (void) shareRoutine;
    @end

.m

#import "share.h"

@implementation share
@synthesize delegate;

- (id) init {
    if (self = [super init]) {
    }
    return self;
}

-(void) shareRoutine {
    NSString * response = [[self delegate] shareRoutineDel];
    NSLog(@"check: %@",response);
}
@end
4

1 に答える 1

1

デリゲートがない場合は、何も要求できないため、常に null になります。

テスト インスタンスを作成した直後にデリゲートを設定してみてください。

_share = [[share alloc]init];
_share.delegate = self;
[_share shareRoutine];

あなたの質問では、「そして私のデリゲートメソッドは...を介して別のクラスで呼び出されます」と言っていますが、これは上記が正しくないことを意味するかもしれませんが、わかりにくいです。それがどのように機能するかを理解するまで、2つのクラスで機能するようにしてください。

于 2013-07-12T09:17:27.777 に答える