如果这是一个完全离题的问题,或者如果我没有提供足够的信息,请提前道歉 - 我对 iOS 开发(和 Objective-C)非常陌生,并且有跳跃的习惯进入深渊...
我无法理解 GameCenterManager.m 中的“callDelegate”代码,该代码位于 GKTapper 示例代码中,并且也在本 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");
}
}
我的应用程序总是记录“Missed Method”行,但我不确定这个 callDelegate 代码实际上在做什么(所以我无法修复它)。我认为最好的方法是了解这实际上在做什么,并获得比“错过的方法”更好的输出......
需要注意的是,我的应用程序目前正在沙盒模式下使用 Game Center,因为我仍在开发它。在这种情况下可能会出现“错过方法”行 - 我也不确定。
有人能将这段代码翻译成段落形式吗?我特别不确定“[delegate respondsToSelector:selector]”部分。
或者,是否有人能够重写 NSLog 行,以便它输出有关问题的更多/相关详细信息?我尝试了这个,希望看到哪个选择器没有正确通过“respondsToSelector”,但它似乎不起作用:
NSLog(@"Missed Method, %@", selector);
最佳答案
准确了解发生情况的最佳方法是在 callDelegate 的开头放置一个断点,然后调试程序,而不是简单地运行它。您可以通过按 cmd-y 进行调试。
这样做,每次你的程序进入callDelegate函数时,它都会停止并弹出调试器窗口。在那里您将能够检查调用来自何处以及参数是什么。
对于这个函数的简单描述,我想说它是一个辅助函数,通过在选择器之前检查该选择器是否存在来包装对选择器的调用。您不必每次都检查并执行选择器,而是调用将为您完成这两件事的辅助函数。
所以,您总是看到日志行的原因是您想要调用的函数不存在。通过使用调试器,您将能够查看它是哪个函数、哪个类缺少它以及谁尝试了该操作。
关于iphone - 这段代码中出现 "Missed Method"的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323244/