【问题标题】:NSURL from string not working来自字符串的 NSURL 不起作用
【发布时间】:2016-03-18 07:33:57
【问题描述】:

编写了一个在临时文件夹中提取 zip 文件的方法,并使得类中的所有方法都使用 NSURL 而不是路径启动,但是当尝试将路径更改为 NSURL 时,它返回 null。

//handles all ZIP Extraction
-(NSURL*)handleZIPExtractionAtDestination:(NSURL*)destinationURL
{
    NSString *destPath=[[destinationURL path]
                     stringByAppendingPathComponent:
                        [[[_archiveURL lastPathComponent] componentsSeparatedByString:@"."]
                         firstObject]];
    
    BOOL result=[SSZipArchive unzipFileAtPath:[_archiveURL path] toDestination:destPath];
    
    if(!result)
    {
        NSLog(@"Couldn't extract the Files.");
        return nil;
    }
    NSLog(@"%@",destPath);
    NSURL *url=[NSURL URLWithString:destPath];
    NSLog(@"%@",url);
  
    return url;
}

结果:

destPath=/private/var/mobile/Containers/Data/Application/43DB7D13-9999-4231-B8AB-885CF8757931/tmp/715F6E97-968B-4FD9-A517-D9C2320A85A3-3213-0000043B8B4AFD91/900156_d3728>

url=null

destPath 使用来自NSProcessInfoNSTemporaryDirectorygloballyUniqueString

【问题讨论】:

  • 使用最少的代码行数是没有代价的。使用一些中间变量,这样你就有机会检查你的代码哪里出错了。而且您的代码处理文件扩展名错误。
  • 查看文档有哪些处理文件路径的方法,并使用它们。例如 initFileURLWithPath,而不是 URLWithString。
  • 谢谢伙计。代码处理文件扩展名错误是什么意思?

标签: ios objective-c nsurl


【解决方案1】:
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];

试试这个

【讨论】:

    【解决方案2】:

    结果为空,因为您的 destPath 变量包含的相对 url 路径不完整 url。对于 NSURL,您需要像 http://web.com/you/file/path.html 这样的完整路径 如果你想要本地路径,那么它应该类似于file:///path/to/your/file.html

    【讨论】:

    • 只需在您的 destPath 变量之前附加 file:/// 就可以了
    猜你喜欢
    • 2014-04-08
    • 2014-06-08
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2014-09-29
    相关资源
    最近更新 更多