0

デフォルトのイニシャライザーがあります:

- (id)init
{
    if ((self = [super init]))
    {   
    }

    return self;
}

このメソッドをクラスに含めたのは、それがその仕事を実行していたかどうかを追跡するためだけであり、私が知る限り、それはそうです。

Selfが設定され、コンソールで、selfのメモリアドレスが0x0000000ではないことがわかります。たとえば、これが私が試した実行のコンソールです。

self    IssueManager *  0x08383ad0

ただし、メソッドが自分自身をこのメソッドに戻す場合:

- (id)initWithNibName:(NSString *)nibNameOrNil
               bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

        if (self)
            self.issueManager                           = [[IssueManager alloc] init];

        return self;
    }

self.issueManagerは空のポインターのままです:

_issueManager   IssueManager *  0x00000000

なぜそうなるのかわかりませんが、助けていただければ幸いです。

4

2 に答える 2

2

使用する代わりに:

self.issueManager

試す:

issueManager = [[IssueManager alloc] init];

ドット表記の使用は、@propertyおよび@synthesizeによって提供されるアクセサー/セッターメソッドを使用するだけであることを忘れないでください。initメソッドでは、アクセサー/セッターメソッドを使用しないでください。

于 2012-10-18T14:20:41.733 に答える
0

私はでアクセサーを使用しません-init*(これを読んでください:init/deallocでObjectiveC2.0アクセサーを使用すべきではないのはなぜですか?

これについてもAppleの声明があります。

代わりにやってみてください:

_issueManager = [[IssueManager alloc] init];
于 2012-10-18T14:24:37.990 に答える