###前提・実現したいこと
日記アプリを作成しております。
日記の表示画面から文字の入力画面に移動し入力した画面が日記に表示されるようになっております。
tableViewのcellを押した際に詳細ページに移動するようにしたいのですが会のようなエラーになり文字が移動されません
###発生している問題・エラーメッセージ
Could not cast value of type 'goodGlife.CustomTableViewCell' (0x101495008) to 'NSNumber' (0x1019884a8).
###表示画面のコード
// MARK:テーブルビューの作成 @IBOutlet weak var tableView: UITableView! // ⑵行数を決める func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return myTitle.count } // ⑶リストに表示する文字列を決定し、表示 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)as! CustomTableViewCell cell.myTitleLabel.text = myTitle[indexPath.row] cell.myDescriptionLabel.text = myDetail[indexPath.row] cell.myTime.text = myDeta[indexPath.row] let strURL = myImage[indexPath.row] if strURL != nil{ let url = URL(string: strURL as String!) let fetchResult: PHFetchResult = PHAsset.fetchAssets(withALAssetURLs: [url!], options: nil) let asset: PHAsset = (fetchResult.firstObject! as PHAsset) let manager: PHImageManager = PHImageManager() manager.requestImage(for: asset,targetSize: CGSize(width: 5, height: 500),contentMode: .aspectFill,options: nil) { (image, info) -> Void in cell.myImageView.image = image } } cell.accessoryType = .disclosureIndicator return cell } // セグエの設定 設定したセグエの名前を記入 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // どこのセグのどの値をと聞いている↓ performSegue(withIdentifier: "Segue", sender: indexPath.row) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // guestの中身segueに飛んだSecondViewControllerクラスの継承している if (segue.identifier == "Segue") { let guest = segue.destination as! DailyShowViewController guest.mytitle = myTitle[sender! as! Int ] as! String guest.myDetail = myDetail[sender as! Int] as! String guest.myDeta = myImage[sender as! Int] as! String // guest.myDeta = myImage[sender as! Int] as! String } } // データを取ります。 func read(){ // カラの配列を用意します。 myTitle = [] myDetail = [] myDeta = [] myImage = [] // AppDelegateを使う準備 let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate // エンティティを操作するためのオブジェクト let viewContext = appDelegate.persistentContainer.viewContext // どのエンティティからデータを取得してくるか設定 let query: NSFetchRequest<Daily> = Daily.fetchRequest() do{ // データを一括取得 let fetchResults = try viewContext.fetch(query) // データの取得 for result: AnyObject in fetchResults { let title: String! = result.value(forKey: "dailyTitle") as! String let detail: String! = result.value(forKey: "dailyDetail") as! String let deta: NSDate! = result.value(forKey: "deilyDeta") as! NSDate let Img:String! = result.value(forKey: "dailyImage") as! String // print("imgの中身は:\(Img)") let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" //Stringにしたい let detastring:String = formatter.string(from: deta as Date) if title == "" || title == nil || detail == "" || detail == nil{ print("空かnilです") }else{ // MARK:ここオプショナルになるなぜ? print("titleは:\(title)detailは:\(detail)") myTitle.append(title!) myDetail.append(detail!) myDeta.append(detastring) } if Img == "" || Img == nil{ print("画像でいたはカラです。") }else{ myImage.append(Img) } } }catch{ } }
###試したこと
アイデンティティをSegueに指定して移動
DBの確認(データ確認済み)
###追加記入ブレイクポイントでviewdidloadで止まってしまいます。
override func viewDidLoad() { super.viewDidLoad() myLabel.text = mytitle myView.text = myDetail //myDetaところ if myDeta != nil { let strURL = myDeta //strURLのところ if strURL != nil{ let url = URL(string: strURL as String!) let fetchResult: PHFetchResult = PHAsset.fetchAssets(withALAssetURLs: [url!], options: nil) let asset: PHAsset = (fetchResult.firstObject! as PHAsset) let manager: PHImageManager = PHImageManager() manager.requestImage(for: asset,targetSize: CGSize(width: 5, height: 500),contentMode: .aspectFill,options: nil) { (image, info) -> Void in self.myimg.image = image } }
###発生している問題・エラーメッセージWarning
Comparing non-optionalvalue of type String to nik always returns true
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
Swift3 Xcode10.3
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。