在 ( or )的回调函数/块(或Apple 术语中的完成处理程序)中,针对当前对象运行检查函数并查看是否所有 3 个必需元素都在那里(如果是,则调用)。NSURLSession
NSURLSessionDataTask
Artist
passArtist
无论完成顺序如何,passArtist
如果您这样做,它最终会在完成获取 3 个元素后调用。
这是一个简单的示例来演示Objective-C中的想法(根据 OP 的要求):
- (void)getArtistDataWithRequest:(NSURLRequest *)request
{
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error)
{
if (error)
{
// Something went wrong, fallback.
NSLog(@"An error occurred: %@", error.localizedDescription);
// You could use some error handler e.g.:
// [self connectionDidFailWithError:error];
return;
}
else if (response)
{
// Seems working, moving forward.
[self connectionDidReceiveSpotifyServerResponse:response
andData:data];
}
}];
[task resume];
}
- (void)connectionDidReceiveSpotifyServerResponse:(NSURLResponse *)aResponse
andData:(NSData *)aResponseData
{
// Do what you want here with the data you get, either it's album, track,
// or whatever.
// Assuming your "Artist" property is named "myArtist", and the "Artist"
// class has a method to process the data you get from Spotify API:
[_myArtist handleArtistData:aResponseData];
// Now check your Artist object's element with another method. e.g.:
if ([_myArtist isLoadingComplete])
{
// Done loading the object, pass it to view controller.
}
// Not yet done, do nothing for now.
}
这只是一种解决方案。一旦你有了想法,有很多方法可以实现你想要的。