2016-09-17 6 views
1

나는 전혀 일어나지 않아야 할 매우 이상한 사고로 어려움을 겪었습니다. Hockeyapp을 통해 충돌 보고서를받습니다. 앱이 충돌해서는 안되는 라인에서 충돌을 계속보고합니다. 나는 벌써 1 주일 동안이 문제에 직면 해왔다.Swift ("if, let, where"문)에서 충돌이 발생하지 않아야하는 줄의 충돌

if let booking = rescheduleBooking where booking.confirmed! == 0 { 
    existingRequests.append(booking) 
} 

라인 755은 if 문입니다 :

은 충돌 보고서를 코드의

0 TeacherBox       0x00000001000864f0 TeacherBox.RequestLessonViewController.loadExistingRequests() ->() (RequestLessonViewController.swift:755) 
1 TeacherBox       0x0000000100086514 @objc TeacherBox.RequestLessonViewController.loadExistingRequests() ->() (RequestLessonViewController.swift:0) 
2 TeacherBox       0x0000000100086a84 function signature specialization <Arg[0] = Dead> of TeacherBox.RequestLessonViewController.viewDidAppear (Swift.Bool) ->() (RequestLessonViewController.swift:122) 
3 TeacherBox       0x000000010007e570 @objc TeacherBox.RequestLessonViewController.viewDidAppear (Swift.Bool) ->() (RequestLessonViewController.swift:0) 
4 UIKit        0x00000001895b84dc -[UIViewController _setViewAppearState:isAnimating:] + 844 
5 UIKit        0x00000001895b8a40 -[UIViewController _endAppearanceTransition:] + 216 
6 UIKit        0x0000000189671038 -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 1232 
7 UIKit        0x0000000189742198 __49-[UINavigationController _startCustomTransition:]_block_invoke + 228 
8 UIKit        0x00000001896c7cc4 -[_UIViewControllerTransitionContext completeTransition:] + 112 
9 UIKit        0x00000001898181ec __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke.97 + 708 
10 UIKit        0x00000001895d9214 -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 488 
11 UIKit        0x00000001895d8d38 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 308 
12 UIKit        0x00000001895d8b78 -[UIViewAnimationState animationDidStop:finished:] + 156 

라인입니다. "if, let, where"명령문에서 "let"은 rescheduleBooking의 존재를 확인합니다. 존재하고 할당 되었으면 where 문이 실행됩니다. ... 맞습니까? 어쨌든, 테스트를 마쳤습니다. 내 장치 및 시뮬레이터에서 로컬로 작동하며 값이 아무리 많아도 충돌하지 않습니다 ... 손에없는 다른 장치에서 발생하고 있습니다 ...

어떤 조언을하거나 어쩌면 내가 "if, let where"절을 올바르게 이해하지 못하면 귀하의 도움과 의견에 매우 감사 할 것입니다.

감사합니다 ..

+0

제거'let'을 시도 :

당신은 booking.confirmednil 있지 않은지 확인하기 위해 다른하자를 추가 할 수 있습니다. –

+5

'booking.confirmed'가 무효 인 경우 충돌이 발생합니다 – Paulw11

답변

1

의 이해 조항이 정확한지 "여기서 할 경우 -"하지만 if let booking = rescheduleBookingrescheduleBookingnil 아님을 확인합니다 마음에 있어야하고 booking에 할당합니다. 이제 bookingnil이 아니더라도 booking.confirmednil이 아니므로 nil 인 경우 강제로 해제하면 충돌이 발생합니다.

if let booking = rescheduleBooking, let bookingConfirmed = booking.confirmed where bookingConfirmed == 0 { 
    existingRequests.append(booking) 
} 
+0

안녕하세요, 답변 해 주셔서 감사합니다. 이제는 선택 사항이 아니며 더 이상 선택 사항이 아닙니다. 계속해서 충돌합니다 ... –

+0

우리는 일을해야합니다. (3) TeacherBox 0x000000010007e570 @objc TeacherBox.RequestLessonViewController.viewDidAppear (Swift.Bool) ->() (RequestLessonViewController.swift : 0) '과 관련된 크래시의 가장 낮은 라인부터. 해당 라인의 관련 코드를 포함시켜주십시오. –

+0

그리고 충돌 보고서에서 행 번호 2와 1에 대한 완전한 충돌 보고서와 관련 코드를 포함 시키십시오. 충돌을 일으키는 원인을 찾기 위해 진행중인 작업을 볼 수 있습니다. –