4

私は既存のコードで作業しています。ここでは、popovercontrollerが.hファイルで宣言されており、実装行でエラーが発生します。

.hファイル

@property (nonatomic, strong)   VFImagePickerController     *imagePicker;
@property (nonatomic, strong)   UIPopoverController         *popoverController;
@property (nonatomic, strong)   UINavigationController      *targetVC;

.mファイル:
エラー

これを修正する方法を提案してください。

4

4 に答える 4

12

あなたのクラスは のサブクラスのようですUIViewControllerUIViewControllerのプライベートで文書化されていない ivar があり_popoverControllerます。クラスに同じ名前の ivar を作成しようとしているため、エラーが発生しています。

最も簡単な方法は、popoverControllerプロパティの名前を別のものに変更することです。そうしないと、プライベート API を使用しているとしてアプリにフラグが立てられる可能性があります。

于 2013-02-25T18:30:36.437 に答える
9

この問題は、スーパークラス UIViewController に という名前のインスタンス変数が既にあるために発生します_popoverController。その結果、デフォルトの合成も明示的な (コメント化された)ディレクティブも、プロパティ@synthesizeを提供するために使用するインスタンス変数にアクセスできません。popoverController

これは、プロパティの名前を変更するか、プロパティを明示的に合成して別のインスタンス変数名を使用することで解決できます。

// Either
@property (nonatomic, strong) UIPopoverController *localPopoverController
// Or
@synthesize popoverController = _localPopoverController;

(また、「ローカル」プレフィックスは、プロパティ名またはインスタンス変数のベスト プラクティスであるとは限らないことに注意してください。好みの命名規則を検討し、プロパティ/インスタンス変数名を適切に選択してください。)

于 2013-02-25T18:30:29.453 に答える
3

合成行のコメントを外し、アンダースコアを削除して次のようにします。@synthetize popoverController;

そして、.m ファイル内のすべての _popoverController 変数名を popoverController に置き換えます

于 2013-02-25T18:30:57.173 に答える