2012-04-24 12 views
3

なぜ継承はNSObjectで開始し、次に別のクラスで継承を使用する必要がありますか?NSObjectを継承する必要があるのはなぜですか?

なぜ私はUIViewControllerからサブクラス "FatherClass"を持っているのだろうか。 したがって、継承のFatherClass(ChildClass:FatherClass)を作成します。

私はこれを行うことはできません、私はエラーログを取得します。 ここで検索したすべての例GoogleはNSObjectを父親として始めます。

私の質問はそうでなければなりませんか?あるいは私はどこかで間違っています。ここで

はエラー・ログには、コードをHERE

#0 0x33d6c6f8 in CFStringGetCharacters() 
CoreFoundation`CFStringGetCharacters: 
0x33d6c6f8: push.w {r8, r10} 

おかげ

EDIT

FatherClass.h

@class ChildClass; 
@interface FatherClass : UIViewController <UITabBarControllerDelegate, UINavigationBarDelegate, UIPopoverControllerDelegate, MKMapViewDelegate, MKAnnotation> 
{ 
    //Some variables 
} 
@property (nonatomic, strong) ChildClass *sidebar_table_controller; 

-(void) show_modal: (id) sender; // Thats the Method i want to call 
@end 

FatherClass.m

012です今
#import "FatherClass.h" 
#import "ChildClass.h" 
@interface FatherClass() 

@end 

@implementation FatherClass 

@synthesize sidebar_table_controller; 

// All inits here... DidiLoad, DidUnload, etc.. 

-(void) show_modal: (id) sender // Thats the Method!!! 
{ 

     // All initiate ChildClass an then.. present modal 

     [self presentModalViewController:self.sidebar_table_controller animated:YES]; 

     NSLog(@"Clicked ?...%@", sender); 
} 
@end 

子供

ChildClass.h

@interface ChildClass : FatherClass <UINavigationControllerDelegate, UITableViewDataSource, UITableViewDelegate> 
@end 

ChildClass.m

#import "ChildClass.h" 

@interface ChildClass() 

@end 

@implementation ChildClass 
// All inits here... DidiLoad, DidUnload, etc.. 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Here i want to call Father Method 
    [FatherClass show_modal:indexPath]; 
} 

@end 

私はChildClass変更する場合:ChildClassへのUIViewControllerを:FatherClass私のアプリがクラッシュします。

+0

UIViewControllerから継承することは何も問題ありません。 "FatherClass"と "ChildClass"の作成方法についてのコードを表示します。これらのクラスを作成するときにコンパイラからエラーや警告が出ますか? –

+0

奇妙なことは、これがBreakPointを使用しているときとBreakPointを使用しないときの唯一のエラーだということです。 しかし、質問を編集し、あなたが見るコードを入力します。 –

+0

UIViewControllerのサブクラスを作成するために使用しているコードにコンパイルエラーまたは警告が関連付けられていない場合、スタックバックトレースが必要な場合があります。CFStringGetCharacters()内の単一のx86命令は実際に何が起こっているかを知るには十分なコンテキストではありません。 –

答えて

1

すべてのタイプのオブジェクトを作成できます。つまり、NSObjectの父親を持つオブジェクトまたは父親のない新しいオブジェクトです。 質問は、なぜNSObjectを父親として使うのですか?これは、init、deallocなどのような堅牢なクラスを作成するために必要なすべてのメソッドを実装するためです。

独自の階層を作成できますが、オブジェクトを管理するたびに、ホイールごとに書き直しを行う必要があります。

+0

私は車輪を再発明したくありません。私はちょうど父親が持っている方法と、息子ではなく父親を経営するための唯一の方法を実行したい。しかし子供は父親に電話をして父親に従わなければならない。それはより明確になった?またはそれはより困難でしたか? –

+0

わかりました。あなたはトロイの木馬のようなものを求めていますが、あなたが書いているように既にそれを実装していれば、それはあなたの問題とは関係ないと思います。 クラスを実装する方法を確認するためのコードを投稿できますか? –

+0

私は今、コードで私の質問を編集します。ありがとう、ありがとう –

0

親クラスのプロパティを呼び出すことができ、Selfで機能することができます。だからコードが

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Here i want to call Father Method 
    [Self show_modal:indexPath]; } 

ようになり、あなたは

@property (nonatomic, strong) ChildClass *sidebar_table_controller; 

を提示する前にプロパティを割り当てたことがないので、プロパティをASSING、上記のように関数を呼び出します。

関連する問題