1

我需要一点帮助,我有一个搜索字段和按钮可以触发此方法,但我得到了下面的错误。

- (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:]: 无参数

谁能帮忙,谢谢,萨米。

4

3 回答 3

1

更改此行:

NSError *error;

对此:

NSError *error = nil;

阅读此问题以获取有关其工作原理的更多详细信息:NSError:使用 nil 检测错误是否实际上会关闭错误报告?


但是,您似乎根本不关心错误对象,因此您最好像这样调用这些方法(替换&errorNULL

doc = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL];
...
itemNodes = [[doc nodesForXPath:@"ItemSearchResponse/Items/Item" error:NULL] retain];
于 2011-02-14T16:55:10.807 回答
1

您需要在代码中转义空格。例如,像这样

  libraryPath = [libraryPath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

当我添加这个时,您的代码不会崩溃。
但一般来说,我建议将文件作为文件访问(例如NSString stringWithContentsOfFile)。它会让你的生活更轻松。

您可以在此处查看URL 不能包含的字符列表:

不安全:

由于多种原因,字符可能不安全。空格字符是不安全的,因为当 URL 被转录或排版或经受文字处理程序的处理时,重要的空格可能会消失,并且可能会引入无关紧要的空格。

于 2011-02-14T17:06:39.680 回答
0

我想你可能需要:

NSString *urlString = [@"~/Music/iTunes/iTunes Music Library.xml" stringByExpandingTildeInPath];
NSString* libraryPath = [[NSString alloc] initWithString:urlString];
于 2011-02-14T17:26:07.437 回答