서버에서 가져온 데이터로 구동되는 앱으로 작업하고 있습니다. 페칭 로직은 상당히 견고하며 내결함성이 있습니다. 대부분의 연결 오류는 자동으로 재 시도되며 대개 잘 작동합니다. 그러나 매우 드물게 (네트워크 대기 시간과 백엔드 데이터베이스를 포함하는 경쟁 조건을 포함하는) 환경을 고려할 때 앱/서버는 복구 할 수없는 불일치 상태가 될 수 있습니다. 내가하고 싶은 무엇iOS 앱의 배경을 조건부로 사용 중지 하시겠습니까?
이 상태에서, 단순히 (대신 배경에가는) 사용자가 홈 버튼을 누르면 다음 시간을 종료 할 때, 응용 프로그램을 가지고있다. 앱을 다시 실행하면 서버와 다시 동기화되어 사용자가 즐겁게 돌아갈 수 있습니다.
내 첫번째 생각은 일관성없는 상태가 감지되면 applicationDidEnterBackground :와()에서 출구를 호출하는 것입니다. 누구나 이런 종류의 경험이 있거나 조건에 따라 backgrounding을 비활성화하는 다른 방법을 알고 있습니까? 이 사실을 알았지 만, 누구나 exit()를 사용하여 애플이 명시 적으로 애플 리케이션을 거부 한 경험이 있습니까? UIApplicationExitsOnSuspend = YES는 멀티 태스킹이 다른 99.999 %의 예상대로 작동해야하기 때문에 옵션이 아닙니다.
참고 사항 : 구체적인 내용에 대해 사과드립니다. 이상적인 해결책은 일관성없는 상태에서 복구하는 방법을 제시하는 것입니다. 많은 시간과 노력을 들여서 그렇게 할 방법을 찾았을 때 나를 믿어주십시오. exit()
를 사용
불행히도 그것은 단지 장치의 데이터,하지만 범인 장치와 서버의 데이터의 조합이 아니다. 백엔드의 다른 고객이 API를 변경하는 것이 까다로운 제안입니다. tech Q & A는 exit() 사용과 관련하여 HIG를 에코로 남겨 둡니다. 그러나 사용자가 홈 버튼을 클릭 한 후에 exit()를 사용하고자하므로 우리는 흥미로운 경우입니다. 앱이 닫히고 돌아갈 것이라고 기대합니다. –
@jenningj - 클라이언트와 서버간에 불일치가 발생하는 경우 응용 프로그램을 처음부터 다시 시작하면 문제가 해결되는 이유는 무엇입니까?다시 시작하면이 문제가 해결됩니다. 불일치가 감지되면 응용 프로그램 내에서 해당 효과를 복제 할 수 있습니다. 응용 프로그램이 정상적으로 종료 된 것처럼 보이지만 종료가 진행되는 동안 검토 자에게 플래그가 올라갈 수있는 오류 로그가 생성 될 것으로 생각됩니다. 다시 말하지만, 그들은 이것을 알아 채지 못할 수도 있습니다. 그래서 당신은 도박을 할 수 있고 그것이 통과 하는지를 볼 수 있습니다. –