0

私は以下のようなコードを持っています:

1.1つのボタンのアクションとして以下のメソッドがあります。

(IBAction)enableDisableFB:(id)sender {//have below local variable
NSMutableDictionary *fbLocationLatitude = [[NSMutableDictionary alloc] init];

2.この辞書にオブジェクトを次のように設定するループがあります

[fbLocationLatitude setObject:latitude forKey:locID]; //here latitude and locID both are NSString

3.同じメソッドの別のループで、値を取得しようとしていますが、NSLog で (null) が返されます

NSLog(@"latitude for key %@ = %@",locID, [fbLocationLatitude objectForKey:locID]);
//above statement gives me output -> latitude for key 114943251851302 = (null)

しかし、ループの直後に、完全な辞書を使用して印刷します

NSLog(@"location dictionary = %@",fbLocationLatitude);
//which gives me below output. Sample given

location dictionary = {
    114943251851302 = "40.4414";
    109782595706984 = "38.9966";
    108867759137051 = "22.47";
    110148382341970 = "25.7877";
    107611279261754 = "43.1655";
    111803735513513 = "27.1828";
    109155699106505 = "18.3167";
    103734539665100 = "19.09";

これには、検索しているキーの値がありますが、objectForKey を使用して取得することはできません。この問題を解決するのを手伝ってください。

for (NSUInteger i =0; i< [fbLocationID count];i++)
{
    // NSLog(@"person creation");
    NSString *locID = [NSString stringWithString:[fbLocationID objectAtIndex:i]];
    NSLog(@"latitude for key %@ = %@",locID, [fbLocationLatitude objectForKey:locID]);                             
}
NSLog(@"location dictionary = %@",fbLocationLatitude);

コードはこんな感じ。また、以下のコードを使用してキーのクラスを印刷しようとしました

for (id ik in [fbLocationLatitude allKeys])
{
const char* classname=class_getName([ik class]);
NSLog(@"class of key %s",classname);
}

そして私は次のようにansを取得しています:キーNSDecimalNumberのクラス locIDをNSDecimalNumberに型キャストしますが、キーの正確な値は取得せず、nullのみを取得します。これを解決するのを手伝ってください。

4

2 に答える 2

1

キーは NSDecimalNumber ですが、NSString から開始しているため、次のようにデータを抽出できます。

NSDecimalNumber locIDnumber = [NSDecimalNumber decimalNumberWithString: locID];
id latitude = [fbLocationLatitude objectForKey:locIDnumber];
NSLog(@"latitude for key %@ = %@", locID, latitude);

あなたはキャストを試みたと言いますが、これはあるオブジェクトタイプから別のオブジェクトタイプへの変換を実行しません。次のようなメソッドが必要ですdecimalNumberWithString:

于 2012-09-08T06:33:53.883 に答える
0

次のように確認します。

if([[fbLocationLatitude objectForKey:locID] isKindofClass:[NSNumber class]])
{
   NSNumber *num = fbLocationLatitude objectForKey:locID];
}
else if([[fbLocationLatitude objectForKey:locID] isKindofClass:[NSString class]])
{
   NSString *strnum = fbLocationLatitude objectForKey:locID];
}
于 2012-09-04T04:33:06.530 に答える