【问题标题】:How do I write to a file in Objective-C?如何在 Objective-C 中写入文件?
【发布时间】:2013-03-20 00:08:29
【问题描述】:

我有一些文本文件,其中包含我的应用所需的一些基本数据。我可以读取文件并获得文件路径:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Money" ofType:@"txt"];

要写入我认为我会使用的文件:

[[HoldString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO];

这不起作用,我也尝试使用以下方法获取文件路径:

NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* fileAtPath = [filePath stringByAppendingPathComponent:@"Money.txt"];

这些都不起作用。我希望能够从不使用 CoreData 的文件中读取数据。

【问题讨论】:

    标签: objective-c file-management


    【解决方案1】:

    您不能写入应用程序包内的路径;你的包是只读的。所以这就是为什么第一种方法行不通的原因。

    但是您的第二种方法实际上应该可以在文档目录中形成有效路径。你确定那里有东西要读吗?安装您的应用程序时,该目录将为空。如果要修改自己包含的文本文件,请先将其从捆绑路径复制到文档文件夹。

    【讨论】:

    • 是文件夹吗?我有这个代码 if (![[NSFileManager defaultManager] fileExistsAtPath:fileAtPath]) { [[NSFileManager defaultManager] createFileAtPath:fileAtPath contents:nil attributes:nil]; }
    • @user1713165:文档文件夹存在于磁盘上。如果您使用的是模拟器,您可以使用 Mac 上的 Finder 浏览它。在任何情况下,用户都不能直接与之交互;它只是在必要时放置应用文档的好位置。
    • @user1713165:您评论中的代码 sn-p 实际上并没有做任何事情。创建具有nil 内容的文件是没有意义的。不会将任何内容写入磁盘。
    • 好的,我了解文档文件夹现在是如何工作的,它会根据设备等以不同的路径创建文件,对吧?所以我做了一些测试,效果很好,谢谢。
    【解决方案2】:

    应用的资源包是只读的(至少在真实设备上)。您需要将数据写入其他位置,例如 Documents 目录。

    大多数应用程序会检查文件是否存在于 Documents 目录中。如果没有,它会从资源包中复制一个文件。然后所有的读写都对副本完成。

    【讨论】:

    • 这可以解释很多事情。就像文件夹在应用程序中似乎已更改但在文件中未更改。
    【解决方案3】:

    在 iOS 上,应用程序包是只读的,所以你不能在上面写。解决此问题的一种方法是使用文档文件夹来存储您需要的文件并在其中写入数据。

    在您的情况下,另一种选择是使用 NSUserDefaults。因此,第一次运行应用程序时,您可以从捆绑包上的该文件 (Money.text) 中读取(或者如果可以的话,请避免将其保存在捆绑包中)。阅读后,而不是写入它,而是将整个文本保存到 NSUserDefaults,如下所示:

    [[NSUserDefaults standardUserDefaults] setObject: holdString forKey: @"money" ];  // By convention you should name it holdString instead of HoldString.  
    

    读取数据:

    NSString* moneyStr= [[NSUserDefaults standardUserDefaults] objectForKey: @"money"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多