在重新加载之前删除表行

时间:2013-04-10 02:36:16

标签: ios uitableview

我想在重新加载数据之前删除表视图中的所有行,但似乎无法使其工作。

在我的viewcontroller中,我从此AFNetworking请求中获取了数组。

- (void)viewDidLoad
    [[LocationApiClient sharedInstance] getPath:@"locations.json" 
                                     parameters:nil 
                                        success:
                ^(AFHTTPRequestOperation *operation, id response) {
                    NSLog(@"Response: %@", response);
                    NSMutableArray *location_results = [NSMutableArray array];
                    for (id locationDictionary in response) {
                       Location *location = [[Location alloc] initWithDictionary:locationDictionary];
                       [location_results addObject:location];  
                    }
                    self.location_results = location_results;
                    [self.tableView reloadData];
                    }
                                    failure:
                ^(AFHTTPRequestOperation *operation, NSError *error) {
                    NSLog(@"Error fetching locations!");
                    NSLog(@"%@", error);
                }];  
}

我想删除数据,然后使用此按钮重新加载

- (IBAction)locationPressed:(id)sender {

    [[Location sharedSingleton].locationManager startUpdatingLocation];
    [self viewDidLoad];
    NSMutableArray *location_results = [NSMutableArray array];
    [location_results removeAllObjects];
    [self.tableView reloadData];

}

但它并没有删除行。我看到重新加载发生在已存在的行的顶部。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

不要手动拨打viewDidLoad

创建一个类似

的方法
- (void)reloadDataWithCompletion:(void(^)(NSArray *locations))completion
                         failure:(void(^)(NSError *error))failure {
    [[LocationApiClient sharedInstance] getPath:@"locations.json" 
                                     parameters:nil 
                                        success:
            ^(AFHTTPRequestOperation *operation, id response) {
                NSLog(@"Response: %@", response);
                NSMutableArray *location_results = [NSMutableArray array];
                for (id locationDictionary in response) {
                   Location *location = [[Location alloc] initWithDictionary:locationDictionary];
                   [location_results addObject:location];  
                }
                    if(completion)
                        completion(location_results);
                }
                                failure:
            ^(AFHTTPRequestOperation *operation, NSError *error) {
                if(failure)
                    failure(error);
            }];  
}

每当您需要重新加载数据时调用它

- (void)viewDidLoad {
    [super viewDidLoad]; // Don't forget the call to super!

    [self reloadDataWithCompletion:^(NSArray *locations) {
        self.location_results = locations;
        [self.tableView reloadData];
    } failure:^(NSError *error) {
        NSLog(@"Error fetching locations!");
        NSLog(@"%@", error);
    }];
}

- (IBAction)locationPressed:(id)sender {
    [[Location sharedSingleton].locationManager startUpdatingLocation];
    [self reloadDataWithCompletion:^(NSArray *locations) {
        self.location_results = locations;
        [self.tableView reloadData];
    } failure:^(NSError *error) {
        NSLog(@"Error fetching locations!");
        NSLog(@"%@", error);
    }];
}

为了实现重新加载表格的图形效果,你可以做(​​假设你只有一个部分),替换

[self.tableView reloadData];

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];