'NSInvalidArgumentException',原因:' - [__ NSCFString objectForKeyedSubscript:]:无法识别的选择器发送到实例

时间:2015-05-11 05:44:31

标签: ios objective-c uitableview

我是Obj-c的新手,我现在正在创建一个tableview来显示我从Json解析的内容。这是代码:

#import "ClasstableViewController.h"
@interface ClasstableViewController ()
@end
@implementation ClasstableViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"JSONRead";
    NSString *testUrl = @"example.com";
    NSURL *url = [NSURL URLWithString:testUrl];

    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy
                                             timeoutInterval:10];

    NSData *JSONData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSArray *jsonResult = [NSJSONSerialization JSONObjectWithData:JSONData options:kNilOptions error:nil];
    self.data = jsonResult;
    NSMutableArray *_names = [NSMutableArray array];

    for (id item in jsonResult)
        [_names addObject:[NSString stringWithFormat:@"%@", item[@"Mon"]]];

    self.names = _names;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // Return the number of rows in the section.
    return [self.names count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    cell.textLabel.text = self.names[indexPath.row];

    return cell;
}

我已将我的tableview更改为身份检查器中对ClasstableViewController的正确类,我看到其他人已经解决了这个解决方案的问题。

但我还是得到了这个:

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

任何人都知道为什么?请帮帮我

2 个答案:

答案 0 :(得分:1)

可能你的NSArray *jsonResult是一个NSStrings数组,或者包含一些NSStrings作为对象。所以当你这样做时

for (id item in jsonResult)
    [_names addObject:[NSString stringWithFormat:@"%@", item[@"Mon"]]];

您认为item是NSDictionary,但它不是。

答案 1 :(得分:0)

 for (id item in jsonResult)
        [_names addObject:[NSString stringWithFormat:@"%@", item[@"Mon"]]];

项目为NSString而不是NSDictionary,请使用如下

 for (id item in jsonResult)
        [_names addObject:[NSString stringWithFormat:@"%@", item]];

使用JSONEditor检查JSON。