UITableView NSMutableArray和NSDictionary

时间:2014-05-24 12:08:25

标签: uitableview nsmutablearray nsdictionary

从nsmutablearray填充tableview时出现此错误。

将数组添加到字典中并将字典添加到可变数组中,但每次加载视图时应用程序都会崩溃并显示错误:

  

[__ NSArrayI isEqualToString:]:无法识别的选择器发送到实例   0x8a87e60 2014-05-24 12:23:02.589 jwStudy [77652:907] * 终止   应用程序由于未捕获的异常' NSInvalidArgumentException',原因:   ' - [__ NSArrayI isEqualToString:]:发送到的无法识别的选择器   实例0x8a87e60'

日志输出确认正确添加了数组和键。 但是为什么cellForRowAtIndexPath:方法中的单元格会抛出错误? 这是代码:

- (void)viewDidLoad
{
    [super viewDidLoad];


    languageArray = [[NSMutableArray alloc] init];
    languages = [[NSArray alloc] initWithObjects:@"Abbey", @"Abkhasisk", @"Abua", nil];

    downloadURL = [[NSArray alloc] initWithObjects:@"http://download.jw.org/files/content_assets/bb/502013341_ABB_cnt_1_r480P.mp4",
                   @"http://download.jw.org/files/content_assets/3c/502013341_ABK_cnt_1_r480P.mp4",
                   @"http://download.jw.org/files/content_assets/7e/502013341_AU_cnt_1_r720P.mp4", nil];

    mutedict = [NSDictionary dictionaryWithObjectsAndKeys:languages, @"FirstKey", downloadURL, @"SecondKey", nil];
    [languageArray addObject:mutedict];

   NSLog(@"%@",languageArray);

}

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

        return languageArray.count;
}

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

    static NSString *simpleTableIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    // ERROR HERE!!!
    cell.textLabel.text =  [[languageArray objectAtIndex:indexPath.row] objectForKey:@"FirstKey”];

    if ([checkCellLanguage isEqual:indexPath]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    return cell;
}

2 个答案:

答案 0 :(得分:1)

@Farhan和Joy。

谢谢你们的回复。我现在意识到我的问题不够清楚。我想要的是在tableview中的每个选定行注册行的相应URL。所以我最终放弃了数组和词典......太混乱了。而是选择2个NSArrays。这个链接让我走上正轨,现在一切正常:

http://sweettutos.com/2012/08/25/loading-urls-from-uitableview/

答案 1 :(得分:0)

在您的代码中,两个数组存储在字典中,而字典存储在数组中。

像这样:

languageArray ----- mutedict ------ languages (FirstKey)

                       |
                       |
                        ----------- downloadURL(SecondKey)

cell.textLabel.textNSString,但[[languageArray objectAtIndex:indexPath.row] objectForKey:@"FirstKey”];NSArray

所以你的代码会抛出错误。

如果您想要language作为cell.textLabel.text

您可以将代码修改为cell.textLabel.text = [[mutedict objectForKey:@"FirstKey"] objectAtIndex:indexPath.row]

希望它可以帮到你:)。