gpt4 book ai didi

objective-c - 将文件路径从 NSString 转换为 NSURL

转载 作者:太空狗 更新时间:2023-10-30 03:11:12 25 4
gpt4 key购买 nike

我正在顺利地学习 Cocoa,但是这个问题看起来太基础了,它抵消了我学到的所有很酷的东西。 :/

我有一个生成的文件路径,它需要是 NSURL 格式。根据研究,这是我写的代码:

NSLog(@"Old path = %@", pathToFile);
NSURL *xmlURL = [[[NSURL alloc] init] fileURLWithPath:pathToFile];
NSLog(@"New path = %@", [xmlURL absoluteString]);

输出:

2010-01-27 15:39:22.105 MusicLibraryStats[28574:a0f] Old path = file://localhost/Users/[username]/Music/iTunes/iTunes%20Music%20Library.xml
2010-01-27 15:39:22.105 MusicLibraryStats[28574:a0f] New path = (null)

首先,alloc-init 甚至不是必需的; other people seem to get away with it .在这种情况下,如果我不分配初始化,我会在该行收到“无法识别的选择器”错误。当然,现在我只是变老了 (null)。

我哪里搞砸了?

谢谢!

最佳答案

[[NSURL alloc] init]不仅没有必要,而且无效fileURLWithPath:是一个类方法,这意味着您只能在类对象(即 NSURL 本身)上调用它。它不会产生编译错误,因为 -(NSURL *)init返回 id 类型的对象,并且不会导致运行时错误,因为 -(NSURL *)init实际上返回 nil , 以及发送至 nil 的消息只会级联另一个nil作为它们的返回值。

这段代码应该可以工作:

NSString* pathToFile = @"/this/is/a/path";
NSURL* url = [NSURL fileURLWithPath:pathToFile];

<罢工>

我发现了你的问题。 -[NSOpenPanel URLs]返回一个 NSURL 对象数组,您将其视为 NSString 对象。那是不对的。您应该使用以下内容:

NSURL* url = [[oPanel URLs] objectAtIndex:0];

如果您查看 pathToFile,调试器可能会告诉您多变的。确保下次检查。 :) 用鼠标悬停一个变量应该会得到它的类型。

但是,请记住,在某些情况下,您会合法地遇到另一种类型,而不是您预期的类型。例如,私有(private) NSPathStore2 类是 NSString 集群的一部分,您可以在 NSPathStore2 对象上执行 NSString 支持的所有操作。 (如果发生这种情况并且您不太确定,请查看文档以查看您期望的类型是否为簇类型。文档中就是这样调用它们的。)

关于objective-c - 将文件路径从 NSString 转换为 NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150480/

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