CLLocationManager startMonitoringForRegion在ios 8.4上崩溃

时间:2016-02-15 08:41:42

标签: ios swift core-location ibeacon estimote

我发现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)
                }
            }
        }
    })
}

3 个答案:

答案 0 :(得分:1)

错误是

  

setObjectForKey:object不能为nil(key:major)

这更可能是NSDictionary错误。正如它所说,你将对象设置为零。在viewcontroller

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:elevation="0dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="hr.app.liftme.liftmehr.Vjezbe" tools:showIn="@layout/activity_vjezbe"> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:text="Vježbe" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <include android:layout_height="wrap_content" android:layout_width="match_parent" layout="@layout/toolbar_layout" > </include> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" app:tabMode="scrollable" app:tabGravity="fill" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/viewPager" android:background="#ffffff"> </android.support.v4.view.ViewPager> </android.support.design.widget.AppBarLayout> </LinearLayout> 密钥对象中的一次检查是否为零

答案 1 :(得分:0)

这更可能是NSDictionary错误。正如它所说,你将对象设置为nil。

您可以通过添加“异常”断点来找到它的实际原因。它将自动停止您的应用程序并指向您收到此错误的代码位置。为了获得更多帮助,我附上了显示如何添加异常断点的图像。

1)转到项目导航器的断点部分。

2)然后点击左下角的“+”图标,选择添加例外断点。

enter image description here

3)添加断点后,重新运行代码,您将找到导致问题的位置。

enter image description here

希望这有帮助。

答案 2 :(得分:0)

经过多天的搜索,我发现我的第三方框架搞乱了。该框架是taplytics的推文,推送通知服务。

谢谢你们的帮助。