простой вопрос NSMutable массива - PullRequest
0 голосов
/ 23 июля 2010

ммм. Вот такой простой вопрос:

В моем заголовке объявлен экземпляр NSMutableArray

NSMutableArray *day19;

@property (nonatomic, retain) NSMutableArray *day19

реализация:

@synthesize day19;

На мой взгляд DidLoad

self.day19 = [[NSMutableArray alloc] init];

В myMethod, где я хочу добавить объекты в массив I:

NSObject *newObject = [[NSObject alloc] init];

[day19 addObject:newObject];

Однако ... когда я проверяю массив day19, в нем ничего нет. Если я, наоборот, добавлю newObject в tempArray в области myMethod, а затем установлю для массива day19 значение tempArray, у day19 будут объекты.

Супер базовый, который я знаю, просто должно быть запутанное утро или что-то в этом роде ...

спасибо за любую помощь

Ответы [ 3 ]

1 голос
/ 24 июля 2010

Пара вещей:

Вы уверены, что viewDidLoad является правильным местом для инициализации массива?Confe здесь .

Кроме того, по крайней мере, из кода, который вы опубликовали, похоже, что вы неаккуратны со своими удержаниями.Если ваше свойство является типом сохранения, вы не должны писать:

self.myProperty = [[Something alloc] init]; // double retain here, bad

Вместо этого вы должны писать что-то вроде:

self.myProperty = [[[Something alloc] init] autorelease]; // single, good

Также с

NSObject *newObject = [[NSObject alloc] init];
[day19 addObject:newObject];

если у вас нет

[newObject release];

вниз, у вас утечка памяти.

1 голос
/ 24 июля 2010

Является ли day19 на самом деле переменной экземпляра? В фрагменте неясно, когда он объявлен как переменная экземпляра или просто как переменная вне области действия класса.

0 голосов
/ 24 июля 2010

В моем viewDidLoad

self.day19 = [[NSMutableArray alloc] init];

В myMethod, где я хочу добавить объекты в массив I:

NSObject *newObject = [[NSObject alloc] init];

[day19 addObject:newObject];

Однако ... когда я проверяю день19В массиве ничего нет.Если я, наоборот, добавлю newObject в tempArray в области myMethod, а затем установлю для массива day19 значение tempArray, у day19 будут объекты.

Позвольте мне угадать: вы проверили массив с помощью кода, подобного следующему:

NSLog(@"day19 contains %lu objects", [day19 count]);

Помните, что сообщение для nil ничего не делает и возвращает nil, 0 или 0.0.Вот почему в выводе указано 0 объектов: во-первых, у вас нет массива.Наиболее вероятная причина этого заключается в том, что viewDidLoad еще не был вызван, поэтому вы еще не создали изменяемый массив.

Также возможно, что у вас есть массив (т. Е. Представление было загружено) во время проверки массива, но у вас еще не было массива (представление еще не было загружено) во время попытки добавления в массив, поэтому ваше сообщение addObject: не было услышано.

Рассмотрите возможность создания массива ранее.Вам, вероятно, следует создать его в init или initWithCoder:.

Третья возможность состоит в том, что вы исследовали массив еще до того, как добавили в него.Убедитесь, что вы входите или выходите из системы в обеих точках, чтобы вы знали, какая из них произошла первой.

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

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