将NSDictionary转换为NSArray

时间:2015-05-12 21:29:39

标签: ios objective-c uitableview nsarray nsdictionary

我试图将NSDictionary(storageData)转换为NSArray,因为我需要通过segue传递字典中包含的数据(标题)。我已经实现了下面的内容(参见上一个方法,tableview只是提供一些上下文),但是发生了崩溃,出现以下错误:

  

由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSCFString objectForKey:]:   无法识别的选择器发送到实例

知道如何解决?

Viewcontrolller.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *DoctorsTableIdentifier = @"StorageItemTableViewCell";

    StorageItemTableViewCell *cell = (StorageItemTableViewCell *)[tableView dequeueReusableCellWithIdentifier:DoctorsTableIdentifier];
    if (cell == nil)

        {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StorageItemTableViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

            NSDictionary *tmp = [self.storageData objectForKey:[NSString stringWithFormat:@"%d",(long)indexPath.row]];

        [[cell itemName] setText:(NSString *)[tmp objectForKey:@"title"]];

              NSString *title = [tmp objectForKey:@"title"];
              [[cell itemName] setText:title];

 NSDictionary *node = [self.descripData objectAtIndex:indexPath.row];
 [[cell itemDescrip] setText:[node objectForKey:@"body"]];

NSString *secondLink = [[self.descripData objectAtIndex:indexPath.row] objectForKey:@"photo"];

[cell.itemPhoto sd_setImageWithURL:[NSURL URLWithString:secondLink]];

              }

              return cell;
              }


    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSArray *values = [self.storageData allKeys];

    ItemDetailViewController *detailViewController = [[ItemDetailViewController alloc]
                                                                   initWithNibName:@"ItemDetailViewController" bundle:nil];

    detailViewController.title = [[values objectAtIndex:indexPath.row] objectForKey:@"title"];
    detailViewController.itemDetail = [self.descripData objectAtIndex:indexPath.row];
    detailViewController.secondLink = self.descripData[indexPath.row][@"photo"];
    [self.navigationController pushViewController:detailViewController animated:YES];
       }

2 个答案:

答案 0 :(得分:1)

该错误表明您正在NSString类型的对象中调用objectForKey,该对象没有声明该方法。

因此在方法的开头放置一个断点,逐个遍历每一行直到崩溃,然后检查当它是一个String时你认为是一个Dictionary的变量是什么。

答案 1 :(得分:0)

我相信如果你提取allValues而不是allKeys那么你只能:

[values objectAtIndex:indexPath.row] 

因为您使用索引作为indexPath.row。如果这有帮助,请告诉我。