1

我想提出的是iOS應用程序,但我不斷收到此錯誤:「NSInternalInconsistencyException」,理由是:「試圖插入一行0到段0,但只有0更新後,部分」

'NSInternalInconsistencyException', reason: 'attempt to insert row 0 into section 0, but there are only 0 sections after the update' 

我現在已經研究了這個問題2天了,但我不知道什麼是錯的。我在下面放置我的代碼。

import UIKit 
import FirebaseDatabase 
import FirebaseAuth 

class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var databaseRef = Database.database().reference() 
var loggedInUser:AnyObject? 
var loggedInUserData:NSDictionary? 

@IBOutlet weak var aivLoading: UIActivityIndicatorView! 

@IBOutlet weak var homeTableView: UITableView! 

var posts = [NSDictionary]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.loggedInUser = Auth.auth().currentUser 

    self.databaseRef.child("users").child(self.loggedInUser!.uid).observeSingleEvent(of: .value) { (snapshot: DataSnapshot) in 

     self.loggedInUserData = snapshot.value as? NSDictionary 
     self.databaseRef.child("posts").child(self.loggedInUser!.uid).observe(.childAdded, with: { (snapshot: DataSnapshot) in 

      self.posts.insert(snapshot.value as! NSDictionary, at: 0) 
      self.homeTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic) 
      self.aivLoading.stopAnimating() 
     }){(error) in 
      ProgressHUD.showError("There was an error, try again") 
     } 
    } 

    self.homeTableView.rowHeight = UITableViewAutomaticDimension 
    self.homeTableView.estimatedRowHeight = 140 

} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return posts.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell: HomeTableViewCell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath) as! HomeTableViewCell 
    let post = posts[(self.posts.count-1) - (indexPath.row)]["text"] as! String 

    cell.configure("Anonymous", post: post) 
    return cell 
} 

} 

在我的代碼,它是指一種dequeueReusableCell,與標識符HomeTableViewCell,這是一個夫特文件。以下是一個斯威夫特文件的代碼:

import UIKit 
import FirebaseDatabase 
import Firebase 
import FirebaseAuth 


class HomeTableViewCell: UITableViewCell { 


    @IBOutlet weak var nameConstant: UILabel! 
    @IBOutlet weak var post: UITextView! 


    override open func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    open func configure(_ nameConstant: String, post: String) { 
     self.post.text = post 
     self.nameConstant.text = "Anonymous" 
    } 

} 

我知道有礦類似的問題,但很多這些都是在Objective-C。我也看過Swift的,但他們沒有幫助。

如果任何人有任何想法來解決這將是偉大的。提前致謝!

+0

[NSInternalInconsistencyException」,原因可能重複: '試圖插入第0行到0節,但在更新'後0節只有0行'](https://stackoverflow.com/questions/11706254/nsinternalinconsistencyexception-reason-attempt-to-insert-row-0 -into-section) – DonMag

+0

您是否將tableview的委託/數據源設置爲您的視圖控制器? – dan

+0

就像我說的DonMag,這個問題是針對Objective-C的。我在Swift遇到問題。 –

回答

0

在你的代碼中,你總是返回1的行數。但我想你應該返回posts.count吧?每當你insertRows(at:...表格檢查代理的一致性。還有一些奇怪的,你追加到你的列表(self.posts.append(snapshot.value as! NSDictionary)),但是你插入0-0行?,我會假設你想插入新的帖子到頂部。此外,如果您只有一個部分,則不需要實施該方法。

因此,這裏的代碼(我假設的火力點和小區配置代碼是正確的):

import UIKit 
import FirebaseDatabase 
import FirebaseAuth 

class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var databaseRef = Database.database().reference() 
var loggedInUser:AnyObject? 
var loggedInUserData:NSDictionary? 

@IBOutlet weak var aivLoading: UIActivityIndicatorView! 

@IBOutlet weak var homeTableView: UITableView! 

var posts = [NSDictionary]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.loggedInUser = Auth.auth().currentUser 

    self.databaseRef.child("users").child(self.loggedInUser!.uid).observeSingleEvent(of: .value) { (snapshot: DataSnapshot) in 

     self.loggedInUserData = snapshot.value as? NSDictionary 
     self.databaseRef.child("posts").child(self.loggedInUser!.uid).observe(.childAdded, with: { (snapshot: DataSnapshot) in 

      self.posts.insert(snapshot.value as! NSDictionary, at: 0) 
      self.homeTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.automatic) 
      self.aivLoading.stopAnimating() 
     }){(error) in 
      ProgressHUD.showError("There was an error, try again") 
     } 
    } 

    self.homeTableView.rowHeight = UITableViewAutomaticDimension 
    self.homeTableView.estimatedRowHeight = 140 

} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return posts.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell: HomeTableViewCell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell", for: indexPath) as! HomeTableViewCell 
    let post = posts[(self.posts.count-1) - (indexPath.row)]["text"] as! String 

    cell.configure("Anonymous", post: post) 
    return cell 
} 

} 

我希望它修復你的問題。)

+0

嘿,所以直到現在我纔得到試用代碼的機會,但它仍然無效。如果你只是看看我做錯了什麼,我會更新這個問題。 –

+0

所以你仍然得到相同的錯誤?你能重新檢查一下你是否分配了代表?因爲你告訴丹(詢問有關代表)與代表沒有關係。 只是爲了確保:你能在'super.viewDidLoad()'後面做'homeTableView.delegate = self'嗎? –

+0

是的,我剛剛做到了,我沒有得到一個錯誤。 –

相關問題