2012-01-12 7 views
0

は、いくつかのクラスの次の実装検討します。どのようにすることができanotherClassサブクラスをobj-cのスーパークラスのプロパティに設定するにはどうすればよいですか?

@implementation anotherClass 

@synthesize myObj; 

... 
//All of the code that uses the myObj property... 
... 

@end 

の3つの異なるクラスの

.hファイルの実装

//superClass.h 
... 
@interface superClass 

//Insert useful code 

@end 

//subClass.h 
... 
@interface subClass : superClass 

//Insert useful code 

@end 

//Another class that uses various sub-classes of superClass 
@interface anotherClass 
{ 
    superClass* myObj; 
} 
@property (strong, atomic) superClass* myObj; 

@end 

.mファイルの実装をsubClassのインスタンスをプロパティanotherClass.myObjのインスタンスに設定しますか?

具体的には、UIViewControllerというプロパティを定義したいと思います。複数のサブクラス化されたUIViewControllerがあり、iOSアプリケーション内の特定のプロパティにそれらを入れ替えることができる必要があります。

子供のUIViewControllerの1つをUIViewControllerプロパティに設定しようとするたびに、アプリがクラッシュします。しかし、子クラスの1つのインスタンスになるようにプロパティを再定義し、サブクラスをインスタンス化すると、完全に機能します。私は本当にこれらのコントローラを入れ替える能力が必要です。これどうやってするの?

UPDATE

まあ、これを見てきたすべての人に謝罪。明白な答えを得た後、関連するすべてのコードを書き直すことにしました。別の名前の新しいプロパティを作成し、割り当てコードをすべてコメントし、新しいプロパティを指すように書き直しました。それはちょうどそれと同じように動作します。なぜこれが最初に機能しないのか分かりませんが、今のように動作しています。しかし、なぜ私のアプリがクラッシュしたのか、まだ明確ではありません。

+0

スーパークラス型変数へのサブクラスの割り当ては完全に合法であり、問​​題を引き起こすことはできません。それはUIKitで_強制されています。割り当ての前と後に、クラッシュについての詳細や、オブジェクトで何をやっているのか詳細を投稿してください。 –

+0

ありがとうジョシュ(そしてカレブ)私は答えとしてカレブの応答をマークします。私はこれがうまくいくと思っていたので、何が起こっているのか分からず、迷子にならないだろうから。私はコードをもっと使いこなし、別の質問を定式化できるかどうかを見ていきます。 – RLH

答えて

1

割り当てを行うだけです。 subClassのすべてのインスタンスもsuperClassのインスタンスです。それは実際にはsubtype polymorphismです。

+0

しかし、最後のいくつかの段落で概説したケースでは正しくありません。 – RLH

+2

@RLH少なくともクラッシュする理由を教えてもらえますか?クラッシュすると、どのようなエラーメッセージが表示されますか?問題をデバッグするとどうなりますか?どのような方法でクラッシュが発生するのですか?問題の(実際の)コードを投稿することも害はありません。 – Caleb

+0

これはコードです: 'myProperty = [[SubUIViewController alloc] initWithNibName:@" SubUIView "bundle:nil]; '私のアプリがその行に当たると、エラーが発生します: '***キャッチされない例外 'NSInvalidArgumentException'の理由でアプリケーションを終了します。理由: ' - [MasterClass setMyProperty:]:インスタンス0x399210'に送信された認識できないセレクタ。 – RLH

関連する問題