【问题标题】:How do I save an NSString as a .txt file on my apps local documents directory?如何在我的应用程序本地文档目录中将 NSString 保存为 .txt 文件?
【发布时间】:2010-02-02 13:39:22
【问题描述】:

如何在我的应用本地文档目录 (UTF-8) 上将 NSString 保存为 .txt 文件?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch nsstring


    【解决方案1】:
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    
    NSError *error;
    BOOL succeed = [myString writeToFile:[documentsDirectory stringByAppendingPathComponent:@"myfile.txt"]
          atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (!succeed){
        // Handle error here
    }
    

    【讨论】:

    • 不要将nil 传递给error: 参数。一方面,它是错误的类型(nil 在概念上是一个id,而error: 参数是一个NSError **,它基本上是一个id *);正确类型的常数是NULL。更重要的是,当这个语句失败时,你不想知道为什么吗?
    • 进度,但是当消息成功时你也不应该假设errornil。测试消息返回YES还是NO,只检查返回NO的错误对象。引用:developer.apple.com/mac/library/documentation/cocoa/conceptual/…(第一个“重要”侧边栏——诚然,它有点倾斜)
    【解决方案2】:

    类似这样的:

    NSString *homeDirectory;
    homeDirectory = NSHomeDirectory(); // Get app's home directory - you could check for a folder here too.
    BOOL isWriteable = [[NSFileManager defaultManager] isWritableFileAtPath: homeDirectory]; //Check file path is writealbe
    // You can now add a file name to your path and the create the initial empty file
    
    [[NSFileManager defaultManager] createFileAtPath:newFilePath contents:nil attributes:nil];
    
    // Then as a you have an NSString you could simple use the writeFile: method
    NSString *yourStringOfData;
    [yourStringOfData writeToFile: newFilePath atomically: YES];
    

    【讨论】:

      【解决方案3】:

      他是如何将 NSString 保存到 Documents 文件夹中的。其他类型数据的保存也可以这样实现。

      - (void)saveStringToDocuments:(NSString *)stringToSave {
      
       NSString *documentsFolder = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
       NSString *fileName = [NSString stringWithString:@"savedString.txt"];
      
       NSString *path = [documentsFolder stringByAppendingPathComponent:fileName];
      
       [[NSFileManager defaultManager] createFileAtPath:path contents:[stringToSave dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
      }
      

      【讨论】:

        【解决方案4】:

        你可以使用 NSUserDefaults

        保存:

        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        [prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];
        

        阅读:

        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        NSString *myString = [prefs stringForKey:@"keyToLookupString"];
        

        【讨论】:

        • 同意,这是一个有效的替代方案。不是他所要求的,但如果您不知道使用首选项有多容易,您就不会知道使用它们。 +1
        • 在将内容保存到 NSUserDefaults 后不要忘记致电 [prefs synchronize]
        【解决方案5】:

        我正在使用这种方法将一些 base64 编码的图像数据保存到磁盘。在我的电脑上打开文本文件时,我一直无法读取数据,因为自动添加了一些换行符和返回。

        以下代码修复了这个问题:

        myString = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
        myString = [myString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
        
        // write string to disk
        

        【讨论】:

          猜你喜欢
          • 2013-07-09
          • 1970-01-01
          • 2019-10-10
          • 1970-01-01
          • 2014-03-27
          • 2015-10-25
          • 2019-01-18
          • 1970-01-01
          • 2012-12-23
          相关资源
          最近更新 更多