我正在尝试打印我用解析填充的数组的内容,但在函数外部,数组为空并打印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 :(得分: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
对象移到块外。
应该工作!