“NSInternalInconsistencyException”,理由是:“试图插入一行0到段0,但只有0更新后,部分”
我想提出的是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的,但他们没有帮助。
如果任何人有任何想法来解决这将是伟大的。提前致谢!
在你的代码中,你总是返回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
}
}
我希望它修复你的问题。)
嘿,所以直到现在我才得到试用代码的机会,但它仍然无效。如果你只是看看我做错了什么,我会更新这个问题。 –
所以你仍然得到相同的错误?你能重新检查一下你是否分配了代表?因为你告诉丹(询问有关代表)与代表没有关系。 只是为了确保:你能在'super.viewDidLoad()'后面做'homeTableView.delegate = self'吗? –
是的,我刚刚做到了,我没有得到一个错误。 –
[NSInternalInconsistencyException”,原因可能重复: '试图插入第0行到0节,但在更新'后0节只有0行'](https://*.com/questions/11706254/nsinternalinconsistencyexception-reason-attempt-to-insert-row-0 -into-section) – DonMag
您是否将tableview的委托/数据源设置为您的视图控制器? – dan
就像我说的DonMag,这个问题是针对Objective-C的。我在Swift遇到问题。 –