Objective c NSScanner&;数组循环
我正在尝试使用NSScanner作为NSArray枚举循环。但是,这一点失败了: -[NSXMLElement length]:发送到实例0x280da30的选择器无法识别 不,我没有在任何地方呼叫Objective c NSScanner&;数组循环,objective-c,cocoa,nsscanner,Objective C,Cocoa,Nsscanner,我正在尝试使用NSScanner作为NSArray枚举循环。但是,这一点失败了: -[NSXMLElement length]:发送到实例0x280da30的选择器无法识别 不,我没有在任何地方呼叫length。似乎在扫描程序完成之前,find的值发生了更改,从而使其为空,从而导致长度错误 如果我删除循环并硬编码字符串(我不希望这样,这只是一个测试),下面的代码可以工作。(当然不包括列举) 它也不会调用NSLogs 这是我的密码: for (NSString*found in arr)
length
。似乎在扫描程序完成之前,find的值发生了更改,从而使其为空,从而导致长度
错误
如果我删除循环并硬编码字符串(我不希望这样,这只是一个测试),下面的代码可以工作。(当然不包括列举)
它也不会调用NSLog
s
这是我的密码:
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];
您确定您的
arr
包含NSString
对象吗?nsxmlement
抛出错误的事实在我看来是可疑的
编辑
是的,看起来文档中说,来自nodesForXPath
的数组不包含NSString
对象,而是nsxmlement
对象
:您确定您的
arr
包含NSString
对象吗?nsxmlement
抛出错误的事实在我看来是可疑的
编辑
是的,看起来文档中说,来自nodesForXPath
的数组不包含NSString
对象,而是nsxmlement
对象
:来自文档:
nodesForXPath:error:
方法
返回NSXMLNode对象的数组
您的数组中没有字符串。它充满了各种NSXML*
对象。它们不是垃圾。这正是它应该如何工作的
您可能没有调用length
,但是stringWithString:
可能正在调用length
来计算新字符串中要分配多少空间
转换为字符串可能意味着很多事情。XML节点可能是一个独立的标记,可能是一些内联CDATA,也可能是一个具有各种属性的标记。此外,XML文档是高度结构化的。如果不应用一定量的结构含义,以标签/内容的直接枚举形式浏览文档内容几乎没有意义 您可能需要递归或遍历标记,并适当地解释其内容
第一步是删除除初始NSLog()之外的所有内容,然后查看您得到了什么。然后找出如何遍历节点树。然后找出如何正确解析它们。从文档中:
nodesForXPath:error:
方法
返回NSXMLNode对象的数组
您的数组中没有字符串。它充满了各种NSXML*
对象。它们不是垃圾。这正是它应该如何工作的
您可能没有调用length
,但是stringWithString:
可能正在调用length
来计算新字符串中要分配多少空间
转换为字符串可能意味着很多事情。XML节点可能是一个独立的标记,可能是一些内联CDATA,也可能是一个具有各种属性的标记。此外,XML文档是高度结构化的。如果不应用一定量的结构含义,以标签/内容的直接枚举形式浏览文档内容几乎没有意义 您可能需要递归或遍历标记,并适当地解释其内容
第一步是删除除初始NSLog()之外的所有内容,然后查看您得到了什么。然后找出如何遍历节点树。然后找出如何适当地解析它们。这可能有助于了解输入的外观…顺便说一下,扫描代码对简单输入很有效。我已经说过,它对简单输入很有效。顺便说一下,它可能有助于了解输入的外观,扫描代码适用于简单输入。我已经说过它适用于简单输入。它们是NSString。我已经解释了为什么它在日志中调用
nsxmlement
——它的输出垃圾,这已经发生过几次了。随着循环的继续,它应该搜索的字符串似乎被清除了……我和Paul在一起,数组中的某些项很可能不是NSString的实例。如何创建阵列?(代码可能会有帮助)。它们是字符串。我编辑了这篇文章来展示我是如何创建数组的。根据苹果的文档:“nodesForXPath:error:method返回一个NSXMLNode对象数组”。我确信[doc nodesForXPath:]没有返回字符串,但nsxmlements是NSStrings。我已经解释了为什么它在日志中调用nsxmlement
——它的输出垃圾,这已经发生过几次了。随着循环的继续,它应该搜索的字符串似乎被清除了……我和Paul在一起,数组中的某些项很可能不是NSString的实例。如何创建阵列?(代码可能会有帮助)。它们是字符串。我编辑了这篇文章来展示我是如何创建数组的。根据苹果的文档:“nodesForXPath:error:method返回一个NSXMLNode对象数组”。我确信[doc nodesForXPath:]没有返回字符串,但nsxmlement如何将其转换为字符串?如何将其转换为字符串?