UITableView
を取得しようとしています。メッセージが挿入されているnibファイルがある場合は追加してください。試験のために私は配列にString
をハードコードが、コントローラの実行時に何らかの理由で、次のコードを取得しています:swift update行エラー - 行を追加しようとしましたが、更新後に0行があります
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert row 1 into section 0, but there are only 0 rows in section 0 after the update'
***
Iはまた、両方とも1(異なる行で新しいセルを挿入しようとしましたと0)私はそれがエラーを引き起こしたかどうかは確かではなかったが、それはどちらもうまくいかなかった。
これは私が使用していたコードです:
import Foundation
import UIKit
import SendBirdSDK
class TestChat: UIViewController {
@IBOutlet weak var myTableView: UITableView!
var messageArray = [String]()
var messages: [SBDBaseMessage] = []
override func viewDidLoad() {
//put code below
super.viewDidLoad()
//load the channel with the two people
SBDGroupChannel.createChannel(withUserIds: ["22077272", "22077273"], isDistinct: true, completionHandler: { (channel, error) in
if(error != nil) {
print("creation error!!!!")
} else {
//below load the sent messages
let previousMessageQuery = channel?.createPreviousMessageListQuery()
//since below has a hard coded value of 1 for the amount of messages being loaded, we add that to the array
self.messageArray.append("Phlare")
previousMessageQuery?.loadPreviousMessages(withLimit: 1, reverse: true, completionHandler: { (messages2, error) in
if error != nil {
NSLog("Error: %@", error!)
return
} else {
//print(messages)
self.messages = messages2!
let msg = self.messages[0]
if msg is SBDUserMessage {
let userMessage = msg as! SBDUserMessage
let sender = userMessage.sender
//below is number of current user
if sender?.userId == "2077103974" { //SBDMain.getCurrentUser()?.userId {
print(sender!.userId)
//populate the table view with a sent message, not received
let nib = UINib(nibName: "OutgoingUserMessage", bundle: nil)
let view = nib.instantiate(withOwner: self, options: nil)
self.myTableView.register(nib, forCellReuseIdentifier: "cell")
self.myTableView.beginUpdates()
self.myTableView.insertRows(at: [IndexPath(row: 1, section: 0)], with: .automatic)
self.myTableView.endUpdates()
print("user identified")
} else {
//populate below with the received xib
print("received message")
}
}
}
// ...
})
}
})// ends channel creation
}//end of view did load
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! OutgoingUserMessage
let msg = messageArray[indexPath.row]
//below
//is
//a
//hardcoded
//value
cell.messageLabel.text = "Phlare"
return cell
}
}
私のtableViewのための機能を削除したが、必要に応じてそれらを追加することができます。現在、機能によって移入された行の量は、直下の1のハードコーディングされた値は、私のnumberOfRowsInSection
コードです:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("test coiunt")
print(messageArray.count)
print(messageArray)
//return messageArray.count
return 1
}
このコードで達成しようとしていることを説明できますか? –
'insertRows'を呼び出すと' tableView(_:numberOfRowsInSection:) 'が呼び出されます。これは以前よりも1の値を返さなければなりません。しかし、あなたのケースでは、明らかにそうではなく、エラーメッセージが表示されます。 'numberOfRowsInSection'メソッドを表示してください。 – Rob
多くの同様の問題がhttps://stackoverflow.com/search?q=%5Bios%5D+NSInternalInconsistencyException+%22attempt+to+insert+row%22またはhttps://stackoverflow.com/search?q=%5Bios% 5D +%5Bswift%5D + NSInternalInconsistencyException +%22attempt +〜+ insert + row%22 – Rob