1

私は NSViewController サブクラスを持っています:

@property (retain) NSMutableArray* entities;
@property (retain) NSMutableArray* tiles;

私の-init方法では、両方の配列が で作成され+new、それぞれに 1 つのオブジェクトが与えられます。その後、 を呼び出すとNSLog(@"%@, %@", entities, tiles);、期待どおりの結果が得られます。

2012-12-30 15:07:04.160 Project Land III[2177:303] (
"<RBEntity: 0x100508170>"
), (
"<RBTile: 0x100508470>"
)

ただし、同じログ関数を呼び出すビューのボタンをクリックすると、次のように吐き出されます。

2012-12-30 15:07:06.071 Project Land III[2177:303] (null), (null)

私は何日もの間、何らかの形でこの問題に悩まされてきました。なぜ世界で配列がnullなのですか?

もっと多くのコードを投稿できることをうれしく思います。お知らせください!

インターフェース:

#import <Cocoa/Cocoa.h>
#import "RBEntity.h"
#import "RBTile.h"

@interface RBMainViewController : NSViewController {
    NSMutableArray* _entities;
    NSMutableArray* _tiles;
}

@property (retain) NSMutableArray* entities;
@property (retain) NSMutableArray* tiles;

- (IBAction)log:(id)sender;

@end

私の-init方法:

- (id)init {
    self = [super init];
    self.entities = [NSMutableArray new];
    self.tiles = [NSMutableArray new];
    [self.entities addObject:[RBEntity entityWithLocation:NSMakePoint(4, 5) type:FACEEATER]];
    [self.tiles addObject:[RBTile tileWithLocation:NSMakePoint(10, 2) type:GRASS]];
    NSLog(@"%@, %@", self.entities, self.tiles);
    return self;
}
4

3 に答える 3

1
于 2012-12-31T02:39:57.490 に答える
0

クラスでこれらのオブジェクトを操作する場合はself.entites、 andを使用する必要があると思います。self.tiles

EDIT(インターフェース追加後)

インターフェイスに次のようなものが必要です。

@interface RBMainViewController : NSViewController{
    NSMutableArray* _entities;
    NSMutableArray* _tiles;
}

@property (retain) NSMutableArray* entities;
@property (retain) NSMutableArray* tiles;

- (IBAction)log:(id)sender;

@end

次に、これを実装に追加する必要があります。

@synthesize entities = _entities;
@synthesize tiles = _tiles;
于 2012-12-30T21:14:44.673 に答える
0

これらのプロパティの 1 つにカスタムの getter/setter を作成し、そこにブレークポイントを置いて、誰が値をリセットしているかを確認します。それでも問題が解決せず、プロパティがまだリセットされている場合は、おそらくNSViewControllerによって初期化されていないのインスタンスからアクセスしているinitため、これらのプロパティは常に初期化されていません。

于 2012-12-30T21:28:12.183 に答える