"テーブルビューコントローラー"から別のビューに画像を "全画面"で見ることを試みています。私が使用していたコードは、Swift 3にアップデートするまでうまくいった。私はオプションの値をアンラップすることについて読んできたが、ここで何がエラーであるのか分からない。Swift 3のアップデートでエラーが発生しました - オプションの値をアンラッピングしている間に予期せずnilが見つかりました
ありがとうございます!
エラーが上にあることを、コードの行:
Detailimageview.sd_setImage(with: URL(string:self.sentData1))
ERROR:致命的なエラー:「フルスクリーン」ビューコントローラ内
任意の値をアンラップしながら、予想外にゼロを見つけましたこれは、このエラーが起こっている:
import UIKit
class PhotoView: UIViewController, UIPopoverPresentationControllerDelegate, UIScrollViewDelegate {
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var Detailimageview: UIImageView!
var sentData1:String!
func scrollViewDidZoom(_ scrollView: UIScrollView) {
let imageViewSize = Detailimageview.frame.size
let scrollViewSize = scrollView.bounds.size
let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height)/2 : 0
let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width)/2 : 0
scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return Detailimageview
}
func setZoomScale() {
let imageViewSize = Detailimageview.bounds.size
let scrollViewSize = scrollView.bounds.size
let widthScale = scrollViewSize.width/imageViewSize.width
let heightScale = scrollViewSize.height/imageViewSize.height
scrollView.minimumZoomScale = min(widthScale, heightScale)
scrollView.zoomScale = 1.0
}
override func viewWillLayoutSubviews() {
setZoomScale()
}
override func viewDidLoad() {
super.viewDidLoad()
Detailimageview.sd_setImage(with: URL(string:self.sentData1))
// Do any additional setup after loading the view.
setZoomScale()
}
func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return containerView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func DismissView(_ sender: AnyObject) {
self.dismiss(animated: true, completion: nil)
}
@IBAction func showPopup(_ sender: AnyObject) {
let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbPopUpID") as! PopUpViewController
self.addChildViewController(popOverVC)
popOverVC.view.frame = self.view.frame
self.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: self)
}
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
「テーブルビューコントローラ」:これは、ビューのライフサイクルの問題であるように
import UIKit
class ListViewController: UITableViewController {
var imageURLs = [String]()
let cellVenue = ["Example Venue","Example Venue1","Example Venue2","Example Venue3","Example Venue4","Example Venue5"]
let cellLocation = ["Example Venue, Location","Example Venue, Location1","Example Venue, Location2","Example Venue, Location3","Example Venue, Location4","Example Venue, Location5"]
let cellDate = ["Example Date, 1970","Example Date, 1971","Example Date, 1972","Example Date, 1973","Example Date, 1974","January 1st, 1975"]
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
override func viewDidLoad() {
super.viewDidLoad()
imageURLs = ["https://i.imgur.com/bSfVe7l.jpg","https://i.imgur.com/vRhhNFj.jpg","https://i.imgur.com/bSfVe7l.jpg","https://i.imgur.com/vRhhNFj.jpg","https://i.imgur.com/bSfVe7l.jpg"]
self.tableView.separatorStyle = .none
// tableView.indicatorStyle = UIScrollViewIndicatorStyle.white
self.view.backgroundColor = UIColor.black
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
navigationController!.navigationBar.barTintColor = UIColor.black
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return imageURLs.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: ListViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! ListViewCell
let imageView = cell.viewWithTag(1) as! UIImageView
imageView.sd_setImage(with: URL(string: imageURLs[indexPath.row]))
imageView.sd_setHighlightedImage(with: URL(string: imageURLs[indexPath.row]), options: [.continueInBackground, .progressiveDownload, .avoidAutoSetImage])
cell.cellVenue.text = cellVenue[indexPath.row]
cell.cellLocation.text = cellLocation[indexPath.row]
cell.cellDate.text = cellDate[indexPath.row]
return cell
}
func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "DetailView") {
// segue.destination is correct, xcode keeps switching it to segue.description
let VC = segue.destination as! PhotoView
if let indexpath = self.tableView.indexPathForSelectedRow {
let Imageview = imageURLs[indexpath.row] as String
VC.sentData1 = Imageview
}
}
}
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
ありがとうございました。 viewDidLoadの後に来るDetailimageview.sd_setImage(with:URL(文字列:self.sentData1))をオーバーライドしました:override func viewWillAppear(_ animated:Bool){ まだ同じエラーが発生しています。 – Miles
投稿したコードに問題がないため、ここで何か他のことが起こっています。エラーが発生する前にブレークポイントを設定して、 'sentData1'の実際の値を確認しましたか? – Dima
私はしていません。私は値が何であるかをどのように読むかについてはあまりよく分かりません。私はアウトレットをチェックして、彼らはリンクアップしています – Miles