从数组中获取对象,编辑一个属性并将其传回

时间:2014-02-21 02:03:56

标签: objective-c nsmutablearray

我想要编辑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];
        }
    }
}

2 个答案:

答案 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]