【问题标题】:WKRefreshBackgroundTask cleanupStorage Error attempting to reach fileWKRefreshBackgroundTask cleanupStorage 尝试访问文件时出错
【发布时间】:2018-03-09 22:22:54
【问题描述】:

在模拟器上的 WatchOS4 中创建 URLBGTask 时出现什么错误?

2017-09-28 16:05:26.452999+0900 MiFollowers WatchKit Extension[4628:4012814] [bg_app_refresh] -[WKRefreshBackgroundTask cleanupStorage]_block_invoke:213: Error attempting to reach file:///Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null): Error Domain=NSCocoaErrorDomain Code=260 "The file “bktaskapp_(null)” couldn’t be opened because there is no such file." UserInfo={NSURL=file:///Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null), NSFilePath=/Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null), NSUnderlyingError=0x79b0e340 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

你们有没有聪明人知道这一切意味着什么?

【问题讨论】:

  • 你能解决这个问题吗?
  • 还没有,直到现在,自从我为开发者帐户付费以来,我已经在 Apple 开发者支持部门工作了几个月,但他们还没有提供直接的答案。

标签: swift xcode background apple-watch-complication watchos-4


【解决方案1】:

我也得到了这个。最近两天让我发疯。

我仍然不确定要求您使用 userInfo 属性是错误还是“功能”。如果您没有从handle(_ backgroundTasks) 方法中的后台刷新任务中获取userInfo 属性,则会发生这种情况。对该物业的任何访问都有效。摆脱错误的一个简单解决方法是在userInfo: 参数中使用backgroundTask.userInfohandle 方法中安排下一次后台刷新,该参数只是将nil 分配给下一个任务。

WKExtension.shared().scheduleBackgroundRefresh(withPreferredDate: refreshDate, userInfo: backgroundTask.userInfo) { (error) in
    if let error = error {
        print ("Background task error:\(error.localizedDescription)")
    }
}

当然,这种解决方法意味着您将无法使用userInfo。更好的代码可能是在其中粘贴一些内容,例如调度日期或任务的标识符,或者两者的 [String:Any] 字典。

【讨论】:

  • 谢谢你。这么奇怪的问题。我不确定它是否会造成任何伤害,但我很庆幸我在调试时不必再看到它了。我这样做的方法是简单地创建一个名为 userInfoAccess 的类级变量,然后在我的处理后台任务循环中执行 userInfoAccess = backgroundTask.userInfo。这样我仍然可以使用后台刷新userInfo。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 2016-03-30
  • 1970-01-01
相关资源
最近更新 更多