2010-04-11 1 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 
) 

И это мой код (часть его):

// 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]; 
} 

Процесс загружается как LeftCalloutView в выносках пузыря, когда аннотации загружены в моем MapView, так много (80 раз или около того). Он предназначен для извлечения XML Plist с сервера, анализа его и использования данных ... но он умирает на стойке.

Есть ли у кого-нибудь идеи?

С уважением, Пол Peelen

ответ

0

Я нашел решение, используя [self retain]. Кажется, что, поскольку я загружаю объект так часто, он не выделяет его достаточно долго, чтобы получить действие rackDone:.

Это работает сейчас. Теперь мне просто нужно выяснить, как я могу загрузить это по запросу, а не при загрузке приложения.

1

Ну, проблема, кажется, что ваш networkQueue объект (независимо от того, что является NSOperationsQueue подкласс?) Посылает сообщение rackDone: к ViewController Высказаться вместо самого ViewController. CALayers - атрибуты представлений, а не viewControllers, поэтому ошибка должна возникать из представления.

Проверьте код networkQueue.

Вы также не используете нотацию self для networkQueue, и если ее свойство класса может умереть без предупреждения, поскольку оно не сохраняется должным образом.