重要的更改位置委托方法未被调用 [英] significant change location delegate methods not being called

查看:177
本文介绍了重要的更改位置委托方法未被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的所有代码都在AppDelegate.m中:

   - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

_locationMgr = [[CLLocationManager alloc] init];
[_locationMgr setDelegate:self];
if([_ locationMgr responsesToSelector:@selector(setAllowsBackgroundLocationUpdates :)]
[_locationMgr setAllowsBackgroundLocationUpdates:YES];
CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];

if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey]!= nil){
NSLog(@重新启动,因为重要的位置更改 - 重新启动SLC);
[_locationMgr startMonitoringSignificantLocationChanges];
}
else
{
if(authorizationStatus == kCLAuthorizationStatusAuthorizedAlways){
NSLog(@启动授权始终使用位置 - 启动SLC);
[_locationMgr startMonitoringSignificantLocationChanges];
}
else
{
NSLog(@启动,无权始终使用位置 - 请求授权);
if([_ locationMgr respondToSelector:@selector(requestAlwaysAuthorization)])
[_locationMgr requestAlwaysAuthorization];
}
}

if([userdefaults objectForKey:@pfuser] == nil){
NSLog(@in delegate signup);
SignUpController * signup = [[SignUpController alloc] init];
[self.window setRootViewController:signup];
}
else {
ViewController * map = [[ViewController alloc] init];
[self.window setRootViewController:map];
}
[self.window makeKeyAndVisible];

返回YES;


- (void)startSignificantChangeUpdates
{
deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@STARTmessage:@startSignificantChangeUpdates calledpreferredStyle:UIAlertControllerStyleAlert];

[deviceNotFoundAlertController addAction:deviceNotFoundAlert];
//如果此对象不是
//已经有一个,则创建位置管理器。
if(nil == _locationMgr){
_locationMgr = [[CLLocationManager alloc] init];
_locationMgr.delegate = self;
}

[CLLocationManager significantLocationChangeMonitoringAvailable];
[_locationMgr startMonitoringSignificantLocationChanges];
}

- (void)locationManger:(CLLocationManager *)manager didFailWithError :( NSError *)错误{
NSLog(@didFailWithError:%@,error);
deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@LOCATION FAIL消息:@didFailWithErrorpreferredStyle:UIAlertControllerStyleAlert];

[deviceNotFoundAlertController addAction:deviceNotFoundAlert];
}

//从CLLocationManagerDelegate协议中委派方法。
- (void)_locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@LOCATION UPDATEmessage:@didUpdateLocations calledpreferredStyle :UIAlertControllerStyleAlert];

[deviceNotFoundAlertController addAction:deviceNotFoundAlert];
//如果是相对较近的事件,请关闭更新以节省电量。
CLLocation * location = [locations lastObject];
NSDate * eventDate = location.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if(fabs(howRecent)< 15.0){
//如果事件是最近的,请执行一些操作。
NSLog(@纬度%+。6f,经度%+。6f \\\

location.coordinate.latitude,
location.coordinate.longitude);
}
}

没有任何警报发生,看起来像代表方法不被调用。



更新



现在我有: / p>

   - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

deviceNotFoundAlert = [UIAlertAction actionWithTitle:@OKstyle:UIAlertActionStyleDefault handler:nil];

...

}

//来自CLLocationManagerDelegate协议的委托方法。
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@LOCATION UPDATEmessage:@didUpdateLocations calledpreferredStyle :UIAlertControllerStyleAlert];

[deviceNotFoundAlertController addAction:deviceNotFoundAlert];
//如果是相对较近的事件,请关闭更新以节省电量。
CLLocation * location = [locations lastObject];
NSDate * eventDate = location.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if(fabs(howRecent)< 15.0){
//如果事件是最近的,请执行一些操作。
NSLog(@纬度%+。6f,经度%+。6f \\\

location.coordinate.latitude,
location.coordinate.longitude);
}
}

