-1

私はiPhoneにcocos2dを使用しており、プレーヤーのすべてのデータと変数を格納するようにシングルトンを設定しています。これが可能かどうかを知る必要があるため、擬似コードでは次のようになります。

players * playersDataManager = [players playersSaveDataManager];
selected = "sword"
name = (@"%@AttRange",selected);
AttRange = playersDataManager.name;

選択されたnameプレーヤーに基づいて変更されるため、`AttRangeも変更されます。実際のコードで設定する方法がわかりません。これが私が使用している実際のコードです:

-(void)showAttackRange:(NSMutableString *)selected {
    players * playersDataManager = [players playersSaveDataManager];
    NSMutableString * name1 = [NSMutableString stringWithString:@"MaxRange"];
    [name1 insertString:selected atIndex:0];

    int r = [playersDataManager valueForKey:name1];
    NSLog(@"%@%i",name1,r);
}
4

1 に答える 1

3

これは「キー値コーディング」と呼ばれます

サンプルコードで使用するには:

Players * playersDataManager = [Players playersSaveDataManager];
NSString *selected = @"sword"; 
NSString *propertyName = [NSString stringWithFormat:@"%@AttRange", selected);
AttRange value = [playersDataManager valueForKey:propertyName];

Playersクラスにデフォルトのアクセサー付きのタイプと名前のプロパティがAttRange swordAttRangeあるか@synthesized、プロパティにカスタムアクセサーを指定している場合は、予想される命名スキームに従うと仮定して機能します。

(アクセサーの命名スキームに関してKVCが期待することの詳細については、ドキュメントをお読みください...)

Appleドキュメンテーション:Key-ValueCodingプログラミングガイド

編集:KVCを使用してスカラー値を取得すると、NSNumberオブジェクトが返されます:AppleDocumentation->KVCスカラーと構造のサポート

于 2012-08-07T16:51:22.387 に答える