为什么没有将对象添加到我的数组中?

时间:2014-04-02 16:24:28

标签: ios objective-c class instance-variables appdelegate

我有两个自定义类:FSGameFSEventFSGame有一个ivar应该是NSMutableArrayFSEvent个对象。

这是FSGame.h:

@interface FSGame : NSObject

@property (strong, nonatomic) NSMutableArray *players;
@property (strong, nonatomic) NSString *startTime;
@property (strong, nonatomic) NSString *endTime;
@property (strong, nonatomic) NSMutableArray *gameEvents;

@end

这是我的FSEvent.h:

@interface FSEvent : NSObject

@property NSInteger ID;
@property NSInteger pointTo;

@end

我用

@property (strong, nonatomic) FSGame *game;

FSGame中保留AppDelegate的实例。然后,在我的application:didFinishLaunchingWithOptions:中,我创建了一个FSGame的实例,以便在#34;#34;游戏中填充它。

_game = [[FSGame alloc] init];

然后,在我的一个视图控制器中,allocinit FSEvent的一个实例,然后尝试将其添加到.gameEvents数组中:

[appDelegate.game.gameEvents addObject: event];

但是这里似乎出现了问题,因为如果从另一个视图控制器,我尝试访问该对象,它将是nil

FSEvent *previousEvent = [appDelegate.game.gameEvents lastObject];

if (previousEvent == nil) {
    NSLog(@"previousEvent is NIL!");
}

我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

很难说已经显示过的代码,但您可能永远创建可变数组gameEvents而且它& #39; s nil当您尝试访问它或向其添加事件时。确保您在某处创建它,可能在FSGame -init {/ p>}中

_gameEvents = [NSMutableArray array];

答案 1 :(得分:2)

您需要实例化数组,使用

时不会发生这种情况
  

_game = [[FSGame alloc] init];

尝试在FSGame类中使用延迟实例化,添加此代码

-(NSMutableArray *)gameEvents{
    if(!_gameEvents){
        _gameEvents = [NSMutableArray array];
    }
    return _gameEvents;
}

这应该足够了,还要确保通过self.gameEvents而不是_gameEvents进行访问!

答案 2 :(得分:1)

_game.gameEvents是指向可变数组的指针。它没有初始化,所以它的值是零。没有任何可变数组可以添加对象。

您可以在需要在FSGame.m中编写此方法时创建它:

-(NSMutableArray*) gameEvents {
    if ( ! _gameEvents ) {
        _gameEvents = [NSMutableArray array];
    }
    return _gameEvents ;
}