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];帮助的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0 令人兴奋,但Objective-C也有小改进--Objective-C的类属性

如何在c++中,调用objective-c

1了解Objective-C语言的起源

Objective-C 和 C++ 的区别有哪些?

Objective-C中的Hello World

C++和Objective-C混编(官方文档翻译)