使用@implementation在XCode中创建"实例方法冲突"警告

por*_*ast 0 xcode cocoa ios

在我的iOS应用程序中,我有5个视图控制器,它们都处理相同的功能(组).可以在几种不同的配置中将这些视图控制器推到彼此之上.我创建了一个名为GroupViewHelper.h的文件,它使用@implementation为组功能提供一些功能.这些函数通过视图控制器堆栈查看,并向特定类型的视图控制器发送"刷新"消息.该文件如下所示:

@implementation UIViewController (GroupViewHelper)
- (void) refreshManageGroupsParent
{
   // ...
}

- (void) refreshGroupDetailsParent
{
   // ...
}
@end
Run Code Online (Sandbox Code Playgroud)

我的代码运行良好,一切都按预期运行,但我在构建时得到14个与此非常相似的警告:

ld: warning: instance method 'refreshGroupDetailsParent' in category from /Users/x/Library/Developer/Xcode/DerivedData/myapp-ayshzmsyeabbgqbbnbiixjhdmqgs/Build/Intermediates/myapp.build/Debug-iphonesimulator/myapp-dev.build/Objects-normal/i386/GroupMembersController.o conflicts with same method from another category

我想我得到的是因为我使用的是包含在多个地方的.H,但在这种情况下如何正确使用@implementation?

aba*_*ert 6

我想我得到的是因为我使用的是.H,它包含在多个地方

嗯,有点,但真正的问题是,你已经把@implementation该在.h文件中的第一个地方.如果您只将该.h文件包含在一个位置,那么您就可以使用它 - 但它仍然不是正确的方法.

但在这种情况下如何正确使用@implementation?

把它放在一个名为GroupViewHelper.m,并添加文件到你的项目的源代码,并把@interfaceGroupViewHelper.h.

或者,理想情况下,打电话给他们UIViewController+GroupViewHelper.m,并UIViewController+GroupViewHelper.h,因为这是命名类文件的惯用方式.(如果你使用Xcode的"New File ..."菜单项来创建一个新的Objective-C类别文件,那就是它给你的东西.)

换句话说,现有类的类别的接口和实现与新类的接口和实现完全相同.