gpt4 book ai didi

ios - 如何仅在方法完成后才执行一行代码?

转载 作者:行者123 更新时间:2023-11-29 00:04:16 27 4
gpt4 key购买 nike

我有一个方法 getSpotifyProductTypeWithSession:(SPTSession *)session 我在 viewDidLoad 中调用它,我希望它下面的代码只执行一次 getSpotifyProductTypeWithSession:(SPTSession *)session 已经完成。我该怎么做呢?下面是我的代码。

-(void)viewDidLoad{

SPTAuth *auth = [SPTAuth defaultInstance];

[self getSpotifyProductTypeWithSession:auth.session];


BOOL hasPremium = [[NSUserDefaults standardUserDefaults] boolForKey:@"hasPremium"];

if (hasPremium) {
[FireStarter setSpotifyHasPremium];
} else {
[FireStarter setSpotifyHasFree];
}

}

-(void)getSpotifyProductTypeWithSession:(SPTSession *)session{

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[SPTUser requestCurrentUserWithAccessToken:session.accessToken callback:^(NSError *error, SPTUser *user) {

[defaults setBool:NO forKey:@"hasPremium"];
[defaults synchronize];

switch (user.product) {
case SPTProductFree:
[defaults setBool:NO forKey:@"hasPremium"];
[defaults synchronize];
break;
case SPTProductPremium:
[defaults setBool:YES forKey:@"hasPremium"];
[defaults synchronize];
break;
case SPTProductUnlimited:
[defaults setBool:YES forKey:@"hasPremium"];
[defaults synchronize];
default:

break;
}
}];

NSLog(@"%@",[defaults objectForKey:@"hasPremium"]);
}

最佳答案

为了很好地处理执行异步工作和获取完成 block 的方法,您应该在代码中采用相同的方法。所以你可以这样声明:

-(void)getSpotifyProductTypeWithSession:(SPTSession *)session completion:(void (^)(NSError *))completion {
// ... OP code
[SPTUser requestCurrentUserWithAccessToken:session.accessToken callback:^(NSError *error, SPTUser *user) {
// if there's an error
if (error) completion(error);
// ....more OP code
// at the end
completion(nil); // we're done with no error
}];
}

现在您对此的调用遵循相同的模式...

-(void)viewDidLoad{
SPTAuth *auth = [SPTAuth defaultInstance];
[self getSpotifyProductTypeWithSession:auth.session completion:^(NSError *)error {
BOOL hasPremium = [[NSUserDefaults standardUserDefaults] boolForKey:@"hasPremium"];
// and so on...
}];

关于ios - 如何仅在方法完成后才执行一行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48593592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com