2012-09-12 70 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的代碼,用零初始化一個小數組。當我評論這個循環時,該集合保留了它的價值。奇怪的。 –