2010-04-11 4 views
0

ASIHttpRequst를 사용하는 데 문제가 있습니다.ASIHttpRequest 문제가 발생했습니다. "인식 할 수없는 선택기를 인스턴스로 보냄"

2010-04-11 20:47:08.176 citybikesPlus[5885:207] *** -[CALayer rackDone:]: unrecognized selector sent to instance 0x464a890 
2010-04-11 20:47:08.176 citybikesPlus[5885:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[CALayer rackDone:]: unrecognized selector sent to instance 0x464a890' 
2010-04-11 20:47:08.176 citybikesPlus[5885:207] Stack: (
    33936475, 
    2546353417, 
    34318395, 
    33887862, 
    33740482, 
    126399, 
    445238, 
    33720545, 
    33717320, 
    40085013, 
    40085210, 
    3108783, 
    11168, 
    11022 
) 

을 그리고 이것은 내 코드 (그것의 일부)입니다 :이 오류 내가 얻을 수있다

주석이 내지도보기에로드 될 때 프로세스가 선 거품에 LeftCalloutView로로드
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 

[image setImage:[UIImage imageNamed:@"bullet_rack.png"]]; 

BikeAnnotation *bike = [[annotationView annotation] retain]; 

bike._sub = @""; 

    [super viewDidLoad]; 

NSString *newUrl = [[NSString alloc] initWithFormat:rackUrl, bike._id]; 
NSString *fetchUrl = [newUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

[networkQueue cancelAllOperations]; 
[networkQueue setRequestDidFinishSelector:@selector(rackDone:)]; 
[networkQueue setRequestDidFailSelector:@selector(processFailed:)]; 
[networkQueue setDelegate:self]; 

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:fetchUrl]] retain]; 
[request setDefaultResponseEncoding:NSUTF8StringEncoding]; 
[networkQueue addOperation:request]; 

[networkQueue go]; 
} 

- (void)rackDone:(ASIHTTPRequest *)request 
{ 
NSString *resultSearch = [request responseString]; 

NSData *data = [resultSearch dataUsingEncoding:NSUTF8StringEncoding]; 

NSString *errorDesc = nil; 
NSPropertyListFormat format; 
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization 
      propertyListFromData:data 
      mutabilityOption:NSPropertyListMutableContainersAndLeaves 
      format:&format 
      errorDescription:&errorDesc]; 

rackXmlResult* fileResult = [[[rackXmlResult alloc] initWithDictionary:dict] autorelease]; 
rackXmlSet *rackSet = [fileResult getRackResult]; 

NSString *subString = [[NSString alloc] initWithFormat:@"Cyklar tillgängligt: %@ -- Lediga platser: %@", rackSet._ready_bikes, rackSet._empty_locks]; 

[activity setHidden:YES]; 
[image setHidden:NO]; 

BikeAnnotation *bike = [annotationView annotation]; 

bike._sub = subString; 
} 

- (void) processFailed:(ASIHTTPRequest *)request 
{ 
UIAlertView *errorView; 

NSError *error = [request error]; 
NSString *errorString = [error localizedDescription]; 

errorView = [[UIAlertView alloc] 
    initWithTitle: NSLocalizedString(@"Network error", @"Network error") 
    message: errorString 
    delegate: self 
    cancelButtonTitle: NSLocalizedString(@"Close", @"Network error") otherButtonTitles: nil]; 

[errorView show]; 
[errorView autorelease]; 
} 

, 그래서 꽤 많이 (80 번 정도). 서버에서 XML Plist를 검색하여 구문 분석하고 데이터를 사용하기위한 것이지만 랙에서 종료됩니다.

아무도 아이디어가 있습니까?

감사합니다, 폴 Peelen

답변

0

[self retain]을 사용하여 해결책을 찾았습니다. 내가 너무 자주 개체를로드하기 때문에 rackDone : action을 받기에 충분히 오랫동안 자체를 할당하지 않는 것 같습니다.

이제 작동합니다. 이제 앱을로드 할 때가 아니라 요청시로드 할 수있는 방법을 알아야합니다.

1

음, 문제는 (즉 NSOperationsQueue 서브 클래스 무엇이든?) 당신의 networkQueue 객체가의 ViewController의 관점 대신의 ViewController 자체에 rackDone: 메시지를 전송하고 있음을 것으로 보인다. CALayers는 viewController가 아닌 뷰의 속성이므로 뷰에서 오류가 발생해야합니다.

networkQueue 코드를 확인하십시오.

networkQueue에 대해서도 self 표기법을 사용하고 있지 않으며 클래스의 속성이 제대로 보존되지 않아 경고없이 죽을 수도 있습니다.

관련 문제