You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:39:01