0

起動時にAppDelegateでオブジェクトのオブジェクトを初期化する必要があります。他の場所でivarにアクセスしようとすると、返されるものはすべてnullになります。

私がしていることは次のように単純化することができます

//AppDelegate.h:
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
    NSString* someString;
}

@property (nonatomic, copy)   NSString* someString;

そしてAppDelegate.mで

//AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    someString = @"Hello World!";
    NSLog(@"%@",someString);
}

これは、NSStringオブジェクトにアクセスするときに行うことです。

//ViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    NSLog(@"%@",delegate.someString);
}

出力テキストは

  • 2012-09-30 22:26:45.125 Labor3 [22524:f803] Hello World!
  • 2012-09-30 22:26:45.127 Labor3 [22524:f803](null)

警告やエラーなしで。

私が抱えている問題はもう少し複雑ですが、本質は同じままであり、上記の例を機能させることさえできません。ヒントをいただければ幸いです。

4

2 に答える 2

1

追加

@synthesize someString;

@implementation AppDelegate

アプリ内-.mファイルを委任します。

于 2012-09-30T20:49:12.717 に答える
1

someStringの代わりに_someStringを使用するか、Andreyの回答ソリューションを使用する必要があります。コードプロパティでsomeStringとivarsomeStringは接続されていません

于 2012-09-30T20:52:56.363 に答える