我有两个自定义类:FSGame
和FSEvent
。 FSGame
有一个ivar应该是NSMutableArray
个FSEvent
个对象。
这是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];
然后,在我的一个视图控制器中,alloc
和init
FSEvent
的一个实例,然后尝试将其添加到.gameEvents
数组中:
[appDelegate.game.gameEvents addObject: event];
但是这里似乎出现了问题,因为如果从另一个视图控制器,我尝试访问该对象,它将是nil
:
FSEvent *previousEvent = [appDelegate.game.gameEvents lastObject];
if (previousEvent == nil) {
NSLog(@"previousEvent is NIL!");
}
我在这里缺少什么?
答案 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 ;
}