swift - IOS Parse LiveQuery:错误处理消息:可选(POSIXErrorCode:软件导致连接中止)
问题描述
我在 SwiftUI 中开发了一个应用程序,我还使用 Parse LiveQuery 聊天。聊天实时完美运行,直到应用程序进入后台或手机屏幕关闭。如果我收到新消息的通知并从通知中打开应用程序,则 LiveQuery 停止工作并收到错误消息:“解析 LiveQuery:错误处理消息:可选(POSIXErrorCode:软件导致连接中止)”
我注册了 Message 类
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"
}
}
在 ChatView 上,我有 .onReceive,我在其中启动聊天和 liveQuery 功能
var messagesQuery: PFQuery<Message> {
return (Message.query()?
.whereKey("thread_id", equalTo: self.mainThread_obj)
.order(byDescending: "createdAt")) as! PFQuery<Message>
}
self.StartMessagesLiveQuery(messagesQuery: messagesQuery)
函数 StartMessagesLiveQuery 是:
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}}
唯一的问题是从通知打开应用程序时。
我有什么方法可以强制 ParseLiveQuery 重新连接?
错误堆栈:
2021-03-03 10:15:47.442021+0200 App[35496:6350370] [connection] nw_read_request_report [C2] Receive failed with error "Software caused connection abort"
2021-03-03 10:15:47.449044+0200 App[35496:6350370] [connection] nw_read_request_report [C3] Receive failed with error "Software caused connection abort"
2021-03-03 10:15:47.449291+0200 App[35496:6350370] [connection] nw_read_request_report [C1] Receive failed with error "Software caused connection abort"
2021-03-03 10:15:47.455008+0200 App[35496:6350370] [connection] nw_flow_add_write_request [C2.1 52.1.38.170:443 failed channel-flow (satisfied (Path is satisfied), viable, interface: en0, ipv4, dns)] cannot accept write requests
2021-03-03 10:15:47.455055+0200 App[35496:6350370] [connection] nw_write_request_report [C2] Send failed with error "Socket is not connected"
2021-03-03 10:15:47.455815+0200 App[35496:6350657] ParseLiveQuery: Error processing message: Optional(POSIXErrorCode: Software caused connection abort)
2021-03-03 10:15:47.456612+0200 App[35496:6350370] Task <F6A87098-D5D3-444B-B656-D1999D5089D1>.<44> HTTP load failed, 42/0 bytes (error code: -1005 [1:53])
2021-03-03 10:15:47.462120+0200 App[35496:6350657] Task <F6A87098-D5D3-444B-B656-D1999D5089D1>.<44> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=53, NSUnderlyingError=0x282d11830 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x280174aa0 [0x20a814660]>{length = 16, capacity = 16, bytes = 0x100201bb344692570000000000000000}, _kCFStreamErrorCodeKey=53, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <F6A87098-D5D3-444B-B656-D1999D5089D1>.<44>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <F6A87098-D5D3-444B-B656-D1999D5089D1>.<44>"
), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://site.b4a.app/classes/_User, NSErrorFailingURLKey=https://site.b4a.app/classes/_User, _kCFStreamErrorDomainKey=1}
2021-03-03 10:15:47.462237+0200 App[35496:6350657] [Error]: The network connection was lost. (Code: 100, Version: 1.19.1)
2021-03-03 10:15:47.462335+0200 Bazar[35496:6350657] [Error]: Network connection failed. Making attempt 1 after sleeping for 1.588128 seconds.
在此之后,网络连接恢复并且应用程序正常运行,只有 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)
推荐阅读
- angular - 如何基于 api 调用数据在延迟加载中动态添加角度路由路径
- tortoisegit - 重新打开提交窗口
- c# - BizTalk Sendport WS 安全 OASIS WCF 自定义和行为
- php - 如何对属于您网站但未在 WordPress“页面”部分列出的 URL 进行索引?
- arrays - SPLIT 函数:将单元格中的文本转换为数组,但忽略空行
- selenium - 打开 Citrix 接收器启动器的困难
- python - wxpython中的所有者绘制列表框
- filter - 使用 dataTables 和 SearchPane 插件过滤表后更新 SearchPane 过滤器值
- blockchain - 有人设法用 Web3.js@1.0.0 获得 ERC20 代币的余额?
- r - 合并行长不一致的csv文件并将basename保留为列标题