2012-09-12 47 views
0

我想数数重复的对象,我有一个数组中。当我将数组传递给我的NSCountedSet函数时,它没有任何对象。从我看到的例子中,通常将NSArray传递给NSCountedSet,在那里传递一个NSMutableArray。但是,我找不到任何说明不允许的文档。NSCountedSet没有对象

-(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(...) 
} 

回答

0

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

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

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

+0

你在哪里以及如何初始化indexCount,因为我把这段代码放到了我的测试项目中,并没有什么区别 - 该设置仍然显示了正确的项目数。您是否尝试将其移回“问题”位置以查看问题是否恢复? – rdelmar

0

我的猜测是,mostDaysAttended被释放,所以当你打电话checkDuplicatesIndex,那里没有什么。您可以通过在NSCountedSet * set .....行之前记录mostDaysAttended来轻松检查。如果事实证明是这样,请为mostDaysAttended创建一个保留(或强大)的属性。

+0

我记录了mostDaysAttended的计数,并设置在“for”循环之前,两者都包含相同的值“7”。 Hoever在使用断点调试代码并悬停在“for”循环中的“set”值时,会显示“0x0 0 objects”。在我的“for”条件中存在一个问题。这真是莫名其妙。 –

+0

所以,你说如果你在for循环之前记录set.count,你会得到7,并且如果你在for(id项在集合)之后记录它,你会得到0? – rdelmar

+0

是的。我找到了更多的日志。就在我的“for”循环之前,我有一段从0到11的代码,用零初始化一个小数组。当我评论这个循环时,该集合保留了它的价值。奇怪的。 –