You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PFQuery测试指针相等性时出现语法错误

问题分析与修复方案

嘿,我帮你找出这段Parse-Server Swift代码里的关键问题啦!主要有两个核心点导致它无法正常运行:

1. 指针查询的参数类型不匹配(最可能的报错原因)

你的whereKey("sentence", containedIn: sentences)这行存在逻辑错误:

  • 如果"TranslationsList"里的sentence字段是指针类型(指向Sentence类的对象),那么containedIn查询需要传入的是目标对象的objectId数组,而不是直接传[PFObject]数组。Parse无法直接识别未提取ID的PFObject数组作为查询条件,会导致查询失败或者返回空结果。

修复方法:先提取所有sentence对象的objectId(用compactMap过滤掉没有ID的未保存对象),再传入查询:

func getSentenceTranslations(_ sentences:[PFObject]) { 
    let query = PFQuery(className: "TranslationsList") 
    // 提取有效objectId数组
    let validSentenceIds = sentences.compactMap { $0.objectId }
    query.whereKey("sentence", containedIn: validSentenceIds) 
    query.addAscendingOrder("order") 
    query.findObjectsInBackground { [weak self] (objects: [PFObject]?, error: Error?) in 
        if let error = error { 
            print("查询出错:\(error.localizedDescription)")
            return
        }
        // 处理成功返回的结果
        guard let translations = objects else {
            print("未找到匹配的翻译")
            return
        }
        print("获取到\(translations.count)条翻译")
        // 这里可以添加你的业务逻辑,比如更新UI或者存储数据
    } 
}

2. 闭包逻辑不完整(功能失效的隐性问题)

原代码只处理了error != nil的情况,完全没有处理查询成功后返回的objects,这会导致你根本拿不到查询结果,函数相当于没有实际作用。修复后的代码补充了成功分支的处理,包括空结果判断和结果使用的逻辑。

另外补充一个小提示:如果你的sentences数组里有未保存到Parse Server的PFObject(没有objectId),这些对象会被compactMap过滤掉,避免无效的查询条件。

内容的提问来源于stack exchange,提问作者Michel

火山引擎 最新活动