我将一个对象保存到文件中,我现在正在尝试检查该文件是否存在。我已经确认了文件的路径并得出结论,当我将路径硬编码为NSString时,IF语句有效,请参见第一个块。但是,当我尝试将路径保存为NSURL,并将其转换为NSString,以便fileManager可以在其上运行它的方法时,它不会在路径上找到该文件。我在这里缺少什么?
使用硬代码NSSTRING定位文件:
[NSKeyedArchiver archiveRootObject:employees toFile:@"/Users/xxx/Documents/employees.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *employeesPath = @"/Users/xxx/Documents/employees.plist";
if ([fileManager fileExistsAtPath:employeesPath]) {
NSLog(@"It exists! yes!");
}
else {
NSLog(@"Doesn't exist, sorry bud");
}
不使用NSURL定位文件:
[NSKeyedArchiver archiveRootObject:employees toFile:@"/Users/xxx/Documents/employees.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *employeesPath = [NSURL fileURLWithPath:@"/Users/xxx/Documents/employees.plist"];
NSString *employeesString = [employeesPath absoluteString];
if ([fileManager fileExistsAtPath:employeesString]) {
NSLog(@"It exists! yes!");
}
else {
NSLog(@"Doesn't exist, sorry bud");
}
修改
- 如果我想使用NSURL方法,我可以通过创建一个函数以正确的方式将路径存储到NSString中。最终工作:
NSString* getPropertyListPath() {
NSURL *documentDir = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
NSURL *plist = [documentDir URLByAppendingPathComponent:@"employees.plist"];
return plist.path;
}
答案 0 :(得分:1)
使用NSURL,giuseppe而不是字符串文字是正确的。
NSURL比字符串文字更兼容且更健壮。 NSURL类型将为您提供更多方法和功能。
您偶然发现的技巧是您需要文件路径,而不包含格式中包含的“ scheme ”或“ domain ”。
在NSURL对象上调用git-add
方法以检索所需内容的正确路径格式是正确的。 path
方法仅将路径组件返回到NSURL地址路径。它不返回方案或域组件。
path
例如:
如果我在以下目录路径中有一个文件:
NSString *correctPathFormat = [yourNsurlObject path];
并将其加载到NSURL对象中:
NSString* myDirPath = @"/Users/yourUserName/imageFolder";
然后附加文件名和文件类型:
NSURL *nsurlDirPath = [NSURL fileURLWithPath:myDirPath];
如果您调用 NSURL *nsurlFilePath = [nsurlDirPath URLByAppendingPathComponent:@"employee.plist"];
方法,您将获得格式为“ scheme:// domain / path ”的NSString值
[nsurlFilePath absoluteString]
注销:
NSString *retrievePath = [nsurlFilePath absoluteString];
NSLog(@"%@",retrievePath);
特别注意:这相当于文件路径:
file:///Users/yourUserName/imageFolder/employee.plist
“ localhost ”只是省略了,因为这是默认隐含的,所以这就是为什么你在“文件中看到” /// “的原因:///用户/ ... 的”。
“ localhost ”是一个别名,它指的是本地设备的IP地址,或者换句话说,是运行代码的设备。
最后,要获得正确的路径格式,您需要在NSURL对象上运行' path '方法,这会在回复的最开始时回到答案:
file://localhost/Users/yourUserName/imageFolder/employee.plist
这会记录正确的“路径”组件,减去“ scheme ”& “域”:
NSString *correctPathFormat = [nsurlFilePath path];
进一步说明:
NSURLS有三个部分:
/Users/yourUserName/imageFolder/employee.plist
答案 1 :(得分:0)
请勿使用NSURL
作为文件路径中介。
NSURL *employeesPath = [NSURL fileURLWithPath:@"/Users/xxx/Documents/employees.plist"];
NSString *employeesString = [employeesPath absoluteString];
NSLog(@"employeesString: %@", 'employeesString');
输出:
employeesString:' file:///Users/xxx/Documents/employees.plist'
这显然不是文件路径。