asiHttpRequest под iOS5 - PullRequest
       5

asiHttpRequest под iOS5

1 голос
/ 02 января 2012

Я успешно использую библиотеку AsiHttpRequest для создания URL-соединений в моих приложениях.Тем не менее, я обновляюсь до iOS5, и файл Reachability.m сообщает о некоторых ошибках (4) в следующих функциях:

static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) {

    #pragma unused (target, flags)
    NSCAssert(info, @"info was NULL in ReachabilityCallback");
    NSCAssert([(NSObject*) info isKindOfClass: [Reachability class]], @"info was the wrong class in ReachabilityCallback");


    // Post a notification to notify the client that the network reachability changed.
    [[NSNotificationCenter defaultCenter] postNotificationName: kReachabilityChangedNotification object: (Reachability *) info];


} // ReachabilityCallback()


- (BOOL) startNotifier {

    SCNetworkReachabilityContext    context = {0, self, NULL, NULL, NULL};

    if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context)) {

        if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) {

            return YES;

        }

    }

    return NO;

} // startNotifier

1sr ошибка: в строке NSCAssert "приведение типа указателя C типа 'void' к Objective-Указатель типа C NSObject требует мостового приведения ".Почему так происходит и как это решить?

ОТВЕТ: вы можете отключить ARC для каждого файла.Перейдите к настройке вашего проекта и установите флаг -fno-objc-arc для всех файлов ASIHTTPRequest (дважды щелкните, чтобы редактировать текст).Затем вы должны удалить ASIAuthenticationDialog и все ссылки на него, которые по-прежнему генерируют ошибки.У меня это работает.

1 Ответ

2 голосов
/ 02 января 2012

РЕДАКТИРОВАТЬ: я помню сейчас, и да, проблема в ARC.Но вы можете исключить соответствие файлов ARC, установив следующий флаг компилятора в «Фазы сборки» >> «Источники компиляции»: -fno-objc-arc.Если вы выберете все файлы ASIHTTPRequest и дважды щелкните, вы можете установить флаг для всех из них одним махом.

ОРИГИНАЛЬНЫЙ ПОСТ:

Я использовал ASIHTTPRequest для парынедель, и я помню, как читал пост где-то о проблемах с Reachability, я просто не могу вспомнить, что именно было.

В любом случае, вот как выглядят эти строки в моем Reachability.m:

//Start listening for reachability notifications on the current run loop
static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) {

#pragma unused (target, flags)
NSCAssert(info, @"info was NULL in ReachabilityCallback");
NSCAssert([(NSObject*) info isKindOfClass: [Reachability class]], @"info was the wrong class in ReachabilityCallback");

//We're on the main RunLoop, so an NSAutoreleasePool is not necessary, but is added defensively
// in case someone uses the Reachablity object in a different thread.
NSAutoreleasePool* pool = [NSAutoreleasePool new];

// Post a notification to notify the client that the network reachability changed.
[[NSNotificationCenter defaultCenter] postNotificationName: kReachabilityChangedNotification 
                                                    object: (Reachability *) info];

[pool release];

} // ReachabilityCallback()


- (BOOL) startNotifier {

    SCNetworkReachabilityContext    context = {0, self, NULL, NULL, NULL};

    if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context)) {

        if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) {

            return YES;

        }

    }

    return NO;

} // startNotifier
...