Question

Je rencontre des problèmes en utilisant ASIHttpRequst. Ceci est l'erreur que je reçois:

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
)

Et voici mon code (partie):

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

Le processus est chargé en tant que LeftCalloutView dans la bulle lorsque les annotations sont callout chargées dans mon MapView, donc tout à fait beaucoup (80 fois environ). Il est destiné à récupérer un plist XML à partir d'un serveur, analyser et utiliser les données ... mais il meurt au rackDone:

Est-ce que quelqu'un a des idées?

Cordialement, Paul Peelen

Était-ce utile?

La solution 2

J'ai trouvé la solution à l'aide [self retain]. Il semble que parce que je charge l'objet si souvent, il ne lui attribue pas moi assez longtemps pour recevoir le rackDone. L'action

Il fonctionne maintenant. Maintenant, j'ai besoin de savoir comment je peux charger cette sur demande, et non pas lorsque l'application est chargée.

Autres conseils

Eh bien, le problème semble être que votre objet networkQueue (quelle qu'elle soit sous-classe NSOperationsQueue?) Envoie le message rackDone: à la vue du viewController au lieu du viewController lui-même. CALayers sont des attributs de vues non viewControllers si l'erreur doit provenir d'une vue.

Vérifier le code networkQueue.

Vous ne semblez pas aussi à l'aide de la notation self pour networkQueue et si sa propriété de la classe, il peut mourir sans avertissement parce qu'il est mal conservé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top