0

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

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

- (void) refreshGroupDetailsParent
{
   // ...
}
@end

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

ld:警告:来自/Users/x/Library/Developer/Xcode/DerivedData/myapp-ayshzmsyeabbgqbbnbiixjhdmqgs/Build/Intermediates/myapp.build/Debug-iphonesimulator/myapp-dev.build/Objects-normal 类别中的实例方法“refreshGroupDetailsParent” /i386/GroupMembersController.o 与另一个类别的相同方法冲突

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

4

2 回答 2

6

我想我得到这个是因为我正在使用一个包含在多个地方的 .H

好吧,有点,但真正的问题是您首先将 放入@implementation文件.h中。如果你只将那个.h文件包含在一个地方,你会侥幸逃脱——但这仍然不是正确的做法。

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

GroupViewHelper.m把它@interface放在一个名为GroupViewHelper.h.

或者,理想情况下,将它们称为UIViewController+GroupViewHelper.mand UIViewController+GroupViewHelper.h,因为这是命名类别文件的惯用方式。(如果你使用 Xcode 的“New File…”菜单项来创建一个新的 Objective-C 类别文件,这就是它会给你的。)

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

于 2013-01-12T00:07:19.033 回答
1

I have encountered exactly this issue. I had imported a reference to a header file, on a .m page. However, it also contained a reference to another header file, which contained a reference to another header file - that also referenced the conflicted header file. So indirectly the same header file was imported twice, causing the error.

In my case, the .m file did not need this reference. I was able to delete it, removing the error. My advice is check the files where you have included a reference to the offending header file, and verify that it actually is required.

于 2013-01-29T14:24:48.373 回答