txt文件写入在emulator中工作,但在实际设备xcode中不工作

txt文件写入在emulator中工作,但在实际设备xcode中不工作,xcode,file-io,Xcode,File Io,大家好,我们编写了一个在emulator上运行得很好的程序。但当我们将项目上传到自己的设备时,它可以读取文件并显示项目,但当它试图擦除文件并再次写入时,它就不起作用了 可能存在哪些问题以及如何解决此问题?似乎您正在尝试将文件写入应用程序包。出于安全考虑,苹果不允许您触摸捆绑包。你必须: 检查沙箱中是否存在您的文件 如果没有,请从应用程序包中复制它 然后,处理复制的文件 我认为它可以在模拟器中工作,因为在模拟器中运行应用程序时没有沙箱。 下面是在应用程序的沙箱中查找正确文件夹的文档 编辑:

大家好,我们编写了一个在emulator上运行得很好的程序。但当我们将项目上传到自己的设备时,它可以读取文件并显示项目,但当它试图擦除文件并再次写入时,它就不起作用了


可能存在哪些问题以及如何解决此问题?

似乎您正在尝试将文件写入应用程序包。出于安全考虑,苹果不允许您触摸捆绑包。你必须:

  • 检查沙箱中是否存在您的文件
  • 如果没有,请从应用程序包中复制它
  • 然后,处理复制的文件
我认为它可以在模拟器中工作,因为在模拟器中运行应用程序时没有沙箱。 下面是在应用程序的沙箱中查找正确文件夹的文档

编辑:

下面是一些代码(没有在Xcode中运行它,可能有一些打字错误),用于将文件从bundle复制到Documents目录中的给定目录中。请注意,此代码每次都会覆盖Documents目录中的文件

NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *fileDirectory = [documentsDirectory stringByAppendingPathComponent:@"MyDirectory"];

// Create folder if it does not exist
BOOL isDirectory;
if (![[NSFileManager defaultManager] fileExistsAtPath:fileDirectory isDirectory:&isDirectory])
{
    NSError *error;
    [[NSFileManager defaultManager] createDirectoryAtPath:fileDirectory withIntermediateDirectories:NO attributes:nil error:&error];
    if(error)
    {
        NSLog(@"Error creating folder : %@",error.localizedDescription);
        return;
    }
    else
    {
        NSLog(@"Folder created");
    }
}

// Save to disk
NSString *filePathOnDisk = [fileDirectory stringByAppendingPathComponent:@"fileInSandbox.foo"];
NSString *pathFromBundle = [[NSBundle mainBundle] pathForResource:@"fileFromBundle" ofType:@"foo"];
NSData *fileData = [NSData dataWithContentsOfFile:pathFromBundle];
NSError *error;
if (![fileData writeToFile:filePathOnDisk options:NSDataWritingAtomic error:&error])
{
    NSLog(@"Error writing file : %@", error.localizedDescription);
}
else
{
    NSLog(@"File saved to disk successfully");
}
然后,当您想要处理复制的文件时,请使用我们在
filePathOnDisk
中创建的路径


请再次阅读与文件管理相关的文档,以了解您对文件所做的操作。

是否可以编写代码请[[NSFileManager defaultManager]removeItemAtPath:filePath错误:nil];[[NSData data]writeToFile:filePath原子:是];NSFileHandle*handle=[NSFileHandle fileHandleForWritingAtPath:filePath];[handle truncateFileOffset:[handle seekToEndOfFile]];[handle writeData:[something dataUsingEncoding:NSUTF8StringEncoding];尝试使用
NSString*directory=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0]作为目录。然后完整路径是这样的:
directory=[directory stringByAppendingPathComponent:fileName]不要在注释中发布所有代码。用代码更新你的问题,以便人们可以阅读。问题是我们已经创建了文件并显示了它。它可以从该文件中读取,但问题是它不能写入或附加到该文件中。这正是为什么当你的应用首次运行时,你必须在应用程序的沙箱中复制它的原因。然后,你将始终使用复制的文件来编辑它。我如何做到“从应用程序包复制它,然后使用复制的文件”用一些代码编辑了答案。。。但别忘了阅读文档!