Ios 尝试从完成处理程序内的响应对象返回字符串

Ios 尝试从完成处理程序内的响应对象返回字符串,ios,objective-c,methods,instagram,completionhandler,Ios,Objective C,Methods,Instagram,Completionhandler,} 尝试以字符串形式获取instagram accesstoken,以便我可以使用它下载swift viewcontroller文件中的数据。我不得不用Objective C编写简单的auth,因为它不适用于swift atm 不可能从响应块“返回”对象。这是因为响应块是异步运行的,因此除了Auth调用之外,代码还会继续运行 要解决这个问题,您可以使用委托,或者使用NSNotifications。NSN通知的示例如下: 在侦听控制器中,添加如下内容: + (NSString *) simpleA

}


尝试以字符串形式获取instagram accesstoken,以便我可以使用它下载swift viewcontroller文件中的数据。我不得不用Objective C编写简单的auth,因为它不适用于swift atm

不可能从响应块“返回”对象。这是因为响应块是异步运行的,因此除了Auth调用之外,代码还会继续运行

要解决这个问题,您可以使用委托,或者使用NSNotifications。NSN通知的示例如下:

在侦听控制器中,添加如下内容:

+ (NSString *) simpleAuth {

[SimpleAuth authorize:@"instagram" completion:^(NSDictionary *responseObject, NSError *error) {
    NSLog(@"plump: %@", responseObject);
    NSString *accessToken = responseObject[@"credentials"][@"token"];


}];

return accessToken
倾听方法:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(authCompleted:)
                                                 name:@"NotificationIdentifier"
                                               object:nil];
并在添加的完成块中:

-(void)authCompleted:(NSNotification *)notification {
    NSString *accessToken = [notification object];
    //now continue your operations, like loading the profile, etc
}

无法从响应块“返回”对象。这是因为响应块是异步运行的,因此除了Auth调用之外,代码还会继续运行

要解决这个问题,您可以使用委托,或者使用NSNotifications。NSN通知的示例如下:

在侦听控制器中,添加如下内容:

+ (NSString *) simpleAuth {

[SimpleAuth authorize:@"instagram" completion:^(NSDictionary *responseObject, NSError *error) {
    NSLog(@"plump: %@", responseObject);
    NSString *accessToken = responseObject[@"credentials"][@"token"];


}];

return accessToken
倾听方法:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(authCompleted:)
                                                 name:@"NotificationIdentifier"
                                               object:nil];
并在添加的完成块中:

-(void)authCompleted:(NSNotification *)notification {
    NSString *accessToken = [notification object];
    //now continue your operations, like loading the profile, etc
}

由于该方法是异步运行的,因此不能像那样返回访问令牌。我建议您在simpleAuth:方法中添加一个完成块,当被调用方获取accesstoken时,它将访问令牌传递给被调用方

这样的方法会更好

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationIdentifier" object: accessToken];
你会这样称呼它

+ (void)simpleAuth:(void(^)(NSString*))completionHandler
{
  [SimpleAuth authorize:@"instagram" completion:^(NSDictionary *responseObject, NSError *error)   {
    NSString *accessToken = responseObject[@"credentials"][@"token"];
    completionHandler(accessToken)
  }];
} 

由于该方法是异步运行的,因此不能像那样返回访问令牌。我建议您在simpleAuth:方法中添加一个完成块,当被调用方获取accesstoken时,它将访问令牌传递给被调用方

这样的方法会更好

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationIdentifier" object: accessToken];
你会这样称呼它

+ (void)simpleAuth:(void(^)(NSString*))completionHandler
{
  [SimpleAuth authorize:@"instagram" completion:^(NSDictionary *responseObject, NSError *error)   {
    NSString *accessToken = responseObject[@"credentials"][@"token"];
    completionHandler(accessToken)
  }];
} 

您不能这样做,您必须通知您的控制器您最终获得令牌。使用Notification或delegationYou不能这样做,您必须通知控制器您最终获得令牌。使用通知或委派谢谢我尝试了这两种方法,但都遇到了问题。。。。最终通过NSUserdefaults存储,然后我可以在我的swift文件中访问它。很高兴听到你找到了解决方案。谢谢,我尝试了这两种方法,但都遇到了麻烦。。。。最终通过NSUserdefaults存储,然后我可以在我的swift文件中访问它。很高兴听到你找到了解决方案。