Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSScanner&;数组循环_Objective C_Cocoa_Nsscanner - Fatal编程技术网

Objective c NSScanner&;数组循环

Objective c NSScanner&;数组循环,objective-c,cocoa,nsscanner,Objective C,Cocoa,Nsscanner,我正在尝试使用NSScanner作为NSArray枚举循环。但是,这一点失败了: -[NSXMLElement length]:发送到实例0x280da30的选择器无法识别 不,我没有在任何地方呼叫length。似乎在扫描程序完成之前,find的值发生了更改,从而使其为空,从而导致长度错误 如果我删除循环并硬编码字符串(我不希望这样,这只是一个测试),下面的代码可以工作。(当然不包括列举) 它也不会调用NSLogs 这是我的密码: for (NSString*found in arr)

我正在尝试使用NSScanner作为NSArray枚举循环。但是,这一点失败了:

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

不,我没有在任何地方呼叫
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如何将其转换为字符串?如何将其转换为字符串?