2017-09-18 21 views
0

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 
} 
+0

このコードで達成しようとしていることを説明できますか? –

+1

'insertRows'を呼び出すと' tableView(_:numberOfRowsInSection:) 'が呼び出されます。これは以前よりも1の値を返さなければなりません。しかし、あなたのケースでは、明らかにそうではなく、エラーメッセージが表示されます。 'numberOfRowsInSection'メソッドを表示してください。 – Rob

+0

多くの同様の問題が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

答えて

0

あなたはnumberOfRowsInSectionを実装していませんでした。

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

私はこの機能を持っていますが、ポストのコードの制限のために、上で述べたように、ポストにそれらを含めませんでした。 – dgelinas21

+0

さて、あなたは 'tableView'の' dataSource'と 'delegate'を設定しましたか?あなたの 'TestChat'ビューコントローラに? – Wes

関連する問題