我有一个问题,我自己无法解决。在用户可以看到视图(UITableViewController
)之前,我必须从我的Web服务器下载数据,因此在UITableView
应该可见时,它应该有要显示的内容。问题是,我开始在applicationDidFinishLaunching
中下载数据,我在NSLogs
viewDidLoad
和applicationDidFinishLaunching
中有NSLogs
,有趣的是viewDidLoad
在NSLogs
的{{1}}之前调用applicationDidFinishLaunching
(在下载完所有数据后写入NSLogs
)。
我完成数据下载后,我有一个NSMutableArray
我从AppDelegate
传递到TableViewController
,但tableViewController
显示为空,因为{{在下载所有数据之前调用1}}。
然后我有一个问题:我应该在加载ViewDidLoad
之前下载所有数据?
我一直在考虑的解决方案:我考虑创建另一个TableView
(这将是主视图),其中ViewController
的图像为“正在加载” ......“:我在那里下载了我需要的所有数据,并将所有数据存储到UIImageView
。下载数据后,我拨打NSMutableArray
,然后将UITableViewController
传递给NSMutableArray
。我相信这个解决方案可行,但它必须是解决这个问题的一种更简单的方法。
答案 0 :(得分:1)
一个好的解决方案是创建一个委托方法,在下载完成后告诉ViewController。在该方法的实现上,您调用[yourTableView reloadData]。
在课程中,您将下载数据(在YourDownloadClass.h上):
@protocol WebServiceConsumerDelegate
//@required
-(void) requestDidFinishSuccessfully:(NSArray*) resultArray;
@end
@interface YourDownloadClass : UIViewController
@property (strong, nonatomic) id <WebServiceConsumerDelegate> delegate;
在下载数据后立即访问YourDownloadClass.h:
[self.delegate requestDidFinishSuccessfully:resultArray];
现在,转到TableViewClass.h
#import "YourDownloadClass.h"
@interface TableViewClass : UITableViewController <WebServiceConsumerDelegate>
最后,在TableViewClass.m上:
-(void)viewDidLoad{
[super viewDidLoad];
YourDownloadClass* delegateClass = [YourDownloadClass alloc] init];
// Or if you are downloading on AppDelegate:
AppDelegate* delegateClass = [UIapplication sharedApplication];
delegateClass.delegate = self;
}
最后,实施方法:
-(void)requestDidFinishSuccessfully:(NSArray*) resultArray{
//Get the objects of resultArray to use on your table view
[yourTableView reloadData];
}
我希望它有所帮助。 :)