2014-02-07 101 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

相關問題