在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥
Posted
技术标签:
【中文标题】在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥【英文标题】:what is the best place to reload data in UITableView or UICollectionView in ios在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是什么 【发布时间】:2015-07-20 06:24:25 【问题描述】:我正在使用 AFNetworking 加载数据。就我而言,我将数据加载到集合视图中。 我在自定义方法中加载数据,并在其中重新加载 collectionview 数据。 我在 viewDidLoad 方法中调用了这个方法。为什么我要问这个,加载数据需要更多时间。我认为这是因为我重新加载collectionview数据的地方。我想知道,我可以通过以viewwillappear或任何其他方法重新加载collectionview数据来加快这个过程。希望你的帮助。谢谢
- (void)viewDidLoad
[super viewDidLoad];
[self loadcategoryData];
SWRevealViewController *revealcontroller = self.revealViewController;
if (revealcontroller)
[self.sideBarbutton setTarget:self.revealViewController];
[self.sideBarbutton setAction:@selector(revealToggle:)];
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
// Do any additional setup after loading the view.
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
- (void)viewDidAppear:(BOOL)animated
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
- (void)viewDidDisappear:(BOOL)animated
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (void)loadcategoryData
post = nil;
NSString *mainurl = [NSString stringWithFormat:@"some url"];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
[manager GET:mainurl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
posts = (NSDictionary *)responseObject;
post = [NSMutableArray array];
for(NSDictionary *all in posts)
Categories *category = [Categories new];
category.title = [all objectForKey:@"catname"];
category.firsturl = [all objectForKey:@"url"];
[self.maincollectionView reloadData];
//call for images
imagespost = nil;
NSString *imageUrl = [NSString stringWithFormat:@"%@", category.firsturl];
AFHTTPRequestOperationManager *managerone = [AFHTTPRequestOperationManager manager];
[managerone GET:imageUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject)
imagesposts = (NSDictionary *)responseObject;
NSArray *resultone = [imagesposts objectForKey:@"posts"];
imagespost = [NSMutableArray array];
if ([resultone count])
NSDictionary *firstpost = resultone[0];
// Categories *newmogocat = [Categories new];
NSDictionary *thumbnail_images = [firstpost objectForKeyedSubscript:@"thumbnail_images"];
NSDictionary *thumbnail = [thumbnail_images objectForKey:@"thumbnail"];
category.imageOneUrl = [NSString stringWithFormat:@"%@",[thumbnail objectForKey:@"url"]];
// NSLog(@"%@", newmogocat.imageOneUrl);
// [imagespost addObject:newmogocat];
[post addObject:category];
[self.maincollectionView reloadData];
failure:^(AFHTTPRequestOperation *operation, NSError *error)
//
// UIAlertView *erroralert = [[UIAlertView alloc] initWithTitle:@"Something Wrong!" message:[NSString stringWithFormat:@"%@", error.localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
// [erroralert show];
];
failure:^(AFHTTPRequestOperation *operation, NSError * responseObject)
];
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
return 1;
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return [post count];
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
CategoryCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellidentifier" forIndexPath:indexPath];
// cell.layer.borderWidth = 2.0f;
cell.layer.masksToBounds = NO;
cell.layer.cornerRadius = 5.0;
cell.layer.borderColor = [UIColor lightGrayColor].CGColor;
cell.layer.shadowOffset = CGSizeMake(0, 1);
cell.layer.shadowRadius = 4.0;
cell.layer.shadowColor = [UIColor darkGrayColor].CGColor;
[cell addSubview:cell.maintitleLabel];
Categories *cat = [post objectAtIndex:indexPath.row];
[self.maincollectionView reloadInputViews];
cell.maintitleLabel.text = [NSString stringWithFormat:@" %@ ", cat.title];
[cell.maintitleLabel sizeToFit];
NSString *mainstring = [NSString stringWithFormat:@"%@", cat.imageOneUrl];
NSURL *url = [NSURL URLWithString:mainstring];
//
[cell.mainImageView setImageWithURL:url placeholderImage:nil];
//
return cell;
【问题讨论】:
【参考方案1】:您可以开始加载数据的最早时间是在 init 方法中。但老实说,大多数时候他们在彼此之后被如此迅速地调用,你可能甚至不会注意到差异。但是,如果您有兴趣,请在此处输入:
- (id)init
self = [super init];
if (self)
[self loadcategoryData];
return self;
另外我不知道你下载了多少数据,但如果你正在加载一个长列表并且需要很长时间,那么也许你应该考虑进行“分页”(即只下载数据的子部分和然后在用户向下滚动页面时请求更多。
【讨论】:
我怎样才能进行分页,你能告诉我怎么做吗?我是 ios @villy393 的新手 嗯,它更多地取决于提供结果的服务器而不是您。例如,您加载页面,然后请求 20 个结果。当用户滚动超过某个点时,您会请求下一组 20 个结果。所以你需要想出一些方法来告诉你的服务器你想要更多的结果以及你想要的结果页面。检查这个家伙无限滚动项目的代码:github.com/JigarM/Infinite-UIITableview-Scroll(注意它全部在 Swift 中) 或查看jslim.net/blog/2014/04/01/infinite-scroll-using-on-uitableview 仅适用于 swift。无论如何thanx @villy393以上是关于在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中嵌入不同数量的项目的 UICollectionViews 索引超出范围
在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥
用户界面编译器 (Uic) qt3 与 qt4/5,impl 参数等价
iOS UITableView 滑动时顺序混乱或多个cell内容相同