【问题标题】:How to store a NSData locally如何在本地存储 NSData
【发布时间】:2016-07-22 01:27:27
【问题描述】:

我正在获取各种格式的文档,扩展名为 .png、.txt、.jpg、mp3 等作为 NSData 格式,我需要将这些文件存储在本地并查看它,我已经尝试过了

 NSData* conData = [convStr dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"the converted string to nsdata is :%@",conData);

[conData writeToFile:@"Filename.txt" atomically:YES];

但不幸的是,这不起作用任何人都可以帮忙。

【问题讨论】:

  • 您已经给出了保存文件文档、库、缓存的目录...您缺少该特定代码。
  • @arun Gupta 你能帮我写代码吗?
  • 您面临的问题是哪一部分。上面的网址没有帮助。您能否发布整个代码以及您面临的问题。您可以在文档目录中看到该文件吗?

标签: ios objective-c ios7 nsdata


【解决方案1】:

注意 - 将 NSData 写入文件是一个 IO 操作,它可能会阻止您的主线程使用调度,还提供文件路径用于仅写入文件名。

这会为我写文件

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    // Generate the file path
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Filename.txt"];

     // Save it into file system
    [data writeToFile:dataPath atomically:YES];
});

【讨论】:

  • NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Filename.txt"];如果我使用它,我可以保存带有 .txt 扩展名或所有其他格式(如 .jpg、.pdf、.png.mp3 等)的文件
  • @LeoDabus 他的原始代码在 objective-c 中,他发布了问题
  • @Arun 是的,您可以保存任何类型的文件。最好的方法是创建一个通用方法并将它们作为 NSData 和文件名传递参数。使用 fileName 您还可以获得扩展名以更改特定文件类型的实现,并使用文件名将文件保存为所需的扩展名。
【解决方案2】:

您只给出了文件名(Filename.txt)而不是整个文件路径,这就是您的代码不起作用的原因。

检查下面的代码行你会明白的。

 NSArray *paths =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,     NSUserDomainMask, YES);
NSString  *documentsDirectory = [paths objectAtIndex:0];  

NSString  *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"Filename.txt"];
[urlData writeToFile:filePath atomically:YES];

【讨论】:

    【解决方案3】:

    你应该在writeToFile方法中传递一个正确的路径

    NSString *docsDir;
    NSArray *dirPaths;
    
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];
    NSString *targetPatch = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"Filename.text"]];
    [data writeToFile:targetPatch atomically:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 2015-04-06
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2019-03-28
      • 2015-03-04
      • 1970-01-01
      相关资源
      最近更新 更多