これは私の問題です。私は単純なものと仮定しますが、なぜこれが機能しないのか分かりません。別のクラスのアウトレットにアクセスする
あるクラス(RootViewController)のOutlets(UITextField、UITableView、UIActivityIndicatorViewなど)に別のクラス(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!」私がコンセントにするものは何の効果もありません。
はあなたのServiceControllerのはXIBファイル内で適切にRootViewControllerに接続されていますか? – Luke
サービスコントローラーにはXIBファイルがありません。それが役に立ちそうなら、コード補完は、入力中にrootViewControllerからのすべてのメソッドとアウトレットを認識し、警告はありません。 rootViewControllerにはServiceControllerへのIBOutletが必要ですか? – Lost
いいえ - ServiceControllerにrootViewControllerプロパティが設定されている必要があります。これをXIBファイルで行うことも、コード内で明示的に行うこともできます。myServiceController.rootViewController = myRootViewController; – Luke