【问题标题】:how to chain methods in objective-c如何在objective-c中链接方法
【发布时间】:2012-10-14 17:27:21
【问题描述】:

我正在尝试实现一种解析方法以将 XML 文档转换为多维数组,但是它依赖于在将该数组添加到多维数组之后需要从数组中删除对象,如下所示:

while (k<blockRowArray.count){                                   //loops through all rows one by one
        NSLog(@"current k is %i", k);
        GDataXMLDocument *currentRow = (GDataXMLDocument *) [blockRowArray objectAtIndex:k];
        NSArray *arrayOfBlocks = [currentRow nodesForXPath:@"b" error:nil];
        j = 0;
        while (j <arrayOfBlocks.count) {
            NSLog(@"current j is %i",j);
            GDataXMLElement *blockElement = (GDataXMLElement *) [arrayOfBlocks objectAtIndex:j];
            NSNumber* blockValue = [NSNumber numberWithInt:[[blockElement stringValue] intValue]];
            [individualRowOfBlocks addObject:blockValue];
            j++;
        }
        k++;
        NSLog (@"Current row of blocks array is %@",individualRowOfBlocks);


        [rowBlocks addObject:individualRowOfBlocks];
        [individualRowOfBlocks removeAllObjects];
    }

但是[individualRowOfBlocks removeAllObjects] 显然是在[rowBlocks addObject:individualRowOfBlocks] 之前或同时运行,因为我最终得到了一个包含一组空数组的多维数组,所以我需要做的是确保@987654324 @ 在[individualRowOfBlocks removeAllObjects] 之后运行有什么方法吗?

【问题讨论】:

  • 你为什么不使用图书馆呢?
  • 我在这里找不到任何关于如何在网上任何地方进行操作的建议或教程或答案,所以我一直在开发我不久前使用 GDataXMLNode 做的教程,然后解析它与此类似,这就是为什么...

标签: objective-c multidimensional-array xml-parsing nsmutablearray


【解决方案1】:

但是 [individualRowOfBlocks removeAllObjects] 显然在运行 与 [rowBlocks addObject:individualRowOfBlocks] 相同或之前 我最终得到一个多维数组,其中包含一组空数组 它,所以我需要做的是确保 [individualRowOfBlocks removeAllObjects] 在 [individualRowOfBlocks removeAllObjects] 之后运行 有什么方法吗?

除非涉及线程(或队列),否则 Objective-C 方法将始终按照代码中编写的顺序执行 除非被调用的方法在其实现中显式地在线程/队列中执行操作 em>(这在该代码中是极不可能的)。

每次调用 [rowBlocks addObject:individualRowOfBlocks]; 时,都会添加对同一 individualRowOfBlocks 数组的新引用。如果您随后更改了individualRowOfBlocks 的内容,rowBlocks 中的每个插槽都会有效地反映该更改,因为每个插槽都指向数组的同一个实例

听起来您应该在每次通过循环时创建一个 NSMutableArray 的新实例而不是 removeAllObjects,并将其分配给 individualRowOfBlocks

【讨论】:

  • Ahhhhhh 当然是的,因为它们是指向值而不是实际值的指针!该死的,谢谢你!好的,我会试一试,并且很可能会尽可能将您标记为正确!
  • 你,好先生,现在是世界上我最喜欢的人! :P
  • 乐于助人!此外,当您在集合上调用 copy 时,它不会进行深层复制。只复制集合,而不是包含的对象。
猜你喜欢
  • 2011-07-04
  • 2012-10-20
  • 2014-10-24
  • 1970-01-01
  • 2017-06-17
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多