myViewControllerに接続されているNSTextViewの内容を、サブクラスのmyViewControllerであるファイル所有者の参照コンセントとして更新しようとしています。NSTextViewの文字列コンテンツの変更は、viewDidLoadメソッドでは機能しますが、myMethodでは無効です
ボタンからIBActionを使用するか、コントローラーのviewDidLoad
メソッドを使用すると、テキストを細かく更新できます。しかし、別のクラス(この例ではanotherViewController
と呼ばれます)からメソッドを実行しようとすると、メソッドが実行されますが、textviewは変更されません。
myViewController.h:
#import <Cocoa/Cocoa.h>
#import "anotherViewController.h"
@interface myViewController : NSViewController { }
@property (unsafe_unretained) IBOutlet NSTextView *outText;
@property (weak) IBOutlet NSButton *updateMeButton;
- (void)updateTextView:(NSString *)argText;
- (void)updateTextViewWithoutArg;
@end
myViewController.m:
#import "myViewController.h"
@interface myViewController()
@end
@implementation myViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.outText.string = @"I work successfully";
}
- (IBAction)updateMeButton:(id)sender {
self.outText.string = @"I am updated text! I also work!";
}
- (void)updateTextView:(NSString *)argText {
self.outText.string = @"I don't make it to the NSTextView :(";
NSLog(@"Should have updated text view");
}
- (void)updateTextViewWithoutArg {
self.outText.string = @"I don't make it to the NSTextView :(";
NSLog(@"Should have updated text view");
}
@end
関連するすべての輸入を持ってanotherViewController.m、では、私はこれを呼び出します。
myViewController *viewtask = [[myViewController alloc] init];
[viewtask updateTextViewWithoutArg];
何も起こりません。メソッドは実行され、更新されるはずですが、テキストは更新されません。私はtextstorageとscrollrangeメソッドを含む多くの異なるアプローチを試みましたが、それらはすべて既に動作しているセクションを処理しますが、動作しないセクションでは何の違いもありません。
-
はまたmyViewController *viewtask; [viewtask updateTextViewWithoutArg];
_outText
- 変数のインスタンスを使用しても
[self.outText setString:@"string"];
- を使用しても
[_outText setString:@"string"];
は再び、彼らは仕事使用:
は私もちょうど楽しみのために試してみましたすでに作業しているセクションでのみ有効です。これは単純なはずですが、私には論理的ではありません。迅速で、私がする必要があるすべては、私はシングルトンクラスmyViewController
を作り、sharedInstance
を使用して解決策を見つけたように見える self.outText.string = "I update whenever I'm called!"
既存のビューコントローラに 'updateTextViewWithoutArg'を送る必要があります。 '[[myViewController alloc] init]'は、新しいView Controllerを作成します。 – Willeke
@Willekeこれは最終的に私が思ったものです。しかし、研究と試練の欠如ではなく、私はこれを行う方法を見つけていない。不思議なことに、私が得た最も近いものは、未回答の類似の質問を見つけることです。私はmyViewControllerをシングルトンにしようとしましたが、最初はsegueからトリガされていたので、これは動作しないと思います。また、私はmybuttonを '@ synthesize'しようとしてNSOnStateに状態を設定しようとしましたが、もう一度このインスタンスを作成するだけです。 – hmedia1
ここで最終結果を達成するにはいくつかの方法があることを認識しています(myViewControllerを素早く作成し、ブリッジヘッダーを追加するだけで済むような方法があります)。しかし、私は問題は同じです既存のインスタンスを修正しようとしているのですが、それを回避しています。おそらく私のプログラムは間違っているかもしれませんが、これを行う方法があれば、このランタイムインスタンスコントロールを最終的に把握したいだけです。 – hmedia1