模拟器中的 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
IOS 8 SplitViewController iPhone模拟器人像detailView后退按钮问题