示例:如果我使用它,iPhone 将文件存储在哪里?
if (![NSKeyedArchiver archiveRootObject:your_object toFile:@"filename.plist"])
// save failed.
在我的 Mac 上,filename.plist 直接转到 Macintosh HD。没有文件夹。此外, NSKeyedArchiver 似乎并不要求提供路径,而只是要求提供文件名。奇怪与否?
该文件是如何通过 iTunes 备份的?
示例:如果我使用它,iPhone 将文件存储在哪里?
if (![NSKeyedArchiver archiveRootObject:your_object toFile:@"filename.plist"])
// save failed.
在我的 Mac 上,filename.plist 直接转到 Macintosh HD。没有文件夹。此外, NSKeyedArchiver 似乎并不要求提供路径,而只是要求提供文件名。奇怪与否?
该文件是如何通过 iTunes 备份的?
好吧,这实际上取决于您要求它保存文件的位置,在您的情况下,您告诉它 store filename.plist
,它将存储在您的 root/
中。
如果您想将其存储在特定位置,只需为其提供完整路径,就像 Diederik Hoogenboom 告诉您的那样(这会将其存储在 Documents 目录中)
或者只是给它你想要保存文件的绝对路径。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent: @"myFile.plist"];
[NSKeyedArchiver archiveRootObject:your_object toFile:filePath];
这可能已经为您清除了一点。
存储文件的正确位置是文档文件夹:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
archiveRootObject:toFile: (已被弃用)。因此,您应该将路径传递给它,而不仅仅是文件名。否则NSKeyedArchiver
将假定您要将其存储在设备硬盘的根目录中。
更新:
使用 生成的数据结果NSKeyedArchiver
,使用Data.write(to:options:)
实例方法将数据对象的字节写入给定 URL 指定的位置。