应用程序在圆形区域应用地理围栏时崩溃
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
您需要避免访问特定类中不可用的任何属性。如果您希望编译器帮助您,可以将其强制转换为特定对象。
【讨论】:
以上是关于应用程序在圆形区域应用地理围栏时崩溃的主要内容,如果未能解决你的问题,请参考以下文章