ios - 将 Game Center 好友及其分数加载到 UITableView

标签 ios objective-c uitableview game-center gamekit

所以我在阅读苹果文档(https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLeaderboard_Ref/Reference/Reference.html#//apple_ref/occ/instp/GKLeaderboard/category)后想知道如何创建一个 UITableView 并用 localPlayers 游戏中心的 friend 填充它,并在特定的排行榜上得分。我知道如何使用 loadScoresWithCompletionHandler: 方法单独获取好友列表和好友分数。

编辑:到目前为止,我将个人 friend 的照片、分数和显示名称保存到一个 NSArray 中。但我不知道如何在 UITableView 中显示它们。

- (void) loadPlayerData: (NSArray *) identifiers
{
    GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
    if (leaderboardRequest != nil) {
        leaderboardRequest.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
        leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime;
        leaderboardRequest.category = @"MJ_IL";
        [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
            if (error != nil) {
                    // handle the error. if (scores != nil)
           }

        if (scores != nil){
        for (GKScore* score in scores) {

            NSArray *playerIdArray = [NSArray arrayWithObject:score.playerID];
            [GKPlayer loadPlayersForIdentifiers:playerIdArray withCompletionHandler:^(NSArray *players, NSError *error) {

                GKPlayer *player = [players objectAtIndex:0];
                [player loadPhotoForSize:GKPhotoSizeSmall withCompletionHandler:^(UIImage *photo, NSError *error) {

                    if (score.playerID == player.playerID) {
                        if (photo != nil) {
                            playerInfo = [NSArray arrayWithObjects:score, player.displayName, photo, nil];

                        } else if (photo == nil) {

                             playerInfo = [NSArray arrayWithObjects:score, player.displayName,  nil];

                        }
                        if (error != nil) {
                            NSLog(@"%@", error.localizedDescription);
                        }
                    }

                }];
            }];
        }
    }
    }];
}
}

- (void)compareLocalPlayerScoreWithFriends {

GKScore *friendScore = [playerInfo objectAtIndex:0];
NSString *friendDisplayName = [playerInfo objectAtIndex:1];
if ([playerInfo objectAtIndex:2] != nil) {

    UIImage *friendPhoto = [playerInfo objectAtIndex:2];
    if (friendScore.value > interactiveHighscore) {

        [friendNameLabel setText:friendDisplayName];
        [friendScoreLabel setText:(NSString *)friendScore];
        friendImageView.image = friendPhoto;
    }
}
}

多谢你们,
乔治斯

最佳答案

看看这个tutorial by Ray Wenderlich ,它解释了如何在 UITableView 中显示简单的图片和文字- 共有三个部分,至少应该让您使用基本但有效的 View 。

在其最核心的层面上,这是在 UITableView 中显示“工作”的代码

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:@"MyBasicCell"];
    ScaryBugDoc *bug = [self.bugs objectAtIndex:indexPath.row];
    cell.textLabel.text = bug.data.title;
    cell.imageView.image = bug.thumbImage;
    return cell;
}

更新

这是我用别名和照片生成排行榜数据的代码,希望你可以适本地修改它,但不应该有太大的不同
-(void)getScoresAndAliasForLeaderboard:(GKLeaderboard *)leaderboardRequest{
    if (leaderboardRequest == nil)
    {
        leaderboardRequest = [[GKLeaderboard alloc] init];
        leaderboardRequest.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
        leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime;
        leaderboardRequest.category = @"HighScore";
        leaderboardRequest.range = NSMakeRange(1,100);
    }

    [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
        if (error != nil)
        {
            // Handle the error.
        }
        if (scores != nil)
        {
            NSMutableArray *retrievePlayerIDs = [[NSMutableArray alloc] init];

            for (GKScore *s in scores)
            {
                [retrievePlayerIDs addObject:s.playerID];

                GCLeaderboardScore *playerScore = [[GCLeaderboardScore alloc] init];
                playerScore->playerID = s.playerID;
                playerScore->score = (int)s.value;
                playerScore->rank = s.rank;
                playerScores[s.playerID] = playerScore; //playerScores is a NSMutableDictionary

                if ([s.playerID isEqualToString: leaderboardRequest.localPlayerScore.playerID]){
                    me = playerScore;
                }
            }

            if (me == nil){
                me = [[GCLeaderboardScore alloc] init];
                me->playerID = leaderboardRequest.localPlayerScore.playerID;
                me->score = leaderboardRequest.localPlayerScore.value;
                me->alias = @"Me";

                playerScores[me->playerID] = me;
            }

            [GKPlayer loadPlayersForIdentifiers:retrievePlayerIDs withCompletionHandler:^(NSArray *playerArray, NSError *error)
             {
                 for (GKPlayer* p in playerArray)
                 {
                     GCLeaderboardScore *playerScore = playerScores[p.playerID];

                     playerScore->alias = p.alias;

                     [p loadPhotoForSize:GKPhotoSizeSmall withCompletionHandler:^(UIImage *photo, NSError *error) {

                         if (photo != nil) {
                             playerScore->photo = photo;
                         }
                         else{
                             playerScore->photo = [UIImage imageNamed:@"wordpress_avatar.jpg"];
                         }
                         if (error != nil) {
                             NSLog(@"%@", error.localizedDescription);
                         }

                     }];
                 }
             }];
        }
    }];
}

关于ios - 将 Game Center 好友及其分数加载到 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323613/

相关文章:

ios - Xcode Unity 版本 : app freezes and has some errors

ios - 在 Objective-C 中,什么时候为属性声明原子性?

ios - 如何从所有文本字段获取所有值

ios - 为什么导航栏中未显示 uiactivity 指示器

ios - 在 UITableViewCell 中将按钮右对齐

objective-c - UItableView 搜索韩语文本

ios - 基于 StatusBar 的方向检测未命中

ios - UICollectionView 将图像添加到单元格

ios - 如何更改向 IBAction 注册的自定义 UIButton 的颜色?

ios - 向后滑动时 UINavigationController 白线故障