应用程序在圆形区域应用地理围栏时崩溃

Posted

技术标签:

【中文标题】应用程序在圆形区域应用地理围栏时崩溃【英文标题】:App is crashing while geofencing applied with circular region 【发布时间】:2018-01-17 05:56:16 【问题描述】:

我正在创建一个通过信标跟踪用户的应用程序,当应用程序处于终止状态时,我正在使用地理围栏来跟踪用户的圆形区域。

我正在创建一个圆形区域并确实进入,退出代表是否正确运行。但是在那个应用程序崩溃之后。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CLCircularRegion major]: unrecognized selector sent to instance 0x608000010470'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010e29bb0b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010dcbb141 objc_exception_throw + 48
    2   CoreFoundation                      0x000000010e30b134 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   CoreFoundation                      0x000000010e222840 ___forwarding___ + 1024
    4   CoreFoundation                      0x000000010e2223b8 _CF_forwarding_prep_0 + 120
    5   ShowAllBeaconList                   0x000000010d38ae90 -[MinewBeaconManager locationManager:didExitRegion:] + 128
    6   CoreLocation                        0x000000010e6a74e9 CLClientGetCapabilities + 38273
    7   CoreLocation                        0x000000010e699b55 CLClientInvalidate + 1051
    8   CoreFoundation                      0x000000010e241b5c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    9   CoreFoundation                      0x000000010e226e54 __CFRunLoopDoBlocks + 356
    10  CoreFoundation                      0x000000010e226a23 __CFRunLoopRun + 1971
    11  CoreFoundation                      0x000000010e226016 CFRunLoopRunSpecific + 406
    12  GraphicsServices                    0x0000000115f69a24 GSEventRunModal + 62
    13  UIKit                               0x000000010e7ee0d4 UIApplicationMain + 159
    14  ShowAllBeaconList                   0x000000010d37ccd7 main + 55
    15  libdyld.dylib                       0x0000000111b0965d start + 1
    16  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

谢谢

【问题讨论】:

CLCircularRegion 没有 major 属性;只有CLBeaconRegion 可以。如果您输入 CLCircularRegion,请不要尝试访问其 major 属性。 我没有使用 CLCircular 区域访问主要属性,但我也有 CLBeaconRegions。但不明白它如何使用圆形区域的主要属性:( 查看 MinewBeaconManager 的第 128 行 - 这是访问发生的地方。 MinewBeaconManager 只有 67 行 :( 我的应用程序中有一些 CLBeaconRegion 和一个 CLCircularRegion,我认为它们之间存在冲突。我们有什么有效的方法来处理同一屏幕上的不同区域 【参考方案1】:

当您响应 -didEnterRegion 和 -didExitRegion 时,您需要确保传入的 CLRegion 是一个特定的类。

目标-C

if ([region isKindOfClass:[CLCircularRegion class]]) 
    // Geofence

if ([region isKindOfClass:[CLBeaconRegion class]]) 
    // Beacon

斯威夫特

if region is CLCircularRegion 
    // Geofence

if region is CLBeaconRegion 
    // Beacon

您需要避免访问特定类中不可用的任何属性。如果您希望编译器帮助您,可以将其强制转换为特定对象。

【讨论】:

以上是关于应用程序在圆形区域应用地理围栏时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

应用程序挂起时如何使用 UIApplicationLaunchOptionsLocationKey 监视地理围栏区域

应用程序终止时停止地理围栏

处理公共区域的多个地理围栏过渡

应用程序在后台时的地理围栏设备

如何更改地理围栏的形状

如何提高区域跨界精度(模拟)(地理围栏)