spa*_*guy 25 cocoa objective-c
我正在顺利地完成Cocoa,但这个问题看起来很基本,它取消了我学到的所有很酷的东西.:/
我有一个生成的文件路径,它需要是NSURL格式.从研究来看,这是我写的代码:
NSLog(@"Old path = %@", pathToFile);
NSURL *xmlURL = [[[NSURL alloc] init] fileURLWithPath:pathToFile];
NSLog(@"New path = %@", [xmlURL absoluteString]);
Run Code Online (Sandbox Code Playgroud)
并输出:
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)
Run Code Online (Sandbox Code Playgroud)
首先,alloc-init甚至不需要; 其他人似乎逃脱了它.在这种情况下,如果我没有alloc-init,我会在该行上收到"无法识别的选择器"错误.当然,现在我只是变老了(null).
我在哪里?
谢谢!
zne*_*eak 34
这[[NSURL alloc] init]
不仅是不必要的,而且是无效的.fileURLWithPath:
是一个类方法,这意味着你只能在类对象(即它NSURL
自身)上调用它.它不会产生编译错误,因为它-(NSURL *)init
返回一个类型的对象id
,并且不会因为-(NSURL *)init
实际返回而导致运行时错误nil
,而发送到的消息nil
只会将另一个nil
作为返回值级联.
这段代码应该有效:
NSString* pathToFile = @"/this/is/a/path";
NSURL* url = [NSURL fileURLWithPath:pathToFile];
Run Code Online (Sandbox Code Playgroud)
我找到了你的问题.
-[NSOpenPanel URLs]
返回一个NSURL对象数组,您将其视为NSString对象.那是不对的.您应该使用以下内容:
NSURL* url = [[oPanel URLs] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
如果你查看pathToFile
变量,调试器可以告诉你.请务必下次检查.:)用鼠标悬停变量应该得到它的类型.
但是,请记住,在某些情况下,您将合法地遇到与您预期的类型不同的其他类型.例如,私有NSPathStore2类是NSString集群的一部分,您可以执行NSString在NSPathStore2对象上支持的所有操作.(如果发生这种情况并且您不太确定,请查看文档以查看您期望的类型是否为群集类型.这就是在文档中调用它们的方式.)
归档时间: |
|
查看次数: |
38096 次 |
最近记录: |