gpt4 book ai didi

iOS:可达性 - 返回应用程序后 startNotifier 失败

转载 作者:可可西里 更新时间:2023-11-01 05:44:41 26 4
gpt4 key购买 nike

我的 Reachability 完全按照此 thread 中的建议工作.

我正在使用 open source Reachability .但是我没有使用 block 而是使用通知,因此该过程与 Apple 的 Reachability 代码非常相似。

我第一次启动该应用程序时,我运行了它并且运行良好。

Reachability *reachability = [reach hostReachability];
[reachability startNotifier];

reachabilityChanged: 事件正在触发:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachability_Changed:) name:kReachabilityChangedNotification object:nil];

但是,一旦我按下主页按钮并返回应用程序,startNotifier 就会在内部返回一个 NO 而不是 YES。

    // Set it as our reachability queue, which will retain the queue
if(!SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue))
{
#ifdef DEBUG
NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError()));
#endif
...
return NO;

因此上面的事件不会再触发。

除非我错误地使用它并且 startNotifier 应该只在 init 中调用一次,当 reachability 被实例化并且永远不会再次调用时?

self.hostReachability = [Reachability reachabilityWithHostname:_HOST];

最佳答案

您应该只需要在初始化/加载时调用一次[self.hostReachability startNotifier]。这是您的基本需求的概要,使用通知而不是链接线程上的 block 方法:

  1. 添加 tonymillion/Reachability库到您的项目。

  2. 为您的 Reachability 对象创建属性以确保它被保留,例如。

    @interface ViewController () {
    NSString *_HOST;
    }
    @property Reachability *hostReachability;
    @end
  3. 注册更改通知,并启动通知程序,例如。

    - (void)viewDidLoad
    {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:)
    name:kReachabilityChangedNotification
    object:nil];

    _HOST = @"www.google.com";
    self.hostReachability = [Reachability reachabilityWithHostname:_HOST];
    [self.hostReachability startNotifier];
    }

    - (void)viewDidUnload
    {
    [super viewDidUnload];

    [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
  4. 最后,创建一个 reachabilityChanged: 方法来处理您对 Reachability 更改的响应,例如。

    - (void)reachabilityChanged:(NSNotification*)notification
    {
    Reachability *notifier = [notification object];
    NSLog(@"%@", [notifier currentReachabilityString]);
    }

注意:如果您按下主页按钮并卸载应用程序,则可达性的更改应在返回到应用程序时立即触发通知。

关于iOS:可达性 - 返回应用程序后 startNotifier 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361274/

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