0

別のクラスからのメッセージが に送信されたときに、ビューの更新に問題がありますViewController

基本的に、異なるカスタム ビューが別のビューに交換される単一のウィンドウを持つアプリケーションがあります。これを管理し、正常に動作するAppControllerクラスがあります。

@interface AppController : NSObject

@property (weak) IBOutlet NSView *ourView;
@property (strong) NSViewController *ourViewController;

- (IBAction)changeView:(id)sender;
- (IBAction)start:(id)sender;
- (void)changeViewContoller:(NSInteger)tag;

@end

新しいビューが別のビューに交換されるとourViewController、そのビューのコントローラー クラスを指すようにプロパティが更新されます。すべてのView Controllerクラスには、「action」など、すべて同じ名前のメソッドがあります。このメソッドは、ビューの何かを変更することになっています。

したがって、AppControllerクラスの「開始」メソッドは、プロパティの「アクション」メソッドを呼び出しourViewControllerます。これを行うには、次のobjc_msgSend()方法を使用しました。

objc_msgSend(self.ourViewController, action);

View Controller クラスの定義は次のとおりです。

@interface CountdownViewController : NSViewController

@property (weak) IBOutlet NSTextField *label;

- (IBAction)changeLabel:(id)sender;
- (void)start;
@end

NSLog()各 の「アクション」メソッドにを配置しViewControllerて、それが機能しているかどうかを確認しましたが、「アクション」メソッドもラベルの文字列値を変更することになっていますが、そうではありません。ビューが更新されない理由を誰かが知っていれば、それは非常に役に立ちます。ありがとう!

4

1 に答える 1

0

ビューは弱い保持されますか?このクラスでそのポインタを保持する必要がある場合は、強くしてみてください

ところで:..また、なぜobjc_msgsendを行うのですか.... performSelectorを使用します

于 2012-11-08T21:53:10.673 に答える