-[NSRunLoop runUntilDate:]
으로 전화하는 것이 일반적입니까? 아무런 문제없이 작동하는 것처럼 보이지만 실행 루프 내에서 실행 루프를 실행하도록 신경 쓰게 만듭니다.- [NSRunLoop runUntilDate :]를 호출하는 것이 좋습니다.
상세 정보 :
내가 지금 프로젝트를 가질 수는 REST 서비스에서 데이터를 가져 오는 있습니다. 획득해야 할 중요한 정보 중 하나는 유효한 데이터가있는 날짜의 범위입니다. 한 번만 가져올 필요가있는 매우 작은 데이터이기 때문에 로컬 변수가 nil
인 경우 데이터를 다운로드하는 것이 가장 좋은 방법이라고 판단했습니다. ASIHTTPRequest
과 ASINetworkQueue
을 사용하고 있으므로 모든 것이 기본적으로 비동기이며이 작업을 수행하려면 데이터가 다운로드되어 처리 될 때까지이 속성을 반환 할 수 없습니다. 여기에 내 코드의 개요이다, 변수의 이름은 무죄를 보호하기 위해 변경되었습니다 :
__block BOOL isWorking = YES;
__block ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:/*actual URL*/] autorelease];
[request setCompletionBlock:^{
// set local variable
isWorking = NO;
}];
[request setFailedBlock:^{
// show alert to user
isWorking = NO;
}];
[queue addOperation:request];
while (isWorking) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
는 다시, 이것은 잘 작동하는 것 같군. 이 접근법을 사용할 때 잠재적 인 문제점이 있습니까?
그래서,이 경우 소리 이 속성은 데이터를 다운로드하는 중일 때 사용합니다. 그러나 사용자가 통화 중일 때 버튼을 눌렀다가 다시 해당 부동산에 전화를 걸면 상황이 악화 될 수 있습니다. 알아 둘만한. –
이 속성은 모든 UI 메서드 또는 대리자에 의해 직접 또는 간접적으로 사용됩니까? 그렇다면 여전히 큰 문제입니다. – hotpaw2
UI가 사용자에게 표시되기 전에 앱이 처음로드 될 때만이 코드가 한 번만 나타납니다. 그 후에 데이터가 거기에있을 것이고 로컬 변수를 사용할 것입니다. 어떤 이유로 든 데이터를 다운로드 할 수 없으면 사용자에게 모달 경고를 표시하고 성공적으로 다운로드 될 때까지 앱에 들어갈 수 없습니다. –