2010-12-31 4 views
1

서버에서 가져온 데이터로 구동되는 앱으로 작업하고 있습니다. 페칭 로직은 상당히 견고하며 내결함성이 있습니다. 대부분의 연결 오류는 자동으로 재 시도되며 대개 잘 작동합니다. 그러나 매우 드물게 (네트워크 대기 시간과 백엔드 데이터베이스를 포함하는 경쟁 조건을 포함하는) 환경을 고려할 때 앱/서버는 복구 할 수없는 불일치 상태가 될 수 있습니다. 내가하고 싶은 무엇iOS 앱의 배경을 조건부로 사용 중지 하시겠습니까?

이 상태에서, 단순히 (대신 배경에가는) 사용자가 홈 버튼을 누르면 다음 시간을 종료 할 때, 응용 프로그램을 가지고있다. 앱을 다시 실행하면 서버와 다시 동기화되어 사용자가 즐겁게 돌아갈 수 있습니다.

내 첫번째 생각은 일관성없는 상태가 감지되면 applicationDidEnterBackground :와()에서 출구를 호출하는 것입니다. 누구나 이런 종류의 경험이 있거나 조건에 따라 backgrounding을 비활성화하는 다른 방법을 알고 있습니까? 이 사실을 알았지 만, 누구나 exit()를 사용하여 애플이 명시 적으로 애플 리케이션을 거부 한 경험이 있습니까? UIApplicationExitsOnSuspend = YES는 멀티 태스킹이 다른 99.999 %의 예상대로 작동해야하기 때문에 옵션이 아닙니다.

참고 사항 : 구체적인 내용에 대해 사과드립니다. 이상적인 해결책은 일관성없는 상태에서 복구하는 방법을 제시하는 것입니다. 많은 시간과 노력을 들여서 그렇게 할 방법을 찾았을 때 나를 믿어주십시오. exit()를 사용

답변

2

는 매우 자신의 Technical Q&A QA1561 당, 애플에 의해 권장하지 않습니다 :

경고을 : 출구를 호출하여 응용 프로그램을 종료 할 수 있습니다. 사용자에게 나타납니다 종료를 호출 응용 프로그램은 정상적으로 종료 을 수행하고 다시 홈 화면으로 애니메이션보다, 오히려 추락 한합니다. 이러한 사용법은 부정적인 경험을 제공하며 강력하게 낙심입니다.

exit()의 사용은 어설 션의 실패와 같이 크래시로 표시되어야합니다. 검토자가 응용 프로그램을 테스트하는 동안이 조건에 부딪치게되면 거부 될 수 있습니다.

그러나, 이것은 당신이 주사위를 굴려 검토가 발생하지 않을 것이라고 희망 할 수있는 매우 드문 경우 인 경우. 그것은 도박이고, 당신은 그걸 가지고 도망 갈 수 있을지도 모르지만 그게 최선의 공격 계획인지는 모르겠습니다. 이 불일치를 식별 할 수있는 경우 모든 메모리 저장을 닦아 효과적으로 처음부터 일을 시작할 수없는 이유는 응용 프로그램의 새로운 부팅에서와 같이

, 내가 볼 수 없습니다. 코어 데이터 데이터베이스가 실행 취소/다시 실행/실행 취소 사이클로 인해 일관성이 없어진 경우가 드물었습니다.이 작업에서 복구를 수행했습니다.

+0

불행히도 그것은 단지 장치의 데이터,하지만 범인 장치와 서버의 데이터의 조합이 아니다. 백엔드의 다른 고객이 API를 변경하는 것이 까다로운 제안입니다. tech Q & A는 exit() 사용과 관련하여 HIG를 에코로 남겨 둡니다. 그러나 사용자가 홈 버튼을 클릭 한 후에 exit()를 사용하고자하므로 우리는 흥미로운 경우입니다. 앱이 닫히고 돌아갈 것이라고 기대합니다. –

+1

@jenningj - 클라이언트와 서버간에 불일치가 발생하는 경우 응용 프로그램을 처음부터 다시 시작하면 문제가 해결되는 이유는 무엇입니까?다시 시작하면이 문제가 해결됩니다. 불일치가 감지되면 응용 프로그램 내에서 해당 효과를 복제 할 수 있습니다. 응용 프로그램이 정상적으로 종료 된 것처럼 보이지만 종료가 진행되는 동안 검토 자에게 플래그가 올라갈 수있는 오류 로그가 생성 될 것으로 생각됩니다. 다시 말하지만, 그들은 이것을 알아 채지 못할 수도 있습니다. 그래서 당신은 도박을 할 수 있고 그것이 통과 하는지를 볼 수 있습니다. –

관련 문제