【发布时间】:2011-06-12 16:59:50
【问题描述】:
如果这是一个完全不符合标准的问题,或者我没有提供足够的信息,请提前道歉 - 我对 iOS 开发(和 Objective-C)非常陌生,并且有跳跃的习惯进入深渊……
我在理解 GKTapper 示例代码中的 GameCenterManager.m 中的“callDelegate”代码时遇到了问题,该代码也在这个 tuts+ 教程中提供:http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-game-center-achievements-and-leaderboards-part-2/
这是代码:
- (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");
}
}
我的应用程序总是记录“错过的方法”行,但我不确定这个 callDelegate 代码实际上在做什么(所以我无法修复它)。我认为最好的方法是了解这实际上在做什么,并获得比“错过的方法”更好的输出......
需要注意的是,我的应用目前正在沙盒模式下使用 Game Center,因为我仍在开发它。在这种情况下,可能会出现这条“Missed Method”行——我也不确定。
有人能把这段代码翻译成段落形式吗?我特别不确定“[delegate respondsToSelector: selector]”部分。
或者,是否有人能够重写 NSLog 行,以便输出有关问题的更多/相关细节?我尝试了这个,希望看到哪个选择器没有正确地通过“respondsToSelector”,但它似乎没有用:
NSLog(@"Missed Method, %@", selector);
【问题讨论】:
-
在kylehickinson 的帮助下,结果证明这是由于“authenticateLocalUser”对“processGameCenterAuth”的可选调用(提供登录时执行某些操作的选项)。删除“processGameCenterAuth”的引用解决了这个问题。
-
你能解释一下你到底删除了什么吗?我遇到了同样的错误...干杯..
-
詹姆斯,你能告诉我们你做了什么吗,我也遇到了这个问题
-
我已经添加了所有我能回答的细节——希望对你有所帮助!
标签: iphone objective-c ios ios4