0

我正在尝试使用 NSScanner 是一个 NSArray 枚举循环。然而这失败了:

-[NSXMLElement 长度]:无法识别的选择器发送到实例 0x280da30

不,我不会length在任何地方打电话。似乎 found 的值在扫描仪完成之前已更改,因此将其变为空白,从而导致length错误。

如果我删除循环并对字符串进行硬编码(我不想要那个,这只是一个测试),下面的代码就可以工作。(当然不包括列举)

它也永远不会调用NSLogs...

这是我的代码:

    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引发错误的事实对我来说看起来很可疑。

编辑

是的,看起来文档说数组 fromnodesForXPath不包含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 回答