2011-07-06 9 views
0

これは私の問題です。私は単純なものと仮定しますが、なぜこれが機能しないのか分かりません。別のクラスのアウトレットにアクセスする

あるクラス(RootViewController)のOutlets(UITextField、UITableView、UIActivityIndi​​catorViewなど)に別のクラス(ServiceController)からアクセスする必要があります。

私は現在、この(必要にいただきました!のみ示す)があります。

RootViewController.h

@interface RootViewController : UIViewController{ 
    UITextField *textField; 
} 

@property (nonatomic, retain) IBOutlet UITextField *textField; 

- (void)startService; 

@end 

RootViewController.m

@implementation RootViewController 

@synthesize textField; 

- (void)startService{ 
    ServiceController *service = [[ServiceController alloc] init]; 
    [service start]; 
    [service release]; 
} 

@end 

ServiceController.h

@class RootViewController; 

@interface ServiceController : NSObject{ 
} 

@property (nonatomic, retain) IBOutlet RootViewController *rootViewController; 

- (void)start; 

@end 

サービスController.m

#import "RootViewController.h" 

@implementation ServiceController 

@synthesize rootViewController; 

- (void)start{ 
    [((RootViewController*)rootViewController).textField setText:@"HELLO !"]; 
    NSLog(@"CALLED !"); 
} 

@end 

これが動作しない理由を私は見ていないが、私はDetailViewControllerへRootViewControllerから同じことを行うために、同じ方法を使用して、それが正常に動作します。私は詳細/ルートコントローラに他の宣言があれば動作するようにしたが、何も気付かなかったかどうかを調べた。

PS:すべて正常に呼び出され、「CALLED!」私がコンセントにするものは何の効果もありません。

+0

はあなたのServiceControllerのはXIBファイル内で適切にRootViewControllerに接続されていますか? – Luke

+0

サービスコントローラーにはXIBファイルがありません。それが役に立ちそうなら、コード補完は、入力中にrootViewControllerからのすべてのメソッドとアウトレットを認識し、警告はありません。 rootViewControllerにはServiceControllerへのIBOutletが必要ですか? – Lost

+0

いいえ - ServiceControllerにrootViewControllerプロパティが設定されている必要があります。これをXIBファイルで行うことも、コード内で明示的に行うこともできます。myServiceController.rootViewController = myRootViewController; – Luke

答えて

0

あなたServiceControllerニーズをそのrootViewControllerプロパティセットを持っています。あなたは、コード内で明示的にXIBファイルでこれを行うかのいずれかです。

myServiceController.rootViewController = myRootViewController;

+0

おっと、あなたはすでに答えを受け入れているのを見ていませんでした。 – Luke

0

rootViewControllerを設定していないようです。 追加してみてください:

ServiceController *service = [[ServiceController alloc] init]; 

// set the property here 
[service setRootViewController:self]; 

[service start]; 
[service release]; 
+0

これにもっと詳細を追加するために、Objective-Cでnilにメッセージを送ることはノーオペレーションです。だから、あなたのケースでは、 'nil'オブジェクトで' textField'を呼び出すと 'nil'が返され、後続の' setText'呼び出しは何もしません。 –

+0

それはまさに私が忘れたものです。 – Lost

関連する問題