【问题标题】:Method Definition Not Found... automatic stub with Xcode?未找到方法定义...使用 Xcode 的自动存根?
【发布时间】:2011-01-23 03:14:34
【问题描述】:

在询问之前我不想放弃,因为这是任何 Java/.Net IDE 中的基本功能。编译器告诉我:

Incomplete implementation of class...
Method definition for '-someMethod:' not found

但是单击、右键单击、祈祷和 Google 搜索并没有让我自动创建一个方法存根。 Xcode 可以为我创建一个方法存根并将我带到那里吗?

如果不是,为什么会这样(除了“真正的程序员喜欢打字”)?

编辑:我认为 option-escape 基本上为我解决了这个问题,但事实并非如此。它似乎并不知道我的类实现的所有(任何?)接口。

【问题讨论】:

  • option-escape(或只是escape)一直为我找到了方法,但我还没有在所有可能的情况下测试它。您的.h 文件中没有语法错误吗?这会破坏自动完成。
  • @AbhiBeckert 抱歉,问题是关于方法主体不存在的情况。
  • 自动完成不使用方法体。它使用头文件。一旦方法位于标头中,它将在任何地方自动完成,包括编写方法实现。

标签: objective-c xcode code-completion


【解决方案1】:

OP(我)所说的是Java,其中接口是隐式的。但是,在 Xcode 中相同的情况是在任何接口中都没有定义任何方法。

AppCode 处理这种情况,Xcode 不处理(除非有人回答了这个问题,但它已经存在了一段时间):

稍后:人们已经回答了这个问题,但 Xcode 仍然没有这样做。

【讨论】:

    【解决方案2】:

    我不介意这种行为。一方面,实现不一定存在,因为它可能是动态的。我还使用 #pragma mark - MyCategory 对我的代码进行分类,并希望在源文件的特定位置实现。

    但是,我同意 - 我不想键入存根本身。

    您可以根据方法进行操作。
    转到您的实现文件并开始输入 - prefix 并按 ESC,您应该会看到与前缀匹配的有效补全。您必须首先键入 - 或 + 才能使其工作,分别是实例方法和类方法。

    有时您不知道要实施什么!打开问题导航器,然后单击显示矩形。应该有一行说在此声明的方法。点击它可以查看缺少实现的方法。

    【讨论】:

    • 我不是在谈论未实现的方法。我说的是任何接口中尚不存在的方法。顺便说一句,AppCode 就是这样做的。
    【解决方案3】:

    您要查找的内容不存在。我只是使用自动完成(它通常对我有用)或复制/粘贴。

    是什么让你认为 Xcode 会因为 eclipse 有一个特性? Eclipse 大约 10 岁,而 Xcode 大约 23 岁。复制的任何特征很可能是在另一个方向。

    不过,它会提出很好的功能要求。也许在@implementation .. @end 内的空行上打开自动完成菜单可能会给出尚未实现的方法列表。

    但我不确定它在实践中的效果如何,因为 NSObject 类别。自动完成菜单中可能确实有 数千个 的“尚未实现”的方法。但它至少可以显示一些最有可能的情况。

    这个编译错误/警告似乎也适合新的“修复它”功能。

    另外:学习打字更快:p

    【讨论】:

    • 最近使用 AppCode 的经验 - 几乎不完整,但非常好 - 表明 Xcode 是多么需要。 23 岁,仍然经常崩溃,并没有做很多伟大的事情。顺便说一句,AppCode 可以满足我的要求,是的,由于 Strong Typing,它可以解决这个问题......
    • 考虑到 AppCode 是 56MB 而 Xcode 是 1,720MB...我不确定比较它们是否公平。当然,AppCode 可以很好地完成一些事情,但他们可以密切关注几个单独的功能,而不必考虑他们不需要编写的所有功能。
    • 房间里的大象是托管语言的可能优势,我什至可能更进一步指出静态和强类型。当然,这是一场准宗教辩论,但有一件事是肯定的:如果 Xcode 有限制,那并不是因为他们没有足够(或足够优秀)的程序员来处理它。但我离题了...
    • 个人笔记+1,如果我打字再快一点,键盘就会冒烟。
    【解决方案4】:

    这可能是向 Apple 提交功能请求的一个选项。通常情况下,我会设计我的@interface 文件,然后将@interface 复制/粘贴到@implementation 以保持输入的绝对最小值。

    但是,如果能够单击警告并让 Xcode 简单地在 @implementation 的底部创建方法,那就太好了。

    注意:@implementation 后面保留分号是有效的

    @interface PCStackValue : NSObject <NSCoding, NSCopying>
    {
    }
    
    - (id) initWithDisplayRadix:(int) newRadix;
    
    @end
    
    @implementation PCStackValue
    
    - (id) initWithDisplayRadix:(int) newRadix;
    {
       … do something;
    }
    @end    
    

    【讨论】:

    • 真的,分号可以吗?关于向 Apple 提交功能请求,我假设他们阅读了 StackOverflow :) 问题主要出在我说过我将实施的另一个协议中定义的方法上。
    • 实现中忽略分号。这是几年前 NextStep 3.2(我认为可能是 3.3)中的一件大事。好几年前了。
    • 别担心,Enrico,他们在 2013 年也没有这个功能。
    • 2014 年通话。还没到。
    • 2015 年?啊不,还没到呢
    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2017-10-29
    • 2020-08-01
    相关资源
    最近更新 更多