【问题标题】:Why do objects not get added to my array?为什么对象没有添加到我的数组中?
【发布时间】:2014-05-14 02:12:41
【问题描述】:

我有两个自定义类: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;

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

_game = [[FSGame alloc] init];

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

[appDelegate.game.gameEvents addObject: event];

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

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

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

我在这里错过了什么?

【问题讨论】:

  • 你检查过appDelegate.game.gameEvents不是nil吗?

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


【解决方案1】:

很难说所显示的代码,但您可能从未创建可变数组gameEvents,当您尝试访问它或向它添加事件时它是nil .确保你在某处创建它,可能在FSGame-init

_gameEvents = [NSMutableArray array];

【讨论】:

  • 这确实是个问题!
【解决方案2】:

你需要实例化数组,这在你使用时不会发生

_game = [[FSGame alloc] init];

尝试在您的 FSGame 类中使用惰性实例化,添加此代码

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

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

【讨论】:

  • 谢谢,解决了我的问题!不过,为什么我应该使用 self.gameEvents 而不是 _gameEvents?
  • 当您使用 self.gameEvents 时,您使用的是 getter,它确保 _gameEvents 不为零,如果您使用 _gameEvents,您将直接访问指针。
【解决方案3】:

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

你可以在需要的时候在FSGame.m中编写这个方法来创建它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多