将字符串编码并作为 PFObject 发送的正确方法

Posted

技术标签:

【中文标题】将字符串编码并作为 PFObject 发送的正确方法【英文标题】:Proper way to Encode and Send String as a PFObject 【发布时间】:2015-06-24 06:19:22 【问题描述】:

我在向 Parse 发送字符串时遇到问题。这是代码停止的行:

我的代码如下所示:

var friends: Array<AnyObject>?
var recipients: NSMutableArray?
var message: String!
var sendMessage:String!


override func viewDidLoad() 
    super.viewDidLoad()
    sendMessage = message
    friends = []
    recipients = []

    let editButton = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: "edit")
    navigationItem.rightBarButtonItem = editButton


    tableView = UITableView(frame: view.bounds, style: UITableViewStyle.Plain)
    tableView?.delegate = self
    tableView?.dataSource = self
    view.addSubview(tableView!)

    let sendButton = [UIBarButtonItem(title: "Send", style: .Done, target: self, action: "sendPressed")]
    toolbar.frame = CGRectMake(0, self.view.frame.size.height - 46, self.view.frame.size.width, 48)
    toolbar.sizeToFit()
    toolbar.setItems(sendButton, animated: true)
    self.view.addSubview(toolbar)




func sendPressed () 

    sendMessagetoParse()


func sendMessagetoParse()

    let messageString = message
    let data = messageString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! as NSData
    // NSConcreteMutableData
    let file = PFFile(name:message, data:data)

    file.saveInBackground()

    let sentMessage = PFObject(className:"Messages")
    sentMessage["messages"] = file
    sentMessage["username"] = PFUser.currentUser()?.username
    sentMessage.setObject(self.recipients!, forKey: "recipientIds")
    sentMessage.setObject(PFUser.currentUser()!.objectId!, forKey: "senderId")
    sentMessage.setObject(PFUser.currentUser()!.username!, forKey: "senderName")

    sentMessage.saveInBackgroundWithBlock  (success: Bool, error: NSError?) -> Void in
        if (success) 
            println("Message sent!")

我想将字符串对象发送到我的解析帐户。我还使用了 Parse 提供的方法,即 dataUsingEncoding(NSUTF8StringEncoding) 但这也返回了相同的错误。关于正确格式或我需要如何修复代码的任何线索?

编辑:

好的,我不再收到错误消息,但我唯一的问题是,一旦我按下“发送”,它就什么也不做。这是我编辑的代码:

函数 sendMessagetoParse() 让 messageString = 消息

        if messageString != nil
    


        let data = messageString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! as NSData
        // NSConcreteMutableData
        let file = PFFile(name:message, data:data)

        file.saveInBackground()


        let sentMessage = PFObject(className:"Messages")
        sentMessage["messages"] = file
        sentMessage["username"] = PFUser.currentUser()?.username
        sentMessage.setObject(self.recipients!, forKey: "recipientIds")
        sentMessage.setObject(PFUser.currentUser()!.objectId!, forKey: "senderId")
        sentMessage.setObject(PFUser.currentUser()!.username!, forKey: "senderName")

        sentMessage.saveInBackgroundWithBlock  (success: Bool, error: NSError?) -> Void in
            if (success) 
                println("Message sent!")

                var alert = UIAlertController(title: "Awesome!", message: "Message was Sent", preferredStyle: UIAlertControllerStyle.Alert);

                alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: nil));

                //show it
                self.navigationController?.popToRootViewControllerAnimated(true)


     else 
        println("error")
    
        
    


这是来自上一个视图控制器的代码,称为 ConfirmViewController,其中我尝试使用 segue 将文本标签传递到 messageString 到当前视图控制器,称为 FriendsViewController:

override func prepareForSegue(segue: (UIStoryboardSegue!), sender:     
AnyObject!) 
    if (segue.identifier == "addFriends") 
        var mvc = segue!.destinationViewController as!     
FriendsViewController;

        mvc.sendMessage = messageView.text

    

ConfirmViewController 中设置segue 后,我将sendMessage 设置为等于viewDidLoad 中的消息,如我的第一次编辑所示。

【问题讨论】:

会不会是消息为nil 我正在使用委托将 uilabel 从另一个视图控制器作为字符串传输 - 我是否需要将值传递给另一个标签? 按下发送按钮时是否打印了error 没错,没有打印错误。 你的message 是零,检查我的答案 【参考方案1】:

检查你的

let messageString 

值。您遇到的这个运行时错误可能是隐式解包 nil 的可选值的结果。您可能希望在 if 语句中执行代码,例如:

if let messageString != nil

   ////put your saving code here

【讨论】:

谢谢!从技术上讲,错误已经消失,但我仍然在将项目上传到 Parse 时遇到问题。您能否告诉我在编辑中重新格式化代码的方式是否存在问题? 您没有收到错误,因为您的代码没有进入 if 语句。可能您忘记为您的消息变量设置适当的值。向我们展示您为消息变量赋值的代码 似乎 messageView 或 text 值为零。 messageView 的类型是什么? UILabel。委托将信息从 UITextfield 传输到 messageView,这是一个标签。【参考方案2】:

试试这个:

override func viewDidLoad() 
    super.viewDidLoad()
    // sendMessage = message
    message = sendMessage

【讨论】:

不幸的是,这对我不起作用。我正在尝试将 UILabel (messageView) 传递给字符串 (message) 并将字符串提交给 Parse。 Parse 是否不以我尝试提交的方式接受字符串(进入我的 Parse 仪表板中的类?)。我修复了代码,现在它返回“错误”。 messageString 是否为零? 检查ConfirmViewControllerprepareForSegue中的messageView.text

以上是关于将字符串编码并作为 PFObject 发送的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

获取 Base64 编码的图像并使用 ExpressJS 作为图像发送

PFObject作为MKAnnotation导致NSInternalInconsistencyException

[单选题]如何将一个数组作为附件发送,并要能在接收后重新组合?

哈夫曼编码

在访问 PFObject 成员时解析“发送到实例的无法识别的选择器”

将 UTF-8 编码的字符串插入 UTF-8 编码的 mysql 表失败​​,并显示“字符串值不正确”