2017-01-22 6 views
0

그래서 "BillSplitters"의 회전식 메뉴가 있으며 각 회전식 항목에는 BillSplitter의 고유 항목이 표시되어야합니다. 그래서 나는 fatal error: unexpectedly found nil while unwrapping an Optional value을 얻고있다. 일반적으로 나는이 문제를 찾을 때와 같은 에러에 대해 서서히 연마 할 수있다.하지만 라인별로 브레이크 포인트 라인을 따라갈 때, 내가 따라갈 수없는 iCarousel 코드에 들어간다. 물론 내가 잘못 carousel에 잘못 될거야 또한 내가 addSubview (tableView) 그때 그것은 잘 실행되지 않습니다. 그것은 또한 첫 번째 몇 가지 tableviews 만들고 괜찮아 추가하고 오류가 나타납니다. 나는 그것이 항목을 다시 사용하고 항상 새로운 것을 만드는 아니에요 나는 다음과 같은 기능에 if let view = view 문을 제거해야합니다 몇 군데에서 읽은iCarousel의 TableView에서 선택 값을 래핑하지 않고 nil을 찾음

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let splitter = allBillSplitters[carouselIndex] 
    if (splitter.items?.count)! > 0 { 
     return (splitter.items?.count)! 
    } else { 
     TableViewHelper.EmptyMessage("\(splitter.name!) has no items to pay for.\nGo back to assign some items to their name.", tableView: tableView) 
     return 0 
    } 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell: ItemCell = tableView.dequeueReusableCell(withIdentifier: "SplitterItemCell") as! ItemCell 
    let itemsSet = allBillSplitters[carouselIndex].items 
    let items = itemsSet?.allObjects as! [Item] 
    let item = items[indexPath.row] 
    let count = item.billSplitters?.count 
    if count! > 1 { 
     cell.name!.text = "\(item.name!) split \(count!) ways" 
     cell.price!.text = "£\(Double(item.price)/Double(count!))" 
    } else { 
     cell.name!.text = item.name! 
     cell.price!.text = "£\(item.price)" 
    } 

    return cell 
} 

func numberOfItems(in carousel: iCarousel) -> Int { 
    return allBillSplitters.count 
} 

: 여기에 사용하여 코드 메신저입니다. 내가 그것을 남겨두면 첫 번째 회전 목마 항목을 만들 때 즉시 동일한 오류가 발생하고 제거 할 때 세 번째 회전 메뉴 항목을 만들 때 발생합니다.

func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView { 

    carouselIndex = index 

    var splitterView: UIImageView 
    var nameLabel: UILabel 
    var emailLabel: UILabel 
    var totalLabel: UILabel 
    var tableView: UITableView 

    let splitter = allBillSplitters[index] 

    //reuse view if available, otherwise create a new view 
    if let view = view as? UIImageView { 
     splitterView = view 
     //get a reference to the label in the recycled view 
     nameLabel = splitterView.viewWithTag(1) as! UILabel 
     emailLabel = splitterView.viewWithTag(2) as! UILabel 
     totalLabel = splitterView.viewWithTag(3) as! UILabel 
     tableView = splitterView.viewWithTag(4) as! UITableView 
    } else { 

     let height = carousel.contentView.frame.height - 85 
     let width = carousel.contentView.frame.width - 80 

     //don't do anything specific to the index within 
     //this `if ... else` statement because the view will be 
     //recycled and used with other index values later 
     splitterView = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height)) 
     splitterView.layer.cornerRadius = 10 
     splitterView.clipsToBounds = true 
     splitterView.image = UIImage(data: splitter.image as! Data, scale:1.0) 
     splitterView.contentMode = .scaleAspectFit 
     splitterView.backgroundColor = UIColor(netHex: 0xCA9875) 

     let viewWidth = Int(splitterView.frame.width) 

     nameLabel = UILabel(frame: CGRect(x: 5, y: 0, width: viewWidth, height: 30)) 
     nameLabel.backgroundColor = .clear 
     nameLabel.backgroundColor?.withAlphaComponent(0.1) 
     nameLabel.textAlignment = .left 
     nameLabel.font = nameLabel.font.withSize(20) 
     nameLabel.tag = 1 

     emailLabel = UILabel(frame: CGRect(x: 5, y: 30, width: viewWidth, height: 15)) 
     emailLabel.backgroundColor = .clear 
     emailLabel.textAlignment = .left 
     emailLabel.font = emailLabel.font.withSize(15) 
     emailLabel.tag = 2 

     totalLabel = UILabel(frame: CGRect(x: 5, y: 45, width: viewWidth, height: 15)) 
     totalLabel.backgroundColor = .clear 
     totalLabel.textAlignment = .left 
     totalLabel.font = totalLabel.font.withSize(15) 
     totalLabel.tag = 3 

     let tableViewHeight = height - 65 
     let frame = CGRect(x: 0, y: 65, width: width, height: tableViewHeight) 
     tableView = UITableView(frame: frame) 
     tableView.delegate = self 
     tableView.dataSource = self 
     tableView.tag = 4 
     totalLabel.backgroundColor = .clear 

     splitterView.addSubview(nameLabel) 
     splitterView.addSubview(emailLabel) 
     splitterView.addSubview(totalLabel) 
     splitterView.addSubview(tableView) 
    } 

    //set item label 
    //remember to always set any properties of your carousel item 
    //views outside of the `if (view == nil) {...}` check otherwise 
    //you'll get weird issues with carousel item content appearing 
    //in the wrong place in the carousel 
    nameLabel.text = "\(allBillSplitters[index].name!)" 
    emailLabel.text = "\(allBillSplitters[index].email!)" 
    totalLabel.text = "£\(allBillSplitters[index].total)" 


    return splitterView 
} 

func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat { 
    switch option { 
    case .spacing: 
     return value * 1.2 
    case .fadeMin: 
     return 0.0 
    case .fadeMinAlpha: 
     return 0.3 
    case .fadeMax: 
     return 0.0 
    default: 
     return value 
    } 
} 

나는 모든 것을 봤는데 그래서 어떤 도움이 좋을 것 해결책을 찾을 수 없습니다. 감사합니다

답변

0

저는 바보입니다. 다음 잊어 버렸 : tableviews의 cellForRowAt 기능에

tableView.register(CarouselTableViewCell.classForCoder(), forCellReuseIdentifier: "carouselTableViewCell")