Я использую класс Reachability
, предоставленный компанией Apple в моем проекте iOS here. Я называю свой метод currentReachabilityStatus
всегда, прежде чем пытаться назвать свои REST веб-службы:Исключение EXC_BAD_ACCESS в классе достижимости
- (NetworkStatus)currentReachabilityStatus
{
NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef");
NetworkStatus returnValue = NotReachable;
SCNetworkReachabilityFlags flags;
if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags))
{
if (_alwaysReturnLocalWiFiStatus)
{
returnValue = [self localWiFiStatusForFlags:flags];
}
else
{
returnValue = [self networkStatusForFlags:flags];
}
}
return returnValue;
}
В свою очередь, я называю этот метод из пользовательского класса я сделал для удобства:
+ (BOOL)checkNetStatus
{
Reachability *reach = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [reach currentReachabilityStatus];
return [self boolFromStatus:status];
}
Я выполняю некоторые тесты на iPhone, позволяя режим полета в настройках, а затем, когда приложение возвращается на передний план, этот метод вызывается несколько раз (мое приложение повторяет вызовы веб-сервисов, если их невозможно достичь, пока они не станут достижимый), и, наконец, я получаю EXC_BAD_ACCESS
Исключение в строке if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags))
, и приложение падает.
Я не понимаю, почему именно потому, что currentReachabilityStatus
вызывается несколько раз, прежде чем я получу исключение и авария, не так ли, потому что это называется много раз и слишком быстро? Как я могу это решить?
Мне нужна помощь, спасибо заранее.
EDIT: всякий раз, когда я буду называть моих RESTful услуг, я сделать что-то вроде этого:
- (void)callWebService
{
if ([MyReachabilityManager checkNetStatus]) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
MyServiceWrapper *requestService = [[MyServiceWrapper alloc] initWithServiceUrl];
[requestService queryService];
}
else {
[self keepRequestingMyService]; // this calls this method again until a timeout
}
}
Спасибо. В моем случае, '_reachabilityRef' не является нулевым в точке, где я получаю ошибку ... Я был бы связан с управлением памятью, принимая во внимание, что я нахожу это, когда вы вызываете метод много раз в из-за отсутствия достижимости, но я не знаю, как с этим справиться ... – AppsDev
Привет @Midhun MP вы можете добавить свой метод. Я также сталкиваюсь с той же проблемой. Я попытался, но это не сработало. Добавьте это условие в свой ответ. –