2011-08-02 8 views
0

私はココアを学びたいと思っていて、私が若者で遊んだ非常に単純なゲームを開発したいと考えていました。それはもともとMS Basicで作成されました。私はココアと客観的なCをとても新しくしています。ココアのプロパティと合成

私はデフォルトと呼ばれる作成とオブジェクトを持っています。それは、3つの整数変数、惑星、戦闘機、および選手を格納します。

フロントエンドには、デフォルト値がさまざまな3つのドロップダウンボックスがあります。

は、私は同様の値を設定する方法として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 

ここでは私のコントローラでの実装の抜粋です。

#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]); 

} 

私が間違って何をやっていますか?

答えて

5

プロパティを整数ポインタに宣言しましたが、整数ポインタ値ではなく整数値に設定しようとしています。 "int * fighters"などのアスタリスクを削除して整数に変更します。

ポインタは、Cベースの言語(Objective-Cを含む)の最も基本的で難しい概念の1つです。上記の区別を明確にしていない場合は、作業。

更新

以下、あなたの質問に関連して、私はここを参照してください別の問題、あなたは、ロギング・ステートメントでいくつかの面白い事をやっているということです。フォーマット文字列に%@を置くと、NSLogに、Objective-C オブジェクトと置き換えることを伝えます。しかしintはオブジェクトではありません。基本的なC型です。 Key-ValueコーディングはObjective-Cオブジェクトでも使用できるため、キー値コーディングを使用してプロパティ値を取得すると、さらに問題が混乱する可能性があります。その行を次のように置き換えてください:

NSLog(@"Planets: %i", theDefaults.planets); 

と私は、あなたが期待しているものと一直線になると思います。 %iは、印刷する整数値があることをNSLogに通知し、theDefaults.planets(またはそれに相当する[theDefaults planets])は、オブジェクトであるかどうかにかかわらず、planetsプロパティの値を返します。

+0

ポップアップボタンの値はどうですか。私はこれが文字列だと思う。これをINTにキャストする必要がありますか?これを行う正しい方法ですか? – Axwack

+0

ボタンのラベルを読み込んで数値として使用する場合は、文字列を数値として解釈する関数を呼び出す必要があります。これは、キャストとは異なります。 '-intValue'はそれを行います。 –

+0

すべてのポインタ型を値に変更しました。これで問題は解消されましたが、値を設定することはできません。ドロップダウンからintに値を取得するために何か特別なことがありますか? – Axwack

関連する問題