2017-05-17 205 views
1

我在swift文件中有以下函数。我使用NSDate代替startDate从Obj C文件中调用它。很多时候,并非每次,我的应用程序都崩溃了“Date._unconditionallyBridgeFromObjectiveC(NSDate?)”。我怎样才能解决这个问题?Swift 3中的Date._unconditionallyBridgeFromObjectiveC(NSDate?)崩溃

func trackMeetingEnded(_ name: String, startDate: Date, backgroundTime: TimeInterval) {} 

堆栈跟踪

 
Crashed: com.apple.main-thread 
0 libswiftFoundation.dylib  0x102061e98 static Date._unconditionallyBridgeFromObjectiveC(NSDate?) -> Date + 72 
1 Acid       0x10017ece4 @objc static ClusteredMixpanel.trackMeetingEnded(String, startDate : Date, backgroundTime : Double) ->() (MixpanelMeeting.swift) 
2 Acid       0x10073e1bc __56-[MeetingLifeCycleViewController stateInitialization]_block_invoke.221 (MeetingLifeCycleViewController.m:267) 
3 Acid       0x1001ee5c4 partial apply for thunk (StateMachine.swift) 
4 Acid       0x1001ea70c specialized State.willLeaveState(State) ->() (StateMachine.swift:238) 
5 Acid       0x1001ead90 specialized StateMachine.transitionToState(State) -> Bool (StateMachine.swift) 
6 Acid       0x1001e1f18 @objc StateMachine.transitionToState(State) -> Bool (StateMachine.swift) 
7 Acid       0x10073ace0 -[MeetingLifeCycleViewController dismissCall] (MeetingLifeCycleViewController.m:538) 
8 Acid       0x10086d648 -[InMeetingViewController hangup] (InMeetingViewController.m:531)

enter code here

相信的NSDate到日期的转换是通过OS在这种情况下完成的。只有在迁移到Swift后才能看到该问题。3.是否有任何已知的问题?我在网上找不到任何东西:(

+0

粘贴您的功能或代码 – kb920

回答

2

您可能需要仔细检查来自Objective-C的NSDate实际上是否为非nil,因为没有任何内容在Obj-C一侧主动执行此操作雨燕的侧面。

我结束了尽可能多的Date S转换到Date? S作为我能找到正在从对象 - 调用,然后做了一大堆的guard let检查。

您也可以扔在一个assertionFailure当你在开发关于那些日期在哪里的时候对你大吼你不期待来自。例如:

guard let date = passedInDate else { 
    assertionFailure("Turns out the passed-in date was nil!") 
    return 
} 

然后看看你的堆栈跟踪时被击中,看看你是否可以得到,为什么你却得到了意想不到nil值有更好的抓地力。

更新:Here是Swift源代码中发生崩溃的地方。

+1

我必须将startDate设置为可选。事实证明,零被通过。 – Vinuta