目标C块 – 如何提取块数据(Facebook SDK)

我现在正在忍受几个小时的痛苦。

我正尝试使用Facebook SDK 3.5 for iOS从Facebook API检索数据。 当我使用方法startWithCompletionHandler()发出一个请求时,它似乎没有调度一个新的线程,因为它等待整个函数结束,只有在这之后块内容才会被执行。 所以我不能读取类的其他区域中的userData内容。

我曾经试过信号量,但似乎总是陷入僵局。

userData是全局的。

 FBRequest *request = [FBRequest requestForMe]; // Send request to Facebook [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if (!error) { // result is a dictionary with the user's Facebook data userData = (NSDictionary *)result; NSLog(@"Block return: %@",userData[@"id"]); } else{ NSLog(@"Facebook Initialization error: %@", error); } } ]; 

尝试这个:

 [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { if (error) { } else { [self StopSpinner]; txtID.text = user.id; txtUserName.text = user.username; txtName.text = user.name; txtEmail.text = [user objectForKey:@"email"]; } }]; 
 FBRequest *request = [FBRequest requestForMe]; // Send request to Facebook [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if (!error) { // result is a dictionary with the user's Facebook data userData = (NSDictionary *)result; // do what you want to do or call any other methods. } else{ NSLog(@"Facebook Initialization error: %@", error); } } ]; 

我不知道有其他的方式来做到这一点。

 FBRequest *request = [FBRequest requestForMe]; // Send request to Facebook [request startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary * result, NSError *error) { if (!error) { // result is a dictionary with the user's Facebook data userData = result; NSLog(@"Block result: %@",[userData objectForkey:@"Your key"]); } else{ NSLog(@"Facebook Initialization error: %@", error); } } ]; 

代替id的结果,您可以使用NSDictionary *结果并获得块结果按照您的字典键,请确保您的userData字典分配。