viewDidLoad在applicationDidFinishLaunching之前调用

时间:2014-02-07 16:59:01

标签: ios uitableview appdelegate

我有一个问题,我自己无法解决。在用户可以看到视图(UITableViewController)之前,我必须从我的Web服务器下载数据,因此在UITableView应该可见时,它应该有要显示的内容。问题是,我开始在applicationDidFinishLaunching中下载数据,我在NSLogs viewDidLoadapplicationDidFinishLaunching中有NSLogs,有趣的是viewDidLoadNSLogs的{​​{1}}之前调用applicationDidFinishLaunching(在下载完所有数据后写入NSLogs)。

我完成数据下载后,我有一个NSMutableArray我从AppDelegate传递到TableViewController,但tableViewController显示为空,因为{{在下载所有数据之前调用1}}。

然后我有一个问题:我应该在加载ViewDidLoad之前下载所有数据?

我一直在考虑的解决方案:我考虑创建另一个TableView(这将是主视图),其中ViewController的图像为“正在加载” ......“:我在那里下载了我需要的所有数据,并将所有数据存储到UIImageView。下载数据后,我拨打NSMutableArray,然后将UITableViewController传递给NSMutableArray。我相信这个解决方案可行,但它必须是解决这个问题的一种更简单的方法。

1 个答案:

答案 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];

}

我希望它有所帮助。 :)