2012-04-17 16 views
6

Es fällt mir schwer, die Erreichbarkeit in meinem Code zu verwenden. Ich möchte es sehr einfach halten, indem ich beim Start einen Beobachter initiiere und dann nur Änderungsbenachrichtigungen erhalte. Im folgenden Code wird die reachabilityChanged-Methode nie aufgerufen. Ich habe viele Wiederholungen ausprobiert, aber dies ist die einfachste Version. Es kompiliert und läuft. Bitte helfen ...Erreichbarkeitsbenachrichtigung nie aufgerufen

** * * AppDelegate.h Code * ** *

#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 

** * * AppDelegate.m Code-Snippet * ** *

#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 
+0

Sicherlich der Titel und/oder Tags können aktualisiert werden, um diese Frage leichter zu identifizieren ... –

+0

Nur bearbeitet - hoffentlich Titel und Tags sind anschaulicher. –

Antwort

26

Ihr Objekt Erreichbarkeits ist Autorelease so es dealloc ist und nicht mehr arbeiten.

ich versuchen, Ihren Code und es funktioniert für mich:

AppDelegate.h Code

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

AppDelegate.m Code-Schnipsel

[...] 
@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 
+0

Ich denke das war's! Ich habe Ihre Änderungen versucht, indem ich den Flugmodus eingeschaltet habe und ich sehe die richtigen Logmeldungen. Vielen herzlichen Dank! –

+0

@ Sarah Moreland Gern geschehen. Da Sie ein neuer Benutzer sind, nehme ich die Freiheit, Sie daran zu erinnern, für meine Antwort zu stimmen, wenn es Ihnen gefällt und/oder die Antwort zu akzeptieren, wenn Ihr Problem gelöst wurde. Die Taste befindet sich oben links in meiner Antwort. –

+0

Danke, ich habe die Antwort akzeptiert, kann aber nicht abstimmen, weil ich keine 15 Reputation habe. Ich würde wenn ich könnte. Es ist eine großartige Antwort. –

Verwandte Themen