나는 수행하여 UIActivityViewController
에 NSURL
를 제공하기로하는 UIActivityItemProvider
서브 클래스를 가지고 다음과 같은 : UIActivityItemProvider의 -item 메서드 : NSURLConnection을 기다리고 있습니까?
- 내 서버
- 에 이미지를 업로드 공유자에 대한 URL.
placeholderItem
방법을 설정 한 다음
item
방법 등 업로드를 처리하는 모든 로직을 설정합니다.
문제는 item
메서드가 백그라운드 스레드에서 호출되고 모든 처리를 처리하고 항목 (이 경우 NSURL
)을 반환하는 것으로 가정되는 단일 동기 메서드 인 것입니다. 그리고 메서드 업로드를 처리하는 데 비동기 적으로 사용해야합니다 (즉, 보조자로 UIActivityItemProvider
하위 클래스가있는 NSURLConnection
을 만들고 대리자 메서드에 응답하여 진행률 표시기로 UI를 업데이트하는 등 ...) item
메서드 내에서 수행하십시오. item
의 URL이 반환 될 때까지 반환 할 수 없기 때문에
내 시도는 item
메서드를 트리거하는 것이 었습니다. URL에 연결이 다음이 루프에 뛰어 :
while ((self.uploadedFileURL == nil) && (self.uploadErrorMessage == nil)) {
[NSThread sleepForTimeInterval:1.0f];
NSLog(@"Waiting for upload...");
}
을 한 후 나는 didFinishLoading
및 didFailWithError
대리자 메서드에서 등 진행 상황을 업데이트하기 위해 다양한 NSURLConnection
위임 방법에 의존, 나는 각각 self.uploadedFileURL
및 self.uploadErrorMessage
, 값을 제공합니다.
하지만 이것은 작동하지 않습니다. NSURLConnection
은 절대 위임 메서드를 실행하지 않으며 어떤 이유로 든 차단되었다고 가정해야합니다. 나는 "기다리는 중 업로드를 기다리고 있습니다 ..."라는 메시지가 매 초마다 예상되지만, 그 밖의 일은 발생하지 않습니다.
무엇이 여기에 있습니까?
업데이트 : 일종의 솔루션을 찾았지만 이상적이지 않습니다. -item
메서드에서 동기 요청을 사용합니다. 큰 단점은 진행률 표시기를 표시 할 수 없으며 네트워크 오류를 제대로 처리 할 수 없다는 것입니다. 그래서 ... 더 나은 방법을 찾고 있습니다.
더 자세히 설명해 주시겠습니까? – Suran
@Suran 2 년 전부터 이것은 내 기억에 새롭지 않습니다. 가장 좋은 조언은 제가 연결 한 요지를 살펴 보는 것입니다. 이 코드는 비동기 요청이 완료 될 때까지 루프에서 대기 한 다음 반환하는 동기 메서드를 제공합니다. 즉, 호출자에게는 이러한 메서드가 실제로 비동기 메서드를 호출하여 임무를 수행하더라도 완전히 동기식으로 나타납니다. – DanM
답장을 보내 주셔서 감사합니다. 마지막으로 나는 비슷한 접근법만을 사용하여 끝내었다. 건배! – Suran