0

私の iOS アプリケーションには、すべて同じ機能 (グループ) を扱う 5 つのビュー コントローラーがあります。これらのビュー コントローラーは、いくつかの異なる構成で互いの上にプッシュできます。@implementation を使用してグループ機能にいくつかの機能を提供する GroupViewHelper.h というファイルを作成しました。関数はビュー コントローラ スタックを調べて、特定のタイプのビュー コントローラに「更新」メッセージを送信します。ファイルは次のようになります。

@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ファイルに入れたことです。そのファイルを 1 か所だけに含めた場合.hは問題ありませんが、それでも正しい方法ではありません。

しかし、この状況で @implementation を正しく使用するにはどうすればよいでしょうか?

というファイルに入れて、GroupViewHelper.mそのファイルをプロジェクトのソースに追加し@interfaceGroupViewHelper.h.

または、理想的には、それらUIViewController+GroupViewHelper.mを and と呼びUIViewController+GroupViewHelper.hます。これは、カテゴリ ファイルに名前を付ける慣用的な方法だからです。(そして、Xcode の「New File…」メニュー項目を使用して、新しい Objective-C カテゴリ ファイルを作成すると、それが表示されます。)

つまり、既存のクラスのカテゴリのインターフェイスと実装は、新しいクラスのインターフェイスと実装とまったく同じように機能します。

于 2013-01-12T00:07:19.033 に答える
1

私はまさにこの問題に遭遇しました。ヘッダー ファイルへの参照を .m ページにインポートしました。ただし、別のヘッダー ファイルへの参照も含まれており、別のヘッダー ファイルへの参照も含まれていました。このヘッダー ファイルも、競合しているヘッダー ファイルを参照していました。そのため、間接的に同じヘッダー ファイルが 2 回インポートされ、エラーが発生しました。

私の場合、.m ファイルにはこの参照は必要ありませんでした。エラーを取り除き、削除することができました。私のアドバイスは、問題のあるヘッダー ファイルへの参照を含めたファイルをチェックし、それが実際に必要であることを確認することです。

于 2013-01-29T14:24:48.373 に答える