我的应用程序从URL获取数据。我使用NSURLSession异步下载数据。 数据将在Tableview中重新排列和显示。所以一切都需要在viewDidload上做好准备。
问题是,异步平均数据准备将比主线程的速度慢1秒。
查看已加载,Tableview获得0数据,并显示0数据。
1秒后,第二个线程运行完成处理程序,并将数据从Internet存储到@property中。
但是tableView是用NOTHING DISPLAY加载的,它需要RELOAD。
是的,我可以解决这个问题,我只需要调用[self.delegate.tableView reloadData];在GDC主线程内部(这是完成处理程序内部)但是它违反了MVC模式!
所以我需要找出第二个解决方案,让ViewController为自己的Model实现委托,因此GDC中的代码将是 [self reloadTableViewData]; 而不是 [self。 delegate.tableView reloadData]
这些 - (void)reloadTableViewData将由Viewcontroller实现
不幸的是,我的第二个解决方案因"无法识别的选择器发送到实例Model"
而失败1)使用异步数据URL提取重新加载TableView的正确解决方案,如何通知并让视图控制器知道"您的数据准备就绪,重新加载"
2)为什么我的第二个解决方案失败了? (我的代表怎么了?它似乎是我代表的错误原因)
这是我的第二个解决方案的基本代码测试,相同的错误"无法识别的选择器发送到实例...."
Viewcontroller.h
#import <UIKit/UIKit.h>
@class Protocol_Holder;
@interface ViewController : UIViewController
@property (strong ,nonatomic) Protocol_Holder* holderObject;
@end
Viewcontroller.m
#import "ViewController.h"
#import "Protocol_Holder.h"
@interface ViewController () <myDelegate>
@end
@implementation ViewController
-(Protocol_Holder*) holderObject{
if(!_holderObject){
_holderObject = [[Protocol_Holder alloc]init];
}
return _holderObject;
}
- (IBAction)ReloadButton:(UIButton *)sender {
NSLog(@"Button Pushed");
[self.holderObject reload_container];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.holderObject.delegate = self;
}
-(void) reload_Model{
// this is where [self.tableView reloadData] should begin;
NSLog(@"Enemy Reload Reload Reload Reload!!");
}
@end
Protocol_Holder.h
#import <Foundation/Foundation.h>
protocol myDelegate <NSObject>
-(void) reload_Model;
@end
@interface Protocol_Holder : NSObject {id<myDelegate> delegate;}
@property (weak,nonatomic) id<myDelegate> delegate;
-(void) reload_container;
@end
Protocol_Holder.m
#import "Protocol_Holder.h"
@interface Protocol_Holder() <myDelegate>
@end
@implementation Protocol_Holder
-(void) reload_container{
[self reload_Model];
}
@end
答案 0 :(得分:0)
wrong
ready
所有内容都必须viewDidload
,因为request
downloading
data
将own time
depending
} connectivity
show activity indicator
displaying message
Please wait as downloding neccessary data
Downloading request
viewDidload
。{/ 1>
可以在tableView
方法
header
此外,您的displaying
应该message
no records
download completes
reload tableView
。
当download fails
时,您可以alert user
或displaying appropriate message
然后{{1}} {{1}}