ios - Parse Cloud - LiveQueries - iOS 客户端不工作

标签 ios swift parse-platform livequery parse-cloud-code

我正在尝试使用 Parse LiveQueries。 我使用这个解析“Bootstrap”:“https://github.com/parse-community/parse-server”,
我可以看到日志:info: Create new client: 1,
但我只是没有得到查询中的更新,尽管我已经订阅了它。它甚至没有到达 subscription.handle 的处理程序。

config.json:

{
  "appId": "",
  "masterKey": "",
  "appName": "",
  "cloud": "./cloud/main",
  "databaseURI": "",
  "publicServerURL": "",    

  // Relevant
  "startLiveQueryServer": true,
  "liveQuery": {
    "classNames": ["Channel"]
  },
}

AppDelegate.swift:

// Initialize Parse.
let configuration = ParseClientConfiguration {
    $0.applicationId = self.PARSE_APP_ID
    $0.server = self.PARSE_SERVER
}
Parse.initialize(with: configuration)

AppDelegate.liveQueryClient = ParseLiveQuery.Client()

订阅代码(iOS Swift):

public static func listenSubscribedChannels(handler: @escaping (_ channel: Channel) -> Void) {
    var subscription: Subscription<PFObject>?

    let query: PFQuery<PFObject> = PFQuery(className: "Channel").whereKey("subscribers", containedIn: [PFUser.current()!.objectId])

    subscription = AppDelegate.liveQueryClient!.subscribe(query).handle(Event.updated) { _, channel in
        handler(channel)
    }
}

最佳答案

此代码的问题在于您放置此代码 var subscription: Subscription<PFObject>?在函数内部。

此对象必须能够保留其内存地址才能接收事件。

例如。

class SomeClass {
    var objects: [PFObject] = []
    var subscription: Subscription<PFObject>?
    var subscriber: ParseLiveQuery.Client!
    let query = PFQuery(className: "Locations")

    func startListener() {
        // initialize the client
        subscriber = ParseLiveQuery.Client()

        // initialize subscriber and start subscription
        subscription = subscriber.subscribe(conversationQuery)

        // handle the event listenrs.
        _ = subscription?.handleEvent({ (_, event) in
            switch event {
            case .created(let object): 
                self.objects.append(object)
                // do stuff 

            default: 
                break // do other stuff or do nothing
            }
        })
    }
}

从这段代码中可以看出,我已将变量放在函数定义之外,以便 Subscription要保留的内存地址。

关于ios - Parse Cloud - LiveQueries - iOS 客户端不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44273455/

相关文章:

ios - 在 iOS 7 的 UITableView 上指示加载事件的正确方法是什么?

ios - [String!] 和 [String] 有什么区别!

swift - 从 PFGeoPoint 中获取纬度/经度

android - Android SDK 是否弃用了 ParseCrashReporting?

ios - UIActivityViewController 在 Testflight 中崩溃,但在从 Xcode 构建时不会崩溃

ios - 如何在 Apple Vision 框架中拍摄检测到的矩形的照片

iOS 编程 : UITextField, 监听 unfocus 事件

ios - 在关闭之前的 AlertViewController 之后呈现新的 AlertViewController - Swift

ios - 单击按钮时将按钮图像从一个图像更改为另一个图像时出错

ios - 无法从 TableViewCell 检索数据,因为未调用 didSelectRowAt