objective-c - NSScanner 和数组循环

标签 objective-c cocoa nsscanner

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

-[NSXMLElement length]: unrecognized selector sent to instance 0x280da30

不,我不会在任何地方调用length。看起来 find 的值在扫描器完成之前发生了变化,因此将其设为空白,从而导致 length 错误。

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

它永远不会调用 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];

最佳答案

来自文档:

The nodesForXPath:error: method returns an array of NSXMLNode objects

您的数组未充满字符串。它充满了各种 NSXML* 对象。他们不是垃圾。这正是它应该如何工作的。

您可能没有调用 length,但 stringWithString: 可能正在调用 length 来计算在新字符串中分配多少空间.

<小时/>

转换为字符串可能意味着很多事情。一个XML节点可能是一个独立的标签,也可能是一些内联的CDATA,也可能是具有各种属性的标签。同样,XML 文档是高度结构化的。在不应用一定结构含义的情况下,将文档内容作为标签/内容的直接枚举来浏览是没有意义的。

您可能需要递归或以其他方式遍历标签并适本地解释其内容。

第一步是删除除初始 NSLog() 之外的所有内容,然后看看您得到了什么。然后弄清楚如何遍历节点树。然后找出如何正确解析它们。

关于objective-c - NSScanner 和数组循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831668/

相关文章:

ios - 从 completionHandler 返回 NSMutableArray( Objective-C )

objective-c - LAN 组播是否启用?

iPhone - 存储与文件相关的字符串数据的位置

objective-c - initWithCoder :?中NSCoder有什么用(Cocoa和Cocoa Touch)

objective-c - NSTextView 封闭 ScrollView 在空格键上跳转

ios - 滑动 ScrollView 上图像的快速移动变化

iphone - iCloud : how to manage iCloud deactivation?

cocoa - 如何在 Cocoa 的主窗口中显示 NSWindow?

Swift NSScanner 不返回起始字符

iOS NSScanner 从 2 个不同的输入中选择一个特定的字符串