- (void)viewDidLoad
{
pageNum=0;
self.imageArray =[[NSMutableArray alloc]init];
NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.truemanindiamagazine.com/webservice/news.php?page=%d",pageNum]];
}
dispatch_async(kBgQueue, ^{
data = [NSData dataWithContentsOfURL: url];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
}
-(void)fetchedData:(NSData *)responsedata
{
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.frame = CGRectMake(0, 0, 320, 44);
self.newsTable.tableFooterView = spinner;
if (responsedata.length > 0)
{
[spinner startAnimating];
NSError* error;
self.json = [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error];
if ([[_json objectForKey:@"data"] isKindOfClass:[NSArray class]])
{
NSArray *arr = (NSArray *)[_json objectForKey:@"data"];
[self.imageArray addObjectsFromArray:arr];
[self.newsTable reloadData];
NSLog(@"images,%@",self.imageArray);
}
self.newsTable.hidden=FALSE;
}
表视图滚动码是
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSInteger currentOffset = scrollView.contentOffset.y;
NSInteger maximumOffset = scrollView.contentSize.height- scrollView.frame.size.height;
if (maximumOffset - currentOffset <= 0)
{
pageNum = pageNum + 1;
[self getData];
}
}
-(void)getData
{
NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.truemanindiamagazine.com/webservice/news.php?page=%d",pageNum]];
dispatch_async(kBgQueue, ^{
data = [NSData dataWithContentsOfURL:url];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}
如果可能,请给我解决方案。第二个问题是当我滚动表格视图然后它给我所有剩余页面数据然后我想要当我滚动然后我得到第二页数据和当我下次滚动然后我得到第三页数据如果任何可能性做一些时间间隔加载下一页的JSON数据?
答案 0 :(得分:1)
从服务器获得响应后,如果其县为零则检查响应数组计数,然后使spinner停止动画并将微调器隐藏为yes。在else条件下,如果响应数组计数大于零,则使spinner开始动画,并将spinner隐藏为no。我希望这会对你有所帮助。我完成了这样的应用程序并且完美地为我工作。我也称我的申请为分页。 此外,如果arraycount为零,您可以按照代码
后面的tableview页脚self.theTable.tableFooterView = [UIView new];
或
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
所有最好的@Ashish Gabani
答案 1 :(得分:1)
您可以在fetchData方法的末尾添加[spinner stopAnimating]
。如果你完成提取数据,你想停止动画,对吧?另外,我认为你应该在getData
中调用startAnimating方法。
要执行此操作,只需将微调器添加为viewController中的私有属性,然后在getData
中开始设置动画,然后在fetchData
的末尾停止它。
作为一般建议,而不是执行选择器。看看NSURLSessionDownloadTask
并使用一个块来检索json调度到主队列。