我很难在代码中使用可达性。我想通过在启动时启动观察者然后仅接收更改通知来使其保持非常简单。在以下代码中,从未调用reachabilityChanged方法。我尝试了很多次迭代,但这是最简单的版本。它会编译并运行。请帮忙...
**** 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
**** 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
最佳答案
您的对象可达到性是自动释放的,因此它已释放并且不再起作用。
我尝试您的代码,它对我有用:
AppDelegate.h代码
[...]
@property (retain, nonatomic) Reachability* reach;
[...]
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
关于objective-c - 从未调用过可达性通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10184082/