iphone - NSInvalidArgumentException',原因 : '-[__NSArrayM objectForKey:]:

标签 iphone objective-c ios xcode

我不知道索引处的对象为什么会失败。我想知道这里是否有人知道如何纠正这个问题。失败的具体代码是 NSURL *imgURLLogo = [NSURL URLWithString:[[firstMessage objectForKey:@"message"] objectForKey:@"photo"]]; 在 void load image 的底部,任何人都可以请帮我解决这个问题?

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//  if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:CellIdentifier] autorelease];

    // Configure the cell...
    NSMutableArray *arrMessages = [objectsForContacts objectForKey:[arrayOfUsers   objectAtIndex:indexPath.row]];

    NSMutableDictionary *firstMessage = [arrMessages objectAtIndex:0];

    UILabel *lblFriendName = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, 200, 20)];
    lblFriendName.textAlignment = UITextAlignmentLeft;
    lblFriendName.backgroundColor = [UIColor clearColor];
    lblFriendName.textColor = [UIColor blackColor];
    lblFriendName.font = [UIFont boldSystemFontOfSize:16.0];
    lblFriendName.text = [[firstMessage objectForKey:@"message"] objectForKey:@"toname"];
    [cell.contentView addSubview:lblFriendName];

    UILabel *lblLastMessage = [[UILabel alloc] initWithFrame:CGRectMake(10, 25, 280, 35)];
    lblLastMessage.textAlignment = UITextAlignmentLeft;
    lblLastMessage.numberOfLines = 2;
    lblLastMessage.backgroundColor = [UIColor clearColor];
    lblLastMessage.textColor = [UIColor blackColor];
    lblLastMessage.font = [UIFont systemFontOfSize:13.0];
    lblLastMessage.text = [[firstMessage objectForKey:@"message"] objectForKey:@"text"];
    [cell.contentView addSubview:lblLastMessage];

    UILabel *lblTime = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 280, 20)];
    lblTime.textAlignment = UITextAlignmentLeft;
    lblTime.backgroundColor = [UIColor clearColor];
    lblTime.textColor = [UIColor blackColor];
    lblTime.font = [UIFont systemFontOfSize:13.0];
    lblTime.text = [NSString stringWithFormat:@"%@",[[[firstMessage objectForKey:@"message"] objectForKey:@"postedat"] substringToIndex:16]];
    [cell.contentView addSubview:lblTime];

    cell.backgroundColor = appDelegate.pref_TableViewCellColorValue;
    //    cell.textLabel.text = [[dict objectForKey:@"post"] objectForKey:@"title"];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
     NSMutableDictionary *dict = [[objectsForCharacters objectForKey:[arrayOfCharacters objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];


    UIImageView *imgUser = [[UIImageView alloc] initWithFrame:CGRectMake(5, 1, 48, 48)];
    if (![dict objectForKey:@"cellimage"]) {
        UIImage *img = [appDelegate imageByScalingProportionallyToSize:CGSizeMake(48, 48) img:[UIImage imageNamed:@"smily.png"]];
        imgUser.image = img;
        NSMutableArray *arrObject = [[NSMutableArray alloc] init];
        [arrObject addObject:arrMessages];
        [arrObject addObject:imgUser];
        [NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:arrObject];
    } else {
        UIImage *img = [appDelegate imageByScalingProportionallyToSize:CGSizeMake(48, 48) img:[dict objectForKey:@"cellimage"]];
        imgUser.image = img;
    }



    [cell.contentView addSubview:imgUser];

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.backgroundColor = appDelegate.pref_TableViewCellColorValue;
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 80.0;
}


- (void)loadImage :(NSMutableArray *)arrObjects {   
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSMutableDictionary *firstMessage= [arrObjects objectAtIndex:0];
    NSURL *imgURLLogo = [NSURL URLWithString:[[firstMessage objectForKey:@"message"] objectForKey:@"photo"]];
    NSLog(@"%@",[[firstMessage objectForKey:@"message"] objectForKey:@"photo"]);
    UIImage *imgLogo = [UIImage imageWithData:[NSData dataWithContentsOfURL:imgURLLogo]];
    if (imgLogo)
        [firstMessage setObject:imgLogo forKey:@"cellimage"];
    else
        [firstMessage setObject:[appDelegate imageByScalingProportionallyToSize:CGSizeMake(48, 48) img:[UIImage imageNamed:@"smily.png"]] forKey:@"cellimage"];
    [self performSelectorOnMainThread:@selector(loadingImageComplete:) withObject:arrObjects waitUntilDone:YES];
    [pool release];
}

-(void) loadingImageComplete :(NSMutableArray *)arrayOfUsers1 {
    NSMutableDictionary *dict = [arrayOfUsers1 objectAtIndex:0];
    UIImageView*imgUser1 = [arrayOfUsers1 objectAtIndex:1];
    UIImage *img = [appDelegate imageByScalingProportionallyToSize:CGSizeMake(48, 48) img:[dict objectForKey:@"cellimage"]];
    imgUser1.image = img;
 }

这是正在发生的事情的 nslog。

     {
    message =         {
        id = 20;
        name = Road;
        postedat = "2012-11-17 17:11:51";
        status = sent;
        text = "mickey d";
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 23;
        name = Road;
        postedat = "2012-11-17 17:11:40";
        status = sent;
        text = "ok message gone wierd";
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 17;
        name = Road;
        postedat = "2012-11-17 17:11:29";
        status = sent;
        text = my;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 19;
        name = Road;
        postedat = "2012-11-17 17:11:26";
        status = sent;
        text = moo;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 22;
        name = Road;
        postedat = "2012-11-17 17:11:19";
        status = sent;
        text = loops;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 21;
        name = Road;
        postedat = "2012-11-17 17:11:09";
        status = sent;
        text = ok;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 18;
        name = Road;
        postedat = "2012-11-17 17:11:05";
        status = sent;
        text = moo;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 13;
        name = Road;
        postedat = "2012-10-24 13:10:48";
        status = sent;
        text = test;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 16;
        name = Road;
        postedat = "2012-10-24 13:10:39";
        status = sent;
        text = hi;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 15;
        name = Road;
        postedat = "2012-10-24 13:10:36";
        status = sent;
        text = test;
        toname = Road;
        userid = 52;
    };
},
    {
    message =         {
        id = 14;
        name = Road;
        postedat = "2012-10-24 13:10:26";
        status = sent;
        text = yes;
        toname = Road;
        userid = 52;
    };
}

)

最佳答案

看起来 arrMessages 是一个 NSArray 数组。所以 arrMessages 的第一个元素是 NSArray 类型而不是 NSDictionary

关于iphone - NSInvalidArgumentException',原因 : '-[__NSArrayM objectForKey:]:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440743/

相关文章:

ios - iPhone 上的应用程序如何在应用程序内与 BT 外围设备配对和连接?

ios - 如何遍历选项卡栏 Controller 中包含的每个导航 Controller

ios - 根据选择显示所有选定值的动态高度 MultipleSelectorRow

iphone - 循环遍历 uitableview 部分以更改部分标题框架

iphone - 在 map View 中实现获取方向

iphone - 如何设置 cell.imageview 框架

ios - codepush 和 cocoapods 找不到 React/RCTEventEmitter.h

objective-c - 自定义 NSTableView 行背景

ios - 在 xcode 中禁用整个嵌套项目的 ARC

ios - 如何在 Swift 中添加淡入动画