2013-01-11 86 views
0

在我的iOS應用程序中,我有5個視圖控制器,它們都處理相同的功能(組)。這些視圖控制器可以通過幾種不同的配置推送到彼此的頂部。我創建了一個名爲GroupViewHelper.h的文件,它使用@implementation爲組功能提供一些功能。這些函數查看視圖控制器堆棧並向特定類型的視圖控制器發送「刷新」消息。該文件是這樣的:使用@implementation在XCode中創建「實例方法衝突」警告

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

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

我的代碼的偉大工程,一切都按照我們的期望,但我得到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?

+0

什麼是你的每個視圖控制器(例如GroupMembersController)的子類?的UIViewController? – Tim

+0

它們都是我們稱之爲BaseViewController的子類,不過這用於項目 – portforwardpodcast

回答

6

我想我得到這個,因爲我使用的是包含在多個地方.H

嗯,有點,但真正的問題是,你已經把@implementation.h文件中首先。如果您只將.h文件包含在一個地方,那麼您可以避開它 - 但它仍然不是正確的做法。

但是我如何在這種情況下正確使用@implementation?

把它放在一個名爲GroupViewHelper.m文件,並添加文件到你的項目的源代碼,並把@interfaceGroupViewHelper.h

或者,理想情況下,將它們稱爲UIViewController+GroupViewHelper.mUIViewController+GroupViewHelper.h,因爲這是命名類別文件的慣用方式。 (如果您使用Xcode的「New File ...」菜單項來創建一個新的Objective-C類別文件,這就是它會給你的。)

換句話說,現有類的類別的接口和實現工作正好與新類的接口和實現相同。

+0

中的每個視圖控制器都很棒!非常感謝。我完全應該知道這個 – portforwardpodcast

1

我遇到過這個問題。我已經在.m頁面上導入了對頭文件的引用。但是,它還包含對另一個頭文件的引用,該頭文件包含對另一個頭文件的引用 - 也引用了衝突的頭文件。所以間接地導入了相同的頭文件兩次,導致錯誤。

在我的情況下,.m文件不需要這個引用。我能夠刪除它,消除錯誤。我的建議是檢查包含引用有問題的頭文件的文件,並確認它實際上是必需的。

+0

感謝您的輸入! – portforwardpodcast

相關問題