• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - NSMutableArray 没有获取 XML 值

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:54:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试使用 TBXML 解析 XML 文件并将值放入多维 NSMutableArray 但问题是这些值没有被添加到数组中,如果我输出这些值,那么它会返回 null0

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self downloadAndParseXml"http://www.w3schools.com/XML/note.xml"];

    // RETURNS 0
    NSLog(@"weatherArray count: %d", [weatherArray count]);

    // RETURNS NULL
    NSLog(@"weatherArray value: %@", weatherArray[0][0]);
}

- (void)downloadAndParseXmlNSString *)xmlUrl
{
    // Allocating the array
    weatherArray = [NSMutableArray array];

    TBXMLSuccessBlock sBlock = ^(TBXML *tbxmlDocument) {
        if (tbxmlDocument.rootXMLElement)
            [self fillArrayWithXmlContents:tbxmlDocument.rootXMLElement];
    };

    TBXMLFailureBlock fBlock = ^(TBXML *tbxmlDocument, NSError *error) {
        NSLog(@"Failureblock: %@\n%@", [error localizedDescription], [error userInfo]);
    };

    [TBXML newTBXMLWithURL:[NSURL URLWithString:xmlUrl] success:sBlock failure:fBlock];
}

- (void)fillArrayWithXmlContentsTBXMLElement *)element {
    do {
        if (element->firstChild)
            [self fillArrayWithXmlContents:element->firstChild];

        if ([[TBXML elementName:element] isEqualToString"note"]) {

            // Adding values into the multidimensional array
            [weatherArray addObject:[NSArray arrayWithObjects:
                [TBXML textForElement:[TBXML childElementNamed"to" parentElement:element]],
                [TBXML textForElement:[TBXML childElementNamed"from" parentElement:element]],
                [TBXML textForElement:[TBXML childElementNamed"heading" parentElement:element]],
                [TBXML textForElement:[TBXML childElementNamed"body" parentElement:element]], NULL]];

            // Correct value is getting logged
            NSLog(@"weatherArray value: %@", weatherArray[0][0]);
        }
    } while ((element = element->nextSibling));
}



Best Answer-推荐答案


您可能需要做的是等待进程完成,并且该 block 实际上不知道您在其中做什么,或者我会说内部函数未被 block 捕获。所以使用数组(仅在 block 完成后调用正在使用您的数组的函数。

例子:

TBXMLSuccessBlock s = ^(TBXML *tbxml) {
    NSLog(@"yes");
    // Do something with TBXML object "tbxml/add it ur array
   //Here you call the function which is about to use your array.

};

//Not outside the block.

编辑:引用这个==> How do I avoid capturing self in blocks when implementing an API?

关于iphone - NSMutableArray 没有获取 XML 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18504999/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap