2014-02-07 2 views
1

나는 스스로 해결할 수없는 문제가 있습니다. 사용자가보기 (UITableViewController)를보기 전에 내 웹 서버에서 데이터를 다운로드해야하므로 UITableView이 표시되어야 할 때 표시 할 콘텐츠가 있어야합니다. 문제는 내가 applicationDidFinishLaunching의 데이터를 다운로드를 시작, 내가 viewDidLoadNSLogs을 가지고 applicationDidFinishLaunching에서 재미있는 점은 applicationDidFinishLaunching (그 NSLogsNSLogs 모든 데이터가 직후에 쓴하기 전에 viewDidLoadNSLogs가 호출된다는 것입니다 다운로드).viewDidLoad before applicationDidFinishLaunching

내가 데이터를 다운로드 완료되면, 나는 내가 TableViewControllerAppDelegate에서 통과 NSMutableArray이 있지만 tableViewController 모든 데이터가 다운로드되기 전에 ViewDidLoad가 호출되기 때문에 완전히 빈 나타납니다.

다음 질문이 있습니다. TableView이로드되기 전에 어디에서 모든 데이터를 다운로드해야합니까? 에 대해 생각하고 I've

솔루션 : 나는 "...로드"이미지가 UIImageView로 (그것은 주요보기가 될 것이다) 또 다른 ViewController를 만드는 방법에 대해 생각 :이 나는 모든 데이터를 다운로드하는 필요하고 모든 데이터를 NSMutableArray에 저장합니다. 데이터가 다운로드 된 후 UITableViewController으로 전화를 걸어 NSMutableArrayUITableViewController으로 전달합니다. 나는이 솔루션이 효과가있을 것이라 확신하지만, 이것을 해결하는 더 쉬운 방법이다.

+0

중단 점을 사용하여 applicationDidFinishLaunching 전에 viewDidLoad가 호출되었는지 여부를 확인 했습니까? – san

답변

1

좋은 해결책은 다운로드가 끝나면 ViewController에 알려주는 대리자 메서드를 만드는 것입니다. 메소드 구현시 [yourTableView reloadData]를 호출합니다. 당신이 (YourDownloadClass.h에) 데이터를 다운로드하는 클래스에

는 :

[self.delegate requestDidFinishSuccessfully:resultArray]; 

지금, 당신의 TableViewClass로 이동 :

@protocol WebServiceConsumerDelegate 

//@required 
-(void) requestDidFinishSuccessfully:(NSArray*) resultArray; 

@end 

@interface YourDownloadClass : UIViewController 

@property (strong, nonatomic) id <WebServiceConsumerDelegate> delegate; 

그리고 YourDownloadClass.h에

당신은 데이터를 다운로드 직후. 시간 TableViewClass.m에 마지막으로

#import "YourDownloadClass.h" 

@interface TableViewClass : UITableViewController <WebServiceConsumerDelegate> 

:

나는 그것이 도움이되기를 바랍니다

-(void)requestDidFinishSuccessfully:(NSArray*) resultArray{ 

    //Get the objects of resultArray to use on your table view 

    [yourTableView reloadData]; 

} 

:

-(void)viewDidLoad{ 
[super viewDidLoad]; 

YourDownloadClass* delegateClass = [YourDownloadClass alloc] init]; 

// Or if you are downloading on AppDelegate: 
AppDelegate* delegateClass = [UIapplication sharedApplication]; 

delegateClass.delegate = self; 

} 

마지막으로, 방법을 구현한다. :)

+0

어떻게 그 방법을 만들 수 있습니까? – iOSAddicted

+0

방금 ​​내 대답을 편집했습니다 ... 확인해보십시오. – scollaco

+0

놀라운. 고맙습니다! – iOSAddicted