我正在努力学习Cocoa,并希望开发一个我年轻时玩过的非常简单的游戏。它最初是在MS Basic中创建的。请注意我对Cocoa和目标c很新。
我创建了一个名为Defaults的对象。它存储了三个整数变量,行星,战士和玩家。
在前端,我有三个带有各种默认值的下拉框。
我想了解KVC以及如何设置值,但我收到以下警告......
“与'int *'
类型的参数发送'int'的指针不兼容的整数[新代码]
DEFAULTS.H
#进口 #import
@interface Defaults : NSObject {
int fighters;
int planets;
int players;
}
@property (assign) int fighters;
@property (assign) int planets;
@property (assign) int players;
@end
以下是我控制器中实现的摘录:
#import "DefaultsController.h"
#import "Defaults.h"
@implementation DefaultsController
- (id)init
{
self = [super init];
if (self) {
// Initialization code here
Defaults *theDefaults = [[Defaults alloc] init];
NSLog(@"Planets: %@",[theDefaults valueForKey:(@"planets")]);
}
return self;
}
-(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]);
}
我做错了什么?
答案 0 :(得分:5)
您已将属性声明为整数指针,但之后您尝试将它们设置为整数值,而不是整数指针值。删除“int * fighters”等中的星号,将它们更改为整数。
指针是基于C语言(包括Objective-C)的最基本和最具挑战性的概念之一,如果你不清楚我在上面提到的区别,我建议你仔细解释它们是如何工作的
<强>更新强>:
我在这里看到的另一个问题,可能与你的问题有关,就是你在日志记录中做了一些有趣的事情。当您将%@
放入格式化字符串时,您告诉NSLog您希望它用Objective-C 对象替换它。但是int不是一个对象;它只是一个基本的C类型。然后,您使用键值编码来检索属性值,这进一步使问题混乱,因为键值编码也适用于Objective-C对象。用以下内容替换该行:
NSLog(@"Planets: %i", theDefaults.planets);
我认为你会得到更符合你期望的东西。 %i
告诉NSLog你有一个要打印的整数值,theDefaults.planets
(或等价的[theDefaults planets]
)将返回行星属性的值,无论它是否是一个对象。