0

現在の状況
私は多くの「CardsControllers」のスーパーである「GeneralCard」という名前のスーパークラスを持っています。

「GeneralCard」から継承するすべてのクラスには、異なるNSManagedObjectsサブクラスを保持するUIViewControllerの異なるサブクラスがあります-

(WhiteCardsController-> WhiteCard、RedCardsController-> RedCard ...)。

私は、すべてのmanagedObjectに対して実際に同じである多くの関数を持っています。だから私はそれらを一般的なカードにグループ化したい。

問題

私は:と呼ばれる「一般的な」NSManagedObjectを作成しました。

 NSManagedObject *currentCard.

今、各Viewコントローラーでキャストしようとしています:

self.currentCard = (WhiteCard*)self.currentCard;

したがって、「WhiteCard」プロパティを使用できるようになります。

私は次のようなエラーが発生し続けるので、そのdosentは機能します-

... Cards View Controllers / WhiteCardViewController.m:226:エラー:構造体または共用体ではないもののメンバー「レター」の要求

レターはNSManagedObjectで構造化されていませんが、彼のWhiteCardサブクラスでは構造化されています。

質問へ *スーパーから同じ変数を共有し、各vewコントローラーで異なる方法でキャストするにはどうすればよいですか?*

どうもありがとう

シャニ

4

1 に答える 1

1

型キャストオブジェクトを返す子クラスごとにアクセサメソッドを記述します。何かのようなもの:

- (WhiteCard *)myTypeCurrentCard {
    return (WhiteCard *)self.currentCard;
}

親クラスは次のようになります。

- (GenericCard *)myTypeCurrentCard {
    return (GenericCard *)self.currentCard;
}

これらのメソッドを持つ各コントローラークラス内で、メッセージ[self myTypeCurrentCard]は現在のタイプにキャストされたオブジェクトを返します。このメソッドは、結果のオブジェクトが実際にそのタイプのオブジェクトであることを保証しないため、WhiteCardオブジェクト以外のホワイトカード固有のメッセージを送信してランタイムエラーが発生しないように注意する必要があります。

于 2011-06-13T13:44:00.757 に答える