2017-05-20 3 views
1

私はiOS開発の初心者です。私はNSMutableArrayの結果をNSMutableStringに入れようとしていましたが、NSExceptionが発生しています。 は、ここに私のコードです:NSMutableArrayをNSMutableDictionaryからNSExceptionを構築します。

NSMutableArray *oldtableData = .......this is where I recieve card data; 
NSError *error; 
NSMutableData *tableDataUpdated = [[NSJSONSerialization dataWithJSONObject:oldtableData 
                     options:0 
                     error:&error] copy]; 
NSMutableDictionary *cardDictionary = [NSJSONSerialization JSONObjectWithData:tableDataUpdated options:0 error:NULL]; 

、私は(私にNSExceptionを与えている)コードのこの作品

NSMutableArray *type = [NSMutableArray array]; 
NSMutableArray *last4Digits = [NSMutableArray array]; 
[cardDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    [type addObject:[obj valueForKeyPath:@"type"]]; 
    [last4Digits addObject:[obj valueForKeyPath:@"last4Digits"]]; 
}]; 

を使用していますNSMutableArrayのにcardDictionaryを変換するためしかし、私は上記のコードを除外した場合このコードでNSLogを試してください

NSLog(@"JSON: %@",cardDictionary); 

コンソールは適切なjson結果を返します。このような何か:

JSON: (
    { 
    cardPciId = "###########"; 
    fingerPrint = ###########; 
    last4Digits = 4321; 
    type = Mastercard; 
}, 
    { 
    cardPciId = "###########"; 
    fingerPrint = ###########; 
    last4Digits = 1234; 
    type = Visa; 
} 
) 

私は2つのアレイ、すべての「タイプ」sの1とすべての「last4Digits」と別の1にこれを変換しようとしています。しかし、これは私が解決策を見つけるためにStackOverflowの通過ホバーしようとしましたが、それらのどれも働いているように見えるん

Uncaught exception: -[__NSCFArray enumerateKeysAndObjectsUsingBlock:]: 
unrecognized selector sent to instance 0x7ff7060badf0 

を得るものです。 :(cardDictionaryが実際に辞書を含むNSArrayインスタンスであるように見えます

答えて

2

だから、あなたは配列を反復処理し、objectForKey代わりのvalueForKeyPathを使用して、各辞書からtypelast4Digitsを取得する必要があります。

あり
NSArray *cardDictionaries = [NSJSONSerialization JSONObjectWithData:tableDataUpdated options:0 error:NULL]; 

NSMutableArray *type = [NSMutableArray array]; 
NSMutableArray *last4Digits = [NSMutableArray array]; 

[cardDictionaries enumerateObjectsUsingBlock:^(NSDictionary *cardDictionary, NSUInteger idx, BOOL *stop) { 
    [type addObject:[cardDictionary objectForKey:@"type"]]; 
    [last4Digits addObject:[cardDictionary objectForKey:@"last4Digits"]]; 
}]; 
0

多くはここで起こって、私は一つのことを指摘したいです。

表データをJSONにシリアライズされている。

NSMutableData *tableDataUpdated = [[NSJSONSerialization dataWithJSONObject:oldtableData 
                     options:0 
                     error:&error] copy]; 

次に、ちょうどシリアル化されたデータはデシリアライズされます。常に同じ配列になります。

NSMutableDictionary *cardDictionary = [NSJSONSerialization JSONObjectWithData:tableDataUpdated options:0 error:NULL]; 

いつも同じデータが返されます。 JSONのステップをまったく行う必要はありません。

関連する問題