0

私たちがAppDelegate.h

@property (strong, nonatomic) NSMutableArray *someList;

.m

@synthesize someList;

それから私は考えましたViewController.m、私たちはすることができます

NSLog(@"%@", [[UIApplication sharedApplication] delegate].someList);

しかし、実際にはsomeList、オブジェクトにプロパティが見つからないというエラーでコンパイルされますUIApplicationDelegateか?なぜそうなるのでしょうか?(実際、これはViewControllerにデータを渡すための推奨される方法ですか?別の方法は、これをのプロパティとして宣言し、代わりにメソッドViewController内のコードでこのプロパティを設定することです。)application:didFinishLaunchingWithOptions

4

4 に答える 4

2

someListのプロパティでAppDelegateあり、ではありませんUIApplicationDelegate。したがって、キャストを追加する必要があります。

NSLog(@"%@", [(AppDelegate *)[UIApplication sharedApplication].delegate someList]);
于 2012-08-22T22:05:17.227 に答える
2

適切な型にキャストする必要があります。[[UIApplication sharedApplication] delegate]その時点で、コンパイラはそれがのインスタンスであると見なすだけだからですid<UIApplicationDelegate>。あなたの中で次のようなものを考えてくださいViewController.m

- (NSMutableArray *)someList {
    return ((AppDelegate *)[[UIApplication sharedApplication] delegate]).someList;
}

これにより、ViewControllerの任意の場所にアクセスできますself.someList#import "AppDelegate.h"おそらくである必要があることに注意してくださいViewController.m

于 2012-08-22T22:04:43.283 に答える
1

キャスト:

NSLog(@"%@", ((AppDelegate *)[[UIApplication sharedApplication] delegate]).someList);
于 2012-08-22T22:04:55.030 に答える
0

キャストする必要があります。しかし、私はクラスでメソッドを作成するのに十分なほど一般的に使用しています。

- (MyApplicationDelegate*) appDelegate{
    return (MyApplicationDelegate*)[UIApplication sharedApplication].delegate;
}

その後、プロジェクトからアプリ デリゲートを呼び出すだけです。

- (void) someAction {
    [[self appDelegate].someList addObject:@"new object"];
}

これはより良いアプローチだと思います。

于 2012-08-22T22:20:15.087 に答える