当我测试应用程序时,我打开它房子,然后关闭它,所以当我离开我的房子时,应该在某个时候发送警报(或3),但是我没有从任何代理方法(我发出警报的地方)获取警报。



我刚刚有一个想法,也许我必须显示主要的 UIViewController 而不是 AppDelegate



这可能是为什么我没有看到警报:如何在app delegate(obj-c)中添加UIAlertController



更新



这是我现在正在做的警报:

  deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@STARTmessage:@startSignificantChangeUpdates calledpreferredStyle:UIAlertControllerStyleAlert]; 

[deviceNotFoundAlertController addAction:deviceNotFoundAlert];

alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen] .bounds];
alertWindow.rootViewController = [[UIViewController alloc] init];
alertWindow.windowLevel = UIWindowLevelAlert + 1;
[alertWindow makeKeyAndVisible];
[alertWindow.rootViewController presentViewController:deviceNotFoundAlertController animated:YES completion:nil];

更新



警报似乎不是问题, startSignificantChangeUpdates 中的警报不会出现。是否应该出现在我的初始位置500米以上?



更新



任何人都可以帮助我理解这一点吗?


代理对象的方法是从您启动相应位置服务的线程中调用的。该线程本身必须有一个主动的运行循环,就像您应用程序主线程中的一样。


更新



我想我想出了上面的报价是什么...我现在有这样 - 我会在明天测试。

  ... 

if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey]!= nil){
NSLog(@重新启动,因为重要位置更改 - 重启SLC);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {
[_locationMgr startMonitoringSignificantLocationChanges];
});
}
else
{
if(authorizationStatus == kCLAuthorizationStatusAuthorizedAlways){
NSLog(@启动授权始终使用位置 - 启动SLC);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {
[_locationMgr startMonitoringSignificantLocationChanges];
});
}
else
{
NSLog(@启动,无权始终使用位置 - 请求授权);
if([_ locationMgr respondToSelector:@selector(requestAlwaysAuthorization)])
[_locationMgr requestAlwaysAuthorization];
}
}

...

我认为代码是在自己的线程上启动位置服务。有一件事我注意到,当我退出应用程序时,右上角的位置就会消失。我刚刚更新到iOS 10.在iOS 9中,右上角的位置箭头将停留在那里,但是当应用程序未运行时,它只会是黑色轮廓。这可能只是因为iOS 10而改变,或者现在因为我更新到10,现在还不行。或者,当位置服务在自己的线程上运行时会发生什么。从这里: iOS开始背景主题



更新



也许我没有正确使用线程,但正如我所说,现在当我关闭应用程序时,定位服务退出。当我在没有线程的情况下,位置服务箭头将停留在右上方,作为大纲。



更新



我看到服务应该在主线程上启动 - 所以现在我有:

  CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus]; 

NSLog(@启动无权始终使用位置 - 请求授权);
if([_ locationMgr respondToSelector:@selector(requestAlwaysAuthorization)]){
[_locationMgr requestAlwaysAuthorization];
}

if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey]!= nil){
NSLog(@重新启动,因为重要的位置更改 - 重启SLC);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {
[_locationMgr startMonitoringSignificantLocationChanges];
});
}
else if(authorizationStatus == kCLAuthorizationStatusAuthorizedAlways){
NSLog(@启动授权始终使用位置 - 启动SLC);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {
[_locationMgr startMonitoringSignificantLocationChanges];
});
}
else {
//
}

应用程式关闭时,右侧的箭头并不显示,这是iOS 10的新功能,不再显示?



更新



我不小心删除了: _locationMgr = [[CLLocationManager alloc] init]; 现在,箭头总是在那里,今天要测试。



更新



<我测试了它,仍然没有警报。

解决方案

