Как использовать NSArray объекта NSArray в цели c? - PullRequest
9 голосов
/ 02 апреля 2012

Я объявил объект NSArray в файле .h как

@property (nonatomic, assign) NSArray  *scnArray;

и в файле .h под - (void)viewDidLoad Я создал три различных объекта NSArray как

NSArray  *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil];
NSArray  *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil];
NSArray  *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil];

scnArray = [[NSArray alloc] initWithArray:obj1];
[scnArray arrayByAddingObjectsFromArray:obj2];
[scnArray arrayByAddingObjectsFromArray:obj3];

и если я получу доступ к этому scnArray из любой другой функции

NSArray *caseArray = [scnArray objectAtIndex:index]; // index будет 0, 1, 2 ...

Я получу BAD_ACCESS_ERROR.В чем здесь проблема и как я могу ее исправить?

Ответы [ 2 ]

7 голосов
/ 02 апреля 2012

Попробуйте это:

NSArray  *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil];
NSArray  *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil];
NSArray  *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil];

scnArray = [[NSArray alloc] initWithArray:obj1];
scnArray = [scnArray arrayByAddingObjectsFromArray:obj2];
scnArray = [scnArray arrayByAddingObjectsFromArray:obj3];

Функция arrayByAddingObjectsFromArray: добавляет все объекты из массива B в массив A и возвращает результат (= массив, содержащий элементы A и B)).

Итак, вы должны просто ПОЛУЧИТЬ этот результат ...: -)

ВАЖНО: scnArray ДОЛЖЕН быть массивом NSMutableArray, а НЕ NSArray (меняется, верно?);поэтому убедитесь, что вы тоже редактируете эту часть ...

ТАКЖЕ: NSArray *caseArray = [scnArray objectAtIndex:index]; - это не имеет никакого смысла.Установка массива в ЭЛЕМЕНТ scnArray?Он не содержит массивов, верно?Он просто содержит ЭЛЕМЕНТЫ этих массивов (те, которые мы добавили) ...

2 голосов
/ 02 апреля 2012

arrayByAddingObject: не добавляет новый объект в получатель, он создает совершенно новый массив и возвращает его. Вы должны использовать что-то вроде:

scnArray = [[NSArray alloc] initWithObjects: obj1, obj2, obj3, nil];

Не забывайте, что если вы не используете ARC или GC, все эти массивы должны быть освобождены в какой-то момент.

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