问题描述
我在 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)