【问题标题】:Why can I not assign a value to my ivar?为什么我不能为我的 ivar 赋值?
【发布时间】:2014-05-12 10:26:08
【问题描述】:

我已经有一段时间没有在 ObjC 中做任何事情了。我确信这个错误是微不足道的,但我似乎找不到它。

我使用以下 .h 文件创建了一个名为 Game 的类:

#import <Foundation/Foundation.h>

@interface FSGame : NSObject

@property NSInteger numberOfGames;

@end

在我的一个视图控制器的实现文件中,一个方法然后使用用户从 segm 中的选择。控制确定游戏数量:

FSGame *game;

// Number of Games
NSInteger index = _segCtrlNumberGames.selectedSegmentIndex;
if (index == 0) {
    game.numberOfGames = 1;
} else if (index == 1) {
    game.numberOfGames = 3;
} else {
    game.numberOfGames = 5;
}

NSLog(@"Games: %i; index: %i", game.numberOfGames, index);

NSLog 返回:Games: 0; index: 2

我创建的另外两个类也有同样的问题。我从UITextField 获取文本,NSLog 正确显示它,所以我知道我实际上能够获取用户的输入 - 它只是不会将其存储为 ivar。

这一定很明显。有什么指点吗?

【问题讨论】:

  • 分配游戏对象
  • 如果你不分配游戏对象,它就不会存储在内存中

标签: ios objective-c class instance-variables


【解决方案1】:

您创建游戏对象:

Game *game;

但是你应该创建 NSGame 并且你还需要分配和初始化它:

FSGame *game = [[FSGame alloc] init];

【讨论】:

  • 啊,我知道这样的事情很愚蠢。非常感谢!
  • 顺便说一句,与其他语言不同,Objective-C 中未初始化的对象不包含垃圾值,它们被初始化为 nil。而且您可以向 nil 对象发送消息而不会导致应用程序崩溃。
  • @ArslanAli 仅在使用 ARC 时...使用 MRC,指向对象的指针不会初始化为 nil...
猜你喜欢
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2012-09-02
  • 1970-01-01
  • 2020-02-11
  • 2012-08-17
相关资源
最近更新 更多