我尝试使用 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/