2017-11-26 6 views
1

이 오류의 의미를 이해하는 데 문제가 있습니다. 내 응용 프로그램은 Swift 4로 마이그레이션 할 때까지 제대로 작동했습니다. 이제보기 컨트롤러를 여러 개 열려고 시도 할 때이 오류가 발생합니다. tableView:numberOfRowsInSection Swift 3.2에서 이러한 오류가 발생하지 않았습니다. numberOfRowsInSection 메서드는 모든 경우에 구현되었으며 정상적으로 나타납니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?인식 할 수없는 선택기가 인스턴스로 전송 됨 - 스위프트 4 만

2017년 11월 26일 10 : 21 : 04.973523-0600 Y2GOsp [27,701 : 6,382,461] - [Y2GOsp.ClientDetailViewController있는 tableView : numberOfRowsInSection :] : 미정 선택기 2017년 11월 26일 10 0x7fa51c89f000 인스턴스에 보내 21 : 43.328635-0600 Y2GOsp는 [27,701 : 6,382,461]를 *** 인해 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유 : -

'[Y2GOsp.ClientDetailViewController 있는 tableView : numberOfRowsInSection는 :] 미정 선택기 인스턴스 0x7fa51c89f000 전송'

num berOfRowsInSection 구현 :

예 1 :

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

예 2 :

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return dayAppoints.count 
} 
+0

'numberOfRowsInSection' 구현을 질문에 추가하십시오. – vacawama

+0

당신이'tableview : ...'대신'tableview : ...'를 썼다는 것을 알고 있습니까? – vikingosegundo

+0

그냥 오타입니다. 나는 그것을 업데이트했다. @vacawama, 실패한 viewController 중 두 개의 구현 예제를 추가했습니다. – Lastmboy

답변

5

@Hamish 그의 주석에서이 문제를 확인했다. class 선언에 UITableViewDataSource을 (를) 추가하는 것을 잊었습니다. 따라서 데이터 소스 메소드가 Objective-C에 노출되지 않았습니다.

@objc을 메서드에 추가하는 것이 좋습니다.

스위프트 3에서 작동 한 이유는 NSObject (UIViewController)에서 파생 된 클래스의 모든 메소드가 Objective-C에 제공 되었기 때문입니다.

Swift 4 (due to SE-0160)에서 기본 클래스에 그렇게 표시된 함수를 재정의하거나이 함수가 요구 사항을 충족시키는 경우를 제외하고는 셀렉터를 통해 호출되는 @objc으로 함수에 명시 적으로 태그를 지정해야합니다 @objc 프로토콜 정의