Glympse EnRoute API调用getTaskManager().getTasks()返回0计数异常问题
问题根因与解决步骤
1. 修正错误排查逻辑
你代码中打印的getTasks()!.description.count取的是GlyArray实例描述字符串的字符长度,和数组内存储的任务数量没有任何关联,该返回值没有参考意义,直接忽略即可。
2. 解决getTasks()返回空数组问题
EnRoute的任务数据不会在登录成功后立刻同步到本地,任务从服务器拉取是异步操作,你直接在页面加载初期调用getTasks()拿到的是尚未完成同步的空数组,需要通过监听同步完成事件触发任务读取和列表刷新。
正确实现示例:
// 页面初始化阶段注册任务同步监听 override func viewDidLoad() { super.viewDidLoad() EnRouteWrapper.instance.manager()?.getTaskManager().add(self, for: GlyTaskManagerEvent.tasks_loaded) } // 实现任务管理器事件回调 func onTaskManagerEvent(_ event: GlyEvent!) { guard event.type == GlyTaskManagerEvent.tasks_loaded else { return } // 切主线程刷新列表 DispatchQueue.main.async { [weak self] in self?.tableView.reloadData() } } // 修正列表行数计算逻辑,增加安全判断避免崩溃 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { guard let tasks = EnRouteWrapper.instance.manager()?.getTaskManager().getTasks() else { return 0 } return tasks.count() } // 页面销毁时移除监听,避免内存泄漏 deinit { EnRouteWrapper.instance.manager()?.getTaskManager().remove(self, for: GlyTaskManagerEvent.tasks_loaded) }
3. 额外适配建议
- 若需要实时响应任务增删改操作,可额外监听
GlyTaskManagerEvent.task_added、GlyTaskManagerEvent.task_removed、GlyTaskManagerEvent.task_updated三类事件,事件触发时刷新列表即可 - EnRoute API的回调默认在后台线程触发,所有UI操作必须切换到主线程执行
- 避免使用强制解包
!,防止API返回空值时触发崩溃
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

