0

Я пытаюсь сделать чат-приложение. У меня есть логин и часть интерфейса чата, но когда я пытаюсь настроить чат с помощью функции collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData, он дает мне ошибку «Невозможно преобразовать возвращаемое выражение типа [JSQMessage] для ввода JSQMessageData!»Swift 2.2, Firebase, JSQMessagesViewController - Невозможно преобразовать возвращаемое выражение типа [JSQMessage] для ввода JSQMessageData

Вот мой код MessagesViewController:

import UIKit 
import JSQMessagesViewController 
import Firebase 



class MessagesViewController: JSQMessagesViewController { 




override func collectionView(collectionView: JSQMessagesCollectionView!, 
          messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! { 
    return message[indexPath.item].userMessages 
} 

override func collectionView(collectionView: UICollectionView, 
          numberOfItemsInSection section: Int) -> Int { 
    return message.count 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationItem.hidesBackButton = false 

    // Do any additional setup after loading the view. 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

} 

Вот код для моих пользовательских классов сообщений:

import Foundation 
import JSQMessagesViewController 
import Firebase 

class Messages { 

dynamic var user = FIRAuth.auth()?.currentUser?.uid 

dynamic var addedUsers = [String]() 

dynamic var userMessages = [JSQMessage]() 

dynamic var messageDates = [NSDate]() 

} 

Сообщения массива является var message = [Messages]()

Что такое моя ошибка, Заранее спасибо.

+0

Я думаю, что должно быть должно быть возвращено сообщение [indexPath.item] –

ответ

0

Извините, я решил это сам. Я экспериментировал и обнаружил, что мне пришлось поставить «messages [indexPath.item] .userMessages [index Path.item]». Я понял, что мне нужно дать функции каждое сообщение вместо массива. Спасибо всем, что помогло!

0

Вопрос заключается в том, что вы пытаетесь передать JSQMessages, которые вы можете сделать, если вы используете JSQMessages вместо пользовательского класса Messages, но если у вас есть несколько переменных, которые вы хотите отслеживать на вашем объекте сообщения, то Вам может понадобиться ваша пользовательская реализация.

Все, что вам нужно, чтобы ваш класс Messages соответствовал протоколу JSQMessageData. JSQMessages уже соответствуют этому, поэтому они работают. Я изложил, как я делаю это ранее в другом вопросе stackoverflow, который вы можете назвать справочником, если вы застряли. Argument labels do not match any available overloads

Удачи, дайте мне знать, если есть больше, чем я могу вам помочь.

Смежные вопросы