iphone - 这段代码中出现 "Missed Method"的原因是什么?

标签 iphone objective-c ios ios4

如果这是一个完全离题的问题,或者如果我没有提供足够的信息,请提前道歉 - 我对 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/

相关文章:

iphone - 我需要一个好的 iOS FTP 客户端库

Iphone UIButton 背景色

iphone - 如何更改警报背景?我们可以改变它的立场吗?

objective-c - 自定义 View 中的中心按钮

ios - 如何以编程方式调整图像像素大小

iphone - 如何暂停/播放 NSTimer?

ios - 当标签栏显示时 Apple TV 向下移动 viewController

ios - 在 NSURL 中存储本地路径

ios - 如何将导航栏置于相机框架的顶部?

ios - 在 Xcode 5 中向 super View 添加间距约束