2013-04-10 3 views
1

Я хочу удалить все строки в моем представлении таблицы перед повторной загрузкой данных, но, похоже, не может заставить ее работать.удалить строки таблицы перед перезагрузкой

В моем контроллере view я получаю свой массив из этого запроса 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]; 

} 

Но это не удаление строк. Я вижу, что перезагрузка происходит поверх строк, которые уже есть. Какие-либо предложения?

ответ

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]; 
+0

Спасибо @Gabriele, это очень полезно. Где я должен называть removeAllObjects? Реализация ваших предложений по-прежнему не очищает представление таблицы перед повторной загрузкой. – jacobt

+0

@jacobt это зависит от того, чего вы хотите достичь? Вам нужен графический эффект исчезновения? Или просто перезагрузите всю таблицу? –

+0

Я хотел бы, чтобы графический эффект исчезновения при нажатии кнопки, а затем перезагрузка ячеек таблицы новыми данными. Является ли это возможным? Спасибо за вашу помощь! – jacobt

Смежные вопросы