1

我有一个 NSViewController 子类:

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

在我的-init方法中,两个数组都是用创建的+new,并且每个都被赋予一个对象。之后,我打电话给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)

几天来,我一直以某种形式被困在这个问题上。为什么世界上的数组是空的?

我很高兴发布更多代码,请告诉我!

界面:

#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

为这些属性之一编写自定义 getter/setter,并在此处放置一个断点以查看谁在重置该值。如果这没有解决问题,并且您的属性仍在重置,则您可能正在从您NSViewController尚未初始化的实例访问它们init的实例访问它们,因此这些属性始终未初始化。

于 2012-12-30T21:28:12.183 回答
0

我相信您将需要在课堂上使用self.entitesself.tiles处理这些对象。

编辑(添加界面后)

你需要在你的界面中有一些东西,比如:

@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 回答