我是Obj-C编程的新手,我无法在代码中找出问题。 下面我粘贴了来自不同类的代码... 当我运行我的应用程序时,_pirate.health的值为零,_pirate.weapon.damage的值为零,_pirate.weapon.name的值为(null)
我不知道它为什么不起作用。我现在非常绝望:( 我将感激你的帮助!
ViewController.h
@property (strong, nonatomic) NCharacter *pirate;
ViewContoller.m
_pirate.health = 100;
_pirate.weapon.damage = 10;
_pirate.weapon.name = @"Fist";
Character.h
@property (strong, nonatomic) NWeapon *weapon;
@property (nonatomic) int health;
Character.m
@implementation NCharacter
- (instancetype)init
{
self = [super init];
if (self) {
_weapon = [[NWeapon alloc] init];
}
return self;
}
@end
NWeapon.h
@property (strong, nonatomic) NSString *name;
@property (nonatomic) int damage;
NWeapon.m
@implementation NWeapon
- (instancetype)init
{
self = [super init];
if (self) {
_name= [[NSString alloc] init];
}
return self;
}
@end
答案 0 :(得分:2)
您似乎永远不会分配属性self.pirate
- 在头文件中分配属性并不会自动为您创建对象。因此,在调用NCharacter
方法之前,您需要alloc] init];
试试这个:
_pirate = [[NCharacter alloc] init];
_pirate.health = 100;
_pirate.weapon.damage = 10;
_pirate.weapon.name = @"Fist";
在某些情况下,它对延迟加载属性很有用。 Todo在您的ViewController.m
中创建以下内容:
-(NCharacter *)pirate
{
if(!_pirate){
_pirate = [[NCharacter alloc] init];
}
return _pirate;
}
因此,您将能够使用类似于之前的内容
self.pirate.health = 100;
self.pirate.weapon.damage = 10;
self.pirate.weapon.name = @"Fist";
对self.pirate
的调用将为您实例化对象。