前提・実現したいこと
現在初めてオリジナルアプリを作成中です。
ビルドエラー:failed to render and update auto layout status for〜が突然出てから修復できません。
cocoapodsでFSCalenderを使用しています。
derived dataの削除、ビルドフォルダーのクリーン等行いましたがまだ直らず、エラーの原因を教えて頂きたいです。
発生している問題・エラーメッセージ
failed to render and update auto layout status for MainViewController(BYZ-38-t0r)
該当のソースコード
swift
1import UIKit 2import FSCalendar 3 4 5class MainViewController: UIViewController,FSCalendarDelegate,FSCalendarDataSource,FSCalendarDelegateAppearance { 6 7 @IBOutlet weak var calendar: FSCalendar! 8 @IBOutlet weak var dateLabel: UILabel! 9 @IBOutlet weak var piechartImageResultView: UIImageView! 10 11 var piechartImageResult: UIImage? = nil 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 self.calendar.dataSource = self 16 self.calendar.delegate = self 17 18 piechartImageResultView.image = piechartImageResult 19 } 20 21 22 23// カレンダーの日付がタップされた時の処理 24 func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition){ 25 26 let tmpDate = Calendar(identifier: .gregorian) 27 let year = tmpDate.component(.year, from: date) 28 let month = tmpDate.component(.month, from: date) 29 let day = tmpDate.component(.day, from: date) 30 dateLabel.text = ("(year).(month).(day)") 31 32 33 } 34 35 36 37 38 39 40 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 41 42 if segue.identifier == "toAddPiechart" { 43 44 let nextView = segue.destination as! AddPiechartViewController 45 46 nextView.dateResult = dateLabel.text! 47 } 48 } 49 50 51 52}
該当のソースコード
swift
1import UIKit 2 3class AddPiechartViewController: UIViewController,UIPickerViewDelegate, UIPickerViewDataSource { 4 5 6 @IBOutlet weak var pieChartView: UIView! 7 @IBOutlet weak var categoryPicker: UIPickerView! 8 @IBOutlet weak var startTimeLabel: UILabel! 9 @IBOutlet weak var endTimeLabel: UILabel! 10 @IBOutlet weak var dateLabel: UILabel! 11 @IBOutlet weak var piechartImageView: UIView! 12 13 14 var dateResult = "" 15 var pickerDataList = ["未選択", "睡眠","勉強","仕事","食事","遊び","運動"] 16 var pickerColor: [UIColor] = [.white, .blue, .red, .brown, .orange, .green, .gray] 17 var selectedPickerColor: UIColor = .white 18 var startRadian = 0.0 19 var endRadian = 0.0 20 var piechartImage: UIImage? 21 22 23 24 25 26 override func viewDidAppear(_ animated: Bool) { 27 super.viewDidAppear(animated) 28 if isMovingToParent { 29 let grayPath = UIBezierPath() 30 grayPath.addArc(withCenter: CGPoint(x: pieChartView.frame.width/2, y: pieChartView.frame.height/2), // 中心 31 radius: self.pieChartView.frame.height/5, // 半径r 32 startAngle: 0.0, // 開始角度 33 endAngle: .pi * 2, // 終了角度 34 clockwise: true) // 時計回り 35 36 let grayLayer = CAShapeLayer() 37 grayLayer.path = grayPath.cgPath 38 grayLayer.fillColor = UIColor.clear.cgColor // 真ん中の塗り色 39 grayLayer.strokeColor = UIColor.white.cgColor // 線の色 40 grayLayer.lineWidth = 40.0 // 線の幅 41 self.pieChartView.layer.addSublayer(grayLayer) 42 } 43 } 44 45 46 override func viewDidLoad() { 47 super.viewDidLoad() 48 49 50 categoryPicker.delegate = self 51 categoryPicker.dataSource = self 52 53 dateLabel.text = dateResult 54 55 56 } 57 58 59 // UIPickerViewのdelegate 60 func numberOfComponents(in pickerView: UIPickerView) -> Int { 61 return 1 62 } 63 64 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 65 return pickerDataList.count 66 } 67 68 func pickerView(_ pickerView: UIPickerView, 69 titleForRow row: Int, 70 forComponent component: Int) -> String? { 71 72 return pickerDataList[row] 73 } 74 75 // PickereViewの選択で色取得 76 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 77 selectedPickerColor = pickerColor[row] 78 } 79 80 81 @IBAction func startTimeSlider(_ sender: UISlider) { 82 let startSliderValue = Int(sender.value) 83 startRadian = Double(startSliderValue) 84 85 if startSliderValue % 2 == 0 { 86 startTimeLabel.text = "(startSliderValue / 2):00" 87 } else { 88 startTimeLabel.text = "(startSliderValue / 2):30" 89 } 90 } 91 92 @IBAction func endTimeSlider(_ sender: UISlider) { 93 let startSliderValue = Int(sender.value) 94 endRadian = Double(startSliderValue) 95 96 if startSliderValue % 2 == 0 { 97 endTimeLabel.text = "(startSliderValue / 2):00" 98 } else { 99 endTimeLabel.text = "(startSliderValue / 2):30" 100 } 101 } 102 103 @IBAction func addButton(_ sender: UIButton) { 104 105 let timeRadian = .pi * 2.0 / 48.0 106 107 let grayPath = UIBezierPath() 108 grayPath.addArc(withCenter: CGPoint(x: self.pieChartView.frame.width/2, y: self.pieChartView.frame.height/2), // 中心 109 radius: self.pieChartView.frame.height/5, // 半径r 110 startAngle: CGFloat(.pi * -0.5 + startRadian * timeRadian), // 開始角度 111 endAngle: CGFloat(.pi * -0.5 + endRadian * timeRadian), // 終了角度 112 clockwise: true) // 時計回り 113 114 let grayLayer = CAShapeLayer() 115 grayLayer.path = grayPath.cgPath 116 grayLayer.fillColor = UIColor.clear.cgColor // 真ん中の塗り色 117 grayLayer.strokeColor = selectedPickerColor.cgColor // 線の色 118 grayLayer.lineWidth = 40.0 // 線の幅 119 self.pieChartView.layer.addSublayer(grayLayer) 120 } 121 122 @IBAction func saveButton(_ sender: UIButton) { 123 piechartImage = piechartImageView.toImage() 124 125 let preNC = self.presentingViewController as! UINavigationController 126 let preVC = preNC.viewControllers[preNC.viewControllers.count - 2] as! MainViewController 127 preVC.piechartImageResult = self.piechartImage//ここで値渡し 128 129 self.navigationController?.popViewController(animated: true) 130 } 131} 132
該当のソースコード
swift
1import Foundation 2import UIKit 3 4/// UIView拡張(イメージ) 5public extension UIView { 6 7 // MARK: Public Methods 8 9 /// ビュー→イメージに変換する 10 /// 11 /// サブビューもイメージ化される 12 /// 13 /// - Returns: 対象ビューのイメージ 14 func toImage() -> UIImage { 15 UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, 0.0) 16 guard let context = UIGraphicsGetCurrentContext() else { 17 print("現在のコンテキストを取得できませんでした。") 18 return UIImage() 19 } 20 21 self.layer.render(in: context) 22 23 guard let image = UIGraphicsGetImageFromCurrentImageContext() else { 24 print("ビューをイメージに変換できませんでした。") 25 return UIImage() 26 } 27 28 UIGraphicsEndImageContext() 29 30 return image 31 } 32 33} 34
試したこと
derived dataの削除、ビルドフォルダーのクリーン、pod update
補足情報(FW/ツールのバージョンなど)
参考になるかわかりませんが、上記のコードを実行したところ、こちらではエラーらしきものは発生しませんでした。
FSCalendar 2.8.1, cocoapods 1.9.1, Xcode 11.4.1 です。
下記のような情報もありますが、参考になりますでしょうか。
https://github.com/WenchaoD/FSCalendar/issues/914
返信ありがとうございます!
xcode再起動でこちらのエラー消えました!・・・が新たにビルドエラー:'[<UIViewController 0x7fbd2b6070d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key calendar.'
が出てきました・・・
storyboardとの紐付け等削除してからやり直してみましたが消えません。
原因わかりますでしょうか?
おそらく紐付けがうまくいってない部品があるんだと思います。
回答欄に図付きで説明を書きましたので、参考にしていただけますでしょうか。
回答1件
あなたの回答
tips
プレビュー