1

我已按照http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-game-center-achievements-and-leaderboards-part-1/上的教程进行操作,并设法让一切正常工作。事情是什么时候我提交了一个分数,一直说“缺少方法”。我该如何解决这个问题?谢谢..

- (void) callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err
{
    assert([NSThread isMainThread]);
    if([delegate respondsToSelector: selector])
    {
        if(arg != NULL)
        {
            [delegate performSelector: selector withObject: arg withObject: err];
        }
        else
        {
            [delegate performSelector: selector withObject: err];
        }
    }
    else
    {
        NSLog(@"Missed Method");
    }
}

PS:代码

4

1 回答 1

0

什么是选择器,什么是委托?

如果打印“Missed Method”,则表示选择器描述的方法未在委托对象上实现。

也许您传递了一个不正确的选择器,或者委托对象未设置或未完全实现?

根据以下评论进行编辑: 您似乎没有在 MainViewControllerClass 上实现 GameCenterManagerDelegate 协议的可选方法,而它被设置为 GameCenterManager 的委托。这没关系,但如果你想摆脱“缺少方法”日志消息,你应该确保你的 MainViewControllerClass 实现了整个协议:

@protocol GameCenterManagerDelegate <NSObject>
@optional
- (void) processGameCenterAuth: (NSError*) error;
- (void) scoreReported: (NSError*) error;
- (void) reloadScoresComplete: (GKLeaderboard*) leaderBoard error: (NSError*) error;
- (void) achievementSubmitted: (GKAchievement*) ach error:(NSError*) error;
- (void) achievementResetResult: (NSError*) error;
- (void) mappedPlayerIDToPlayer: (GKPlayer*) player error: (NSError*) error;
@end

对于您所描述的情况,它是“- (void) scoreReported: (NSError*) error;” 那是缺失的。GameCenterManager 提交所有分数,一旦完成,它会尝试在其委托上调用 scoreReported 回调。然后它注意到它的委托上不存在该方法并打印出“Missing Method”。如果您在报告分数后不想做任何事情,您可以保持原样。

于 2012-09-01T12:42:09.107 回答