UITableView每次都填充相同的值集

时间:2016-03-24 07:02:32

标签: ios objective-c uitableview

我使用以下代码将数据加载到tableview中。以下是我的代码,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = nil;
    cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"any-cell"];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"any-cell"];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        cell.layer.borderWidth = 1.0;
        cell.layer.cornerRadius = 10;
        cell.layer.borderColor = [UIColor blackColor].CGColor;

        UILabel* productAmountTextLabel = [[UILabel alloc]init];
        productAmountTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];
        productAmountTextLabel.frame = CGRectMake(0, 0, 100, 30); // for example
        productAmountTextLabel.tag = 10000; // any number
        [cell.contentView addSubview:productAmountTextLabel];
    }


    UILabel* lbl = (UILabel*)[cell.contentView viewWithTag: 10000];
    NSManagedObject *device = [self.devices objectAtIndex:indexPath.row];
    lbl.text = [device valueForKey:@"amount"];
    return cell;
}

问题是tableview的每个单元格显示相同的值。为什么会这样?

以下是我的viewdDidLoad方法,

- (void)viewDidLoad
{

    segmentedControl = [[URBSegmentedControl alloc]initWithTitles:titles icons:icons];


    NSError *Error = nil;
    APIRequest *apiRequest = [[APIRequest alloc]init];
    [apiRequest getPendingData];

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"PendingShipmentDetails"];
    self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"PendingShipmentDetails" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&Error];

    amountArray = [[NSMutableArray alloc] init];

    for (NSManagedObjectContext * info in fetchedObjects)

    {

        [amountArray addObject:[info valueForKey:@"amount"]];

    }

    segmentedControl.segmentBackgroundColor = [UIColor colorWithRed:86/255.0f green:199/255.0f blue:188/255.0f alpha:1];
    [segmentedControl addTarget:self action:@selector(handleSelection:) forControlEvents:UIControlEventValueChanged];

    NSLog(@"%@",self.devices);


    self.completedOrdersTableView.hidden = YES;
    [self.view addSubview:segmentedControl];
    [super viewDidLoad];

}

我在那里获取值并将其添加到数组中。

viewDidLoad内,它具有唯一的数据集,但在cellForRowAtIndexPath内,它具有多次重复的数据集。

2 个答案:

答案 0 :(得分:2)

感谢Michaël Azevedo帮我调试问题。我调试的方式是,我尝试记录indexpath.row和indexpath.section。我注意到,行总是0并且section是动态的(值更改)。

cellForRowAtIndexPath我正在设置参考indexpath.row的值,它始终为0。

然后我按如下方式更改了我的代码,

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.devices count];

}

所以现在numberOfRowsInSection不再为零了。因此,在访问它时,它不会多次获取相同的值集。

答案 1 :(得分:1)

我认为问题可能是您的数组名为" self.devices"。您的所有label.text都来自您的设备型号。您可以尝试打印self.devices来查看数组中的每个对象。