模拟器中的 iOS 8 writeToFile

Posted

技术标签:

【中文标题】模拟器中的 iOS 8 writeToFile【英文标题】:iOS 8 writeToFile in Simulator 【发布时间】:2014-12-04 12:43:05 【问题描述】:

我正在尝试使用以下代码将一个简单的字符串写入文件:

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

    NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt",
                          documentsDirectory];
    NSString *content = @"Test Content";
    NSError *error = nil;
    [content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:&error];

    NSLog(@"Error %@ %@", fileName, error);

但是文件没有写入,错误为空。

我正在 ios 模拟器中运行代码,并希望将文件写入以下位置:/Users/user/Library/Developer/CoreSimulator/Devices/85DDC17D-A771-40D9-99BE-71FF6B60D2DF/data/ Containers/Data/Application/BD30A945-25DB-4ECE-B7F7-E9C20C6691C7/Documents/textfile.txt(NSLog中fileName的路径)。

【问题讨论】:

"writeToFile:atomically:encoding:" 返回一个 BOOL 值,表示写入成功或失败。在您的情况下,它返回 true 还是 false? 返回真。但该文件尚未写入。我现在创建了一个测试项目并执行了相同的代码并写入了文件。那么它可能与该项目有关? 我已经将上面的代码复制粘贴到一个新的应用程序中,它可以正常工作。您确定您使用的是上面的 EXACTE 代码吗?同时创建 fileName 变量,如:NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"textfile.txt"]; 你怎么知道文件没有写入? 是的,我使用的是确切的代码,正如我在上面已经说过的,该代码适用于我在一个空项目中,它不适用于我当前的项目,该项目最初是为 iOS 7 创建的。 【参考方案1】:

正如@rckoenes 指出的那样,这是我其余代码中的错误。我有一个删除“文档”中所有文件的功能,我只是不记得我有这个功能,而且由于代码的长度(> 5000 行)很难找到。谢谢大家!

【讨论】:

【参考方案2】:

使用 URL 是一种可靠的方法,所以我会稍微修改你的想法,例如这个:

NSURL *_documentFolder = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *_fileURL = [_documentFolder URLByAppendingPathComponent:@"textFile.txt"];
NSError *_error = nil;
BOOL _success = [@"hello!" writeToURL:_fileURL atomically:TRUE encoding:NSUTF8StringEncoding error:&_error];

在模拟器和真实设备上也能完美运行,文件textFile.txt 将包含内容hello!


注意:如果_success 的值为FALSE,您可以通过_error 获得有关原因的更多信息,即使您只是将其记录到调试控制台。在我的示例中我没有隔离NSString,但是您可以将其替换为您自己的实例。

【讨论】:

可爱...一个天才被否决而没有留下任何评论...该死的系统最终可以通过强迫那些白痴发表评论来重新设计吗?这对社区没有帮助——因为我个人不知道应该如何改进答案。如果有人有,请给我一个提示。谢谢!【参考方案3】:

请检查以下代码:

   NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *filePath = [[pathsobjectAtIndex:0]stringByAppendingPathComponent:@"textfile.txt"];
   NSString *temp = [[NSString alloc] initWithString:@"Test Content"];
   [temp writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

【讨论】:

不要只是发布代码,解释什么不同以及为什么!

以上是关于模拟器中的 iOS 8 writeToFile的主要内容,如果未能解决你的问题,请参考以下文章

CodeSign 错误:SDK“模拟器 - iOS 8.4”中的产品类型“静态库”需要授权。您的 Xcode 安装可能已损坏

CoreData 适用于我的模拟器,但不适用于使用 xCode 6 的 iOS 8 Swift 中的 iPhone

Xcode 6 Beta iOS 8 模拟器无法访问互联网

IOS 8 SplitViewController iPhone模拟器人像detailView后退按钮问题

对于相同的 iPhone 5s,iOS 模拟器在 ios 7.1 和 ios 8.2 之间具有不同的屏幕高度

UITableView 有 UIScrollView in Cell 无法在 ios 模拟器 8.3 中滚动