twitterを作っています。
タイムラインの時に画像を読み込みたいのですが、反映してくれません。
アイコンには画像が入るのですが、投稿のページには入ってくれません、
画像はニフティクラウドというクラウドサービスから読み込むようにしています。
画像の読み込みにはキングフィッシャーを使って cell.photoImageView.kf.setImage(with: URL(string: imageUrl))と書いています。
tableviewはTimelineTableViewCellというカスタムセルを使っています。
エラーは出ていません。
試した事
ニフクラ のアプリのIDがあっているか
imageviewが接続されているか
どなたかアドバイスお願いできませんか?
import UIKit import NCMB import Kingfisher import SVProgressHUD import SwiftDate class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource , TimelineTableViewCellDelegate { func didTapUserImageView(tableViewCell: UITableViewCell, gesture: UITapGestureRecognizer) { performSegue(withIdentifier: "toUserPost", sender: nil) } var selectedPost: Post? var posts = [Post]() var followings = [NCMBUser]() @IBOutlet var timelineTableView: UITableView! override func viewDidLoad() { super.viewDidLoad() timelineTableView.dataSource = self timelineTableView.delegate = self let nib = UINib(nibName: "TimelineTableViewCell", bundle: Bundle.main) timelineTableView.register(nib, forCellReuseIdentifier: "Cell") timelineTableView.tableFooterView = UIView() // 引っ張って更新 setRefreshControl() // フォロー中のユーザーを取得する。その後にフォロー中のユーザーの投稿のみ読み込み loadFollowingUsers() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "toComments" { let commentViewController = segue.destination as! CommentViewController commentViewController.postId = selectedPost?.objectId } } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return posts.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TimelineTableViewCell cell.delegate = self cell.tag = indexPath.row let user = posts[indexPath.row].user cell.userNameLabel.text = user.userName let userImageUrl = "https://mbaas.api.nifcloud.com/2013-09-01/applications/(アプリのID)/publicFiles/" + user.objectId cell.userImageView.kf.setImage(with: URL(string: userImageUrl), placeholder: UIImage(named: "placeholder.jpg")) cell.commentTextView.text = posts[indexPath.row].text let imageUrl = posts[indexPath.row].imageUrl cell.photoImageView.kf.setImage(with: URL(string: imageUrl)) // Likeによってハートの表示を変える if posts[indexPath.row].isLiked == true { cell.likeButton.setImage(UIImage(named: "heart-fill"), for: .normal) } else { cell.likeButton.setImage(UIImage(named: "heart-outline"), for: .normal) } // Likeの数 cell.likeCountLabel.text = "(posts[indexPath.row].likeCount)件" // タイムスタンプ(投稿日時) (※フォーマットのためにSwiftDateライブラリをimport) cell.timestampLabel.text = posts[indexPath.row].createDate.string() return cell } func loadTimeline() { if NCMBUser.current() == nil{ // userのアクティブ状態を変更できたらログイン画面に移動 let storyboard = UIStoryboard(name: "SignIn", bundle: Bundle.main) let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationController") UIApplication.shared.keyWindow?.rootViewController = rootViewController // ログイン状態の保持 let ud = UserDefaults.standard ud.set(false, forKey: "isLogin") ud.synchronize() } let query = NCMBQuery(className: "Post") // 降順 query?.order(byDescending: "createDate") // 投稿したユーザーの情報も同時取得 query?.includeKey("user") // フォロー中の人 + 自分の投稿だけ持ってくる query?.whereKey("user", containedIn: followings) // オブジェクトの取得 query?.findObjectsInBackground({ (result, error) in if error != nil { SVProgressHUD.showError(withStatus: error!.localizedDescription) } else { // 投稿を格納しておく配列を初期化(これをしないとreload時にappendで二重に追加されてしまう) self.posts = [Post]() for postObject in result as! [NCMBObject] { // ユーザー情報をUserクラスにセット let user = postObject.object(forKey: "user") as! NCMBUser // 退会済みユーザーの投稿を避けるため、activeがfalse以外のモノだけを表示 if user.object(forKey: "active") as? Bool != false { // 投稿したユーザーの情報をUserモデルにまとめる let userModel = User(objectId: user.objectId, userName: user.userName) let text = postObject.object(forKey: "text") as! String // 投稿の情報を取得 if postObject.object(forKey: "imageUrl") != nil { let imageUrl = postObject.object(forKey: "imageUrl") as! String let post = Post(objectId: postObject.objectId, user: userModel, text: text, imageUrl:imageUrl, createDate: postObject.createDate) } // 2つのデータ(投稿情報と誰が投稿したか?)を合わせてPostクラスにセット let post = Post(objectId: postObject.objectId, user: userModel, text: text, imageUrl: "",createDate: postObject.createDate) // likeの状況(自分が過去にLikeしているか?)によってデータを挿入 let likeUsers = postObject.object(forKey: "likeUser") as? [String] if likeUsers?.contains(NCMBUser.current().objectId) == true { post.isLiked = true } else { post.isLiked = false } // いいねの件数 if let likes = likeUsers { post.likeCount = likes.count } // 配列に加える self.posts.append(post) } } // 投稿のデータが揃ったらTableViewをリロード self.timelineTableView.reloadData() } }) } func loadFollowingUsers() { guard let currentUser = NCMBUser.current() else { // userがnilだった場合ログイン画面に移動 let storyboard = UIStoryboard(name: "SignIn", bundle: Bundle.main) let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationController") UIApplication.shared.keyWindow?.rootViewController = rootViewController // ログイン状態の保持 let ud = UserDefaults.standard ud.set(false, forKey: "isLogin") ud.synchronize() return } // フォロー中の人だけ持ってくる let query = NCMBQuery(className: "Follow") query?.includeKey("user") query?.includeKey("following") query?.whereKey("user", equalTo: NCMBUser.current()) query?.findObjectsInBackground({ (result, error) in if error != nil { SVProgressHUD.showError(withStatus: error!.localizedDescription) } else { self.followings = [NCMBUser]() for following in result as! [NCMBObject] { self.followings.append(following.object(forKey: "following") as! NCMBUser) } self.followings.append(NCMBUser.current()) self.loadTimeline() } }) } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。