我想要编辑NSMutableArray
。我想检查所有成员是否属于类QueueMember
(具有属性rank
),如果是,我希望它为每个对象设置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 :(得分:1)
这是你的问题:
-(void)makingRankEqualtoLocationInQueue:(NSMutableArray *)queue{
queue = [[NSMutableArray alloc]init];
因此,也许一个数组作为参数(第一行中的queue
)到达,但是然后将其丢弃并将其替换为完全不同的新空数组(第二行中为queue
) 。所以现在你有一个空数组,它的count
为零,循环永远不会运行。
答案 1 :(得分:1)
我同意亚特,但这不是唯一的问题。
首先,在这里:
QueueMember *member = obj;
member.rank = queueSizeCounter;
[queue replaceObjectAtIndex:queueSizeCounter withObject:member];
replaceObject
是不必要的。 member
指向数组中的对象,如果更改它,则会更改。 :)
其次,您打算更改传递的队列(通过删除非QueueMember
)?如果是这样,也许在您的方法命名中副作用应该更明显。如果没有,removeObjectAtIndex:
会伤害你。
最后,我不知道这是否是故意的,但你最终会得到包括非QueueMember
对象的排名,或许类似于排名[1,2,5,7,13]