Objective-C [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:&error];帮助
Posted
技术标签:
【中文标题】Objective-C [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:&error];帮助【英文标题】:Objective-C [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:&error]; help 【发布时间】:2011-02-14 16:46:22 【问题描述】:我需要一点帮助,我有一个搜索字段和按钮可以触发此方法,但我得到了下面的错误。
- (IBAction)fetchTracks:(id)sender
NSString *input = [searchField stringValue];
NSString *searchString = [input stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"searchString: %@", searchString);
NSError *error;
NSString* libraryPath = [[NSString alloc] initWithString:@"~/Music/iTunes/iTunes Music Library.xml"];
NSURL *url = [NSURL URLWithString:libraryPath];
[doc release];
doc = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:&error];
NSLog(@"doc: %@", doc);
[itemNodes release];
itemNodes = [[doc nodesForXPath:@"ItemSearchResponse/Items/Item" error:&error] retain];
[tableView reloadData];
* -[NSXMLDocument initWithContentsOfURL:options:error:]: 无参数
谁能帮忙,谢谢,萨米。
【问题讨论】:
你能不能把控制台的输出也贴出来。 我将 &error 更改为 NULL 并使用 libraryPath = [libraryPath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];这似乎已经解决了错误,但现在在控制台中我得到“doc:(null)”。 【参考方案1】:您需要在代码中转义空格。例如,像这样
libraryPath = [libraryPath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
当我添加这个时,您的代码不会崩溃。
但一般来说,我建议将文件作为文件访问(例如NSString stringWithContentsOfFile
)。它会让你的生活更轻松。
可以看到网址不能包含here的字符列表:
不安全:
字符不安全的原因有很多。空间 字符是不安全的,因为重要的空格可能会消失并且 转录 URL 时可能会引入无关紧要的空格或 排版或经过文字处理程序的处理。
【讨论】:
【参考方案2】:改变这一行:
NSError *error;
到这里:
NSError *error = nil;
阅读此问题以了解有关其工作原理的更多详细信息:NSError: Does using nil to detect Error actually turn off error reporting?
但是,您似乎根本不关心错误对象,因此您最好像这样调用这些方法(将 &error
替换为 NULL
)
doc = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL];
...
itemNodes = [[doc nodesForXPath:@"ItemSearchResponse/Items/Item" error:NULL] retain];
【讨论】:
【参考方案3】:我想你可能需要:
NSString *urlString = [@"~/Music/iTunes/iTunes Music Library.xml" stringByExpandingTildeInPath];
NSString* libraryPath = [[NSString alloc] initWithString:urlString];
【讨论】:
以上是关于Objective-C [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:&error];帮助的主要内容,如果未能解决你的问题,请参考以下文章