2010-11-23 7 views
1

私のルートUIViewControllerをモーダルの子UIViewController(runwayAnalysisViewController)のデリゲートとして設定する必要があります。私は私のルートUIViewControllerが採用するデリゲートプロトコルを実装しました。ApplicationDelegateでView Controllerメソッドを呼び出す - 警告します...でも動作します

[runwayAnalysisViewController setSettingsDelegate: self]; 
、-setSettingsDelegate「runwayAnalysisViewControllerが応答しないことがあり、 "

残念ながら、私は古典的なエラーが発生します

(親のUIViewControllerている自己) :デリゲートは、そのように宣言されたメソッドを"

。 RunwayAnalysisViewControllerクラス:

id <SettingsRequestDelegate> settingsDelegate; 

-thence:

@property(nonatomic, assign) id <SettingsRequestDelegate> settingsDelegate; 

.mファイルでも合成されます。

私は、アクセサーの&代理人のためのメソッドを合成してみましたが、手作業でも同じように使っていましたが、役に立たなかったのです。

(他の試みは、インターフェイスで宣言され、実装された方法は、この警告が解消されている間、次のように、私はこのデリゲートの単一のメソッドを実装し、不思議なこと:)

-(void)setSettingsDelegate:(id)aDelegate { 
settingsDelegate = aDelegate; 
} 
-(id)settingsDelegate { 
return settingsDelegate; 
} 

に示すとおり

#pragma mark - SettingsRequestDelegate Methods 

-(void)userDidRequestSettingsAccess:(id)sender { 
    NSLog(@"User did request settings access"); 
} 

デリゲートから親UIViewControllerに送信された正常なメッセージを取得できました!どんな助けもありがとう。

答えて

0

ルートUIViewControllerがそのヘッダーファイルのSettingsRequestDelegateに準拠していることを宣言する必要があります。だからここであなたが現在持っていることがあります。

@interface RootViewController: UIViewController 

あなたが代わりにお勧めします:

@interface RootViewController: UIViewController <SettingsRequestDelegate> 

Objective-Cでのすべてのメソッド呼び出しのディスパッチを動的に解決して、オブジェクトが応答する方法をされているので、それは単なる警告です実行時に変更することができます(ただし構文的にはかなり良い方法ではありません)。だから、たとえコンパイラがコンパイル時に間違いを犯したと思われるとしても、本当に確実な位置にはない。

正式なプロトコルでやっているのは、コンパイラに有用な警告を与えるために役立つものを何か有益なものにしようとしていることです。 Objective-Cの初期バージョンや非公式なプロトコルではありませんでした(つまり、デリゲートは特定のメソッドを持つ必要がありますが、APIドキュメントでのみデリゲートしています - コンパイラは完全にループしていません) iOSのバージョン

+0

argghは、私はそれが簡単ということであった希望が、私はすでにあなたが説明したように、プロトコルに準拠していることを宣言しました。 –

1

親ビューコントローラの* .mファイルの先頭に子コントローラの* .hファイルをインポートしていますか?

(およびその* .hファイルに含まれているあなたが言及@propertyラインである?)

+0

はいとはい。それはそのように宣言されています。私も試してみました:self.runwayAnalysisController.settingsDelegate = self; –

+0

しかし、私は "構造体や組合のメンバーではない"を取得します。なぜプロパティが正しく合成されていないのか分かりません。 –

+0

更新:プログラムは、ターゲットのクリーニングにもかかわらず、偽りの警告を伴う/伴わないでコンパイルしています。バグのように見えます。 –

関連する問題