2016-05-10 23 views
-1

これでしばらくの間スタックされていましたが、私はStackoverflowで多くの投稿を見てきましたが、問題。 "dict"は文字列に変換されるはずだから、NSString *myString = [NSNumber stringValue];[NSString stringWithFormat:@"%d", dict[@"id"]];などを使用して、さまざまな方法で試してみたようです。ここでは、コードは次のようになります。- [__ NSCFNumber objectForKeyedSubscript:]:インスタンスに送信された認識されないセレクタ

for (NSDictionary *dict in self.params) { 
    NSString *value = dict[@"id"]; 

    if (value) { 
     [parameters appendFormat:@"&ids[]=%@", value]; 
    } 
} 

私が取得エラーは、この行にある:NSString *value = dict[@"id"];

コンソールに出力が示しています

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectForKeyedSubscript:]: unrecognized selector sent to instance 0xb00000000000a313' 

私はこの問題は、それが思われないということだと思います文字列に正しく変換する。この行は、dictをNSCFNumber(long)2609として示しています。どのように文字列に変換できますか?

+0

あなたは必ず 'self.params'はONLY' NSDictionary'のオブジェクトが含まれています? 'NSNumber'オブジェクトがあり、その中に' NSDictionary'オブジェクトがないようです。 – Larme

+0

@Larme ohh、self.paramsには1つのNSDictionaryオブジェクトと1つのNSNumberオブジェクトが含まれます – coderdojo

+0

@Larmeどのように変換できますか? – coderdojo

答えて

1

は//このようにしてみてください、それが動作します

for (NSDictionary *dict in self.params) { 
if([dict isKindOfClass:[NSDictionary class]]) { 
    NSString *value = [NSString stringWithFormat:@"%@",dict[@"id"]]; 

    if (value) { 
     [parameters appendFormat:@"&ids[]=%@", value]; 
    } 
} 
} 
2

self.paramsデータにはNSNumberが含まれている必要があります。番号にアクセスしてキーを取得しようとするとすぐにクラッシュします。

データをクリーンアップするか、キー値をフェッチする前に配列内の各オブジェクトのクラスをチェックするコードを記述する必要があります。

あなたはこのようなあなたのループを変更することができます:

for (NSDictionary *dict in self.params) 
{ 
    if (![dict isKindOfClass: [NSDictionary class]) 
    { 
     NSLog("Non-Dictionary object %@ found. Skipping.", dict) 
     continue; 
    } 
    NSString *value = dict[@"id"]; 

    if (value) { 
     [parameters appendFormat:@"&ids[]=%@", value]; 
    } 
} 
0
[self.params enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    if ([obj isKindOfClass:[NSDictionary class]]) { 

    // Do whatever you want 
    } 
}]; 
関連する問題