NSMutableArray добавляет объект локально, но, кажется, очищается при доступе в следующей функции

Итак, в основном я объявляю NSMutableArray, выделяю и инициализирую его в viewdidload, вызываю функцию, которая добавляет объект в массив (что я проверяю с помощью NSLog сразу после его добавления), но затем, когда вызывается следующий метод и пытается получить доступ к NSMutableArray — он становится пустым.

Что здесь происходит?

@interface ViewController ()
{
    NSMutableArray * array;
}
@end

@implementation ViewController
@synthesize array;

- (void)viewDidLoad
{          
    [super viewDidLoad];
    array = [[NSMutableArray alloc] init];
    [self firstfunction];
    if (j.intValue == 1)
    {
        [self secondfunction];
    }

}

- (void)firstfunction
{
    //a bunch of stuff happens with a server
    [array addObject:object];   

    NSLog(@"There are %d in array",array.count);
    //** NSLOG RETURNS "THERE ARE 1 IN ARRAY" **//

    [tableView reloadData];

    //clean up code
    j = [[NSNumber alloc] initWithInt:1];
}

- (void)secondfunction
{
    NSLog(@"There are these many in the array now %d",array.count);
    //**NSLOG RETURNS:"There are these many in the array now 0"**//
}

Заранее спасибо.


person user3159776    schedule 14.01.2014    source источник
comment
не могу сказать, что не так, пока не увидишь код, где вы использовали свой массив или где вы установили свой массив   -  person Retro    schedule 14.01.2014
comment
@AnoopVaidya Я использую ARC   -  person user3159776    schedule 14.01.2014


Ответы (2)


Пожалуйста, напишите [self secondfunction]; в конце первой функции. Причина в том, что перед заполнением массива вызывается ваша вторая функция.

person Ashutosh    schedule 14.01.2014
comment
У меня есть средство проверки, которое возвращает int==1, когда заканчивается первая функция, и оператор if, который проверяет, является ли int ==1. У него все еще есть проблема. Спасибо хоть! - person user3159776; 14.01.2014
comment
Хорошо, попробуйте одно условие: if([array count] › 0){//вызовите вторую функцию}else{//NO} - person Ashutosh; 14.01.2014
comment
Я могу попробовать это, но проблема в том, что иногда массив может == 0. - person user3159776; 14.01.2014
comment
Насколько я понимаю, проблема заключается только в завершении блоков и вызовов функций. Если вы попытаетесь вызвать вторую функцию только после заполнения массива, это может быть вам полезно. - person Ashutosh; 14.01.2014
comment
Я попытался вызвать функцию с параметром оператора if, так как случайно узнал, что на этот раз в массиве что-то есть, и он фактически вызывает функцию, но значение внутри функции по-прежнему равно 0. Также я удалил это и вызвал [self secondfunction] ; в конце первой функции, и она по-прежнему передает 0 элементов массива другой функции, несмотря на возврат 1 объекта в NSLog первой функции. :\ - person user3159776; 14.01.2014
comment
Вы пытались поместить жестко закодированные значения в массив, а затем вызвать вторую функцию? - person Ashutosh; 14.01.2014
comment
По какой-то причине мне пришлось вызвать [self secondfunction]; в цикле последовательности добавления объектов первой функции. Поэтому я просто жду, пока я (моя переменная, увеличивающаяся в цикле) не достигнет общего количества объектов, добавляемых в массив, прежде чем вызывать функцию. Большое спасибо за Вашу помощь! - person user3159776; 14.01.2014

потому что я думаю, что у вас есть код ссылки на сервер в каком-то асинхронном блоке. Итак, после того, как вы получили результаты, вы добавляете их в массив, но вторая функция выполняется до того, как вы получите результаты и добавите их в массив.

person santhu    schedule 14.01.2014