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:]:nil引数

誰か助けてもらえますか、ありがとう、サミ。

4

3 に答える 3

1

この行を変更します。

NSError *error;

これに:

NSError *error = nil;

これが機能する理由の詳細については、次の質問をお読みください: NSError: Does using nil to detect Error really turn off error reporting?


ただし、エラー オブジェクトをまったく気にしていないように見えるので、これらのメソッドを次のように呼び出すだけのほうがよいでしょう ( に置き換えます&error) NULL

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 に答える