3

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

なぜUIViewControllerのサブクラス「FatherClass」があるのだろうか。そこで継承FatherClass(ChildClass:FatherClass)を作りたいと思います。

これを行うことができません。エラー ログが表示されます。ここで検索したすべての例と Google は、親として NSObject で始まります。

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

エラーログはこちら

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

ありがとう

コードを使用してここで編集

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

#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 : UIViewController を ChildClass : FatherClass に変更すると、アプリがクラッシュします。

4

2 に答える 2

1

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

したがって、独自の階層を作成することはできますが、オブジェクトを管理するためにすべてのメソッドを書き換える車輪を再発明する必要があります。

于 2012-04-24T15:44:56.220 に答える
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;

したがって、プロパティを割り当てて、上記のように関数を呼び出します。

于 2016-01-18T09:31:48.390 に答える