Notificación de scope nunca llamada

Estoy teniendo dificultades para usar Reachability en mi código. Me gustaría mantenerlo muy simple al iniciar un observador en el lanzamiento y luego recibir notifications de cambio. En el siguiente código, el método reachabilityChanged nunca se llama. He probado muchas iteraciones, pero esta es la versión más simple. Se comstack y se ejecuta. Por favor ayuda…

** * * Código AppDelegate.h * ** *

#import <UIKit/UIKit.h> #ifdef PHONEGAP_FRAMEWORK #import <PhoneGap/PGViewController.h> #import <PhoneGap/PGURLProtocol.h> #import <PhoneGap/Reachability.h> #else #import "PGViewController.h" #import "PGURLProtocol.h" #import "Reachability.h" #endif @interface AppDelegate : NSObject < UIApplicationDelegate, UIWebViewDelegate, PGCommandDelegate> { NSString* invokeString; } @property (nonatomic, copy) NSString* invokeString; @property (nonatomic, strong) IBOutlet UIWindow* window; @property (nonatomic, strong) IBOutlet PGViewController* viewController; @end 

** * * Fragmento de código AppDelegate.m * ** *

 #import "AppDelegate.h" #import "MainViewController.h" #ifdef PHONEGAP_FRAMEWORK #import <PhoneGap/PGPlugin.h> #import <PhoneGap/PGURLProtocol.h> #import <PhoneGap/Reachability.h> #else #import "PGPlugin.h" #import "PGURLProtocol.h" #import "Reachability.h" #endif @implementation AppDelegate @synthesize invokeString, window, viewController; - (void) reachabilityChanged:(NSNotification *)notice { NSLog(@"???????? CODE NEVER GETS HERE ??????????"); Reachability *reach = [notice object]; NSParameterAssert([reach isKindOfClass: [Reachability class]]); NetworkStatus remoteHostStatus = [reach currentReachabilityStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"**** Not Reachable ****");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"**** wifi ****"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"**** cell ****"); } } - (BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; Reachability *reach = [Reachability reachabilityForInternetConnection]; [reach startNotifier]; NetworkStatus remoteHostStatus = [reach currentReachabilityStatus]; NSLog(@”???? ALWAYS INITS WITH Not Reachable ????”); if(remoteHostStatus == NotReachable) {NSLog(@"init **** Not Reachable ****");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"int **** wifi ****"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"init **** cell ****"); } // ... } @end 

Su object Reachability es autorelease por lo que es dealloc y ya no funciona.

Intento su código y funciona para mí:

Código AppDelegate.h

 [...] @property (retain, nonatomic) Reachability* reach; [...] 

Fragmento de código de AppDelegate.m

 [...] @synthesize reach; - (void) reachabilityChanged:(NSNotification *)notice { NSLog(@"!!!!!!!!!! CODE IS CALL NOW !!!!!!!!!!"); NetworkStatus remoteHostStatus = [reach currentReachabilityStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"**** Not Reachable ****");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"**** wifi ****"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"**** cell ****"); } } - (BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; self.reach = [Reachability reachabilityForInternetConnection]; //retain reach [reach startNotifier]; NetworkStatus remoteHostStatus = [reach currentReachabilityStatus]; NSLog(@"???? ALWAYS INITS WITH Not Reachable ????"); if(remoteHostStatus == NotReachable) {NSLog(@"init **** Not Reachable ****");} else if (remoteHostStatus == ReachableViaWiFi) {NSLog(@"int **** wifi ****"); } else if (remoteHostStatus == ReachableViaWWAN) {NSLog(@"init **** cell ****"); } // ... } [...] -(void)dealloc{ [reach release]; [super dealloc]; } @end