NSUserDefaults + NSMutableArray - >在tableview中存储2个数组并显示

时间:2012-12-31 11:39:34

标签: iphone ios uitableview

我刚刚使用tableview在我的应用中实现了一个书签/收藏夹功能,来自NSUserDefaults的收藏夹,代码如下。单元格有2个标签,项目名称和价格 - 存储在数组中 - theArraythePriceArray - >像这样:

enter image description here

    NSIndexPath *indexPath = [_ListTableView indexPathForCell:(UITableViewCell *)     [[sender superview] superview]];


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *OrderList = [[defaults objectForKey:ORDER_KEY] mutableCopy];
    if (!OrderList) OrderList = [NSMutableArray array];
    [OrderList addObject:[theArray objectAtIndex:indexPath.row]];
    [OrderList addObject:[thePriceArray objectAtIndex:indexPath.row]];
    [defaults setObject:OrderList forKey:ORDER_KEY];
    [defaults synchronize];

我现在正在添加两个数组theArray& thePriceArrayNSMutableArray。我现在想要在另一个tableview中显示这些信息(来自arraies的信息)。我是这样做的:

在我的viewDidAppear

    NSUserDefaults *defaults = kSettings;


    NSMutableArray *theOrderList = [NSMutableArray arrayWithArray:[defaults objectForKey:ORDER_KEY]];

并在tableview

中显示内容
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [theOrderList count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

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

    cell.textLabel.text = [theOrderList objectAtIndex:indexPath.row];



    return cell;
}

这几乎按照我的意愿运作,显示了theArraythePriceArray的内容,但是在如下的长列表中显示:

enter image description here

我希望“键和值”在一个单元格中,因此一个单元格中的价格和项目名称(Hat - 30)而不是单独的,我该怎么做?我曾尝试使用NSDictionary,但没有运气,我可以使用NSDictionary吗?

3 个答案:

答案 0 :(得分:1)

您可以为favItem和favPrize创建两个新数组。只需将您喜欢的项目添加到favItem数组,并将最喜欢的奖品添加到favPrize数组。现在使用这些数组来设置Tableview的标签和detailLabel,如:

cell.textLabel.text = [favItems objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [favPrize objectAtIndex:indexPath.row];

答案 1 :(得分:1)

保持数组theArraythePriceArray seperate并使用一个作为tableView数据源的主数组。

注意:将NSUserDefault中的数据添加到相应的数组中。

现在方法将是:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [theArray count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

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

    cell.textLabel.text = [theArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [thePriceArray objectAtIndex:indexPath.row];
    return cell;
}

答案 2 :(得分:1)

您只需使用以下代码即可:

NSString *label = [NSString stringWithFormat:@"%@    %@",[theOrderList objectAtIndex:(indexPath.row * 2)],[theOrderList objectAtIndex:(indexPath.row * 2)+1]
cell.textLabel.text = label;

并改变你的numberOfRowsInSection喜欢:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [theOrderList count]/2;
}