首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用writeToFile保存文件

使用writeToFile保存文件
EN

Stack Overflow用户
提问于 2016-02-06 22:31:48
回答 1查看 197关注 0票数 1

因此,我发现了一个小问题,就是以后使用writeToFile来保存数组。我在用:

代码语言:javascript
复制
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                             NSUserDomainMask, YES);
        if ([paths count] > 0)
        {
            NSString *arrayPath = [[paths objectAtIndex:0]
                         stringByAppendingPathComponent:@"array.out"];

            [finalSavedArray writeToFile:arrayPath atomically:YES];
            [[NSUserDefaults standardUserDefaults] setObject:arrayPath forKey:@"SavedArrayPath"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }

将“finalSavedArray”保存为文件,然后使用以下方法检索此数组:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        NSLog(@"File path: %@",[[NSUserDefaults standardUserDefaults] objectForKey:@"SavedArrayPath"]);
        NSMutableArray *savedArray = [NSMutableArray arrayWithContentsOfFile:[[NSUserDefaults standardUserDefaults] objectForKey:@"SavedArrayPath"]];
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"SAVED ARRAY:%@",savedArray);
        });

    });

当我在保存文件后不久访问该文件时,这很好,但是当我重新启动应用程序时,数组显示为null,并且在保存的目录中似乎找不到。从阅读的角度来看,这个文件目录应该是相对的,因为我现在保存的目录在每次打开应用程序时都会发生变化,但是我还没有完全弄清楚如何更改代码以便将其保存到一个相对目录中。如能提供任何帮助,将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-06 22:38:19

应用程序的路径可以改变。永远不要存储文件的绝对路径。在这种情况下,只需存储相对于“文档”文件夹的路径。

当您想读取文件时,从NSUserDefaults读取相对路径,然后像写入文件一样重新构建完整路径。

编写文件:

代码语言:javascript
复制
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
if ([paths count] > 0)
{
    NSString *arrayPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"array.out"];

    [finalSavedArray writeToFile:arrayPath atomically:YES];
    [[NSUserDefaults standardUserDefaults] setObject:[arrayPath lastPathComponent] forKey:@"SavedArrayPath"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

读取文件:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filename = [[NSUserDefaults standardUserDefaults] objectForKey:@"SavedArrayPath"];
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:filename];
    NSMutableArray *savedArray = [NSMutableArray arrayWithContentsOfFile:path];
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"SAVED ARRAY:%@",savedArray);
    });

});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35247313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档