我把我的电脑带在我的车里,看着控制台,我看到,重要的位置变化正在发生,因为我每隔500米获得位置更新。警报是唯一不起作用的事情,但它们与程序无关 - 他们只是在看看它是否正常工作。它正在使用以下代码:

   - (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

...

_locationMgr = [[CLLocationManager alloc] init];
[_locationMgr setDelegate:self];

if([_ locationMgr respondToSelector:@selector(setAllowsBackgroundLocationUpdates :)]
[_locationMgr setAllowsBackgroundLocationUpdates:YES];

CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];

NSLog(@启动无权始终使用位置 - 请求授权);
if([_ locationMgr respondToSelector:@selector(requestAlwaysAuthorization)]){
[_locationMgr requestAlwaysAuthorization];
}

if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey]!= nil){
NSLog(@重新启动,因为重要的位置更改 - 重启SLC);
[_locationMgr startMonitoringSignificantLocationChanges];
}
else if(authorizationStatus == kCLAuthorizationStatusAuthorizedAlways){
NSLog(@启动授权始终使用位置 - 启动SLC);
[_locationMgr startMonitoringSignificantLocationChanges];
}
else {
//
}

...

[self.window makeKeyAndVisible];

返回YES;
}

- (void)startSignificantChangeUpdates
{
//如果此对象不是
//已经有一个,则创建位置管理器。
if(nil == _locationMgr){
_locationMgr = [[CLLocationManager alloc] init];
_locationMgr.delegate = self;
}

[CLLocationManager significantLocationChangeMonitoringAvailable];

[_locationMgr startMonitoringSignificantLocationChanges];

deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@STARTmessage:@startSignificantChangeUpdates calledpreferredStyle:UIAlertControllerStyleAlert];

}

- (void)locationManger:(CLLocationManager *)manager didFailWithError:(NSError *)错误{
NSLog(@didFailWithError:%@,错误);
}

//从CLLocationManagerDelegate协议中委派方法。
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations :( NSArray *)位置{

//如果是相对较近的事件,请关闭更新以节省电量。
CLLocation * location = [locations lastObject];
NSDate * eventDate = location.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if(fabs(howRecent)< 15.0){
//如果事件是最近的,请执行一些操作。
NSLog(@纬度%+。6f,经度%+。6f \\\

location.coordinate.latitude,
location.coordinate.longitude);
}
}


All of my code is in AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];

    _locationMgr = [[CLLocationManager alloc] init];
    [_locationMgr setDelegate:self];
    if([_locationMgr respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])
        [_locationMgr setAllowsBackgroundLocationUpdates:YES];
    CLAuthorizationStatus authorizationStatus= [CLLocationManager authorizationStatus];

    if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey] != nil) {
        NSLog(@"relaunching because of significant location change - restarting SLC");
        [_locationMgr startMonitoringSignificantLocationChanges];
    }
    else
    {
        if (authorizationStatus == kCLAuthorizationStatusAuthorizedAlways) {
            NSLog(@"launching with authorization to always use location - starting SLC");
            [_locationMgr startMonitoringSignificantLocationChanges];
        }
        else
        {
            NSLog(@"launching with no authorization to always use location - requesting authorization");
            if([_locationMgr respondsToSelector:@selector(requestAlwaysAuthorization)])
                [_locationMgr requestAlwaysAuthorization];
        }
    }

    if([userdefaults objectForKey:@"pfuser"] == nil) {
        NSLog(@"in delegate signup");
        SignUpController *signup = [[SignUpController alloc] init];
        [self.window setRootViewController:signup];
    }
    else {
        ViewController *map = [[ViewController alloc] init];
        [self.window setRootViewController:map];
    }
    [self.window makeKeyAndVisible];

    return YES;
}

- (void)startSignificantChangeUpdates
{
    deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@"START" message:@"startSignificantChangeUpdates called" preferredStyle:UIAlertControllerStyleAlert];

    [deviceNotFoundAlertController addAction:deviceNotFoundAlert];
    // Create the location manager if this object does not
    // already have one.
    if (nil == _locationMgr) {
        _locationMgr = [[CLLocationManager alloc] init];
        _locationMgr.delegate = self;
    }

    [CLLocationManager significantLocationChangeMonitoringAvailable];
    [_locationMgr startMonitoringSignificantLocationChanges];
}

