나는 선택기 (또는 심지어 다른 패러다임)를 사용해야한다고 생각하지만 TFM을 R'ing 한 후에도 내가해야할 일을 알아낼 수 없다. 그것은 모든콜백에 셀렉터 사용?
내가 내 주요 모델 객체가 대리자에서 콜백에 관련이 :
@implementation Model
@synthesize myConnection; // which is an NSURLConnection
...
-(void)someMethod{
MyConnectionDelegate *mcd = [[MyConnectionDelegate alloc]initWithCallingObject:self];
myConnection = [[NSURLConnection alloc] initWithRequest:requestForToken delegate:mcd];
...
}
-(void)didGetCalledBack:(NSArray *)resultArray{
NSLog(@"got the callback");
}
및 다음 내 대리자 :
@implementation MyConnectionDelegate
@synthesize callingObject; // which is of type id
@synthesize resultArray; // NSArray
-(id)initWithCallingObject:(id)caller{
...//std [self init] block
self.callingObject = caller;
return self;
...
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
...
}
//and all the other NSURLConnection delegate methods
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
...
// finish building array of results into self.resultArray
[self.callingObject didGetCalledBack:self.resultArray];
}
그래서는 ... 1) 나는 내가해야한다고 생각 호출자 (위임자)가 구현해야하는 사실을 하드 코딩하지 않고 셀렉터 또는 다른 것을 사용하고 있습니까? didGetCalledBack
: 맞습니까? 그렇다면 어떻게? (이유는 무엇보다, 청결 함 이외)
2) 아니면 위임자에게 잘못된 NSURLConnection
대리인의 콜백을 사용하려고 시도하는 중 내 전체 구현이 잘못 되었습니까?
나는 애플 샘플 코드 등을 살펴 봤지만 아무 것도 본 적이 없다. delegate:self
이외는 아무것도 없다. 어쩌면 나는 위임을해야한다 : 역시 NSURLConnection
에 대한 자기,하지만 많은 연결을하고 있는데 내가 위임 할 경우 : 자기 내 대의원 방법 (예 : didReceiveData
:)은 if (connection ==connection1){
유형 코드의 큰 엉망이된다.
덕분에, 리차드
다른 곳에서 델리게이트를 구현하는 것은 불필요하게 관련 코드를 다른 클래스에 퍼뜨려 유지 보수가 어렵고 이해하기 어렵게 만든다고 생각합니다. 많은 대리인이있는 경우 모델이 지나치게 많습니다 (즉, 다른 곳에 속한 것 * 완전 *). – Eiko
근본적으로 동의하지 않지만 다른 곳에서 델리게이트를 사용하지 않으면 5-6 REST를 호출 할 때마다 리턴 XML이 6 개의 NSXMLParser 델리게이트 메소드와 5 ~ 6 NSURLConnection 델리게이트 메소드의 큰 if/elseif 문으로 끝납니다 . 그게 내가 정리하려고하는거야. 당신은 "그 밖의 다른 곳"을 염두에두고 뭔가 특별한 것을 가지고 있습니까? – richard
큰 if/elseif 블록으로 끝내야하는 이유는 무엇입니까? 그걸 요약 할 수 없니? 지금 가지고 계시다시피, 그 복잡성을 다른 곳으로 옮기실 수 있습니다. –