【问题标题】:Swift - Parse results always empty now but were NOT before? Can still post object but not get with query?Swift - 解析结果现在总是空的,但以前不是?仍然可以发布对象但不能通过查询获得?
【发布时间】:2016-07-25 03:01:08
【问题描述】:

我非常沮丧,需要一些指导。我目前在 iOS 中有一个 Swift 应用程序通过 Heroku 运行 Parse(所以它没有死,这不是原因)。

直到昨天,一切都很顺利。我已经能够像这样读取和写入我的数据库并且一切正常:

let ideaPost = PFObject(className: "ideaPosts")
                ideaPost["mood"] = moodField.text
                ideaPost["ideaText"] = ideaTextField.text
                ideaPost.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
                    print("Object has been saved.")

这是我的数据库作为证据:

我今天创建了所有这些对象。直到今天,我已经能够准确地查询和接收这样的对象:

ParseHelper.searchPosts(mood!, completionBlock: handleIdea)

   static func searchPosts(searchText: String, completionBlock: PFQueryArrayResultBlock) -> PFQuery {
        /*
         NOTE: We are using a Regex to allow for a case insensitive compare of usernames.
         Regex can be slow on large datasets. For large amount of data it's better to store
         lowercased username in a separate column and perform a regular string compare.
         */

//        let query = PFQuery(className: "ideaPosts").whereKey(("mood"),
//                                                             matchesRegex: searchText, modifiers: "i")

        let query = PFQuery(className: "ideaPosts").whereKey(("mood").lowercaseString,
                                                             equalTo: searchText.lowercaseString)

        query.orderByAscending("createdAt")

        query.findObjectsInBackgroundWithBlock(completionBlock)


        return query
    }

如您所见,我引用了正确的类和正确的字段。据我所知(我昨晚走得很快,一定是不小心碰到了什么东西)我没有改变一点代码。我的项目因此毁于一旦。

为什么会这样?为什么我的结果总是空的?我输出返回的结果 PFObject,因为它作为一个空选项返回。

我认为我已经改变的唯一两件事是 1. 我重命名了我的项目(因此 Xcode 重命名了我的所有目标,但我没有构建错误或任何东西)并且早些时候我清理了(删除了一些行)在我的桌子上。

我还在我的帐户中添加了一个新的数据库/一组服务器但这不应该影响我认为的任何事情。生无可恋。这里出了什么问题?

我已经清理了我的构建和所有东西。

【问题讨论】:

  • 嗨,在您的查询中,您指定了哪里心情 equalTo:searchText.lowercaseString 但是如果我查看您在“心情”列下附加的结果,我看不到任何小写字符串..我想你可以只删除小写字符串,只做equalTo:searchText。

标签: ios swift heroku parse-platform


【解决方案1】:

如果搜索代码尝试将小写 searchText 与心情属性中的混合大小写数据匹配(看起来是这样),则搜索代码将生成空结果。

.whereKey(("mood").lowercaseString, equalTo:searchText.lowercaseString)

第一个操作数命名正在比较的列,即"mood",值得注意的是("mood").lowercaseString == "mood"

正则表达式看起来更有前途。是否可以评论说这是您最近所做的更改?

除了正则表达式,不区分大小写匹配情绪列的唯一方法是保留另一列,如mood_i,其中数据被强制小写,然后搜索。初始化此类列的常见做法是在afterSave

【讨论】:

  • 非常感谢,我一定把这两个查询换掉了。不过仍然很好奇 - 如果第一个都是小写,为什么第一个不起作用?
  • 乐于助人。在第一个上,它们都不是小写的。第一个参数是列 name,而不是它的值。该代码使单词“mood”小写,它已经是。
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多