我正在调用的方法
-(void)initialLoginUser{
__block BOOL jobDone = NO;
__weak typeof(self) weakSelf = self;
[self setSelf:^{ // block method gets called but it never enters this block
NSLog(@"Entered here"); //never arrives here
[weakSelf uploadUserData]; //here
jobDone = YES; //or here
}];
NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:10];
while (jobDone == NO && [loopUntil timeIntervalSinceNow] > 0) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:loopUntil];
}
}
我正在调用的块
- (void)setSelf:(void(^)(void))callBack{
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"/me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, NSDictionary* result, NSError *error) {
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
myUser.userID = credentialsProvider.identityId;
myUser.firstName = [result objectForKey:@"first_name"];
myUser.lastName = [result objectForKey:@"last_Name"];
myUser.facebookID = [result objectForKey:@"id"];
});
}
}];
}
}
不幸的是,我对线程和阻塞这个话题相对较新,所以我在这个领域似乎有点没有受过教育。但是我之前使用过块,我知道它可能应该在我的块中执行代码。 setSelf在它必须执行块时也能正常工作。我可以告诉你,因为myUser对象设置得很完美。
这可能完全不相关,但我想避免任何解释,所以我想提一下所有这些方法都是从我的单例类中调用的。如果您知道为什么setSelf的块内部永远不会被调用,请告诉我。
谢谢