CLLocationManager startMonitoringForRegion 在 ios 8.4 上崩溃
Posted
技术标签:
【中文标题】CLLocationManager startMonitoringForRegion 在 ios 8.4 上崩溃【英文标题】:CLLocationManager startMonitoringForRegion crashes on ios 8.4 【发布时间】:2016-02-15 08:41:42 【问题描述】:我发现 startMonitoringForRegion
仅在 ios 8.4 上崩溃并给我这个错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: major)'
*** First throw call stack:
(0x2af4a49f 0x38744c8b 0x2ae67c63 0x3c3bbd 0x380d6b 0x17fcd8 0x19f170 0xebe9db 0xebe9c7 0xec23ed 0x2af103b1 0x2af0eab1 0x2ae5c3c1 0x2ae5c1d3 0x3225a0a9 0x2e46a7b1 0x2ad734 0x38cc4aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
认为CLBeaconRegion
主要值可以为零。所以我不知道发生了什么。
代码如下:
if let context = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext
var dataFetch = DataFetcher()
dataFetch.fetchBeacons(context, completion: (success) -> Void in
dispatch_async(dispatch_get_main_queue())
var beacons = Beacon.getAllBeacons(context)
if let uuid = beacons.first?.uuid
var region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: uuid), identifier: "iBeacon")
region.notifyOnEntry = true
region.notifyOnExit = true
if self.isBluetoothOn
self.manager.startMonitoringForRegion(region)
)
【问题讨论】:
您是否 100% 确定是self.manager.startMonitoringForRegion(region)
代码行导致了所示异常?我怀疑它可能是别的东西。尝试在该行上设置断点并越过它以验证确实是导致它的原因。
尝试设置异常断点:developer.apple.com/library/ios/recipes/…
【参考方案1】:
错误是
setObjectForKey:对象不能为nil(key:major)
这更有可能是 NSDictionary 错误。正如它所说,您将对象设置为 nil。在您的major
中检查一次关键对象是否为零或不在您的viewcontroller
中的任何位置
【讨论】:
主要值是可选的。它在这里为零,但在其他 ios 版本中它不会崩溃。 可能是iOS已修复,这是iOS 9之后的问题,原因是您的旧xcode中不起作用,检查一次,如果它是nil,很容易访问【参考方案2】:这更有可能是 NSDictionary 错误。正如它所说,您将对象设置为 nil。
您可以通过添加“异常”断点来找到它的实际原因。它将自动停止您的应用程序并指向您收到此错误的代码位置。为了获得更多帮助,我附上了展示如何添加异常断点的图片。
1)转到项目导航器的断点部分。
2)然后点击左下角的'+'图标并选择添加异常断点。
3)添加断点后,重新运行你的代码,你会发现问题出在哪里。
希望这会有所帮助。
【讨论】:
【参考方案3】:经过多天的搜索,我发现我有一个第三方框架搞砸了这个。该框架是 taplytics 的 sdk,一个推送通知服务。
谢谢大家的帮助。
【讨论】:
以上是关于CLLocationManager startMonitoringForRegion 在 ios 8.4 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章
为啥'CLLocationManager.locationServicesEnabled()'默认为真?
Xcode 6 GM - CLLocationManager
CLLocationManager 和 CLGeoCoder
CLLocationManager:没有调用 didChangeAuthorization 和 didRangeBeacons