2012-11-18 20 views
2

我不知道爲什麼索引處的對象失敗。我想知道這裏有沒有人知道如何解決這個問題。該失敗的具體代碼是NSURL *imgURLLogo = [NSURL URLWithString:[[firstMessage objectForKey:@"message"] objectForKey:@"photo"]];在無效加載圖像的底部任何人都可以請幫我弄清楚這一點?SInvalidArgumentException',原因:' - [__ NSArrayM objectForKey:]:

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

這裏是正在發生的事情。

 { 
    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; 
    }; 
} 

+0

您可能希望將其縮減爲可重現樣本,而不是現在的大量代碼。 –

+0

做一個'NSLog(@「%@」,firstMessage);'並顯示結果。這將決定答案。顯然,字典/數組的結構並不是你所期望的。 – Rob

+0

好的,我做了你所要求的併發布了輸出。 – moo

回答

1

貌似arrMessages是NSArray的陣列。所以arrMessages的第一個元素是NSArray而不是NSDictionary

+0

你知道我怎麼能解決這個問題嗎? – moo

+0

檢查objectsForContacts的填充位置。看起來問題不在這個代碼中。 – diederikh

0
NSMutableArray *arrMessages = [objectsForContacts objectForKey:[arrayOfUsers objectAtIndex:indexPath.row]]; 

什麼是objectsForContacts?它是一個數組還是字典?如果它是一個數組,那就是你出錯的地方。

相關問題