我是iOS开发的新手。我试图将NSMutableArray的结果放入NSMutableString中,但这会导致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];
为了将cardDictionary转换为NSMutableArray,我使用了这段代码(这给了我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"]];
}];
但是,如果我排除上面的代码并尝试使用这段代码进行NSLog
NSLog(@"JSON: %@",cardDictionary);
控制台将给出适当的json结果;像这样的东西:
JSON: (
{
cardPciId = "###########";
fingerPrint = ###########;
last4Digits = 4321;
type = Mastercard;
},
{
cardPciId = "###########";
fingerPrint = ###########;
last4Digits = 1234;
type = Visa;
}
)
我试图将其转换为两个数组,一个具有所有“类型”,另一个具有所有“last4Digits”。但这就是我得到的
Uncaught exception: -[__NSCFArray enumerateKeysAndObjectsUsingBlock:]:
unrecognized selector sent to instance 0x7ff7060badf0
我试图将鼠标悬停在StackOverFlow上以找到解决方案,但是它们似乎都没有起作用。 :(
最佳答案
看来cardDictionary
实际上是包含字典的NSArray
实例。因此,您应该遍历数组,并使用 type
而不是last4Digits
从每个字典中获取objectForKey
和valueForKeyPath
:
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"]];
}];