【问题标题】:NSCountedSet has no objectsNSCountedSet 没有对象
【发布时间】:2012-09-12 23:59:05
【问题描述】:

我正在尝试计算数组中重复对象的数量。当我将数组传递给我的 NSCountedSet 函数时,它没有对象。从我看到的示例中,通常将 NSArray 传递给 NSCountedSet,而我传递的是 NSMutableArray。但是,我找不到任何说明不允许这样做的文档。

-(void)GetDays
{
       ...
       BOOL goodDuplicates = NO;
       NSMutableArray *mostDaysAttended = [[NSMutableArray alloc] init];
       mostDaysAttended = [self gatherDays];
       goodDuplicates  = [self checkDuplicatesforIndex:mostDaysAttended];
       ...

{


-(BOOL)checkDuplicatesforIndex: (NSMutableArray *)mostDaysAttended
{


    NSCountedSet *set   = [[NSCountedSet alloc] initWithArray:mostDaysAttended];

    for (id item in set)  //<== at this point "set" has zero objects
    ...
    return(...)
}

【问题讨论】:

    标签: iphone cocoa duplicates nscountedset


    【解决方案1】:

    我的猜测是 mostDaysAttended 正在被释放,所以当你调用 checkDuplicatesIndex 时,里面什么都没有。您可以通过在 NSCountedSet *set..... 行之前记录 mostDaysAttended 轻松检查这一点。如果确实如此,请为 mostDaysAttended 创建一个保留(或强)属性。

    【讨论】:

    • 我在“for”循环之前记录了 mostDaysAttended 和 set 的计数,两者都包含相同的值“7”。然而,当使用断点调试代码并将鼠标悬停在“for”循环中的“set”值上时,它会显示“0x0 0 objects”。我的“for”条件可能有问题。这真是莫名其妙。
    • 所以,你是说如果你在 for 循环之前记录 set.count 会得到 7,如果你在 for (id item in set) 行之后记录它会得到 0?
    • 是的。我添加了更多日志。就在我的“for”循环之前,我有一段从 0 到 11 的代码,它用零初始化了一个小数组。当我注释掉这个循环时,该集合保留了它的价值。很奇怪。
    • 那么,问题解决了吗?如果没有,您应该发布您现在正在使用的实际代码,包括您上面提到的日志和这段代码。
    【解决方案2】:

    这是“NSCountedSet”声明之后和“for”循环之前的代码。

      //INITIALIZE
      for( int g =0;g<=11;g++)
        indexCount[g]=0;
    

    一旦我删除了这个循环并将它放在函数开头的所有其他声明之前,代码就开始按预期工作了。我不确定为什么这会影响集合中的对象数量,但确实如此。

    【讨论】:

    • 您在哪里以及如何初始化 indexCount,因为我将这段代码放到了我的测试项目中,它没有任何区别——该集合仍然显示正确的项目数。您是否尝试将其移回“问题”位置以查看问题是否再次出现?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多