可可属性与合成

Axw*_*ack 0 cocoa objective-c

我正在努力学习Cocoa,并希望开发一个我年轻时玩过的非常简单的游戏.它最初是在MS Basic中创建的.请注意我对Cocoa和目标c都很新

我有创建和对象称为默认值.它存储三个整数变量,行星,战士和玩家.

在前端,我有三个带有各种默认值的下拉框.

我想了解KVC以及如何设置值,但我得到以下警告......

"不兼容的整数到指针发送'int'到'int*'类型的参数

[新代码]

DEFAULTS.H

#import #import

@interface Defaults : NSObject {

int fighters;
int planets;
int players;

}

@property (assign) int fighters;
@property (assign) int planets;
@property (assign) int players;

@end
Run Code Online (Sandbox Code Playgroud)

以下是我的控制器中的实现摘录:

#import "DefaultsController.h"
#import "Defaults.h"
Run Code Online (Sandbox Code Playgroud)

@implementation DefaultsController

- (id)init
{
self = [super init];
if (self) {
    // Initialization code here
 Defaults *theDefaults = [[Defaults alloc] init];
    NSLog(@"Planets: %@",[theDefaults valueForKey:(@"planets")]);
}
return self;
Run Code Online (Sandbox Code Playgroud)

}

-(void)dealloc
{ 
[super dealloc];
[Defaults release]; 
}

-(void) awakeFromNib{

}

-(IBAction) addPlanets:(id)sender{

[theDefaults setValue:[planetsButton titleOfSelectedItem] forKey:@"planets"];
[theDefaults setPlanets:[[planetsButton titleOfSelectedItem] intValue]];
theDefaults.planets = [[planetsButton titleOfSelectedItem] intValue];
NSLog(@"Planets: %i", theDefaults.planets);
NSLog(@"%@", [planetsButton titleOfSelectedItem]);
NSLog(@"%i", [[planetsButton titleOfSelectedItem] intValue]);

}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Sea*_*ell 5

您已将属性声明为整数指针,但之后您尝试将它们设置为整数值,而不是整数指针值.删除"int*fighters"等中的星号,将它们更改为整数.

指针是基于C语言(包括Objective-C)的最基本和最具挑战性的概念之一,如果你不清楚我在上面提到的区别,我建议你寻找一些关于它们如何工作的仔细解释.

更新:

我在这里看到的另一个问题,可能与你下面的问题有关,就是你在日志记录中做了一些有趣的事情.当您%@输入格式化字符串时,您告诉NSLog您希望它用Objective-C 对象替换它.但是int不是一个对象; 它只是一个基本的C类型.然后,您使用键值编码来检索属性值,这进一步使问题混乱,因为键值编码也适用于Objective-C对象.用以下内容替换该行:

NSLog(@"Planets: %i", theDefaults.planets);
Run Code Online (Sandbox Code Playgroud)

而且我认为你会得到更符合你期望的东西. %i告诉NSLog您要打印一个整数值,并且theDefaults.planets(或等效的[theDefaults planets])将返回planets属性的值,无论它是否为对象.