0

このシナリオを想像してみましょう:

Game.h:

@interface Game : CCLayer
{    
    NSMutableArray* questions;
}

@property (nonatomic,retain) NSMutableArray* questions;


- (void) didLoadFromCCB;
- (void) pressitem:(id)sender;

@end

Game.m

 @implementation Game

 @synthesize questions;

 - (void) didLoadFromCCB
 {
     NSMutableArray *questions = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:-1],nil];

     NSLog(@"didload %@", questions);
 }


 - (void) pressitem:(id)sender
 {
     NSLog(@"pressitem %@",questions);
 }
@end

didLoadFromCCBからログを取得しましたが、pressitemでnullを返します。すべての実装を通じて配列にアクセスできるべきではありませんか?

私はこの継ぎ目が本当に初心者の質問のようであることを知っていますが、私はactionscript / phpのバックグラウンドから来ており、CとObjective Cの本を注文したばかりですが、待っている間、少し掘り下げたいと思いました。

お時間をいただきありがとうございます:)

4

2 に答える 2

2

inshadowsのローカル宣言はquestionsインスタンスdidLoadFromCCB変数です。あなたはおそらくその行を作る必要があります:

self.questions = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:-1],nil];

次に、配列を作成し、その配列へのポインターをインスタンス変数に格納します。すぐにスコープから外れるローカルポインターを作成するだけではありません。

于 2013-02-27T22:28:22.693 に答える
0

範囲。NSMutableArray *questionsメソッドに対してローカルな変数を宣言します- didLoadFromCCB。インスタンス変数は設定されません(スコープが小さい変数は、同じ名前でスコープが広い変数を抑制します)。単に書く

self.questions = [[NSMutableArray alloc] initWithObject:[NSNumber numberWithInteger:-1]];

代わりは。

于 2013-02-27T22:29:13.017 に答える