+ (NSString *) simpleAuth {
[SimpleAuth authorize:@"instagram" completion:^(NSDictionary *responseObject, NSError *error) {
NSLog(@"plump: %@", responseObject);
NSString *accessToken = responseObject[@"credentials"][@"token"];
}];
return accessToken
}
尝试将我的Instagram accessstoken作为字符串,以便我可以使用它在我的swift viewcontroller文件中下载数据。我不得不在Objective C中编写简单的auth,因为它不适用于swift atm。
答案 0 :(得分:4)
由于该方法是异步运行的,因此您无法像这样返回访问令牌。我建议你在simpleAuth:方法中添加一个完成块,它在获得accessstoken时将访问令牌传递给被调用者。
这样的事情会更好,
+ (void)simpleAuth:(void(^)(NSString*))completionHandler
{
[SimpleAuth authorize:@"instagram" completion:^(NSDictionary *responseObject, NSError *error) {
NSString *accessToken = responseObject[@"credentials"][@"token"];
completionHandler(accessToken)
}];
}
你会这样称呼它,
[SomeClass simpleAuth:^(NSString *accessToken){
NSLog(@"Received access token: %@", accessToken);
}];
答案 1 :(得分:0)
无法从响应块中“返回”对象。这是因为响应块运行异步,因此除了Auth调用之外,您的代码还会继续运行。
要解决此问题,您可以使用委托,或使用NSNotifications。 NSNotifications的例子是:
在听音控制器中添加如下内容:
[[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
}
在add的完成块中:
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationIdentifier" object: accessToken];