명를 사용,이 문제가 여기서 뭐하는거야? Instagram 클론을 구축하려고하고 있으며 내 홈페이지보기 컨트롤러에서 무엇이 게시물에 표시되어야 하는지를 확인하려고합니다. 나는 테이블 뷰와 함께 네비게이션을 만든다. 그리고 그 테이블 뷰는 다른 식별자를 가진 2 개의 셀을 가지고있다. 셀 번호 1 사용자 테이블의 데이터를 내 사용자 이름 레이블 및 프로필 이미지로 가져 오는 헤더입니다. 게시물 번호는 이미지 및 캡션과 같은 게시물 데이터를 가져와야합니다. 나는 firebase 데이터베이스를 사용합니다.인덱스 i가 celll에 (스위프트)
내 코드 :
import UIKit
import FirebaseAuth
import FirebaseDatabase
class HomeViewController: UIViewController ,UITableViewDelegate {
@IBOutlet weak var tableview: UITableView!
var posts = [Post]()
var users = [UserD]()
override func viewDidLoad() {
super.viewDidLoad()
tableview.dataSource = self
loadposts()
userDetal()
// var post = Post(captiontxt: "test", photoUrlString: "urll")
// print(post.caption)
// print(post.photoUrl)
}
func loadposts() {
Database.database().reference().child("posts").observe(.childAdded){ (snapshot: DataSnapshot)in
print(Thread.isMainThread)
if let dict = snapshot.value as? [String: Any]{
let captiontxt = dict["caption"] as! String
let photoUrlString = dict["photoUrl"] as! String
let post = Post(captiontxt: captiontxt, photoUrlString: photoUrlString)
self.posts.append(post)
print(self.posts)
self.tableview.reloadData()
}
}
}
func userDetal() {
Database.database().reference().child("users").observe(.childAdded){ (snapshot: DataSnapshot)in
print(Thread.isMainThread)
if let dict = snapshot.value as? [String: Any]{
let usernametxt = dict["username"] as! String
let profileImageUrlString = dict["profileImageUrl"] as! String
let user = UserD(usernametxt: usernametxt, profileImageUrlString: profileImageUrlString)
self.users.append(user)
print(self.users)
self.tableview.reloadData()
}
}
}
@IBAction func logout(_ sender: Any) {
do {
try Auth.auth().signOut()
}catch let logoutErrorr{
print(logoutErrorr)
}
let storyboard = UIStoryboard(name: "Start", bundle: nil)
let signinVC = storyboard.instantiateViewController(withIdentifier: "SigninViewController")
self.present(signinVC, animated: true, completion: nil)
}
}
extension HomeViewController: UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
func numberOfSections(in tableView: UITableView) -> Int {
return users.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0{
let cell = tableview.dequeueReusableCell(withIdentifier: "imagecell", for: indexPath) as! PostCellTableViewCell
cell.postimage.image = nil
cell.tag += 1
let tag = cell.tag
cell.captionLabel.text = posts[indexPath.row].caption
let photoUrl = posts[indexPath.row].photoUrl
getImage(url: photoUrl) { photo in
if photo != nil {
if cell.tag == tag {
DispatchQueue.main.async {
cell.postimage.image = photo
}
}
}
}
return cell
} else if indexPath.row == 1 {
let cell = tableview.dequeueReusableCell(withIdentifier: "postcell", for: indexPath) as! HeaderTableViewCell
cell.userimage.image = nil
cell.tag += 1
let tag = cell.tag
cell.usernamelabel.text = users[indexPath.row].username
//Error showing here????????????????????????????????????
let profileImageUrl = users[indexPath.row].profileImageUrl
getImage(url: profileImageUrl) { photo in
if photo != nil {
if cell.tag == tag {
DispatchQueue.main.async {
cell.userimage.image = photo
}
}
}
}
return cell
}
return UITableViewCell()
}
func getImage(url: String, completion: @escaping (UIImage?) ->()) {
URLSession.shared.dataTask(with: URL(string: url)!) { data, response, error in
if error == nil {
completion(UIImage(data: data!))
} else {
completion(nil)
}
}.resume()
}
}
틀린 장소에 있습니다. 이 웹 사이트는 오류 추적 서비스를 실행하지 않습니다. 도움이 필요하면 무엇을하려고하는지 설명하십시오. 아무도 어떤 종류의 데이터를 표시하려고하는지 알지 못합니다. –
코드가 의미가 없습니다. 각 사용자에 대한 섹션이 있고 행에 게시물을 표시하고 있습니다. 하지만'indexpath.row'를 사용하여 행이 1이면'users' 배열에 접근하려고합니다. 아마도'users' 배열에 1 명의 사용자 만있을 것입니다. 배열 경계 오류가 발생합니다. – Paulw11
죄송합니다. 내 친구는 이제 설명하지만 설명해. 나를 초보자 인 나에게주는 것 – ghazzway