두 개의 별도 비동기 인터넷 조회를 만들고 싶습니다. 그러나, 그들은 서로에 족답하고 나는 확실하지 않다 왜.우연히 동일한 obj-C 객체를 두 번 호출합니다.
주위를 파다 보면 두 룩업이 모두 같은 개체에서 작동하는 것으로 보입니다 (증상 : 두 번째 호출이 첫 번째 호출로 설정된 "thisPage"를 재설정 함).
아마도 위임자 사용과 관련이 있습니다 (여전히이 영역에서는 편하지 않습니다).
내가 클래스 CSNET을 만든 내가 그것을 초기화 :
[startupPage getPage:self page:pageName];
과 :
[positionUpdatePage getPage:self page:pageName];
나중에
CSNet *startupPage;
CSNet *positionUpdatePage;
startupPage = [[CSNet alloc] init];
positionUpdatePage = [[CSNet alloc] init];
을, 나는 각 개체를 사용하려고
모듈 수준 변수 :
enum pageType {nothing, startup, positionUpdate, acquireOpponents, fire, changeCredentials};
enum pageType thisPage;
getPage 전화 :
-(void)getPage:(id)delegate page:(NSString *)page {
m_Delegate = delegate;
if ([[page substringToIndex:2] isEqual:@"st"]) {
thisPage = startup;
} else {
if ([[page substringToIndex:2] isEqual:@"pu"]) {
thisPage = positionUpdate;
} else {
if ([[page substringToIndex:2] isEqual:@"ao"]) {
thisPage = acquireOpponents;
} else {
if ([[page substringToIndex:2] isEqual:@"fi"]) {
thisPage = fire;
} else {
if ([[page substringToIndex:2] isEqual:@"cc"]) {
thisPage = changeCredentials;
}
}
}
}
}
NSURLRequest *startupRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[
[NSString stringWithFormat: @"%@%@", SERVER, page]
stringByReplacingOccurrencesOfString:@" " withString:@"%20"]]];
startupConnection = [[NSURLConnection alloc] initWithRequest:startupRequest delegate:self];
if(startupConnection)
{
workInProgress = YES;
m_RequestData = [[NSMutableData data] retain];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// this method is called when the server has determined that it
// has enough information to create the NSURLResponse
// it can be called multiple times, for example in the case of a
// redirect, so each time we reset the data.
// receivedData is declared as a method instance elsewhere
[m_RequestData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// append the new data to the receivedData
// receivedData is declared as a method instance elsewhere
[m_RequestData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
// release the data object
[m_RequestData release];
// inform the user
NSLog(@"Connection failed! Error - %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
workInProgress = NO;
}
대리인에게 다시 반환 : 당신은 대리인에게 방법을 전송하는 객체를 추적하고에 분명히 두 개의 연결을 처리 할 수
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if(workInProgress == YES) {
workInProgress = NO;
switch (thisPage) {
case startup:
//if ([m_Delegate respondsToSelector:@selector(startupReady:)])
[m_Delegate startupReady:m_RequestData];
break;
case positionUpdate:
//if ([m_Delegate respondsToSelector:@selector(positionUpdateReady:)])
[m_Delegate positionUpdateReady:m_RequestData];
break;
case acquireOpponents:
//if ([m_Delegate respondsToSelector:@selector(opponentsReady:)])
[m_Delegate opponentsReady:m_RequestData];
break;
case fire:
//if ([m_Delegate respondsToSelector:@selector(fireReady:)])
[m_Delegate fireReady:m_RequestData];
break;
case changeCredentials:
//if ([m_Delegate respondsToSelector:@selector(changeCredentialsReady:)])
[m_Delegate changeCredentialsReady:m_RequestData];
break;
default:
break;
}
[m_RequestData release];
}
}
변수가 대리인 개체에 있습니까? – Daniel
정확히 무슨 일이 일어나는지보기에는 충분하지 않습니다. 어떤 변수가 덮어 쓰여지고 있습니까? 전체 CSNet 클래스와이를 호출하는 클래스를 게시하고 좀 더 자세하게 설명 할 수 있습니까? –
두 클래스가 매우 큽니다. 그래서 나는 불필요한 세부 사항을 압도하지 않으려 고 노력하고 있습니다. 나는 정확한 양의 세부 사항을 포함 시키려고 편집 할 것이다. – BankStrong