0

我想NSStringAppDelegate.m位于内部ViewController.m的 .

我有一个单一视图应用程序,我想将我的NSString使用保存applicationDidEnterBackground:在里面AppDelegate.m

NSString位于内部ViewController.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

You can register MyAppViewController to observer UIApplicationDidEnterBackgroundNotification like this:

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

and in the method goToBackground you can save in NSUserDefaults the 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 回答