2012-05-30 2 views
0

У меня есть ряд объектов в NSArray. Я хочу восстановить NSMutableArray из NSMutableArrays с 6 элементами в каждом из NSArray. Как мне это сделать?NSMutableArray из NSMutableArrays от NSArray

Редактировать Мой код:

NSArray *newsList = [mynode6 findChildTags:@"td"]; //result of site parsing 
NSMutableArray *someArray = [[NSMutableArray alloc] init]; 
int i=0; 
for (HTMLNode *news in newsList) { 
    [someArray addObject:[newsList objectAtIndex:news]; 
    i++; 
    if (i==5) { 
     i=0; 
     [self.valueArray addObject:someArray]; 
     [someArray removeAllObjects]; 
    } 
} 

valueArray мой главный NSMutableArray. Этот код не работает, valueArray пуст.

+4

Не могли бы вы показать пример того, что у вас есть против того, что вы хотели бы иметь?Это не похоже на то, что сопоставление, которое вы пытаетесь достичь, тривиально. – dasblinkenlight

ответ

1

Быстрое исправление:

Выделяют массив в вашем цикле:

NSArray *newsList = [mynode6 findChildTags:@"td"]; //result of site parsing 
NSMutableArray *someArray = [[NSMutableArray alloc] init]; 

int i=0; 
for (HTMLNode *news in newsList) { 
    [someArray addObject:[newsList objectAtIndex:news]; 

    if (++i == 5) { 
     i = 0; 
     [self.valueArray addObject:someArray]; 
     [someArray release]; 
     someArray = [[NSMutableArray alloc] init]; 
    } 
} 

[someArray release]; 
+0

У меня ошибка с вашим кодом 'Завершение приложения из-за неперехваченного исключения 'NSRangeException', причина: '*** - [__ NSArrayM objectAtIndex:]: индекс 120 за пределами границ [0 .. 119]'' – RomanHouse

1

Похоже, ваш подход слишком тупой для среднего программиста ... но увы ...

Вы действительно хотите использовать someArray в порядке, вы перечислили выше? Добавив someArray как объект valueArray, а затем удалив все объекты, вы оставите только valueArray пустых массивов. Хуже того, вы добавляете тот же экземпляр массива каждый раз, когда ...

Может быть, вместо [someArray removeAllObjects] вы просто сделать новый экземпляр someArray = [[NSMutableArray alloc] init]

Тогда после того, как ваш цикл, убедитесь, чтобы добавить все, что осталось в someArray :

if(i) { 
    [self.valueArray addObject:someArray]; 
} 
1

У меня была очень похожая проблема с пустым массивом после выполнения чего-то подобного. В точке вы добавляете массив, чтобы он выглядел так.

[self.valueArray addObject:[NSMutableArray arrayWithArray:someArray]]; 

Это сработало для меня! Это потому, что вы добавляете ссылку на someArray, а затем удаляете все объекты, следовательно, их пустые. Добавляя массив arrayWithArray, вы делаете копию данных, поэтому удаление формы строк оставляет их в другом. :)

Плазменный

1

я не мог понять это line.This линия не имеет смысла, как objectAtIndex принимает NSInteger, как param..I предполагают, ур пытается добавить HTMLNode элемент в этом массиве

[someArray addObject:[newsList objectAtIndex:news]; 

Так что, я думаю, и нужно, чтобы заменить эту строку, как это ..

[someArray addObject:news]; 

Я редактировал ур фрагмент кода, сделав несколько изменений, и я затыкал в моей логике (есть Creat ред новый массив с списком новостей некоторых фиктивными объектами, объясняющими ЕВОЙ логику) ..

Здесь идет Отредактированному код

NSArray *newsList = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"A",@"B",@"C",@"D",@"E",@"F", nil]; 
    NSMutableArray *valueArray = [[NSMutableArray alloc] init]; 
    NSMutableArray *someArray = [[NSMutableArray alloc] init]; 

    int i=0; 
    for (NSString *news in newsList) { 
    [someArray addObject:news]; 
    i++; 
    if (i==6) { 
     i=0; 
     [valueArray addObject:someArray]; 
     NSLog(@"%@",someArray); 
     [someArray release]; 
     someArray = [NSMutableArray new]; 
    } 
    } 

NSLog(@"%@",valueArray); 

Вот выход из терминала .. enter image description here

Надеется, что это помогает !! Хорошее чтение!