2010-04-11 83 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]; 
} 

当注释在我的MapView加载过程被加载LeftCalloutView标注中的泡沫,非常多(80次左右)。 它意味着从服务器检索XML Plist,解析它并使用数据...但它在rackDone处死亡:

有没有人有任何想法?

问候, 保罗Peelen

回答

0

我发现该解决方案使用[self retain]。看起来,因为我经常加​​载对象,所以它不会自动分配足够长的时间来接收rackDone:操作。

它现在有效。现在我只需要弄清楚我可以如何根据请求加载,而不是在加载应用程序时。

1

好了,问题似乎是你的networkQueue对象(不管它是什么NSOperationsQueue子类?)在发送rackDone:消息到ViewController的看法,而不是本身的viewController。 CALayers是视图的属性而不是viewControllers,所以错误必须来自视图。

查看networkQueue的代码。

您也似乎没有使用self表示法networkQueue,并且如果它的属性类可能没有警告地死亡,因为它没有正确保留。

相关问题