2012-01-08 16 views
1

私はViewController.h/mと別のクラスKeyboard.h/mを持っています。別のクラスからuilabelを変更する方法

@interface ViewController : UIViewController{ 

UILabel *label; 

} 

@property (nonatomic, retain) IBOutlet UILabel *label; 

と私ViewController.mは今、私はKeyboard.mからラベルを変更したいので、

#import "ViewController.h" 
@synthesize label; 
... 

になります。私のViewController.h私はUILabelを持って 私はこのような何かを試してみました:

#import "ViewController.h" 
... 
ViewController *vc; 
vc.label.text = @"text"; 

は、それがエラーなしでコンパイルが、ラベルはそれはあなたがここでやっていることを受けやすい非常に誤りだ

答えて

1

変更されません。

ViewController *vc; 

ポインタを宣言しますが、これは初期化されません。そのプロパティvc.label.textにアクセスすると、objc_messageSend()には偽のポインタが渡されるため、クラッシュする可能性があります。 (あなたが幸運なのは、IDがそうしなかった場合です)

とにかく:それがうまくいったら、ViewController *vc = [[ViewController alloc] init];のように新しいインスタンスを作成しても、他のインスタンスには影響しませんでした。あなたはどこかのインスタンスへのポインタを格納しなければなりません。 g。アプリケーションのアプリデリゲートオブジェクトへ@property (retain) ViewContrller *vc;を設定し、このようにそのプロパティを介してアクセス:

[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] vc].label.text = @"new text"; 

それが動作するはずそのように。

希望します。

0

どのようにあなたのVC変数を開始していますか?私はそれがエラーの原因であると推測しています。

VC = [[のViewControllerのalloc] initWithNibName::のViewController @ "]やってみてください。。

をすでにお使いのIBOutletが正しくフックアップされていることを確認し、ことをやっている場合は、変数を設定していますエラーがどこか別の場所から来ている必要があります。

関連する問題