2014-12-16 2 views
-3

У меня есть NSMutableArray. Я проверяю каждый элемент в массиве 1 на 1, используя цикл for и удаляя текущий элемент. то я хочу получить следующий индексный индекс в 1-й индекс. так же, какКак сменить элементы в NSMutableArray

Array = 1,2,3,4,5,6

Array = 3,4,5,6

я удалить индексы, используя для цикла. Как я могу перейти на следующий элемент в снятое положение указательного

Обновлено

for (int i=0; i<[m3u8 count]; i++) { 

     NSString *str=[NSString stringWithFormat: 
      @"http://cp2.comci.com:1000/server/default.stream/%@", 
      [mutArrayMP3files objectAtIndex:i] 
     ]; 
     [audioPlayer queue:str]; 
     [mutArrayMP3files removeObjectAtIndex:i]; 


    // Then here I want to make that array a continous one. 
    // Let's say it removed object at index 0, then 1st object should move to 0th location, 
    // 2nd should move to 1st.... likewise 


} 
+0

Этот вопрос довольно неясно. Возможно, разместите какой-то код, который вы пытались написать? – RobP

+0

Отправьте соответствующий код в свой вопрос. – rmaddy

+0

массивы не работают как обычные массивы, например, C. если вы удалите [1,2] из вашего 'NSMutableArray', вы останетесь с [3,4,5,6]. NSMutableArray дает вам это бесплатно, –

ответ

-1

Вы не можете изменить NSMutableArray в то время как вы находитесь в середине итерации над ним. И если вы сокращаете массив по мере того, как вы зацикливаете, то вы не можете продолжать увеличивать индекс, который используете, или в конце концов «убегаете от конца». Что вы можете сделать, это сделать копию и изменить ее; или используйте while петлю вместо итератора:

NSMutableArray *array = @{@1, @2, @3, @5, @6}; 
while([array count]) { 
    NSNumber firstElement = [array firstObject]; 
    // do something with firstElement; 
    [array removeObjectAtIndex:0]; 
} 

Проблема с текущим кодом является то, что вы будете в конечном итоге пытается ссылаться на элементы в массиве с индексом из границ, поскольку массив становится все меньше как вы идете. Вот как вы можете настроить его с кодом ближе к OP:

// assumes [m3u8 count] equals original size of mutArrayMP3files 
for (int i=0; i<[m3u8 count]; i++) { 

    NSString *str=[NSString stringWithFormat: 
     @"http://cp2.comci.com:1000/server/default.stream/%@", 
     // this line would have crashed: 
     // [mutArrayMP3files objectAtIndex:i] 
     [mutArrayMP3files objectAtIndex:0] 
    ]; 
    [audioPlayer queue:str]; 
    // this line would also have crashed 
    // [mutArrayMP3files removeObjectAtIndex:i]; 
    // remove the object that was processed, all other objects "shift down" one index 
    [mutArrayMP3files removeObjectAtIndex:0]; 

}

+0

вы можете удалить объект из NSMutableArray, если вы используете 'reverseObjectEnumerator' –

+0

уверен, но я пытаюсь предупредить об общей ловушке. Иногда бывает удобно получить объекты в исходном порядке, и OP, казалось, захотел всплывать объекты по мере их обработки. – RobP

+0

почему нисходящий? теперь, когда показана попытка OP, цикл 'while' является подходящим решением, и ответ находится в точке. – RobP