gpt4 book ai didi

objective-c - 从未调用可达性通知

转载 作者:可可西里 更新时间:2023-11-01 03:35:54 24 4
gpt4 key购买 nike

我很难在我的代码中使用可达性。我想通过在启动时启动一个观察者然后只接收更改通知来保持它非常简单。在以下代码中,从未调用 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

最佳答案

您的对象 Reachability 是自动释放的,因此它是 dealloc 并且不再工作。

我尝试了你的代码,它对我有用:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com