0

我正在更新 Apple Watch 复杂功能。但是当我session.transferCurrentComplicationUserInfo(userInfo)在 iOS 上调用时,我的应用程序会冻结几分之一秒,有时甚至更长。当它在拖动手势或动画期间很明显。

我怎样才能避免这种情况但仍然更新并发症?

附加上下文

这就是我将并发症称为更新的方式

private var validSession: WCSession? {
    if let session = session where session.paired && session.watchAppInstalled {
        return session
    }
    return nil
}

func updateApplicationContext(userInfo: [String : AnyObject]) {
    if let session = validSession {
        if session.complicationEnabled {
            do {
                session.transferCurrentComplicationUserInfo(userInfo)
            }
        }            
    }
}

有趣的是,当我对它做同样的事情时,session.updateApplicationContext(userInfo)它不会导致冻结(当然它也不会更新并发症)。

func updateApplicationContext(userInfo: [String : AnyObject]) {
    if let session = validSession {
        do {
            try session.updateApplicationContext(userInfo)
        } catch let error {
            print("[Update] \(error)")
        }
    }
}

我也试图分析应用程序。不幸的是,在 Profiler 运行时,我无法从手表扩展切换到 iOS 应用。(也欢迎任何提示)有趣的是,我确实设法做到了一次,并记得在时间分析器中将冻结视为零活动一段时间。奇怪的是,我session.transferCurrentComplicationUserInfo(userInfo)在结尾而不是冻结开始时发现了呼叫。令人费解。

我希望其中一些是有帮助的。对我来说,这仍然很令人困惑。我很欣赏任何想法。

4

0 回答 0