2010-02-17 5 views
0

이전 기능이 완료되기 전에 실행중인 기능에 문제가 있습니다. 로그에 따르면 둘 다 실행되지만 AppDelegate에서 호출 한 함수가 별도의 스레드에 놓여있는 것처럼 보입니다.이전 기능이 완료 될 때까지 기다리지 않고 기능이 실행됩니다.

-(IBAction) checkLocation { 
[AppDelegate locateMe]; 
[self checkForChangeAndReloadTable];  
} 

locateMe 함수는 정보와 다른 일을하는 여러보기에서 호출 할 수 있습니다. 사용자의 위치를 ​​찾아 사용자 기본값으로 저장합니다. checkForChangeAndReloadTable은 기본값을 확인하고 위치가 변경된 경우보다 관련성 높은 새 정보로 표를 다시로드합니다. 검사 후 변경이 발생하여 사용자가 checkLocation 함수를 두 번 호출하면 작동합니다.

예상 되나요? 어떤 생각을 어떻게 할 것인가?

+0

로그에 대한 출력이 즉시 플러시되지 않을 수 있으므로 로그에 기록하는 것처럼 보일 수 있습니다. 같은 시간 .. –

+0

나는 로그에서 이것을 얻는 것이 아닙니다. 버튼을 두 번 누르지 않으면 해당 테이블이 다시로드되지 않습니다. – Nik1777

답변

1

locateMe 또는 checkForChangeAndReloadTable 메서드에 대한 소스 코드를 보지 않고도 말하기는 불가능하지만 여러 CoreLocation 메서드가 비동기 적으로 실행됩니다. 이는 아마도 문제 일 것입니다.

+0

그럴 가능성이 높습니다. 감사. AppDelegate에서 함수를 호출했기 때문에 그것이 아니라는 것을 알았습니다. 전체 시간 동안 실행되고 사용자 기본값에 대한 변경 사항을 수신 대기하는 기능은 어떻습니까? 아마도 일종의 비동기식 타이머 일 것입니다. 그게 효과가있을 것 같은데요? (당신은 내가 이것에 대해 아주 새로운 것이라고 말할 수있을 것입니다!) – Nik1777

+0

CoreLocation에는 몇 가지 델리게이트 메소드가 있습니다. 전략을 다시 생각해보십시오. 업데이트가 사용 가능한지 지속적으로 확인하는 대신 새 정보가있을 때 대리자 메서드를 호출 할 수 있습니다. –

1

알림을 사용하여 비동기 이벤트를 처리 할 수 ​​있습니다. 기본 아이디어는 locateme 완료시 checkForChangeAndReloadTable을 호출하는 알림을 설정하는 것입니다.

+0

감사합니다. 전에는 해본 적이 없어. 나는 Google에서 말하는 자습서를 추적하려고합니다. 푸시 알림에 관한 내용이 많아요. 당신이 말하는 내용이 아닙니다. 더 많은 정보를 얻기 위해 내가 어디로 가야하는지에 대한 제안? – Nik1777

+0

발견. http://jamesabrannan.com/wordpress/wp-content/uploads/2009/08/NSNotification.pdf – Nik1777

관련 문제