Frage

Ich habe Probleme mit ASIHttpRequst. Das ist der Fehler, den ich bekommen:

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
)

Und das ist mein Code (Teil davon):

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

Der Prozess als LeftCalloutView in der Hinweisblase geladen, wenn Anmerkungen in meinem mapview geladen werden, so ziemlich viel (80-mal oder so). Es sollte einen XML Plist von einem Server abrufen, analysieren sie und die Daten verwenden ... aber es stirbt im rackDone:

Hat jemand irgendwelche Ideen?

Viele Grüße, Paul Peelen

War es hilfreich?

Lösung 2

fand ich die Lösung mit [self retain]. Es scheint, dass, weil ich so oft das Objekt laden, ist es nicht es selbst zuteilt lange genug, um die rackDone zu erhalten. Aktion

Es funktioniert jetzt. Jetzt habe ich gerade brauche, um herauszufinden, wie ich dies auf Anfrage geladen werden kann, nicht, wenn die Anwendung geladen wird.

Andere Tipps

Nun, scheint das Problem zu sein, dass Ihr networkQueue Objekt (was immer das NSOperationsQueue Unterklasse ist?) Sendet die rackDone: Nachricht an die Ansicht des Viewcontroller anstelle des Viewcontroller selbst. CALayers sind Attribute von Ansichten nicht so Viewcontrollers der Fehler aus einer Ansicht kommen werden muss.

Überprüfen Sie den Code für networkQueue.

Sie scheinen auch nicht die self Notation für networkQueue zu verwenden und wenn sie eine Eigenschaft der Klasse es ohne Vorwarnung sterben kann, weil es nicht richtig gehalten wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top