-1

我有一个从远程数据库中获取的字符串列表,它们显示得很好。然后,当我添加一个字符串时,该新字符串会很好地添加到数据库中,但是当需要在屏幕上显示它时,由于某种原因,它会同时显示第一项和最后一项中的第一项的值。

这是我正在做的事情:

// CREATING EACH CELL IN THE LIST
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"business";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17];
        cell.textLabel.numberOfLines = 0;
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
    }

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


    // CLOSE THE SPINNER
    [spinner stopAnimating];

    // return the cell for the table view
    return cell;
}

当从数据库中检索数据时,这就是我所做的:

            dispatch_sync(dispatch_get_main_queue(), ^{

                items_array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

                if(!error){
                    [self loadTitleStrings];
                }

                [self.itemList reloadData];
            });

这是调用的 loadTitleStrings

-(void)loadTitleStrings
{
    if(!standardUserDefaults)
    standardUserDefaults = [NSUserDefaults standardUserDefaults];
    NSString *is_private = [standardUserDefaults objectForKey:@"is_private"];

    if(!cellTitleArray)
    {
        cellTitleArray = [NSMutableArray array];
    }

    for(NSDictionary *dictionary in items_array)
    {
        NSString *tcid = [dictionary objectForKey:@"comment_id"];        
        [theArray addObject:tcid];

        NSString *string;
        if(!is_private || [is_private isEqualToString:@"0"])
        {
            string = [NSString stringWithFormat:@"%@: %@", [dictionary objectForKey:@"first_name"], [dictionary objectForKey:@"comment"]];
        }
        else
        {
            string = [NSString stringWithFormat:@"%@", [dictionary objectForKey:@"comment"]];
        }
        [cellTitleArray addObject:string];
    }
}

谁能说出为什么最后一项显示为第一项的值?我真的很难过!

谢谢!

4

1 回答 1

1

我猜 cellTitleArray 是一个实例变量?如果是这样,第二次调用 loadTitleStrings(在将新字符串添加到远程数据库并再次获取所有字符串之后),cellTitleArray 将是您当前使用的。也许您再次添加所有字符串。如果是这种情况,您可以在 -loadTitleStrings 中的 foreach 循环之前添加 [cellTitleArray removeAllObjects]。

而且,也许在你的第二个字符串中发生了一些错误。我认为作为您的代码做这件事不是一个好主意:

items_array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

if(!error){
   [self loadTitleStrings];
}

您将 nil 传递给错误参数,当然错误将为 nil。当错误发生时,您无法被告知。试试这个看看是否有错误:

NSError *error = nil;
items_array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

if(!error){
   [self loadTitleStrings];
} else {
    NSLog(@"%@",error);
}
于 2012-12-17T23:01:00.030 回答