gpt4 book ai didi

iphone - 如何在iPhone上获得可写路径?

转载 作者:行者123 更新时间:2023-12-03 18:09:01 24 4
gpt4 key购买 nike

我发布这个问题是因为我在另一篇文章中写了一个完整的答案,当时我发现它不适用于原始内容,但我认为太有用了,不能浪费。因此,我也将其设为社区维基,以便其他人可以充实问题和答案。如果您发现答案有用,请投票支持该问题 - 作为一个社区 wiki,我不应该因为这次投票而获得积分,但它将帮助其他人找到它

如何获取 iPhone 上允许写入文件的路径?您可以(误导性地)在模拟器上写入任何您喜欢的位置,但在 iPhone 上您只能写入特定位置。

最佳答案

需要考虑三种可写路径 - 第一种是文档,您可以在其中存储要保留的内容并通过 iTunes 供用户使用(从 3.2 开始):

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

其次,与 Documents 目录非常相似,有一个 Library 文件夹,您可以在其中存储您也想保留的配置文件和可写数据库,但您不希望用户能够通过iTunes:

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

请注意,即使用户无法使用 3.2 之前版本的设备(iPad)查看 iTunes 中的文件,NSLibraryDirectory 常量自 iPhoneOS 2.0 起就可用,因此可用于针对 3.0 的构建(甚至更早版本,如果您仍在这样做)。此外,除非您将应用程序标记为允许用户修改文档,否则用户将无法看到任何内容,因此,如果您现在使用文档,只要在更新以支持用户文档时更改位置就可以了。

最后有一个缓存目录,您可以在其中放置您不关心是否长期存在的图像(手机可能会在某些时候删除它们):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir == NO) {
[[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}

请注意,您必须在那里实际创建 Caches 目录,因此在写入时您必须每次都检查并创建!有点痛苦,但就是这样。

然后,当您有可写路径时,只需在其上附加一个文件名,如下所示:

NSString *filePath =  [documentsDirectory stringByAppendingPathComponent:@"SomeDirectory/SomeFile.txt"];

NSString *filePath =  [cachePath stringByAppendingPathComponent:@"SomeTmpFile.png"];

使用该路径进行读取或写入。

请注意,您可以在任一可写路径中创建子目录,上面的示例字符串之一正在使用该路径(假设已创建一个)。

如果您尝试将图像写入照片库,则无法使用文件系统调用来执行此操作 - 相反,您必须在内存中拥有 UIImage,并使用 UIImageWriteToSavedPhotosAlbum() UIKit 定义的函数调用。您无法控制目标格式或压缩级别,也无法以这种方式附加任何 EXIF。

关于iphone - 如何在iPhone上获得可写路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com