0

内にあるNSStringfromにアクセスしたい。AppDelegate.mViewController.m

私はSingle View Applicationを持っNSStringています。applicationDidEnterBackground:AppDelegate.m

NSStringViewController.mにあり、 では宣言されていませんAppDelegate.m

私はそれを宣言してからAppDelegate.hアクセスしようとしましたViewController.m(そして逆に)。

ViewController.h:

@interface MyAppViewController : UIViewController {
    NSString *MyString;
}

AppDelegate.m:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
   [defaults setObject:MyString forKey:@"SavedString"];
   [defaults synchronize];
}
4

3 に答える 3

1

次のように、MyAppViewControllerをオブザーバーUIApplicationDidEnterBackgroundNotificationに登録できます。

[[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(goToBackground:) 
        name:@"UIApplicationDidEnterBackgroundNotification"
        object:nil];

このメソッドではgoToBackground、NSUserDefaultsに保存できますMyString

于 2012-04-24T20:29:41.260 に答える
0

あるクラスのインスタンス変数は、別のクラスのメソッドでは使用できません。getterメソッドとsetterメソッドを定義するか、プロパティ(getterメソッドとsetterメソッドの基本的な構文糖衣です。Objective -Cプログラミングの「宣言されたプロパティ」の章を参照)を定義することにより、クラスの外部からインスタンス変数を取得および設定するためのインターフェイスを公開できます。詳細については言語。

于 2012-04-24T20:29:03.123 に答える
0

MyStringがMyAppViewControllerオブジェクトに属している場合は、少なくともコントローラーへの参照が必要です。あなたがそれを呼ぶと仮定しますcontroller

次に、MyStringを他のクラスのプロパティとしてアクセスできるようにする場合は、次のように宣言する必要があります。

@interface MyAppViewController : UIViewController
@property (strong, nonatomic) NSString *MyString;
@end

次に、アプリデリゲートで:

- (void)applicationWillTerminate:(UIApplication *)application {
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:controller.MyString forKey:@"MyString"]; //<-- This is where it all goes wrong. MyString is shown as undeclared identifier.
    [defaults synchronize];
}

また、補足として、明確にするために命名規則を再確認することをお勧めします。

于 2012-04-24T20:29:39.717 に答える