我们如何访问NSMutableDictionary的NSMutableArray中存储的值?

时间:2010-04-16 11:59:23

标签: iphone cocoa-touch nsmutablearray nsmutabledictionary

我在NsMutableDictionaries中存储了值。然后我将所有字典存储在NSMutable Array中。我需要访问这些值吗?我怎样才能做到这一点 ?

-(void)viewDidLoad 
{
    [super viewDidLoad];

 self.title = @"Library";
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleBordered target:self action:@selector(close:)];
    cells = [[NSMutableArray alloc] initWithObjects:@"dict1", @"dict2", @"dict3", @"dict4", @"dict5", @"dict6", nil];

    dict1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Mon, 01 Feb #2", @"date", @"0.7", @"time", @"1.2MB", @"size", @"200*200", @"pix", nil];
    dict2 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Wed, 02 Mar #3", @"date", @"1.2", @"time", @"2.2MB", @"size", @"300*300", @"pix", nil];
    dict3 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Tue, 03 Apr #5", @"date", @"1.7", @"time", @"2.5MB", @"size", @"240*240", @"pix", nil];
    dict4 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Mon, 01 Feb #2", @"date", @"0.7", @"time", @"1.2MB", @"size", @"200*200", @"pix", nil];
    dict5 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Mon, 10 Nov #5", @"date", @"2.7", @"time", @"4.2MB", @"size", @"200*400", @"pix", nil];
    dict6 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Mon, 11 Dec #6", @"date", @"4.7", @"time", @"2.2MB", @"size", @"500*200", @"pix", nil];

    //[cells addObject:dict1];
    //[cells addObject:dict2];
    //[cells addObject:dict3];
    //[cells addObject:dict4];
    //[cells addObject:dict5];
    //[cells addObject:dict6];
}  

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return [cells count];

}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{   cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    //cell.contentView.frame = CGRectMake(0.0f, 0.0f, 320.0f, 80.0f);
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

    UIImageView *image1 = [[UIImageView alloc]init];
    image1.frame = CGRectMake(0.0f, 0.0f, 80.0f, 80.0f);
    image1.tag = tag7;

    UILabel *dateLabel = [[UILabel alloc]init];
    dateLabel.frame = CGRectMake(100.0f, 5.0f, 120.0f, 25.0f);
    dateLabel.font = [UIFont fontWithName:@"Georgia" size:10];
    dateLabel.tag = tag1;

    UILabel *timeLabel = [[UILabel alloc] init];
    timeLabel.frame = CGRectMake(100.0f, 30.0f, 40.0f, 25.0f);
    timeLabel.font = [UIFont fontWithName:@"Georgia" size:10];
    timeLabel.tag = tag2;

    UILabel *sizeLabel = [[UILabel alloc] init];
    sizeLabel.frame = CGRectMake(160.0f, 30.0f, 40.0f, 25.0f);
    sizeLabel.font = [UIFont fontWithName:@"Georgia" size:10];
    sizeLabel.tag = tag3;

    UILabel *pixLabel = [[UILabel alloc] init];
    pixLabel.frame = CGRectMake(220.0f, 30.0f, 40.0f, 25.0f);
    pixLabel.font = [UIFont fontWithName:@"Georgia" size:10];
    pixLabel.tag = tag4;

    UILabel *shareLabel = [[UILabel alloc] init];
    shareLabel.frame = CGRectMake(100.0f, 55.0f, 100.0f, 25.0f);
    shareLabel.font = [UIFont fontWithName:@"Georgia" size:10];
    shareLabel.tag = tag5;

    UILabel *deleteLabel = [[UILabel alloc] init];
    deleteLabel.frame = CGRectMake(220.0f, 55.0f, 100.0f, 25.0f);
    deleteLabel.font = [UIFont fontWithName:@"Georgia" size:10];
    deleteLabel.tag = tag6;

    [cell.contentView addSubview:dateLabel];
    [cell.contentView addSubview:timeLabel];
    [cell.contentView addSubview:sizeLabel];
    [cell.contentView addSubview:pixLabel];
    [cell.contentView addSubview:shareLabel];
    [cell.contentView addSubview:deleteLabel];
    [cell.contentView addSubview:image1];

    [dateLabel release];
    [timeLabel release];
    [sizeLabel release];
    [pixLabel release];
    [shareLabel release];
    [deleteLabel release];
    [image1 release];
}

// Set up the cell...

[(UILabel *)[cell viewWithTag:tag1] setText:[cells objectAtIndex:[dict1 objectForKey: @"date"]]];
[(UILabel *)[cell viewWithTag:tag2] setText:[cells objectAtIndex:[dict1 objectForKey: @"time"]]];
[(UILabel *)[cell viewWithTag:tag3] setText:[cells objectAtIndex:[dict1 objectForKey: @"size"]]];
[(UILabel *)[cell viewWithTag:tag4] setText:[cells objectAtIndex:[dict1 objectForKey: @"pix"]]];
[(UILabel *)[cell viewWithTag:tag5] setText:@"Share"];
[(UILabel *)[cell viewWithTag:tag6] setText:@"Delete"];
 cell.imageView.image = [UIImage imageNamed:@"image2.png"];

return cell;
}

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

我是以上述方式做的,但它无法正常工作。我知道错误在于访问值。但是,我无法理解怎么做? 谢谢。

1 个答案:

答案 0 :(得分:2)

你根本没有存储字典 - 只是字符串“dict1”,“dict2”,“dict3”等等。您正在使用的数组初始值设定项应该类似于

cells = [[NSMutableArray alloc] initWithCapacity:6];

我不确定你为什么要注释掉所有[cells addObject:dictionaryN];行,因为这是将字典添加到数组的正确方法;你还需要在每个之后都有[dictionaryN release];以防止内存泄漏。

要从数组中的字典中获取值,您需要在-tableView:cellForRowAtIndexPath:方法中执行以下操作:

NSDictionary *rowDictionary = [cells objectAtIndex:indexPath.row];
[(UILabel *)[cell viewWithTag:tag1] setText:[rowDictionary objectForKey:@"date"]];
[(UILabel *)[cell viewWithTag:tag2] setText:[rowDictionary objectForKey:@"time"]];
// etc.