我正在努力学习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)
我究竟做错了什么?
您已将属性声明为整数指针,但之后您尝试将它们设置为整数值,而不是整数指针值.删除"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属性的值,无论它是否为对象.