Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 没有这样的模块错误_Swift - Fatal编程技术网

Swift 没有这样的模块错误

Swift 没有这样的模块错误,swift,Swift,我正在使用Swift和cocoa pods开发一个聊天应用程序,我一直收到这个问题。它说没有这样的模块JSQMessagesViewController,pod文件的设置与教程所要求的一样。如果你需要我给你看pod文件,请告诉我,我会把它放在那里 谢谢Luc 这是代码 import UIKit import JSQMessagesViewController import syncano_ios let syncanoChannelName = "messages" class ViewCo

我正在使用Swift和cocoa pods开发一个聊天应用程序,我一直收到这个问题。它说没有这样的模块JSQMessagesViewController,pod文件的设置与教程所要求的一样。如果你需要我给你看pod文件,请告诉我,我会把它放在那里

谢谢Luc

这是代码

import UIKit
import JSQMessagesViewController
import syncano_ios

let syncanoChannelName = "messages"

class ViewController: JSQMessagesViewController {

let syncano = Syncano.sharedInstanceWithApiKey("7f5312e4808d69df6bd258b444b13d5d5956c15d", instanceName: "small-waterfall-9948")
let channel = SCChannel(name: syncanoChannelName)

let incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor(red: 10/255, green: 180/255, blue: 230/255, alpha: 1.0))
let outgoingBubble = JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImageWithColor(UIColor.lightGrayColor())
var messages = [JSQMessage]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.setup()
    self.downloadNewestMessagesFromSyncano()
}

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

func reloadMessagesView() {
    self.collectionView?.reloadData()
}
}

//MARK - Setup
extension ViewController {
func addDemoMessages() {
    for i in 1...10 {
        let sender = (i%2 == 0) ? "Server" : self.senderId
        let messageContent = "Message nr. \(i)"
        let message = JSQMessage(senderId: sender, displayName: sender, text: messageContent)
        self.messages += [message]
    }
    self.reloadMessagesView()
}

func setup() {
    self.senderId = UIDevice.currentDevice().identifierForVendor?.UUIDString
    self.senderDisplayName = UIDevice.currentDevice().identifierForVendor?.UUIDString
    self.channel.delegate = self
    self.channel.subscribeToChannel()
}
}

//MARK - Data Source
extension ViewController {

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

override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
    let data = self.messages[indexPath.row]
    return data
}

override func collectionView(collectionView: JSQMessagesCollectionView!, didDeleteMessageAtIndexPath indexPath: NSIndexPath!) {
    self.messages.removeAtIndex(indexPath.row)
}

override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {
    let data = messages[indexPath.row]
    switch(data.senderId) {
    case self.senderId:
        return self.outgoingBubble
    default:
        return self.incomingBubble
    }
}

override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
    return nil
}
}

//MARK - Toolbar
extension ViewController {
override func didPressSendButton(button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: NSDate!) {
    let message = JSQMessage(senderId: senderId, senderDisplayName: senderDisplayName, date: date, text: text)
    self.messages += [message]
    self.sendMessageToSyncano(message)
    self.finishSendingMessage()
}

override func didPressAccessoryButton(sender: UIButton!) {

}
}

//MARK - Syncano
extension ViewController {

func sendMessageToSyncano(message: JSQMessage) {
    let messageToSend = Message()
    messageToSend.text = message.text
    messageToSend.senderId = self.senderId
    messageToSend.channel = syncanoChannelName
    messageToSend.other_permissions = .Full
    messageToSend.saveWithCompletionBlock { error in
        if (error != nil) {
            //Super cool error handling
        }
    }
}

func downloadNewestMessagesFromSyncano() {
    Message.please().giveMeDataObjectsWithCompletion { objects, error in
        if let messages = objects as? [Message]! {
            self.messages = self.jsqMessagesFromSyncanoMessages(messages)
            self.finishReceivingMessage()
        }
    }
}

func jsqMessageFromSyncanoMessage(message: Message) -> JSQMessage {
    let jsqMessage = JSQMessage(senderId: message.senderId, senderDisplayName: message.senderId, date: message.created_at, text: message.text)
    return jsqMessage
}

func jsqMessagesFromSyncanoMessages(messages: [Message]) -> [JSQMessage] {
    var jsqMessages : [JSQMessage] = []
    for message in messages {
        jsqMessages.append(self.jsqMessageFromSyncanoMessage(message))
    }
    return jsqMessages
}
}

//MARK - Channels
extension ViewController : SCChannelDelegate {

func addMessageFromNotification(notification: SCChannelNotificationMessage) {
    let message = Message(fromDictionary: notification.payload)
    if message.senderId == self.senderId {
        //we don't need to add messages from ourselves
        return
    }
    self.messages.append(self.jsqMessageFromSyncanoMessage(message))
    self.finishReceivingMessage()
}

func updateMessageFromNotification(notification: SCChannelNotificationMessage) {

}

func deleteMessageFromNotification(notification: SCChannelNotificationMessage) {

}

func chanellDidReceivedNotificationMessage(notificationMessage: SCChannelNotificationMessage!) {
    switch(notificationMessage.action) {
    case .Create:
        self.addMessageFromNotification(notificationMessage)
    case .Delete:
        self.deleteMessageFromNotification(notificationMessage)
    case .Update:
        self.updateMessageFromNotification(notificationMessage)
    default:
        break
    }
}
}

执行以下操作,您可以从“Pods”导入任何swift文件

1) 清理你的项目

2) 确保所有“吊舱”>“构建设置”>“构建”处于活动状态 “仅限架构”设置为“否”

3) 不要运行,只构建您的项目

4) 现在,将任何文件从“Pods”导入任何swift文件

例如:导入JSQMessagesViewController

5) 再次,构建项目,它将按预期工作。最后,你可以 访问it属性


希望这有帮助

执行以下操作,您可以从“Pods”导入任何swift文件

1) 清理你的项目

2) 确保所有“吊舱”>“构建设置”>“构建”处于活动状态 “仅限架构”设置为“否”

3) 不要运行,只构建您的项目

4) 现在,将任何文件从“Pods”导入任何swift文件

例如:导入JSQMessagesViewController

5) 再次,构建项目,它将按预期工作。最后,你可以 访问it属性


希望这有帮助

一旦安装了播客,请关闭xCode。然后使用以下命令行将其打开:

$open App.xcworkspace


我和你有同样的问题,这对我很有效。从中获取此信息。

一旦安装了播客,请关闭xCode。然后使用以下命令行将其打开:

$open App.xcworkspace


我和你有同样的问题,这对我很有效。从中获取此信息。

我现在做了前三项工作:如何将文件从“Pods”导入任何swift文件,以及如何导入JSQMessagesViewController。@LucMollard只需在任何
UIViewController
中编写导入语句,您需要使用
JSQMessagesViewController
是的,我已经完成了@Sohil R.MemonYa在我再次构建之后,它说构建失败,错误仍然存在。还有别的吗?没有,是同样的错误。我的意思是,如果有任何其他问题的解决方案。我现在做了前三个。我如何从“Pods”导入文件到任何swift文件,以及如何导入JSQMessagesViewController。@LucMollard只需在任何
UIViewController
中编写导入语句,您需要使用
JSQMessagesViewController
是的,我已经完成了@Sohil R.MemonYa在我再次构建之后,它说构建失败,错误仍然存在。还有别的吗?没有,是同样的错误。我的意思是,如果有任何其他问题的解决方案。你是否包括
use\u框架在你的Podfile中?你有没有包含
使用框架在你的播客文件中?