Facebook의 iPhone 응용 프로그램에서 뉴스 피드가 응용 프로그램이 활성화 될 때마다 새로 고침됩니다. 비슷한 일을하고 싶지만 경쟁 조건이 걱정됩니다. 다음과 같이 내 응용 프로그램의 일반적인 부트 스트랩은 다음과 같습니다응용 프로그램이 활성화 될 때보기를 새로 고치는 경주 조건
UIApplicationDelegate에게
- (void)applicationDidFinishLaunching:(UIApplication*)application
{
[window addSubview:[self.navigationController view];
[window makeKeyAndVisible];
}
- (void)applicationDidBecomeActive:(UIApplication*)application
{
[rootViewController refresh];
}
RootViewController 사방 NSLog
을 뿌리 후, 나는 될 작업의 순서를 결정
#pragma mark custom
- (void)refresh
{
if (self.newsFeedModel == nil) {
self.newsFeedModel = [[NewsFeedModel alloc] initWithDelegate:self];
}
[self.newsFeedModel request];
}
#pragma mark UIViewController
- (void)viewDidLoad
{
// initialize the table
// add subviews and whatnot
}
#pragma mark NewsFeedDelegate
- (void)newsFeedSucceeded:(NSMutableArray*)feed
{
// reload table view with new feed data
}
:
를- applicationDidBecomeActive
- 새로 고침을 아래 applicationDidFinishLaunching 6,
- 의 viewDidLoad
- newsFeedSucceeded 루트 뷰가로드되기 전에 새로 고침 호출하는 방법을
알 수 있습니다. 우리가 서버에 질의하는 동안 바쁜 동안 루트보기가로드됩니다. 서버가 응답하면 루트보기에 피드가 채워집니다. 이 작업은 네트워크 작업이 오래 걸리기 때문에 대부분의 경우에 효과적입니다. 그러나 네트워크 작업이 뷰를로드하는 것보다 빠르게 완료되면 뷰가로드되기 전에 뉴스 피드를 구성하려고 시도 할 것입니다. 이것은 나쁠 것입니다. 이 경쟁 조건을 해결하기위한 최고의 코코아 터치 연습은 무엇입니까? 나는 상태에 따라 우리가 어떤 상태에 있는지를 결정하고 상태에 따라 뉴스 피드를 새로 고치기 위해 많은 플래그를 설정할 것입니다.하지만이 문제를 처리하기 위해 코코아 터치에 이벤트가 내장되어 있는지 궁금합니다.
응용 프로그램 ** 것이다 ** EnterForeground이보기 * *이 화면에로드됩니다 만, 의미합니다 그것을하지 * 현재 * 화면. 테이블보기가 화면에 표시되기 전에 조작하는 것이 안전합니까? – JoJo
[tableView reload]를 newsFeedSucceeded :에서 호출해도 문제가 없습니다. tableView는 datasource와 delegate 콜백을 통해 준비가되었을 때 데이터를 요청할 것입니다. – jaminguy