-(void)locationManger:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"didFailWithError: %@", error);
    deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@"LOCATION FAIL" message:@"didFailWithError" preferredStyle:UIAlertControllerStyleAlert];

    [deviceNotFoundAlertController addAction:deviceNotFoundAlert];
}

// Delegate method from the CLLocationManagerDelegate protocol.
- (void)_locationManager:(CLLocationManager *)manager
      didUpdateLocations:(NSArray *)locations {
    deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@"LOCATION UPDATE" message:@"didUpdateLocations called" preferredStyle:UIAlertControllerStyleAlert];

    [deviceNotFoundAlertController addAction:deviceNotFoundAlert];
    // If it's a relatively recent event, turn off updates to save power.
    CLLocation* location = [locations lastObject];
    NSDate* eventDate = location.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (fabs(howRecent) < 15.0) {
        // If the event is recent, do something with it.
        NSLog(@"latitude %+.6f, longitude %+.6f\n",
              location.coordinate.latitude,
              location.coordinate.longitude);
    }
}

None of the alerts happen, it seems like the delegate methods aren't being called.

UPDATE

Now I have:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];

    deviceNotFoundAlert = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];

    ...

}

// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
      didUpdateLocations:(NSArray *)locations {
    deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@"LOCATION UPDATE" message:@"didUpdateLocations called" preferredStyle:UIAlertControllerStyleAlert];

    [deviceNotFoundAlertController addAction:deviceNotFoundAlert];
    // If it's a relatively recent event, turn off updates to save power.
    CLLocation* location = [locations lastObject];
    NSDate* eventDate = location.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (fabs(howRecent) < 15.0) {
        // If the event is recent, do something with it.
        NSLog(@"latitude %+.6f, longitude %+.6f\n",
              location.coordinate.latitude,
              location.coordinate.longitude);
    }
}

When I test the app, I open it at my house, and then close it, so that when I leave my house it should send an alert (or 3) at some point, but I am not getting alerts from any of the delegate methods (where I placed alerts).

I just had an idea, maybe I have to display the alerts from the main UIViewController, not the AppDelegate?

This may be why I am not seeing the alerts: How do I add a UIAlertController in app delegate (obj-c)

UPDATE

This is how I am doing the alerts now:

deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@"START" message:@"startSignificantChangeUpdates called" preferredStyle:UIAlertControllerStyleAlert];

[deviceNotFoundAlertController addAction:deviceNotFoundAlert];

alertWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
alertWindow.rootViewController = [[UIViewController alloc] init];
alertWindow.windowLevel = UIWindowLevelAlert + 1;
[alertWindow makeKeyAndVisible];
[alertWindow.rootViewController presentViewController:deviceNotFoundAlertController animated:YES completion:nil];

UPDATE

The alerts did not seem to be the issue, the alert in startSignificantChangeUpdates never appears. Should it appear once I am 500m from my initial location?

UPDATE

Can anyone help me understand this?

The methods of your delegate object are called from the thread in which you started the corresponding location services. That thread must itself have an active run loop, like the one found in your application’s main thread.

UPDATE

I think I figured out what the above quote is saying...and I have this now - I will test tomorrow.

...

if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey] != nil) {
        NSLog(@"relaunching because of significant location change - restarting SLC");
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [_locationMgr startMonitoringSignificantLocationChanges];
        });
    }
    else
    {
        if (authorizationStatus == kCLAuthorizationStatusAuthorizedAlways) {
            NSLog(@"launching with authorization to always use location - starting SLC");
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [_locationMgr startMonitoringSignificantLocationChanges];
            });
        }
        else
        {
            NSLog(@"launching with no authorization to always use location - requesting authorization");
            if([_locationMgr respondsToSelector:@selector(requestAlwaysAuthorization)])
                [_locationMgr requestAlwaysAuthorization];
        }
    }

...

