동일하게 만드는 여러보기가 있습니다 NSURLRequest/NSURLConnection request
. 이상적으로, 일부 코드를 재사용하려면 (비동기식) 요청/연결을 생성/실행하고 모든 대리자 메서드를 설정하는 등 모든 기본 작업을 수행하는 "프록시"를 사용하고 싶습니다. 따라서 각 뷰에 모든 NSURLConnection
대리자 메서드 처리기를 복사 할 필요가 없습니다. 우선,이 설계 방식이 합리적입니까? 둘째, 그런 일을 어떻게하면 할 수 있을까요?NSURLConnection 비동기 웹 서비스 호출 용 NSURLRequest 프록시
약간의 배경 정보 때문에이 작업을 시도하여 "작동"시키지만 비동기 적으로 실행되지는 않습니다.
@interface Proxy : NSObject {
NSMutableData *responseData;
id<WSResponseProtocol> delegate;
}
- (void)searchForSomethingAsync:(NSString *)searchString delegate:(id<WSResponseProtocol>)delegateObj;
@property (nonatomic, retain) NSMutableData *responseData;
@property (assign) id<WSResponseProtocol> delegate;
@end
WSResponseProtocol이 같은 정의 :
@protocol WSResponseProtocol <NSObject>
@optional
- (void)responseData:(NSData *)data;
- (void)didFailWithError:(NSError *)error;
@end
I합니다 (NSURLConnection
위임 방법도 포함) 다른 웹 서비스 호출에 대한 인스턴스 메서드가있는 Proxy.h/m 파일을 생성 이를 사용하기 위해서는 View Controller가 응답을 잡기 위해 WSResponseProtocol
프로토콜을 준수하기 만하면됩니다. 웹 서비스 호출은 다음과 같이 수행됩니다.
Proxy *p = [[Proxy alloc] init];
[p searchForSomethingAsync:searchText delegate:self];
[p release];
더 많은 코드를 제공 할 수 있지만 나머지는 가정 할 수 있습니다. 전화하기 전에 UIActivityIndicatorView
회 전자를 "시작"합니다. 그러나 회 전자는 결코 회전하지 않습니다. NSURLConnection 대리자 메서드를 뷰 컨트롤러에 직접 배치하면 회 전자가 회전합니다. 따라서 구현이 비동기 적으로 실행되지 않는다고 생각합니다. 어떤 생각/아이디어가 있습니까?
아 - 아주 좋습니다! 나는 당신이 말하는 것을 보았습니다 - 당신의 해결책은 프로토콜의 필요성을 제거 할 것입니다. 훨씬 더 똑바로! 고마워! 그러나 나는 켄들이 제안한 해결책 인 NSORLConnections를 NSOperation에 랩핑하고 대기열에 던져 놓는 것이 좋습니다. 이 솔루션은 비동기식 웹 서비스 호출 프레임 워크를 만드는 문제에 대한보다 직접적인 해결책 일 수 있지만 내 접근 + 통찰력은 여전히 실행 가능합니다. – tbehunin
내 의견을 일찍 되돌립니다. 이 접근법은 NSOperation 내에서 NSURLConnections와 동기화하는 방식입니다. NSURLConnection은 이미 NSOperation에 넣지 않고 필요한 스레딩을 제공합니다. 또한 더 많은 블로그를 읽은 후 동기식 NSURLConnections + 인증은 비동기 호출만큼 많은 "후크"를 제공하지 않습니다. – tbehunin
여기서 \ how는 receiveData가 선언되었습니다. 문서는 다른 곳에서 선언되었다고 말하고 있지만 어떻게해야하는지에 대한 정보는 제공하지 않습니다. –