我已经按照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:code
答案 0 :(得分:0)
什么是选择器以及委托是什么?
如果打印“Missed Method”,则表示选择器正在描述的方法未在委托对象上实现。
也许您传递的是错误的选择器,或者代理对象未设置或未完全实现?
根据以下评论进行修改: 看来你没有在MainViewControllerClass上实现GameCenterManagerDelegate协议的可选方法,而它被设置为GameCenterManager的委托。这没关系,但是如果你想摆脱“Missing method”日志消息,你应该确保你的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 *)错误;”那是缺失的。 GameCenterManager提交所有分数,一旦完成,它会尝试在其委托上调用scoreReported回调。然后注意到该方法在其委托中不存在并打印出“缺失方法”。 如果您在报告分数后不想做任何事情,您可以保持原样。