2015-01-30 2 views
0

저는 잠시만 기다렸습니다. 코어 데이터를 사용하는 UITableView 셀에서 새보기로 데이터를 전달하려고합니다. . Segue 코드를 준비하는 과정에서 다양한 변수를 시도했지만 해결되지 않은 식별자 오류가 계속 발생합니다. 아래 코드를 참조하십시오. 무엇이 누락 되었습니까?행을 선택하면 tableView에서 새보기로 코어 데이터를 전달하려고합니다. 오류가 계속 발생합니다.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cellIdentifier = "myEventsCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as MyEventsTableViewCell 

    let eventData = myEvents [indexPath.row] 
    cell.eventNameLabel.text = "Name: " + eventData.eventName 
    cell.startDateLabel.text = "Start: " + eventData.startDate 
    cell.endDateLabel.text = "End: " + eventData.endDate 

    cell.backgroundColor = UIColor.clearColor() 

    return cell 
} 

override func prepareForSegue (segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "showEventDetails" { 
     if let indexPath = self.tableView.indexPathForSelectedRow() { 
      let destinationController = segue.destinationViewController as eventDetailView 
      destinationController.eventNameLabel.text = "Name: " + eventData.eventName [indexPath.row] 
      destinationController.eventStartLabel.text = "Start: " + eventData.startDate [indexPath.row] 
      destinationController.eventEndLabel.text = "End: " + eventData.endDate [indexPath.row] 
      destinationController.eventDetailLabel.text = eventData.details [indexPath.row] 
     } 
    } 
} 
+0

오류를 바꾸지 마십시오. 귀하의 질문에 실제 오류를 붙여 넣으십시오. 또한 오류를 어디서 들었는지 알려줍니다 (어떤 행인지 알고 있다면). – rdelmar

답변

0

전송하려는 객체를 어떻게 알 수 있습니까? 당신은 같은 방법으로 개체를 호출하는 놓친 :

let thisTask = fetchedResultsController.objectAtIndexPath(indexPath!) as YOUROBJECT 

또는 다른 것을 NSFetchedResultController를 사용하지 않는 경우 - 예를 들면 다음과 같습니다 않는 방법 EVENTDATA = myEvents가 [indexPath]

이 몰라하자 당신의 모델이 그렇게 보일 것 같아서 정확하지는 않을 것입니다 ...하지만 확실히 당신은 어떤 객체인지 세그 (segue)에게 알려주지 않을 것입니다.

0

eventData 무엇 :

"Name: " + eventData.eventName [indexPath.row] 

당신이 구조를 다시 사용하지 않는 이유를 위의 코드가 작동하면

let eventData = myEvents [indexPath.row] 

다음

destinationController.eventNameLabel.text = "Name: " + eventData.eventName 
    /* code */ 

값에 액세스 할 수 목적지 컨트롤러 용?

0

오류를 게시하지 않았으므로 오류의 원인인지는 모르겠지만 대상 컨트롤러에서 레이블의 텍스트를 설정할 수 없습니다. prepareForSegue가 호출 될 때 대상 컨트롤러가 인스턴스화되었지만 뷰가 아직로드되지 않았습니다. 따라서, 그 콘센트는 제로가 될 것입니다. 대상보기 컨트롤러에서 문자열 속성을 만들어 문자열을 전달해야합니다. viewDidLoad에서 레이블을 채 웁니다.

0

오류는 prepareForSegue에 정의되지 않은 eventData와 관련이 있다고 생각합니다.

// I assume you have an existing class eventData 
class EventData { 
    var eventName: String! 
    // other properties 
} 

class MyEventsTableViewCell: UITableViewCell { 

    @IBOutlet var eventNameLabel: UILabel! 
    // other outlets 

    // Add this property to your tableview cell 
    // Now your cell has a direct reference to the eventData, we will use that in the prepareForSegue function 
    var eventData: EventData! { 
     didSet { 
      eventNameLabel.text = "Name: " + eventData.eventName 
      // other properties 
     } 
    } 

} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cellIdentifier = "myEventsCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as MyEventsTableViewCell 

    let eventData = myEvents [indexPath.row] 

    // Here you can set the eventData for the cell, this will automatically set the outlets. 
    cell.eventData = eventData 

    cell.backgroundColor = UIColor.clearColor() 

    return cell 
} 



override func prepareForSegue (segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "showEventDetails" { 
     // The sender parameter represents the selected cell 
     let selectedCell = sender! as MyEventsTableViewCell 
     // now we have a reference to the eventData for this selected cell 
     let eventData = selectedCell.eventData 

     let destinationController = segue.destinationViewController as eventDetailView 
     // we pass the eventData to the destinationController (you will have to add a eventData property to the destinationController) 
     destinationController.eventData = eventData 

    } 
} 

직접 destinationController의 출구를 액세스하지 않아야 @rdelmar하여 설명한 바와 같이 다음과 같이 상세보기 컨트롤러 선택 셀로부터 데이터를 전달하는 더 나은 방법이다. 대신 eventData에 대한 특성을 작성하십시오. destinationController 뷰가로드되면 해당 속성을 사용하여 상세 뷰의 콘센트를 설정할 수 있습니다.

하나 이상의 명명 제안 : 대상 컨트롤러에 eventDetailView라는 클래스 이름이 있습니다. 그것은보기가 아니기 때문에 혼란 스럽지만 viewcontroller입니다. EventDetailViewController 또는 비슷한 취향의 이름을 바꿀 것을 제안합니다.

+0

감사합니다 피터 - 매우 도움이되었다 - 나는 가깝다고 생각하지만 지금 이벤트에서 뭔가를 놓치고 있다고 생각합니다 .DetailView. 당신은 거기에 속성을 설정 언급을하지만 거기에 지금 내가 무엇을 놓치고있어 - 동적 방송 클래스 무조건 말하는 내 세부보기를 클릭하면 오류가 발생했습니다 –

+0

이것은 지금까지 당신이하지 않았기 때문에 이것은 무관 ​​한 문제가 될 수 있습니다 ' 이 오류는 이전 오류 때문에 발생하지 않습니다. 코드를 작성하지 않아도 추측이되지만 확인해야 할 사항이 있습니다. 스토리 보드의 클래스 이름이 detailVC의 클래스 이름과 일치합니까? detailVC가 나타나면 올바른 이벤트 데이터가 표시됩니까? –

+0

이 작업은 복잡해질 수 있지만 필자는 tableview 컨트롤러가 있습니다. 헤더 뷰가 있습니다.이 헤더 뷰는이 데이터를 대상으로 채우려는 것입니다. 실제로는 그렇지 않습니다. 뷰 컨트롤러하지만 tableviewcontroller 내에서보기 - 나는 클래스 이름으로 설정 한보기에 대한 클래스가있다 - tableViewcontroller 아직 코딩되지 않습니다 그래서 여전히 분류됩니다 UITableVIewController - 갈 segue 코드로 할려고합니다 가능한보기 컨트롤러와 반대되는보기? 그렇지 않다면, 어떤 제안? 미리 감사드립니다 –

관련 문제