Разбиение на страницы в объекте-c UITableViewController

116
5

Я пытаюсь сделать разбивку на страницы с помощью этого кода. Но когда я прокручиваю нижнюю часть, она будет составлять 50-60 страниц. Что я делаю неправильно.

NSInteger pagesNumber = 1;
- (void)api {
AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
[securityPolicy setAllowInvalidCertificates:YES];

NSString *urlPath = [NSString stringWithFormat:@"http://test.com/api/index.php"];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *parameters = @{@"process":@"search_customer",@"page": [NSString stringWithFormat:@"%d",pagesNumber]};

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

[manager setSecurityPolicy:securityPolicy];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:urlPath parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSError *error = nil;
NSData *jsonData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

self.customerCards = [NSMutableArray array];
NSArray *customersArray = [dataDictionary objectForKey:@"musteri_list"];

for (NSDictionary *customersDictionary in customersArray) {
ApiClass *customer = [ApiClass customersWithTitle:[customersDictionary objectForKey:@"adi"]];
customer.tel = [customersDictionary objectForKey:@"tel"];

NSLog(@"%@",customer.tel);

[self.customerCards addObject:customer];

}

[self.tableView reloadData];

NSLog(@"GET: %@", string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}

И это мой метод scrollViewDidScroll.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView_ {
if(self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height))
{
pagesNumber = pagesNumber + 1;
[self api];
}
}

Итак, что мне делать в этом разделе. И когда я прокручиваю данные Up, они отсутствуют. Он показывает currentPageData.

благодаря

спросил(а) 2021-01-25T15:57:28+03:00 4 месяца, 3 недели назад
1
Решение
124

Declaration:
NSInteger pagesNumber = 1;

Call "api" method from viewDidLoad, to load data:

- (void)api {
AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
[securityPolicy setAllowInvalidCertificates:YES];

NSString *urlPath = [NSString stringWithFormat:@"http://test.com/api/index.php"];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *parameters = @{@"process":@"search_customer",@"page": [NSString stringWithFormat:@"%d",pagesNumber]};

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

[manager setSecurityPolicy:securityPolicy];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:urlPath parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSError *error = nil;
NSData *jsonData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

self.customerCards = [NSMutableArray array];
NSArray *customersArray = [dataDictionary objectForKey:@"musteri_list"];

for (NSDictionary *customersDictionary in customersArray) {
ApiClass *customer = [ApiClass customersWithTitle:[customersDictionary objectForKey:@"adi"]];
customer.tel = [customersDictionary objectForKey:@"tel"];

NSLog(@"%@",customer.tel);

[self.customerCards addObject:customer];

}

[self.tableView reloadData];

NSLog(@"GET: %@", string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}

//instead of using scrollViewDidScroll better use willDisplayCell:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if(self.customerCards.count>1){
if(indexPath.row == self.customerCards.count-1){
pagesNumber=pagesNumber+1;

[self api];
}
}
}

ответил(а) 2021-01-25T15:57:28+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема