пытается перебрать вложенный массив, obj-c - PullRequest
0 голосов
/ 26 августа 2011

У меня есть массив с 5 подмассивами, которые я пытаюсь пройти по циклу, я могу получить доступ к первому подмассиву и его объектам, но когда я увеличиваю количество переменных и пытаюсь получить доступ ко второму подмассиву, моя программа вылетает при любых идеяхна лучший способ сделать это?Это мой общий метод:

-(void) accessArray {
    NSArray *myArray; // my array that holds sub arrays  
    int count = 0; //used to hold which sub array im accesing  
    NSArray *subArray = [myArray objectAtIndex:count];
    //do something with object   =  [subArray objectAtIndex:0];
    //do something with object    = [subArray objectAtIndex:1];
}

-(void) otherMethod {
    count ++

    [self accessArray]; 

}

Ответы [ 3 ]

2 голосов
/ 26 августа 2011
for (NSArray *inner in outerArray)
    for (id object in inner) {
        ... do stuff ...
    }
}
0 голосов
/ 26 августа 2011

Если вы ДЕЙСТВИТЕЛЬНО хотите сделать это по-своему (то есть получить доступ к подмассивам через 'otherMethod'), вам нужно сделать переменную 'count' доступной для обоих методов:

int count = 0; // used to hold which sub array I'm accessing

-(void) accessArray {
    NSArray *myArray; // my array that holds sub arrays
    NSArray *subArray = [myArray objectAtIndex:count];
    // do something with object = [subArray objectAtIndex:0];
    // do something with object = [subArray objectAtIndex:1];
}

-(void) otherMethod {
   count++;             // Cannot access count if defined inside 'accessArray'
   [self accessArray]; 
}

Теперь вы можете использовать «otherMethod» для доступа к подмассивам. Но я думаю, что лучший способ сделать это уже дан в первом ответе выше bbum.

0 голосов
/ 26 августа 2011

В дополнение к ответу bbums вы можете создавать вложенные массивы, используя NSRange (пример из Ссылка на класс NSArray ):

NSArray *halfArray;

NSRange theRange;



theRange.location = 0;

theRange.length = [wholeArray count] / 2;



halfArray = [wholeArray subarrayWithRange:theRange];

Только говоря это, потому что, похоже, это то, что вы пытаетесь сделать. Это не перебирает объекты, но удобно при попытке создать новые массивы из других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...