我是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从每个字典中获取objectForKeyvalueForKeyPath:

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"]];
}];

09-25 18:06