我有一个UITableViewController类,我在viewDidLoad方法中下载代码。 该代码可以吗?我不确定下载和显示内容。因为显示新闻需要花费大量时间,而且表格滚动滞后。对不起,我是目标C的新手。
@implementation NewsViewController
- (void)viewDidLoad
{
// _sidebarButton.tintColor = [UIColor colorWithWhite:0.96f alpha:0.2f];
_sidebarButton.target = self.revealViewController;
_sidebarButton.action = @selector(revealToggle:);
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
[super viewDidLoad];
[self getJSON];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return currentCellsCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CellForNews *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
id tempObject=[self.arrayOfNews objectAtIndex:indexPath.row];
cell.publishDate.text=tempObject[@"publish_date"];
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:tempObject[@"img_path"]]];
cell.newsImage.image=[UIImage imageWithData:data];
cell.descriptionOfThenews.text=tempObject[@"body"];
cell.titleOfTheNews.text=tempObject[@"publish_title"];
return cell;
}
-(void)getJSON{
NSString *path=@"example.com";
NSURL *url=[NSURL URLWithString:path];
NSString *dataJSON=[NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:Nil];
NSData *data=[dataJSON dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *rootDictionary=[NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:nil];
NSDictionary *newsDict=[rootDictionary objectForKey:@"publications"];
id marker=[[NSObject alloc]init];
self.arrayOfNews=(NSMutableArray*)[newsDict objectsForKeys:[newsDict allKeys] notFoundMarker:marker];
currentCellsCount=[newsDict allKeys].count;
}
答案 0 :(得分:3)
因为显示新闻需要花费大量时间 您应该考虑预加载数据。
并且表格滚动滞后。
这是因为您正在同步进行网络操作,这会阻止负责呈现UI元素的应用程序主线程。因此,您应该发送请求asynchronously。
好吧,一旦你理解了基础知识。更好地诉诸一个可以做更多事情的图书馆,比如AFNetworking。
我有一个UITableViewController类,我在viewDidLoad方法中下载代码。该代码可以吗?
我不能说这不好,不管它有效!但可能不太理想,那为什么会落后?
那么,我是否可以自由地回答您的问题,而是建议更好地设计应用程序的逻辑? 如果是这样,请继续阅读..
什么是viewDidLoad?以下是我们程序员用Seperation Of Concerns的古老技术开悟的地方,全球各地的iOS僧侣采用的一种形式是Model-View-Controller。因此,您应该寻找MVVM之类的路径。
一旦你有这些分离的数据新闻将从你的视图中完全分离,你就可以考虑加快它的加载技术。就像在初始化应用程序时加载它一样,或者使用基于UI的延迟加载模式Pull来刷新或其他任何东西。
答案 1 :(得分:0)
你使用NSOperation队列中的任何一个后台线程,GCD。
延迟加载是一个非常有名的例子,对你提供的内容很有帮助
示例应用
答案 2 :(得分:0)
这个伟大的指南就是我所需要的。谢谢你的回答!这真的有助于解决我的问题。 http://www.raywenderlich.com/59255/afnetworking-2-0-tutorial
答案 3 :(得分:0)
不要三思而后行。对于任何网络操作,请使用AFnetworking,并使用SDWebImage
进行任何Image Web加载