2014-02-07 107 views
1

我有一个问题,我无法自行解决。在用户可以看到视图(UITableViewController)之前,我必须从我的Web服务器下载数据,因此当UITableView应该可见时,它应该显示内容。问题是,我开始在applicationDidFinishLaunching下载数据,我有NSLogsviewDidLoadapplicationDidFinishLaunching,有趣的是,viewDidLoadNSLogsapplicationDidFinishLaunching(那些NSLogsNSLogs都写了刚刚毕竟数据是之前被称为下载)。viewDidLoad在applicationDidFinishLaunching之前调用

一旦我完成下载的数据,我有一个NSMutableArray,我从AppDelegateTableViewController通过,但tableViewController出现完全空的,因为所有的数据已被下载之前ViewDidLoad被调用。

然后我有1个问题:我应该在加载TableView之前下载所有数据的位置?

解决方案是从来就一直在思考:我想过创建另一个ViewController(这将是主视图)与UIImageView有像“载入中...”:还有我下载的所有数据我需要将所有数据存储到NSMutableArray。数据下载后,我打电话UITableViewController,我通过NSMutableArrayUITableViewController。我相信这个解决方案可以工作,但它必须是一个更简单的方法来解决这个问题。

+0

您是否尝试使用断点来查看viewDidLoad在applicationDidFinishLaunching之前是否会被调用? – san

回答

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

} 

我希望它能帮助。 :)

+0

我如何创建该方法? – iOSAddicted

+0

我刚编辑我的答案...检查出来 – scollaco

+0

令人惊叹。谢谢! – iOSAddicted

相关问题