2016-08-16 2 views
0

채팅 앱에 대한 두 가지보기가 있습니다.
하나는 ChatListView (tableview)이고 다른 하나는 ChatDetail입니다. ChatListView 클래스에서 이 예기치 않게 발견되었습니다. iOS 용 Swift에서 선택적 값을 래핑하지 않았습니다.

의 chatListCell에서

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let cell = tableView.dequeueReusableCellWithIdentifier("ChatCell") as! ChatListCell 

    if let rvc = self.storyboard?.instantiateViewControllerWithIdentifier("ChatDetail") as? ChatDetail{ 
     rvc.managedObjectContext = self.managedObjectContext 
     //here is the error occur "unexpectedly found nil while unwrapping an Optional value" 
     rvc.counter = cell.chatUserName?.text! 
     rvc.title = cell.chatUserName?.text! 
    } 
} 

의 ChatDetail에서

class ChatListCell: UITableViewCell { 

@IBOutlet weak var chatUserName: UILabel! 
@IBOutlet weak var lastMessage: UILabel! 
@IBOutlet weak var lastDate: UILabel! 

} 

, 나는 다음과 같은 couner을 선언했다.

class ChatDetail: JSQMessagesViewController, NSFetchedResultsControllerDelegate { 

var counter: String? 
} 

시도했습니다 (cell.chatUserName?. 텍스트!)! Xcode 권장처럼. 그러나 같은 오류가 발생합니다.

+0

사용해야합니까? '셀'을 큐에서 꺼낼 때 또는 텍스트 속성에 액세스 할 때? –

+0

항상 그렇듯이 ** 뷰 (테이블 뷰 셀)에서 데이터를 검색하지 않고 모델 (데이터 소스 배열) – vadian

답변

0

Apple은 사용하지 않는 것이 좋습니다! 언 래핑을 강요한다. cell.chatUserName? .text가 nil 인 것으로 보입니다. 문

사용이 코드

if let chatUserName = cell.chatUserName?.text { 
    rvc.counter = chatUserName 
    rvc.title = chatUserName 
} 
+0

에서 검색하면 오류가 발생합니다. – kimpro

+0

한국어를 환영합니다! chatUserName이 선언되지 않은 UILable()처럼 인스턴스로 만들어 졌는지 확인하십시오. 나는 여기에 한국어를 쓸 수 없다. ( –

+0

또는 .managedObjectContext와 rvc.counter도 확인하자! –

0

은 스토리 보드의 프로토 타입 셀에 ChatListCell 클래스를 할당했는지 확인하면 코드를 입력 할 수 있습니다 디버그. 다른 한가지는 chatUserName 변수를 사용하기 전에 셀을 렌더링해야한다는 것입니다. 셀/테이블이 렌더링되기 전에 해당 변수에 액세스하려고하지 않는지 확인하십시오. 한 가지 다른 점은 String에 카운터를 설정하는 것입니다. 값을 0으로하는 Int로 카운터를 초기화하지 않는 이유는 무엇입니까? var counter: Int = 0.

0

let cell = tableView.dequeueReusableCellWithIdentifier("ChatCell") as! ChatListCell 

didSelectRowAtIndexPath에서 사용할 수 없습니다이 코드. 이렇게하면 새 셀이 제공되거나 재사용 할 수있는 기존 셀을 제공 할 수 있지만 셀이 선택되지는 않습니다. 전달하고자하는 값을 가져 오려면 indexPath.row을 사용하여 데이터 소스 배열로 직접 이동할 수 있어야합니다. 셀에 액세스 할 필요가 없습니다. 당신은, 그러나, 선택된 행에있는 셀을 검색 할 않은 경우

, 당신은 문제의 원인이되는 옵션을 명시 적으로 풀어 어느

if let cell = tableView.cellForRowAtIndexPath(indexPath) as? ChatListCell { 
    // Do something with the cell 
} 
관련 문제