将字符串编码并作为 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
是否为零?
检查ConfirmViewController
的prepareForSegue
中的messageView.text
以上是关于将字符串编码并作为 PFObject 发送的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
获取 Base64 编码的图像并使用 ExpressJS 作为图像发送
PFObject作为MKAnnotation导致NSInternalInconsistencyException
[单选题]如何将一个数组作为附件发送,并要能在接收后重新组合?