【问题标题】:Saving files using writeToFile使用 writeToFile 保存文件
【发布时间】:2016-02-06 22:31:48
【问题描述】:

所以我发现了一个小问题,即使用 writeToFile 保存数组以便稍后检索它。我正在使用:

        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' 保存为文件,然后使用以下方法检索此数组:

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);
        });

    });

当我在保存文件后不久访问文件时,这工作正常,但是当我重新启动应用程序时,数组显示为空,并且似乎在保存的目录中找不到。从一点阅读看来,这个文件目录应该是相对的,因为我现在保存到的目录在您每次打开应用程序时都会更改,但我还不太清楚如何更改我的代码为了将其保存到相对目录。任何帮助将不胜感激:)

【问题讨论】:

    标签: ios objective-c writetofile


    【解决方案1】:

    应用的路径可以改变。永远不要存储文件的绝对路径。在您的情况下,只需存储相对于 Documents 文件夹的路径。

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

    编写文件:

    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];
    }
    

    读取文件:

    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);
        });
    
    });
    

    【讨论】:

    • 那么我需要改变什么来存储相对路径而不是绝对路径?
    • 查看我的更新答案。这正是我说你需要做的。
    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多