NSMutableArray объект не доступен в методах - PullRequest
0 голосов
/ 11 марта 2011

У меня есть следующая переменная в моем .h файле:

NSMutableArray *arr;

Тогда у меня есть метод в реализации:

void aMethod
{
    if (something)
    {
        arr= [[NSMutableArray alloc] init];
    arr = [NSMutableArray arrayWithCapacity:0]; 
        [arr addObject:someObject];
    }

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

  //same method:
  if (something else)
  {
       SomeObject *obj = [arr objectAtIndex:0]; //<---- it crashes on this line
  }

Есть легкие ребята?Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

Вы создаете массив дважды.Следующие две строки:

arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];  

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

Протрите строку arrayWithCapacity, это 'буду работать как положено.Не забудьте выпустить в dealloc.

2 голосов
/ 11 марта 2011

Вторая инициализация массива образует автоматически освобожденный экземпляр.

Сделай это

-(id)init
{
self = [super init];
if(self)
{
   arr = [[NSMutableArray arrayWithCapacity:5] retain];
}
return self;
}

-(void)dealloc
{
[arr release];
[super dealloc];
}

-(void)aMethod
{
if (something)
{     
   [arr addObject:someObject];
}
}
2 голосов
/ 11 марта 2011

Здесь есть 2 ошибки:

  1. У вас есть утечка

    arr = [[NSMutableArray alloc] init];// <- здесь </p>

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

    arr = [NSMutableArray arrayWithCapacity: 0];

удалить эту строку:

arr = [NSMutableArray arrayWithCapacity:0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...