在iOS5中保存数据问题

时间:2012-01-04 20:53:39

标签: ios xcode ios5 save plist

我正在尝试使用Beginning iPhone Development中的代码在我的应用中保存简单的文本数据:

- (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。有谁知道那可能是什么?

2 个答案:

答案 0 :(得分:3)

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

设定值

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

获得价值

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

答案 1 :(得分:2)

我的猜测是,当这是为iOS 3编写的时,当你点击主页按钮时会调用applicationWillTerminate。对于iOS 5,情况并非如此。尝试将代码移至-applicationDidEnterBackground。