gpt4 book ai didi

ios - block 内部的变量赋值

转载 作者:行者123 更新时间:2023-11-28 18:18:17 25 4
gpt4 key购买 nike

我正在使用 Swift 中的 Objective-C。我几乎没有 Objective-C 经验。我正在尝试使用 Apple 的示例访问游戏中心并检索前 10 名的排行榜分数以在 Swift 中使用。然而,我坚持使用 objective-c 分配的基础知识,将检索到的分数数据传递回调用者。有人可以发布有关如何处理此问题的代码示例吗?

- (NSArray*) retrieveTopTenScores
{
GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
NSArray *temp = nil;
if (leaderboardRequest != nil)
{
leaderboardRequest.playerScope = GKLeaderboardPlayerScopeGlobal;
leaderboardRequest.timeScope = GKLeaderboardTimeScopeToday;
leaderboardRequest.identifier = @"Appid";
leaderboardRequest.range = NSMakeRange(1,10);
[leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
if (error != nil)
{
// Handle the error.
NSLog(@"error in score retrieval");
}
if (scores != nil)
{
temp = scores; //results to Variable is not assignable (missing __block type specifier)
}
}];
}
return temp;

}

最佳答案

您的返回值将为 nil。这是因为 loadScoresWithCompletionHandler 是一种在后台线程中执行的异步方法,下载数据可能需要一些时间。在 block 完成执行之前,执行到达 return temp。为了保存分数数据,你可以在类中定义一个property

@property (nonatomic,strong) NSArray *topTenScores;

然后您可以在 block 内分配属性。如果您想显示您的最高得分,您还可以通过从 block 内部对主线程进行函数调用来更新 UI。

[leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) 
{
if (error != nil)
{
// Handle the error.
NSLog(@"error in score retrieval");
}
if (scores != nil)
{
self.topTenScores = score;
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI on the main thread.
});
}
}];

关于ios - block 内部的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885719/

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