每次加载时,Tableview单元都会重新加载多个表格单元格

时间:2016-03-23 06:31:28

标签: ios objective-c uitableview

我正在制作如下的获取请求,

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"PendingShipmentDetails"];
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"PendingShipmentDetails" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

然后我在viewDidLoad方法...

中将获取的记录添加到数组中
NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error];
    if (result.count > 0) {
        int i;
        amountArray = [[NSMutableArray alloc] init];
        statusArray = [[NSMutableArray alloc]init];
        shipmentReferenceNumberArray = [[NSMutableArray alloc]init];
        invoiceNumberArray = [[NSMutableArray alloc]init];
        for (i = 0; i < [result count]; i++) {
            pending = (NSManagedObject *)[result objectAtIndex:i];
            [shipmentReferenceNumberArray addObject:[pending valueForKey:@"shipmentno"]];
            [invoiceNumberArray addObject:[pending valueForKey:@"invoice_no"]];
            [amountArray addObject:[pending valueForKey:@"amount"]];
            [statusArray addObject: [pending valueForKey:@"status"]];
        }

    } else {
        NSLog(@"SORRY");
    }

问题在于,由于在for循环中添加对象,因此每次导航时,表单元格都会多次填充相同的值。但是,如果我在for循环外添加元素到数组,则只添加一个元素,因此任何时候只能看到一个表格单元格。如何排除此问题?

3 个答案:

答案 0 :(得分:1)

一旦所有元素都添加到数组中,然后重新加载tableView,那么它将返回行计数作为数组的计数,并为每个元素填充一次数据。

答案 1 :(得分:1)

+ (NSArray *)fetchCoreData 
{

    AppDelegate * app = [[UIApplication sharedApplication]delegate];
    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription * entity = [NSEntityDescription entityForName:@"PendingShipmentDetails" inManagedObjectContext:app.managedObjectContext];

    [fetchRequest setEntity:entity];

    NSError * error;
    NSArray * fetchedObjects = [app.managedObjectContext executeFetchRequest:fetchRequest error:&error];

    NSLog(@"Saved Data %@", fetchedObjects);

    if (fetchedObjects != nil) {
        return fetchedObjects;
    }else{
        return nil;
    }
}

试试这个......我的模态类中有这个方法fetchCoreData。这对我来说非常适合。

将获取的数据添加到数组中。

答案 2 :(得分:0)

你的方向非常错误 您可以使用enumerateObjectsUsingBlock

而不是使用for循环
[ChildList enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {

        Child = (ChildListModel*)[[ObjectBuilder builder] objectFromJSON:obj className:NSStringFromClass([ChildListModel class])];

        if (Child) {
            [originalList addObject:Child];
        }
    }];