0

NSScannerを使用しようとしていますが、NSArray列挙ループです。ただし、これは失敗します。

-[NSXMLElementの長さ]:認識されないセレクターがインスタンス0x280da30に送信されました

lengthいいえ、どこにも電話していません。スキャナーが完了する前にfoundの値が変更されたため、空白になり、lengthエラーが発生したようです。

ループを削除して文字列をハードコーディングすると(これは必要ありません。単なるテストです)、以下のコードが機能します。(もちろん列挙を除く)

sを呼び出すことまでは決して到達しませんNSLog...

これが私のコードです:

    for (NSString*found in arr)
    {
        NSLog(@"Found %@",found);

        NSString*search = [NSString stringWithString:found];

        NSString *separatorString = @"\"";                             
        NSString *container = nil;
        NSScanner *aScanner = [NSScanner scannerWithString:search]; 

        [aScanner setScanLocation:0];                                        
        [aScanner scanUpToString:@"src=\"" intoString:nil];          
        [aScanner scanString:@"src=\"" intoString:nil];                     
        [aScanner scanUpToString:separatorString intoString:&container]; 

        NSLog(@"scanned");

        NSLog(@"%@",container);

        NSImage*previewImage = [[NSImage alloc] initWithContentsOfFile:[relativeDir stringByAppendingPathComponent:container]];

        [preview setImage:previewImage];

        [previewImage release];

        progressed = progressed + 1;

        [convertProgress setDoubleValue:[convertProgress doubleValue] + progressed];
    }

どうすればこれを機能させることができますか?

編集:

入力は次のとおりです。

    NSXMLDocument*doc = [[NSXMLDocument alloc] initWithData:[NSData dataWithContentsOfFile:webPath] options:NSXMLDocumentTidyHTML error:nil];

    NSArray*arr = [doc nodesForXPath:@"//img[@src]" error:nil];
4

2 に答える 2

4

ドキュメントから:

このnodesForXPath:error:メソッドは、NSXMLNodeオブジェクトの配列を返します

配列が文字列でいっぱいではありません。いろいろなものがいっぱいNSXML*です。ゴミではありません。これはまさにそれが機能することになっている方法です。

を呼び出していない可能性がありますが、新しい文字列に割り当てるスペースの量を把握するために呼び出している可能性lengthがあります。stringWithString:length


文字列への変換は多くのことを意味します。XMLノードは、スタンドアロンタグ、インラインCDATA、さまざまな属性を持つタグの場合があります。また、XMLドキュメントは高度に構造化されています。ある程度の構造的な意味を適用せずに、タグ/コンテンツの直接の列挙としてドキュメントのコンテンツをウォークスルーすることはほとんど意味がありません。

タグを繰り返したり、ウォークしたりして、タグの内容を適切に解釈する必要がある可能性があります。

最初のステップは、最初のNSLog()以外のすべてを削除して、何が得られたかを確認することです。次に、ノードのツリーを歩く方法を理解します。次に、それらを適切に解析する方法を理解します。

于 2011-01-28T18:45:24.133 に答える
1

オブジェクトarrが含まれていることを確認しますか?NSStringエラーをスローしているという事実NSXMLElementは、私には怪しいように見えます。

編集

はい、ドキュメントによると、からの配列にはオブジェクトは含まれnodesForXPathていませんが、NSStringオブジェクトが含まれているようNSXMLElementです。

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLNode/nodesForXPath:error

于 2011-01-28T18:30:21.990 に答える