2016-01-06 3 views
-1

В моем приложении имеется огромное количество списков массивов. Вот почему я добавил все массивы в один список основных массивов, и я инициализировал их с помощью цикла «для».Как инициализировать NSMutableArray в iOS

Я получаю ошибку внутри цикла «for»: «Быстрые переменные перечисления не могут быть изменены в ARC по умолчанию».

NSMutableArray * MainArray = [[NSMutableArray alloc] initWithObjects:NameArray, IdArray, MasterIdNameArray, MasterIdArray, nil]; 

    for (NSMutableArray * array in MainArray) { 
     array = [[NSMutableArray alloc] init]; 
    } 
+2

Да .. Вам не нужно инициализировать массив снова внутри цикла. Его уже инициализировали –

+0

, так как мы можем массивы массива – AbhiRam

+0

Попробуйте это ....... array = [NSMutableArray array]; – DilumN

ответ

0

Если NameArray равна нулю, MainArray равна нулю. Вы можете сделать это любит:

NSMutableArray *mainArray = [@[] mutableCopy]; 

for (int i = 0;i < 3;i++) { 
    [mainArray addObject:[@[] mutableCopy]]; 
} 
3

Да, вы не можете изменять значения массива в быстром перечислении, то есть for(x in Array). Объект x становится constant, поэтому он мог бы предупредить.

Однако для достижения этой цели вы можете использовать петлю for(int i=0; i<[MainArray count]; i++).

Но, подождите: Почему вы хотите инициализировать его после добавления его в массив. Делают это так:

//first create all the arrays that you have, 
//NameArray 
//IdArray 
//MasterIdNameArray 
//MasterIdNameArray 
//then add them in the MainArray 

NSMutableArray *nameArray = [NSMutableArray array]; 
NSMutableArray *idArray = [NSMutableArray array]; 
NSMutableArray *masterIdNameArray = [NSMutableArray array]; 
NSMutableArray *masterIdNameArray = [NSMutableArray array]; 
NSMutableArray *mainArray = [@[nameArray, idArray, masterIdNameArray, masterIdNameArray] mutableCopy]; 

Примечание: Я переименовал всю переменную для встряхивания для Соглашения об именовании в Objective-C.

+0

ясно сообщите мне с кодом, пожалуйста, я очень новичок в этой технологии. – AbhiRam

+0

Я не спрашиваю, как добавить все массивы в моем основном массиве. Я имею в виду сокращение строк кода beacsuee i ahve огромное количество массивов, которые я хочу, чтобы сделать все, что массивы, используя для lopp это – AbhiRam

+0

Я имею в виду в выше u также intialize все для массивов, я хочу, чтобы весь массив использовал для цикла для сокращения кодовых строк цели – AbhiRam

2

SeanChense является правильным. Вы не можете поместить массив без его инициализации.

NSMutableArray * MainArray = [[NSMutableArray alloc]init]; 

for (int i = 0;i < YOURCOUNTHERE;i++) { 
    NSMutableArray * array= [[NSMutableArray alloc]init]; 
    [mainArray addObject:array]; 
} 
0

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

Вы, кажется, неправильно понимаете, как работают переменные и ссылочные типы. Может быть, следующие поможет:

Вашей строки коды:

NSMutableArray *mainArray = [[NSMutableArray alloc] initWithObjects:nameArray, idArray, masterIdNameArray, masterIdArray, nil]; 

копия ссылки, хранящейся в каждом из переменныхnameArray, idArray и т.д. и сохраняют эти ссылки в новом массиве.

Где-то вы должны объявить каждую из этих переменных, например. что-то вроде:

NSMutableArray *nameArray; 

Объявляет переменнуюnameArray, который может содержать ссылку на изменяемый массив, который является ссылкой типа NSMutableArray *. Переменная инициализируется значением nil - значением «без ссылки».

Когда первая строка кода выполняется значение в каждой переменной передается в вызове метода, не сама переменная, так что вызов эффективно:

NSMutableArray *mainArray = [[NSMutableArray alloc] initWithObjects: nil, nil, nil, nil, nil]; 

и mainArray устанавливается для ссылки новый измененный массив с нулевыми элементами - поскольку все ссылки до первогоnil в списке аргументов используются в качестве начальных значений в массиве.

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

for (NSMutableArray *array in mainArray) { 
    array = [[NSMutableArray alloc] init]; 
} 

Переменная array новая переменная, которая устанавливается в свою очередь, к каждому из значений в mainArray. Переменная arrayне становится псевдонимом для каждой из переменных nameArrayи др. в свою очередь - mainArray содержит значения не переменные.

HTH, и теперь вы понимаете, почему ваш код никогда не мог сделать то, что вы намеревались, - который задает значения, хранящиеся в переменных nameArrayи др..

Смежные вопросы