NSURL路径不起作用,但NSString路径工作

时间:2014-10-30 21:24:38

标签: objective-c nsstring nsurl nsfilemanager

我将一个对象保存到文件中,我现在正在尝试检查该文件是否存在。我已经确认了文件的路径并得出结论,当我将路径硬编码为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;

}

2 个答案:

答案 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'

这显然不是文件路径。