0

AppDelegate から、プロトコルを介して MyViewController と通信しています。したがって、このメソッドが AppDelegate.m で呼び出されると、次のようになります。

- (void)thisMethodGetsCalled:(CustomData *)data {
     //Do stuff

     //Then call method via Protocol
     [_exampleDelegate exampleMethod:data];
}

MyViewController.m でこのメソッドを呼び出します。

- (void)thisMethodGetsCalledInsideViewController:(CustomData *)data {
     //Do stuff with data
}


//ExampleDelegate.h

#import <Foundation/Foundation.h>

@protocol SMMessageDelegate <NSObject>

- (void)thisMethodGetsCalledInsideViewController:(CustomData *)data;

@end

すべて正常に動作し、予測どおり、「thisMethodGetsCalledInsideViewController」は「thisMethodGetsCalled」の後に呼び出されます。MyViewController がインスタンス化されたことがない場合、「thisMethodGetsCalledInsideViewController」が呼び出されることはありません。ただし、 MyViewController はインスタンス化され、後で次のように破棄されます。

[self dismissViewControllerAnimated:YES completion:nil];

「thisMethodGetsCalled」が呼び出されるとアプリがクラッシュします。「thisMethodGetsCalledInsideViewController」を呼び出そうとしますが、そのメソッドは却下された MyViewController 内に存在します。これを修正する方法を知っている人はいますか?

4

1 に答える 1

1

最初に考えたこと: MyViewController をプロトコルに準拠するオブジェクトのデリゲートとして設定している場所はありますか? 次のいずれかを行う必要があります。

  1. MyViewController が閉じられたときにデリゲート値を nil に設定するか、または

  2. デリゲート プロパティを弱参照に設定します。つまり、

@property (nonatomic,assign) id<TheProtocol> delegate;

それが役立つことを願っています。

于 2013-08-20T11:34:19.020 に答える