2017-05-16 30 views
0

我想处理endTurnWithNextParticipants失败的错误情况。因此,我在本文最后通过调用cacheFailedEndTurnWithNextParticipants方法来存储匹配数据。我提供的功能仅供参考。重试endTurnWithNextParticipants

问题是我不知道如何恢复uncache方法中的数据。我如何为下一个参与者列表加载GKTurnBasedPlayers?我用GKPlayer::loadPlayersForIdentifiers现在,但我得到以下警告:

"/Users/eternity/Documents/Xcode/DominationSK/DominationSK/GKMatchCache.m:134:74: Incompatible pointer types sending 'NSArray<GKPlayer *> * _Nullable' to parameter of type 'NSArray<GKTurnBasedParticipant *> * _Nonnull'" 

我如何可以加载ID的GKTurnBasedParticipants

这个重发应该以另一种方式完成吗?

-(void)uncache 
{ 
    if (_cache.count > 0) 
    { 
    NSDictionary *d = _cache[0]; 
    [_cache removeObjectAtIndex:0]; 

    [GKTurnBasedMatch loadMatchWithID:d[MATCH_ID] 
       withCompletionHandler:^(GKTurnBasedMatch * _Nullable match, NSError * _Nullable error) { 
        if (error == nil) 
        { 
bad load method --> [GKPlayer loadPlayersForIdentifiers:d[PARTICIPANTS] 
            withCompletionHandler:^(NSArray<GKPlayer *> * _Nullable nextParticipants, NSError * _Nullable error) { 
            if (error == nil) 
            { 
             NSNumber *timeout = d[TIMEOUT]; 
warning -->       [match endTurnWithNextParticipants:nextParticipants 
                  turnTimeout:timeout.longValue 
                   matchData:d[DATA] 
                 completionHandler:^(NSError * _Nullable error){ 
                 // This is not finished 
                 }]; 

            } 
            else 
            { 
             [self addToCache:d]; // TODO: Add time to live 
            } 
            }]; 
        } 
        else 
        { 
        [self addToCache:d]; // TODO: Add time to live 
        } 
       }]; 
    } 
} 

// Just for reference 
-(void)cacheFailedEndTurnWithNextParticipants:(GKTurnBasedMatch*)match 
           participants:(NSArray<GKTurnBasedParticipant*>* _Nonnull)nextParticipants 
            turnTimeout:(NSTimeInterval)timeout 
            matchData:(NSData* _Nonnull)matchData 
             error:(NSError* _Nonnull)error 
{ 
    if ([self shallBeCached:error]) 
    { 
    NSMutableArray *playerIds = [[NSMutableArray alloc] init]; 
    for (GKTurnBasedParticipant *p in nextParticipants) 
    { 
     [playerIds addObject:p.player.playerID]; 
    } 
    NSDictionary *d = @{MATCH_ID : match.matchID, 
         PARTICIPANTS : playerIds, 
         TIMEOUT : [NSNumber numberWithLong:timeout], 
         DATA : matchData}; 

    [self addToCache:d]; 
    } 
} 

回答

0

可以从比赛中获得参与者,然后从该数组中检索球员ID,最后更新比赛中的参与者属性。