Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
目标C:iOS 14如何进行网络隐私权限检查_Ios_Objective C_Xcode - Fatal编程技术网

目标C:iOS 14如何进行网络隐私权限检查

目标C:iOS 14如何进行网络隐私权限检查,ios,objective-c,xcode,Ios,Objective C,Xcode,我正在使用IOT天气连接显示器(使用本地网络),该显示器使用iOS应用程序与路由器连接。显示器和iOS应用程序之间的连接由本地网络完成。连接时弹出允许本地网络隐私,但我想提前检查用户是否允许本地网络权限。我指的是这个 但是我正在寻找Objective-C中的代码。请帮助我 这是我用Swift编写的原始答案,您也可以从objc使用它,无需任何努力 但是,如果您有一个纯ObjC项目,并且不想添加swift文件,那么这是一种类似的方法,其工作原理相同: // LocalNetworkPrivacy.

我正在使用IOT天气连接显示器(使用本地网络),该显示器使用iOS应用程序与路由器连接。显示器和iOS应用程序之间的连接由本地网络完成。连接时弹出允许本地网络隐私,但我想提前检查用户是否允许本地网络权限。我指的是这个 但是我正在寻找Objective-C中的代码。请帮助我


这是我用Swift编写的原始答案,您也可以从objc使用它,无需任何努力

但是,如果您有一个纯ObjC项目,并且不想添加swift文件,那么这是一种类似的方法,其工作原理相同:

// LocalNetworkPrivacy.h

@interface LocalNetworkPrivacy : NSObject

- (void)checkAccessState:(void (^)(BOOL))completion;
    
@end

// LocalNetworkPrivacy.m

#import <UIKit/UIKit.h>
#import "LocalNetworkPrivacy.h"

@interface LocalNetworkPrivacy () <NSNetServiceDelegate>

@property (nonatomic) NSNetService *service;
@property (nonatomic) void (^completion)(BOOL);
@property (nonatomic) NSTimer *timer;
@property (nonatomic) BOOL publishing;

@end

@implementation LocalNetworkPrivacy

- (instancetype)init {
    if (self = [super init]) {
        self.service = [[NSNetService alloc] initWithDomain:@"local." type:@"_lnp._tcp." name:@"LocalNetworkPrivacy" port:1100];
    }
    return self;
}

- (void)dealloc {
    [self.service stop];
}

- (void)checkAccessState:(void (^)(BOOL))completion {
    self.completion = completion;
    
    self.timer = [NSTimer scheduledTimerWithTimeInterval:2 repeats:YES block:^(NSTimer * _Nonnull timer) {
        if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) {
            return;
        }
        
        if (self.publishing) {
            [self.timer invalidate];
            self.completion(NO);
        }
        else {
            self.publishing = YES;
            self.service.delegate = self;
            [self.service publish];
        }
    }];
}


#pragma mark - NSNetServiceDelegate

- (void)netServiceDidPublish:(NSNetService *)sender {
    [self.timer invalidate];
    self.completion(YES);
}

@end

注意:您必须设置
NSLocalNetworkUsageDescription
,并将“\u lnp.\u tcp.”添加到
NSBonjourServices
到您的Info.plist中