1

私はiOS用のサードパーティのUIKitの代替品に取り組んでいます。GitHubの非常に役立つプロジェクトを使用して、フレームワークとして構築しています。(私のものではありませんが、興味があればここにあります。

私が書いている他のプロジェクトで自分のライブラリを使おうとしています。私が言ったように、これは基本的にUIKitの多くのドロップイン置換であるため、ボタン、アクションシート、アラートビューなどを使用したい場所ではなく、プロジェクトの*.pchファイルにフレームワークをインポートすることにしました。 。

#importヘッダーファイルにディレクティブがなく、タイプのプロパティを宣言すると、MBMButtonコンパイラは「不明なタイプ名'MBMButton';「UIButton」を意味しますか?」というエラーを表示します。奇妙なことに、コードは引き続き実行されます(これはエラーであり、警告ではありませんが)。このコンパイラの苦情を追加@class MBMButtonまたは解決します。#import <MBMUIKit/MBMUIKit.h>

実装ファイル(またはそのヘッダー)にディレクティブがなく#import、に存在するが存在しないメソッドを呼び出すと、「UIButtonの表示された@interfaceがセレクターを宣言していません...」というコンパイラエラーが発生します。 。以前と同様に、コードは有効な呼び出しであるため、実際に実行されます。MBMUIButtonUIButton

今、私はいくつかの掘り下げを行い、プロジェクトの設定を変更しました。GCC_PREFIX_HEADERに値がない場合は、ファイル名を追加しました。Appleによるクイックヘルプの説明に注意して、「ProjectName-Prefix.pch」と「./ProjectName-Prefix.pch」の両方を試しました。どちらも問題を解決していないようでした。最終的に、ターゲットレベルの設定がプロジェクトレベルの設定を上書きし、ターゲットレベルの設定ですでに「ProjectName/ProjectName-Prefix.pch」が指定されていることがわかりました。それが行き止まりでした。(ただし、相対パス設定が何であるかを正確に知ることはできます!)

*.pchファイルを使用しなくても大丈夫です。これは単なる便宜であり、適切なディレクティブを確実に使用でき@classます#import。私を悩ませているのは、問題を理解していないことです。* .pchファイルをどのように使用する必要がありますか?

4

1 に答える 1

4

プレフィックスヘッダーファイルは、プロジェクト内のすべての.mファイルに自動的に含まれますが、.hファイルには含まれません。

したがって、クラスへの参照には、ヘッダーを含めるか、前方宣言を行う必要があります。

@class MyClass;

ただし@protocol、完全なヘッダーが必要な場合は、前方宣言は機能しません。

@protocol MyProtocol; //this won't work

@interface MyController : UIViewController <MyProtocol>

…
@end
于 2013-03-27T12:50:02.337 に答える