我正在尝试将SVProgressHUD与cocoapods一起使用。我已经在我的xcode工作区中安装了大量的在线教程。使用起来似乎很简单,但我无法让它工作。这里我的代码从rottentomatoes应用程序加载数据。我希望在网络请求正在执行其操作时显示“正在加载”。我想知道这是否是ui线程问题?我在网络请求中添加了一个睡眠,因为结果回来的速度太快了!
- (void) reload{
[SVProgressHUD showWithStatus:@"Updating" maskType:SVProgressHUDMaskTypeBlack];
NSString *url = @"http://api.rottentomatoes.com/api/public/v1.0/lists/dvds/top_rentals.json?";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
[NSThread sleepForTimeInterval:3];
NSDictionary *object = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSMutableArray *array = [[NSMutableArray alloc]initWithArray:[object objectForKey:@"movies"]];
self.movies = [[NSMutableArray alloc]init];
for(NSDictionary *item in array){
SFMovie *movie = [[SFMovie alloc]initWithDictionary:item];
[self.movies addObject:movie];
}
[SVProgressHUD dismiss];
[self.tableView reloadData];
}];
}
编辑评论: 在两个init方法上都调用了重载(因为我在这个项目中使用了storyboard)
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[self reload];
}
return self;
}
- (id) initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if(self){
[self reload];
}
return self;
}
第二次编辑: 我添加了一个下拉刷新,当我拉下桌面视图时,“更新...”显示出来。但它没有出现在init上。
- (void)viewDidLoad
{
[super viewDidLoad];
UIRefreshControl *refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to refresh..."];
self.refreshControl = refreshControl;
}
- (void)refresh:(UIRefreshControl *)sender{
[self reload];
[sender endRefreshing];
}
所以我想我不能在init方法上运行UI东西,因为视图还没准备好。我现在在viewdidload上调用reload方法,它工作文件。谢谢约翰!
答案 0 :(得分:0)
在任何init
方法中,弄乱视图层次结构都是棘手的事情 - 将该逻辑保留在viewDidLoad
中以避免任何这些修改被擦除(特别是从故事板初始化)。