Array使函数无效

时间:2014-05-06 09:14:54

标签: arrays xcode function parsing block

我正在尝试打印我用解析填充的数组的内容,但在函数外部,数组为空并打印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

}

2 个答案:

答案 0 :(得分:0)

问题是findObjectsInBackgroundWithBlock在后​​台线程中运行(如果它的名称是任何东西),所以当执行此语句时:

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

这个背景"工作"还没有完成(或者甚至可能已经开始)。

如果您希望在findObjectsInBackgroundWithBlock完成后安排某些事情,那么您需要为其提供完成处理程序(另一个块),并且findObjectsInBackgroundWithBlock调用那可能提供一个错误代码来告诉块是否成功。然后,您可以在完成处理程序中执行日志记录/其他任何操作。

答案 1 :(得分: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对象移到块外。

应该工作!