【问题标题】:Proper way to Encode and Send String as a PFObject将字符串编码并作为 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 是零,检查我的答案

标签: ios parse-platform


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2017-12-28
  • 2015-08-20
  • 2022-06-19
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多