I think that code is starting the location services on its own thread. One thing I noticed already, is that when I exit the app, the location in the top right goes away. I just updated to iOS 10. In iOS 9 the location arrow in the top right would stay there, but it would only be a black outline when the app was not running. This could just be something they changed with iOS 10, or now because I updated to 10, something else isn't working now. Or that is what happens when the location services are run on their own thread. From here: iOS start Background Thread

UPDATE

Maybe I am not using the thread correctly, but as I said, now when I close the app, location services quits. When I was doing it without the thread the location service arrow would stay in the top right, as an outline.

UPDATE

I read that the service should be started on the main thread - so now I have:

CLAuthorizationStatus authorizationStatus= [CLLocationManager authorizationStatus];

    NSLog(@"launching with no authorization to always use location - requesting authorization");
    if([_locationMgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [_locationMgr requestAlwaysAuthorization];
    }

    if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey] != nil) {
        NSLog(@"relaunching because of significant location change - restarting SLC");
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [_locationMgr startMonitoringSignificantLocationChanges];
        });
    }
    else if (authorizationStatus == kCLAuthorizationStatusAuthorizedAlways) {
        NSLog(@"launching with authorization to always use location - starting SLC");
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [_locationMgr startMonitoringSignificantLocationChanges];
        });
    }
    else {
        //
    }

The arrow in the right doesn't show up when the app is closed, is this something new to iOS 10 where they don't show it anymore?

UPDATE

I accidentally deleted: _locationMgr = [[CLLocationManager alloc] init]; I put in and now the arrow is always there, going to test today.

UPDATE

I tested it, still no alerts.

解决方案

I took my computer with me in my car, and watched the console, and I saw that the significant location changes are happening now because I get location updates every 500m. The alerts are the only thing not working, but they are irrelevant to the program - they were just there to see if it was working. It is working with this code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];

    ...

    _locationMgr = [[CLLocationManager alloc] init];
    [_locationMgr setDelegate:self];

    if([_locationMgr respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])
        [_locationMgr setAllowsBackgroundLocationUpdates:YES];

    CLAuthorizationStatus authorizationStatus= [CLLocationManager authorizationStatus];

    NSLog(@"launching with no authorization to always use location - requesting authorization");
    if([_locationMgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [_locationMgr requestAlwaysAuthorization];
    }

    if([launchOptions valueForKey:UIApplicationLaunchOptionsLocationKey] != nil) {
        NSLog(@"relaunching because of significant location change - restarting SLC");
        [_locationMgr startMonitoringSignificantLocationChanges];
    }
    else if (authorizationStatus == kCLAuthorizationStatusAuthorizedAlways) {
        NSLog(@"launching with authorization to always use location - starting SLC");
        [_locationMgr startMonitoringSignificantLocationChanges];
    }
    else {
        //
    }

    ...

    [self.window makeKeyAndVisible];

    return YES;
}

- (void)startSignificantChangeUpdates
{
    // Create the location manager if this object does not
    // already have one.
    if (nil == _locationMgr) {
        _locationMgr = [[CLLocationManager alloc] init];
        _locationMgr.delegate = self;
    }

    [CLLocationManager significantLocationChangeMonitoringAvailable];

    [_locationMgr startMonitoringSignificantLocationChanges];

    deviceNotFoundAlertController = [UIAlertController alertControllerWithTitle:@"START" message:@"startSignificantChangeUpdates called" preferredStyle:UIAlertControllerStyleAlert];

}

-(void)locationManger:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"didFailWithError: %@", error);
}

// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
      didUpdateLocations:(NSArray *)locations {

    // If it's a relatively recent event, turn off updates to save power.
    CLLocation* location = [locations lastObject];
    NSDate* eventDate = location.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (fabs(howRecent) < 15.0) {
        // If the event is recent, do something with it.
        NSLog(@"latitude %+.6f, longitude %+.6f\n",
              location.coordinate.latitude,
              location.coordinate.longitude);
    }
}

这篇关于重要的更改位置委托方法未被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