IOS Parse LiveQuery:错误处理消息:可选POSIXErrorCode:软件导致连接中止

问题描述

我在 SwiftUI 中开发了一个应用程序,我也在其中使用了与 Parse LiveQuery 的聊天。 聊天实时完美运行,直到应用程序进入后台或手机屏幕关闭。 如果我收到一条新消息的通知并从通知中打开应用程序,则 LiveQuery 停止工作并收到错误消息:“解析 LiveQuery:错误处理消息:可选(POSIXErrorCode:软件导致连接中止)”

注册了 Message 类

>>> tag

        0      1      2
0  Orange  Black  White
1    Grey  White   None
2   Black  brown   None
3  Orange   Grey  White
4  Orange  brown  White
5    Grey  White   None

>> tag_order

0  Black  brown  Grey  Orange  White
0      2      0     0       1      3
1      0      0     1       0      2
2      1      2     0       0      0
3      0      0     2       1      3
4      0      2     0       1      3
5      0      0     1       0      2

>> cats_frame

  lesson_name                tag_list Orange Black White Grey brown
0        Mutt  [Orange,Black,White]      1     2     3    0     0
1     Ragdoll           [Grey,White]      0     0     2    1     0
2       Black          [Black,brown]      0     1     0    0     2
3      Calico   [Orange,Grey,White]      1     0     3    2     0
4    Tortoise  [Orange,brown,White]      1     0     3    0     2
5   Mainecoon           [Grey,White]      0     0     2    1     0

在 ChatView 上,我有 .onReceive,我可以在其中启动聊天和 liveQuery 功能

class Message: PFObject,PFSubclassing {
    @NSManaged var message   : String
    @NSManaged var receiver  : PFObject
    @NSManaged var thread_id : PFObject
    @NSManaged var produs    : PFObject
    @NSManaged var sender    : PFObject
    @NSManaged var picture   : PFObject

    class func parseClassName() -> String {
        return "Message"
    }
}

函数 StartMessagesLiveQuery 是:

                        var messagesQuery: PFQuery<Message> {
                            return (Message.query()?
                                        .whereKey("thread_id",equalTo: self.mainThread_obj)
                                        .order(byDescending: "createdAt")) as! PFQuery<Message>
                        }
                        self.StartMessagesLiveQuery(messagesQuery: messagesQuery)

唯一的问题是当应用从通知中打开时。

我有什么方法可以强制 ParseLiveQuery 重新连接?

错误堆栈:

 let subscription: Subscription<Message> = Client.shared.subscribe(messagesQuery)        
        subscription.handle(Event.created) { query,object in
            print("Live Query Trigered")
            print(object)
            dispatchQueue.global(qos: .background).async {
                    ///reading object and appending to array}}

在此之后网络连接恢复并且应用程序正常运行,只有 LiveQuery 不工作。

解决方法

我想我已经解决了。 我修改了函数 StartMessagesLiveQuery:

func StartMessagesLiveQuery(messagesQuery: PFQuery<Message>){}

在我拥有的功能中:

let subscription: Subscription<Message> = Client.shared.subscribe(messagesQuery) 
subscription!.handle(Event.created) { query,object in ... }

现在我已经修改并放入类

var subscription: Subscription<Message>?
 var subscriber: ParseLiveQuery.Client!

在我修改过的函数中:

subscriber = ParseLiveQuery.Client()
subscription = subscriber.subscribe(messagesQuery)