2012-12-11 1 views
3

내 앱을 제출했으며 몇 주 전에 허용되었습니다. 그러나 핀 추가 기능 중 하나 인 중요한 기능 중 하나가 작동하지 않지만 버전을 빌드하는 데 문제가 있습니다. PIN을 추가하려면 URL 연결이 필요합니다. 사과 개발자로부터 얻은 답변을보고 제게 안내해주십시오.appView 버전에서 mapView에 핀 추가 중

그것은 당신의 문제를 (적어도 직접적으로)가 발생하지만 UI 코드 안에 사는이 같은 일반 가진 네트워킹 코드의 이유로 매우 문제가되어서는 안

: 일반

-On 아키텍처 근거, MVC (모델 컨트롤러 ) 아키텍처의 큰 위반입니다. 핀 어노테이션은 UI (보기)에 분명히 많이 연결되어 있지만 네트워킹은 분명히 백엔드의 일부입니다 ( 모델).

- iOS는 주 스레드가 응답 성을 유지해야하므로 기본 스레드에 IO 또는 계산을 수행하는 코드 을 붙이는 것이 본질적으로 위험합니다. 일 수 있으며 제대로 작동하지만 잘못 수행하면 필연적으로 충돌이 발생할 수 있습니다.

+0

일부 코드를 공유하면 답변을 얻고 더 많은 의견을 얻을 수 있습니다. 맹목적으로 제안하는 것은 거의 불가능합니다. – pinkeerach

+0

프로덕션 환경에서 작동하지 않지만 건물 버전에서 작업 중이라고 말하면 디버그 모드로 컴파일 될 때를 의미한다고 가정합니다. 시뮬레이터와 실제 장치 모두에서 작동합니까? 실제 장치 (예 : 성능)에서 테스트 할 때 시뮬레이터에서 작동하는 몇 가지 작업이 다르게 작동 할 수 있습니다. – lehn0058

답변

0

NSURLConnection은 백그라운드에서 작동하며 UI와의 상호 작용은 주 스레드에서 이루어져야합니다. 당신은 예를 들어 connectionDidFinish 방법에 PIN을 추가하는 경우

그래서, 당신은 다음과 같이 수행해야 당신을 도와줍니다

[mapView performSelectorOnMainThread:@selector(addAnnotation:) withObject:yourAnnotation waitUntilDone:[[NSThread currentThread] isMainThread]]; 

희망을. 나는 창문에서 썼다. 그러나 선은 잘 움직여야한다.

0

나는 당신이 성취하려는 것을 정확히 모르겠습니다. 메인 스레드에서 직접 URL을 가져 오는 중 App 사용자가 불평하고 있습니까? URL을 가져 오는 방법을 보여주는 코드 스 니펫을 보낼 수 있습니까?

0

하나의 옵션은 (URL 연결에 전혀 묶이지 않은) 핀을 떨어 뜨리고 일단 핀이 떨어지면 콜 아웃이나 주석 (사용자가하고있는 것으로 가정)에 대한 데이터를로드합니다. 로딩 인디케이터 또는 progressHUD를 올려서 사용자가 무엇인가를 기다릴 필요가 있다고 말할 수 있습니다. 정확히 이상적인 것은 아니지만 데이터를 기다릴 필요가있는 경우에는 무엇을 할 것입니까?

Apple은 사용자가 차단하고 있다는 것을 알고있는 한 UI를 차단하는 것에 별 관심이 없습니다. 진행률 막대 또는 진행 HUD와 같습니다. 사용자는 앱이 계속 작동하고 있는지 확인할 수 있습니다. 아무 것도 보이지 않고 메인 스레드/메인 루프가 돌아 오기를 기다리는 동안 UI가 멈추는 것은 작동하지 않습니다. 그것은 나쁜 디자인 일 뿐이며 애플은 당신을 싫어할 것이다.