ios - 为什么在重新启动 iOS 模拟器时我的 plist 变成二进制并丢失数据

标签 ios objective-c

我成功地将信息字典写入 plist。我可以在运行应用程序时验证这一点:

less /Users/xxxxxx/Library/Application Support/iPhone Simulator/7.0.3-64/Applications/xxxxxxxx/appname.app/myplist.plist

而且我看到了所有以 xml 格式编写的数据,正如我所期望的那样。 (文件约1KB)

我关闭我的模拟器并重新打开它,现在我被告知这个文件是二进制的并且它的 < 100 字节

我是 iOS/Objective-c 的新手,但不确定我是否从根本上缺少关于 plist 以及数据如何持久化的内容。

最佳答案

所以你使用 writeToFile:atomically: 方法将 NSDictionary 的数据写入文件,对吧? 像下面这样:

static NSString *filename = @"DictFile.plist";
- (NSDictionary *)openDict
{
    NSString *filePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:filename];

    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];

    return dict;
}

- (void)saveDict:(NSDictionary *)dict
{
    NSString *filePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:filename];

    if (![dict writeToFile:filePath atomically:YES])
    {
        [[NSException exceptionWithName:@"IOException"
                             reason:[NSString stringWithFormat:@"filename.plist cannot be saved to %@", filePath]
                           userInfo:nil] raise];
    }

    NSLog(@"File on path: %@", filePath);
}

- (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

检查方法:

- (NSDictionary *)createDict
{
    NSDictionary *dict = [self openDict];

    if (dict)
    {
        id key = [[dict allKeys] firstObject];
        if (key)
        {
            NSLog(@"Found dictionary: %@ - %@", key, [dict objectForKey:key]);
        }
    }
    else
    {
        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Key", @"Value", nil];

        [self saveDict:dict];
    }

    return dict;
}

关于ios - 为什么在重新启动 iOS 模拟器时我的 plist 变成二进制并丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749349/

相关文章:

ios - 秒表 iOS Swift

ios - AppStore 发布的 iOS 应用及其多个 Testflight 在同一设备上构建

在低功耗模式下,iOS 应用程序在 NSOperationQueue 上崩溃

ios - 在 XCode 单 View 编译期间获取体系结构 i386 的 undefined symbol

ios - 我无法让类别出现在表格 View 单元格中

iphone - 如何在 UIAlertView 委托(delegate)中安全地传递上下文对象?

ios - Xcode 启动图像和全屏问题

javascript - 来自 Web 应用程序的 iOS 通知

objective-c - Objective-C对象 Release模式

ios - 如何在 ios 6 上创建和保存 EKCalendar