내 앱에는 3 개의 화면이 있습니다. 첫 번째는 로그인입니다. 두 번째는 검색이고 세 번째는 작업을 처리하는 것입니다. 로그인 할 때 웹 서비스에서 데이터를 검색합니다. XML 형식의 데이터를 반환합니다. 따라서 데이터가 상당히 큽니다.iOS에서 두 개의 화면과 하나의 활동 표시기 다루기
이-(BOOL)loginEmp
{
.....some computation
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self getAllCustomerValues];
});
}
-(void)getAllCustomerValues
{
....more computation.Bring the data,parse it and save it to CoreData DB.
//notification - EDIT
NSNotification *notification =[NSNotification notificationWithName:@"reloadRequest"
object:self];
[[NSNotificationCenter defaultCenter] postNotification : notification];
}
//EDIT
//SearchScreenVC.m
- (void)viewDidLoad
{
....some computation
[self.customerActIndicator startAnimating];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stopActivityIndicator)
name:@"reloadRequest"
object:nil];
}
- (void)stopActivityIndicator
{
[self.customerActIndicator stopAnimating];
self.customerActIndicator.hidesWhenStopped = YES;
self.customerActIndicator.hidden =YES;
NSLog(@"HIt this at 127");
}
그래서 로그인이 성공 것을 조건으로, 전 화면 2로 이동하지만 백그라운드 스레드가 진행 여전히 (: 그래서 내가 Mainthread 날에 얼어 중지하려면이 같은 배경 스레드에서 해당 작업을하고있는 중이 야 Logging 값을 가지고 있기 때문에 알 수 있습니다.) 사용자가 검색을 시작하기 전에 기다려야한다는 것을 알려주는 활동 표시기 (여기서는 2 번째 화면)가 필요합니다. 어떻게해야합니까? 내 활동 표시기를 수신 대기/백그라운드 스레드 기다릴 수있는 방법은 무엇입니까? 자세한 정보가 필요하면 알려주세요. 감사합니다.
EDIT : 이에 따라 편집되었으므로 알림이 전송되지 않습니다. SearchScreen의 viewDidLoad에서 getAllCustomerValues의 끝에 알림을 넣었습니다. 애니메이징을 중지하는 두 번째 화면의 알림이 절대로 호출되지 않습니다. 내가 뭘하고있는 실수입니까? 감사합니다
EDIT 2 : 그래서 마침내 방법을 안타. 나는 그것이 그 방법에 부딪치게 만드는 원인을 모른다. 나는 브레이크 포인트를 뒀다. 나는 애니메이션 작업을 중단하라고 썼다. 나는 가죽을 썼다. 예를 들어 둘 다 숨겨 뒀다. 하지만 여전히 애니메이션을 유지하고 있습니다. 어떻게 멈추게합니까?
값을 기록하고 있으므로 구문 분석이 완료되었을 때를 알 수 있습니다. 일반적으로, 그 시점에서 NSNotification을 사용하여 UI가 검색을 허용 할 수 있음을 알립니다. – livingtech
getAllCustomerValues 프로세스가 끝나면 프로세스가 완료되었음을 나타내는 기본 스레드에서 메소드를 호출하십시오. 알림을 전송하거나 플래그를 설정하십시오. 그 통보가 최선의 방법 일 것입니다. – Bergasms
@livingtech. 알림 코드를 추가했습니다. 저기서 실수를 저에게 말해주세요. – RookieAppler