方法定义未找到...使用Xcode自动生成存根?

7

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

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

但是单击、右键单击、祈祷和谷歌搜索都没有让我自动从这里创建一个方法存根。Xcode能否为我创建一个方法存根并带我到那里?
如果不能,除了“真正的程序员喜欢打字”之外,还有什么原因呢?
编辑:我以为选项-转义基本上解决了我的问题,但它没有。它似乎不知道类实现的所有(任何?)接口。

option-escape(或者只是 escape)对我来说一直很好用,但我还没有在所有可能的情况下进行测试。你的 .h 文件中没有语法错误吧?否则会破坏自动完成功能。 - Abhi Beckert
@AbhiBeckert 抱歉,问题是在询问方法体不存在的情况下。 - Dan Rosenstark
自动完成不使用方法体,而是使用头文件。一旦一个方法在头文件中,它将在自动完成中随处可用,包括编写方法实现。 - Abhi Beckert
4个回答

4

这可能是向苹果提出功能请求的一个选项。通常,我会设计我的 @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    

真的吗,分号没问题吗?关于向苹果提出功能请求,我想他们会阅读StackOverflow :) 问题主要在于另一个我已经说过要实现的协议中定义的方法。 - Dan Rosenstark
2
分号在实现中被忽略了。在几年前的NextStep 3.2(我想是,可能是3.3),这是一件大事情。相当多年前的事了。 - Steven Noyes
1
别担心,Enrico,2013年的版本也没有这个功能。 - Carlos P
2014年的呼唤。仍未到来。 - Luke Melia
2015年?啊不,还没有到。 - Sulfkain

2

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

然而,我同意 - 我不想输入存根本身。

您可以按方法执行此操作。
转到您的实现文件,开始键入-prefix并按ESC,您应该看到与前缀匹配的有效完成。您必须从打字-或+开始才能使其起作用,例如方法和类方法分别。

有时候您不知道要实现什么!打开问题导航器,单击披露矩形。应该有一行说Method declared here。点击它以查看缺少实现的方法。


我不是在谈论未实现的方法。我是在谈论任何接口中尚不存在的方法。顺便说一下,AppCode可以做到这一点。 - Dan Rosenstark

1

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

您认为Xcode会有一个功能,只是因为eclipse有它吗?Eclipse已经有大约10年的历史了,而Xcode已经有大约23年的历史了。任何被复制的功能很可能会朝另一个方向发展。

但是这将是一个很棒的功能请求。也许在@implementation..@end中的空行上打开自动完成菜单可以提供一个未实现的方法列表。

但我不确定它在实践中是否有效,因为NSObject类别。自动完成菜单中可能会有成千上万个“未实现”的方法。但它至少可以显示一些最可能的方法。

似乎这个编译错误/警告也是新的“修复”功能的好选择。

还有:学会更快地打字:p


1
最近使用AppCode的经验 - 虽然不完整,但相当不错 - 显示出Xcode的不足之处。23岁了,仍然经常崩溃,并且不能做很多伟大的事情。顺便说一句,AppCode可以根据强类型找到我要求的内容。 - Dan Rosenstark
考虑到 AppCode 只有 56MB,而 Xcode 则有 1,720MB... 我不确定比较它们是否公平。当然,AppCode 做了一些很好的事情,但他们有专注于几个特定功能的奢侈品,而不需要考虑他们不需要编写的所有功能。 - Abhi Beckert
房间里的大象是托管语言的可能优越性,我甚至可以进一步指出其静态和强类型。当然这是一个类似宗教般的辩论,但有一件事是确定的:如果Xcode有限制,那不是因为他们没有足够(或足够好)的程序员在开发。但我偏离了主题... - Dan Rosenstark
私人感言,如果我打字再快一些,键盘就会冒烟了。 - Dan Rosenstark

0

OP(即我)所说的是在Java中,接口是隐式的。然而,在Xcode中相同的情况是指尚未在任何接口中定义方法的情况。

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

AppCode popover showing method creation

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接