2014-02-21 26 views
0

我有一個我想要編輯的NSMutableArray。我想檢查是否所有成員都屬於QueueMember(它有一個屬性rank)屬於QueueMember,如果是這樣,我希望它將每個對象的rank的值設置爲其在數組中的索引。從數組中取一個對象,編輯一個屬性並將其傳回

這是我現在沒有工作。我想知道它是不是工作,因爲*queue是一個指針?

-(void)makingRankEqualtoLocationInQueue:(NSMutableArray *)queue{ 
    queue = [[NSMutableArray alloc]init]; 
    for (int queueSizeCounter = 0; queueSizeCounter <queue.count; queueSizeCounter++) { 
     id obj = [queue objectAtIndex:queueSizeCounter]; 

     if ([obj isKindOfClass:[QueueMember class]]) { 
      QueueMember *member = obj; 
      member.rank = queueSizeCounter; 
      [queue replaceObjectAtIndex:queueSizeCounter withObject:member]; 
     } else { 
      [queue removeObjectAtIndex:queueSizeCounter]; 
     } 
    } 
} 
+0

此外,即時通訊相當新,但它是必要的我仍然分配/初始化xcode5中的方法隊列儘管已經宣佈它? – snapfish

回答

1

這是你的問題:

-(void)makingRankEqualtoLocationInQueue:(NSMutableArray *)queue{ 
    queue = [[NSMutableArray alloc]init]; 

所以,也許一個數組到達的(第一行queue)的參數,但是,你把它扔掉,並通過一個完全不同的新的空數組更換(在第二行中爲queue)。所以現在你有一個空數組,它的count爲零,並且循環從不運行。

1

我同意馬特,但這不是唯一的問題。

首先,在這裏:

QueueMember *member = obj; 
member.rank = queueSizeCounter; 
[queue replaceObjectAtIndex:queueSizeCounter withObject:member]; 

replaceObject是不必要的。 member指向數組中的對象,如果更改它,則會更改它。 :)

二,你是打算改變通過的隊列(通過刪除非QueueMember s)?如果是這樣,那麼副作用在你的方法命名中應該更明顯。如果沒有,removeObjectAtIndex:正在傷害你。

最後,我不知道這是否是故意的,但是最終的排名會包含非QueueMember對象,可能類似[1,2,5,7,13]。

相關問題