2017-08-08 103 views
0

我有几个客户抱怨我的应用程序崩溃。我从来没有能够重现它。 Crashlitics已检测到崩溃:解包时出现崩溃可选

func addDevice(unconfiguredDevice: UnconfiguredDevice) { 

    if let macSegment = unconfiguredDevice.macSegmentFromSSID { <<-CRASH 
     print("unconfigured mac: \(macSegment)") 

     if let setupDevice = self.unconfiguredDevices.value.first(where: { Device in Device.macEnd == unconfiguredDevice.macSegmentFromSSID! }) { 
      setupDevice.unconfiguredDevice = unconfiguredDevice 
     } else { 
      self.unconfiguredDevices.value.append(SetupDevice(unconfiguredDevice: unconfiguredDevice)) 
     } 
    } 
} 

崩溃类型是EXC_BREAKPOINT。我在这里看到了其他几个线程,这种类型的崩溃可能与可选的解包有关,并且确实macSegment方法在那里返回一个可选项。但我不明白这个问题可能是什么。 (顺便提一下,这种方法用于检测可通过WAC配置的设备)。

任何想法/提示/建议?

+0

'UnconfiguredDevice'是隐式解包的可选项吗?如果是这样,你应该用'?'标记它:'if let macSegment = unconfiguredDevice?.macSegmentFromSSID {' – the4kman

+0

'你试图强制打开nil值。问题在这里unconfiguredDevice.macSegmentFromSSID! – iMuzahid

+0

UnconfiguredDevice由WAC返回..我不认为它是可选的.. macSegment是一个扩展方法,它返回一个可选的。 – user426132

回答

0

发生崩溃是因为macSegmentFromSSID在你试图拆包时为零。 试试就像

if let setupDevice = self.unconfiguredDevices.value.first(where: { Device in Device.macEnd == macSegment}) { 
      setupDevice.unconfiguredDevice = unconfiguredDevice 
     } 
+0

这就是我的想法......但是对于崩溃的可重复性(0在我身边)我需要发布一个测试版本,看看测试版测试者说了些什么。 – user426132

+0

@ user426132 hmm okk。 –

+0

@ user426132如果你这样做: if unconfiguredDevice.macSegmentFromSSID!= nil {//其他代码在这里。 let macSegment = unconfiguredDevice.macSegmentFromSSID } –