【问题标题】:Saving Data in iOS5 Issue在 iOS5 问题中保存数据
【发布时间】:2012-01-04 20:53:39
【问题描述】:

我正在尝试使用“开始 iPhone 开发”中的以下代码在我的应用中保存简单的文本数据:

- (NSString *)dataFilePath { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingFormat:kFileName];
}

- (void)applicationWillTerminate:(NSNotification *)notification { 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [array addObject:field1.text]; 
    [array addObject:field2.text]; 
    [array addObject:field3.text]; 
    [array addObject:field4.text];

    [array writeToFile:[self dataFilePath] atomically:YES];
}

- (void)viewDidLoad { NSString *filePath = [self dataFilePath];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
        field1.text = [array objectAtIndex:0];
        field2.text = [array objectAtIndex:1];
        field3.text = [array objectAtIndex:2];
        field4.text = [array objectAtIndex:4];
    }

    UIApplication *app = [UIApplication sharedApplication];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationWillTerminate:)
                                             name:UIApplicationWillTerminateNotification
                                           object:app];

    [super viewDidLoad];
}

这段代码在 iOS 3 上写得很好,但在 iOS 5 上不行正好。但是,当您通过点击主页按钮关闭它,然后调出多任务栏并将其关闭,然后重新启动应用程序时,数据就消失了。当您从多任务栏关闭应用程序时,我认为该应用程序不会收到通知它正在终止,但我不确定我是否仍然是初学者。

我确信我只需要在我已有的代码中添加额外的一行或 2 行。有谁知道那可能是什么?

【问题讨论】:

    标签: ios xcode ios5 save plist


    【解决方案1】:

    我可以建议使用 NSUserDefaults 类吗?非常适合存储这样的简单数据。

    设置值

    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"value" forKey:@"field"];
    [defaults synchronize];
    

    获取价值

    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    NSString * value = [defaults objectForKey:@"field"]
    

    【讨论】:

      【解决方案2】:

      我的猜测是,当这是为 iOS 3 编写的时候,applicationWillTerminate 在你点击主页按钮时被调用。在 iOS 5 中,情况并非如此。尝试将您的代码移动到 -applicationDidEnterBackground。

      【讨论】:

      • 非常感谢。我将所有说 applicationWillTerminate 的内容更改为 applicationDidEnterBackground。但是,在 viewDidLoad 接近尾声的“名称:”下,它显示的是 UIApplicationWillTerminateNotification。我尝试将其更改为 UIApplicationWillEnterBackgroundNotification,但出现错误。你是我应该放在那里的吗?
      • UIApplicationDidEnterBackgroundNotification
      • 非常感谢!这帮了大忙。
      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 2011-08-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多