5

そのエラーが発生しました:

/business/Dropbox/badgers/BadgerNew/BGProfileView.m:56:17: Auto property synthesis will not synthesize property declared in a protocol

自動プロパティ合成は、プロトコルで宣言されたプロパティを合成しないことを認識しています

だから私はそれを自分自身で合成します。

これはプロトコルです:

@protocol BGIhaveNavigationController <NSObject>

@property (readonly)UINavigationController * navigationController;//This is the problematic property

@end

@protocol BGCommonProtocol <NSObject>


@end

実装に関しては

@interface BGProfileView : UIViewController

@end

は UIViewController であり、ご存知のように UIViewController には navigationController プロパティがあります。では、何が問題なのですか?

これを使用すると問題が発生します。

@interface BGProfileView () <BGReviewsTableDelegateProtocol>

BGReviewsTableDelegateProtocol プロトコルは BGIhaveNavigationController プロトコルを継承します

以下を追加して、警告を削除できます。

-(UINavigationController *) navigationController
{
    return self.navigationController;
}

しかし、それはばかげています。ある意味で

-(UINavigationController *) navigationController
    {
        return self.navigationController;
    }

-(UINavigationController *) navigationControllerUINavigationController を介して既に存在する

4

1 に答える 1

10

使用する

@dynamic navigationController;

これは、プロパティの実装が「別の場所」にあり、実行時に要件が満たされることを信頼する必要があることをコンパイラに伝えます。実際には、それはスーパークラスにあることを意味します。

自分で実装しようとすると、重複したストレージ (おそらく期待どおりに動作しない可能性があります) または再帰が発生します。

于 2013-06-07T07:02:04.427 に答える