Menschen, habe ich dieses Problem, wenn ich Bild versuchen, wieder aus verschiedenem Zell (Thread 1: Fatal error: Index außerhalb des Bereichs)Index außerhalb des zulässigen Bereichs, wenn ich zu celll verwenden (Swift)
, was ich bin hier machen? Ich versuche einen Instagram-Klon zu erstellen und in meinem Home-View-Controller, was Posts angezeigt werden sollen. Ich mache die Navigation mit einer Tabellenansicht und diese Tabellenansicht hat 2 Zellen mit dem unterschiedlichen Bezeichner. Zelle Nummer 1 ist eine Kopfzeile, die Daten aus der Benutzertabelle zu meinem Benutzernamen und Profilbild bringt. und Zelle Nummer 2 für Posts sollte es Post-Daten wie Bild und Bildunterschrift bringen. Ich benutze Firebase-Datenbank.
mein Code:
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()
}
}
Sie sind an einem falschen Ort. Diese Website führt keinen Fehlerverfolgungsdienst aus. Wenn Sie Hilfe benötigen, erklären Sie, was Sie zu tun versuchen. Niemand weiß, welche Art von Daten Sie zu zeigen versuchen. –
Ihr Code macht keinen Sinn; Sie haben einen Abschnitt für jeden Benutzer und Sie zeigen Beiträge in den Zeilen an. Aber dann versuchen Sie und verwenden Sie 'indexpath.row', um auf Ihre' Benutzer' Array zugreifen, wenn die Zeile 1 ist, und vermutlich haben Sie nur 1 Benutzer in der 'Benutzer'-Array, so erhalten Sie eine Array-Grenzen Fehler – Paulw11
Es tut mir leid mein Freund jetzt erkläre ich aber. für das Geben mir im gerade Anfänger – ghazzway