5

これと同じような質問をしましたが、まだ問題がわかりませんか?

-(id)initWithKeyPadType: (int)value
{
    [self setKeyPadType:value];
    self = [self init];
    if( self != nil )
    {
        //self.intKeyPadType = value;

    }
    return self;
}

- (id)init {

    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] 
                                                              autorelease];
    decimalSymbol = [formatter decimalSeparator];
....

警告は上記の行から来ていますInstance variable used while 'self' is not set to the result of '[(super or self) init...]'

4

2 に答える 2

4

あなたがやろうとしていることは技術的には問題ありませんが、ある段階で を呼び出す必要があります[super init]。クラスのinitメソッドが、他のメソッドが利用する多くの一般的な初期化を行う場合initWith...は、そこに入れます[super init]initまた、インスタンス変数をいじる前に、必ずクラスが'd' されていることを確認してください。

- (id) initWithKeyPadType: (int)value
{
    self = [self init]; // invoke common initialisation
    if( self != nil )
    {
        [self setKeyPadType:value];
    }
    return self;
}

- (id) init
{
    self = [super init]; // invoke NSObject initialisation (or whoever superclass is)
    if (!self) return nil;

    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] 
                                                          autorelease];
    decimalSymbol = [formatter decimalSeparator];

    ...
于 2011-11-10T22:25:24.247 に答える
2

警告は、それが言うことを意味します。インスタンス変数であるに何かを割り当ててdecimalSymbolいますが、その時点ではインスタンスはありません。あなたには必要だ

self = [super init];

init メソッドの開始時。ある時点でオブジェクトを作成する必要があり、ある時点でこれを NSObject にコールバックする必要があります (一連のスーパー初期化を介して)。

于 2011-11-10T22:12:06.603 に答える