2014-05-06 6 views
-1

Я пытаюсь распечатать содержимое массива, которое заполняется с помощью синтаксического анализа, но вне функции массив пуст и печатает Null. Как я могу это исправить? благодаряArray null вне функции

- (void) retrieveFromParse { 
PFQuery *retrieveColors = [PFQuery queryWithClassName:@"Bracciali"]; 

[retrieveColors findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { 



     NSArray *array = [objects objectAtIndex:0];//Selects the first "object" from all the "objects" 
     array = [array valueForKey:@"NomeDispositivo"];//Makes a NSArray from the "pairs" values 
     colorsArray = [array mutableCopy];//Converts the array to a NSMutableArray 

     NSLog(@"%@", colorsArray); // PRINT THE ARRAY,,, 


    } 

}]; 


NSLog(@"%@", colorsArray); //PRINT NULL 

} 

ответ

0

Вопрос заключается в том, что findObjectsInBackgroundWithBlock выполняется в фоновом потоке (если его имя что-нибудь, чтобы пройти), поэтому, когда выполняется это утверждение:

NSLog(@"%@", colorsArray); //PRINT NULL 

На этом фоне «работа» hasn» t завершено (или, возможно, даже начато).

Если вы хотите запланировать что-то произойдет, как только findObjectsInBackgroundWithBlock закончил, то вам нужно будет снабжать его обработчиком в завершения (другой блок), и имеют findObjectsInBackgroundWithBlock вызов, который, вероятно, поставляя код ошибки сказать блок, если это было успешным или нет. Затем вы можете выполнить регистрацию/все остальное в этом обработчике завершения .

0

Должно быть

- (void) retrieveFromParse 
{ 
     PFQuery *retrieveColors = [PFQuery queryWithClassName:@"Bracciali"]; 

    __block NSArray *array = nil; 
    [retrieveColors findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) 
    { 
     array = [objects objectAtIndex:0];//Selects the first "object" from all the "objects" 
     array = [array valueForKey:@"NomeDispositivo"];//Makes a NSArray from the "pairs" values 
     colorsArray = [array mutableCopy];//Converts the array to a NSMutableArray 

     NSLog(@"%@", colorsArray); // PRINT THE ARRAY,,,  
    } 

}]; 


NSLog(@"%@", colorsArray); //PRINT NULL 

} 

В своем коде объем array объекта был внутри блока. Переместите объект array за пределы блока, как я сделал выше.

Должно работать!

Смежные вопросы