我的Singleton类没有执行块方法,objective-c

时间:2015-06-19 00:30:29

标签: objective-c facebook-graph-api objective-c-blocks

我正在调用的方法

-(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的块内部永远不会被调用,请告诉我。

谢谢

0 个答案:

没有答案