使用 PFQuery 测试指针相等性,语法错误
Testing pointer equality with PFQuery, wrong syntax
这里有一些 Parse-Server
相关的 swift 代码不起作用,可能只是因为一些明显的语法错误。
如果有人能指出这个问题,我将非常高兴和感激。
func getSentenceTranslations(_ sentences:[PFObject]) {
let query = PFQuery(className: "TranslationsList")
query.whereKey("sentence", containedIn: sentences)
query.addAscendingOrder("order")
query.findObjectsInBackground {
[weak self] (objects: [PFObject]?, error: Error?) in
if error != nil {
print("Error in \(#function)\n" + (error?.localizedDescription)!)
return
}
// The line below prints the expected number (> 0).
print("\(objects?.count ?? 99) translations found.")
for sentence in sentences {
for translation in objects! {
// The following does not work!!
if (translation.value(forKey: "sentence") as! PFObject) == sentence {
print("FTF: \(sentence.value(forKey: "sentence")!)") // MISSING!!
}
}
}
}
}
但事实是,如果我在适当的时候停止调试器,我可以看到注释行上应该有一个命中(丢失!!)。这是调试器显示的内容:
(lldb) p sentence.debugDescription
(String) $R31 = "<SentencesList: 0x1073j7450, objectId: krxX9WsZuxK, localId: (null)> {\n order = 3;\n owner = Ht8AbcR543;\n sentence = \"Hello big world of things.\";\n}"
(lldb) p translation.debugDescription
(String) $R32 = "<TranslationsList: 0x10739f0e0, objectId: FoBdjoPF1n, localId: (null)> {\n order = 0;\n owner = Ht8AbcR543;\n sentence = \"<SentencesList: 0x1073aa8c0, objectId: krxX9WsZuxK, localId: (null)>\";\n translation = \"Die Welt von immer!\";\n}"
(lldb)
我们可以看到值 krxX9WsZuxK 在句子 (objectId) 和翻译(句子字段)上都找到了,所以我希望有这样一行:
FTF: .......
待打印,但这并没有发生。所以我怀疑这行有误:
if (translation.value(forKey: "sentence") as! PFObject) == sentence {
我尝试了各种其他变体都失败了。
您好,您应该使用以下方法将 "sentence" 包含在查询响应中:
query.includeKey("sentence")
query.findObjectsInBackground { ...
这将有助于查询将句子作为 PFObject 添加到结果中。这具有类似于连接的效果。您可以使用点符号来指定包含对象中的哪些字段也被提取。
在搜索并尝试了很多东西之后,以下是有效的方法:
我需要替换这一行:
if (translation.value(forKey: "sentence") as! PFObject) == sentence {
通过这个:
if (translation.value(forKey: "sentence") as! PFObject).value(forKey: "objectId") as! String ==
sentence.value(forKey: "objectId") as! String {
这很有道理,但我希望能有某种速记形式。
无论如何,我希望它在某些时候对其他人也有用。
这里有一些 Parse-Server
相关的 swift 代码不起作用,可能只是因为一些明显的语法错误。
如果有人能指出这个问题,我将非常高兴和感激。
func getSentenceTranslations(_ sentences:[PFObject]) {
let query = PFQuery(className: "TranslationsList")
query.whereKey("sentence", containedIn: sentences)
query.addAscendingOrder("order")
query.findObjectsInBackground {
[weak self] (objects: [PFObject]?, error: Error?) in
if error != nil {
print("Error in \(#function)\n" + (error?.localizedDescription)!)
return
}
// The line below prints the expected number (> 0).
print("\(objects?.count ?? 99) translations found.")
for sentence in sentences {
for translation in objects! {
// The following does not work!!
if (translation.value(forKey: "sentence") as! PFObject) == sentence {
print("FTF: \(sentence.value(forKey: "sentence")!)") // MISSING!!
}
}
}
}
}
但事实是,如果我在适当的时候停止调试器,我可以看到注释行上应该有一个命中(丢失!!)。这是调试器显示的内容:
(lldb) p sentence.debugDescription
(String) $R31 = "<SentencesList: 0x1073j7450, objectId: krxX9WsZuxK, localId: (null)> {\n order = 3;\n owner = Ht8AbcR543;\n sentence = \"Hello big world of things.\";\n}"
(lldb) p translation.debugDescription
(String) $R32 = "<TranslationsList: 0x10739f0e0, objectId: FoBdjoPF1n, localId: (null)> {\n order = 0;\n owner = Ht8AbcR543;\n sentence = \"<SentencesList: 0x1073aa8c0, objectId: krxX9WsZuxK, localId: (null)>\";\n translation = \"Die Welt von immer!\";\n}"
(lldb)
我们可以看到值 krxX9WsZuxK 在句子 (objectId) 和翻译(句子字段)上都找到了,所以我希望有这样一行:
FTF: .......
待打印,但这并没有发生。所以我怀疑这行有误:
if (translation.value(forKey: "sentence") as! PFObject) == sentence {
我尝试了各种其他变体都失败了。
您好,您应该使用以下方法将 "sentence" 包含在查询响应中:
query.includeKey("sentence")
query.findObjectsInBackground { ...
这将有助于查询将句子作为 PFObject 添加到结果中。这具有类似于连接的效果。您可以使用点符号来指定包含对象中的哪些字段也被提取。
在搜索并尝试了很多东西之后,以下是有效的方法:
我需要替换这一行:
if (translation.value(forKey: "sentence") as! PFObject) == sentence {
通过这个:
if (translation.value(forKey: "sentence") as! PFObject).value(forKey: "objectId") as! String ==
sentence.value(forKey: "objectId") as! String {
这很有道理,但我希望能有某种速记形式。 无论如何,我希望它在某些时候对其他人也有用。