Korzystając z nowego interfejsu API iOS 5 TWRequest
, natknąłem się na ceglaną ścianę związaną z użyciem bloku.Używanie bloków w blokach w Objective-C: EXC_BAD_ACCESS
Co muszę zrobić, to po otrzymaniu pomyślnej odpowiedzi na pierwszą prośbę, natychmiast zwolnij inną. W bloku zakończenia drugiego żądania powiadamiam o powodzeniu lub niepowodzeniu operacji wieloetapowej.
Oto z grubsza to, co robię:
- (void)doRequests
{
TWRequest* firstRequest = [self createFirstRequest];
[firstRequest performRequestWithHandler:^(NSData* responseData,
NSHTTPURLResponse* response,
NSError* error) {
// Error handling hidden for the sake of brevity...
TWRequest* secondRequest = [self createSecondRequest];
[secondRequest performRequestWithHandler:^(NSData* a,
NSHTTPURLResponse* b,
NSError* c) {
// Notify of success or failure - never reaches this far
}];
}];
}
ja nie zachowując jeden z wniosków lub utrzymywanie odniesienie do nich w dowolnym miejscu; to tylko ogień i zapomnienie.
Jednak kiedy uruchomić aplikację, to wywala z EXC_BAD_ACCESS
na:
[secondRequest performRequestWithHandler:...];
Wykonuje pierwsze żądanie po prostu w porządku, ale gdy próbuję uruchomić drugi z obsługi, to wywala. Co jest nie tak z tym kodem?
Metody tworzenia wnioski są proste:
- (TWRequest*)createFirstRequest
{
NSString* target = @"https://api.twitter.com/1/statuses/home_timeline.json";
NSURL* url = [NSURL URLWithString:target];
TWRequest* request = [[TWRequest alloc]
initWithURL:url parameters:params
requestMethod:TWRequestMethodGET];
// _twitterAccount is the backing ivar for property 'twitterAccount',
// a strong & nonatomic property of type ACAccount*
request.account = _twitterAccount;
return request;
}
proszę napisać kod 'createFirstRequest' i' createSecondRequest' – vikingosegundo
Czy możesz napisać kod dla '-createSecondRequest'? Zgaduję, że istnieje problem z uruchamianiem tego kodu na wątku w tle, ponieważ nigdy nie ma gwarancji, który wątek będzie obsługiwał procedurę obsługi zakończenia. –
Gotowe; przepraszam, ale nie sądziłem, że będzie to miało znaczenie. – biasedbit