- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为 WatchOS 构建一个应用程序扩展,我想在 Watch 应用程序中执行一些 URL 请求。我在网络部分使用 Alamofire。
每当我做一个简单的请求时,我在模拟器和真实设备上都会收到这些错误:加载失败,错误 Error Domain=NSURLErrorDomain Code=-2000 “无法从网络加载”
我不清楚为什么会这样。 watch 与手机配对。使用 Charles Proxy 我可以看到请求没有通过网络发送,所以它甚至在发送之前就失败了。
欢迎提出任何想法。
编辑这是我的通信类的工作摘录:
import Foundation
import Alamofire
class Communication {
internal lazy var manager = Communication.getSessionManager()
typealias SuccesBlock = (DataResponse<Any>?) -> ()
typealias FailureBlock = (DataResponse<Any>?, Error) -> ()
typealias ProgressBlock = (Progress) -> ()
internal static var serverTrustPolicyManager: ServerTrustPolicyManager {
get {
return ServerTrustPolicyManager(policies: [:])
}
}
static func getSessionManager(_ serializeRequest:Bool = false) -> Alamofire.SessionManager {
let manager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default, delegate: Alamofire.SessionManager.default.delegate, serverTrustPolicyManager: serverTrustPolicyManager)
return manager
}
static var httpHeaders: HTTPHeaders {
get {
var httpHeaders = HTTPHeaders()
httpHeaders["Accept"] = "application/json"
return httpHeaders
}
}
func get(_ url: URL, parameters: [String: Any]?, success: @escaping SuccesBlock, failure: @escaping FailureBlock) {
manager.request(url, method: HTTPMethod.get, parameters: parameters, encoding: URLEncoding.default, headers: Communication.httpHeaders).validate().responseJSON { [weak self] (response) in
self?.handle(response, success: success, failure: failure)
}
}
internal func handle(_ response: DataResponse<Any>, success: @escaping SuccesBlock, failure: @escaping FailureBlock) {
switch response.result {
case .success:
DispatchQueue.main.async {
success(response)
}
case .failure(let error):
DispatchQueue.main.async {
failure(response, error)
}
}
}
}
我发送到 get(_ url: URL, parameters: [String: Any]?, success: @escaping SuccesBlock, failure: @escaping FailureBlock)
函数的任何内容都给出了 -2000 错误. .responseJSON
代码块永远不会执行。
编辑 2
我得到的完整错误如下:
`2018-09-20 12:12:48.006544+0100 My App Watch Extension[61347:2465172] Task <F80A9AD4-519B-424C-868A-8E239C949016>.<7> load failed with error Error Domain=NSURLErrorDomain Code=-2000 "can’t load from network" UserInfo={NSLocalizedDescription=can’t load from network, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <F80A9AD4-519B-424C-868A-8E239C949016>.<7>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <F80A9AD4-519B-424C-868A-8E239C949016>.<7>"
), NSErrorFailingURLStringKey=https://my.request.url, _kCFNetworkErrorConditionalRequestKey=<CFMutableURLRequest 0x78f37a70 [0x201628c]> {url = https://my.request.url, cs = 0x0}, _kCFNetworkErrorCachedResponseKey=<CFCachedURLResponse 0x7b3d7f20 [0x201628c]>, NSUnderlyingError=0x7b436380 {Error Domain=kCFErrorDomainCFNetwork Code=-2000 "(null)" UserInfo={_kCFNetworkErrorCachedResponseKey=<CFCachedURLResponse 0x7b3d7f20 [0x201628c]>, _kCFNetworkErrorConditionalRequestKey=<CFMutableURLRequest 0x78f37a70 [0x201628c]> {url = https://my.request.url, cs = 0x0}}}, NSErrorFailingURLKey=https://my.request.url} [-2000]`
在控制台中收到此错误后,我现在可以看到请求仍在发送并成功。看到此错误后,我以为情况并非如此,但我现在看到,经过一些延迟后,请求按预期工作。
所以最终该应用程序将运行,但是,剩下的问题是:为什么会出现此错误以及如何消除它?
最佳答案
错误描述为
NSURLErrorCannotLoadFromNetwork
This error is sent when the task needs to load from the network, but is blocked from doing so by the “load only from cache” directive.
你可以通过设置Alamofire请求的requestCachePolicy来解决,像这样:
class RequestManager {
let manager: SessionManager = {
let configuration = URLSessionConfiguration.default
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
return SessionManager(configuration: configuration)
}()
func fetch() {
manager.request("https://www.bla.blub")
...
关于swift - 在 WatchOS 上与 Alamofire 联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52404748/
我有一个现有的 WatchOS 2 应用程序。我想升级它并添加一些 WatchOS 3 功能,所以我安装了 Xcode 8 beta 3。我的问题是我是否需要为 WatchOS 3 项目创建另一个目标
我正在尝试构建一个应用程序,它支持 watch OS2 上的多个复杂功能系列,例如模块化大、实用大、圆形小等,每个都显示来自应用程序的各种有意义的信息。我知道复杂性与我们自 OS1 以来在用户交互方面
我的 iOS 和 watchOS 应用程序之间有一个共享框架,其中包含一个带有一些命名颜色的 Assets 目录。我想在我的 watchOS 应用程序中访问命名颜色。在 iOS 中,我可以使用 UIC
我在 watchOS 5 和 Apple Watch Series 4 上遇到了一些问题,因为它们没有正确使用它们的tintColor。相反,它们仅显示白色文本。同一张脸上的其他第 3 方并发症显示出
在昨天的 WWDC 上,Apple 宣布在 watchOS 5 中支持 WebKit。我已经下载了 Xcode 10,但在 Interface Builder 或 Frameworks and Lib
我正在考虑更新到 watchOS 6 的独立应用程序 (as Apple suggests),但我不清楚安装了我的应用程序的旧 watchOS 版本的用户会发生什么。更具体地说: 如果用户在其 wat
我有一个仅针对 watchOS 6 及更高版本的 watchOS Xcode 项目,它是用 SwiftUI 编写的,并且它的所有依赖项都由 Swift Package Manager 处理。我注意到在
我知道 Apple watchOS 2.0 应用程序需要一些修改(特别是在双向通信方面).... 但是,对于已经在 App Store 中为 1.0 编写的所有 Watch 应用程序,它们会在没有修改
Previous 我使用 NSUserDefaults 在 watch 和应用程序之间共享基本变量。 我的目标是在 watch 上显示存储在 iPhone 应用程序 NSUserDefaults 上的
想要在 watchOS 下运行应用程序,在 Xcode beta 下出现错误:域:IDELaunchErrorDomain 代码:15 失败原因:构建和运行启动失败,因为系统似乎无法识别要运行的应用程
我有一个公共(public)交通应用程序,其中包含火车的实时出发数据。我想添加一个复杂功能,显示下一趟火车的出发时间。 是否可以显示(或刷新)复杂功能的实时数据?例如,显示“到 X 站 3 分钟”。根
我正在为营养跟踪应用程序构建并发症。我想使用提供多个较小的并发症,以便用户可以跟踪他们的营养。 例如: 'MyApp - 碳水化合物' 'MyApp - 蛋白质' 'MyApp - 胖子' 通过这种方
我希望有人能够帮助我理解在我的 WatchOS 2 应用程序中尝试实现 NSURLSession 时遇到的问题。 无论出于何种原因,我收到错误; Error Domain=NSCocoaErrorDo
我想让界面像健康应用一样在全屏高度上可滚动,并且不允许在中间停止滚动,这可能吗? 例如,我有两个按钮,我希望它们在屏幕上可见,另一个在滚动后显示。主要部分是,如果滚动开始,它将自行继续,直到第二个按钮
在 watchOS 中,如果应用程序中嵌入了自定义字体,则该字体肯定可以在 WkInterfaceLabel、WKInterfaceButton 等上使用。 该字体适用于 watchOS 的通知 Vi
现在我没有开发者帐户,所以我曾经使用 Xcode 在 Apple Watch Series 3 上安装 watch 应用程序。在过去的几个月中,我观察到即使我每天运行该应用程序,我的应用程序通常也会在
我做了一个应用程序。我向应用程序发送推送通知。我也想在 watchos 上收到它们。我必须为 watchOs 制作一个项目并制作一个应用程序吗?或者我在 watchOs 上自动收到来自 iPhone
问题:Apple Watch 上创建的通知只是间歇性地提醒用户它们的存在。从屏幕顶部向下滑动时,通知中心会显示已收到通知。为什么我们不是每次都收到警报? 我们正在使用 Apple 推荐的方法(如 UN
我有一个 Core Data 应用程序。这就像一个比方说一个新闻应用程序。每个条目都有名称、ID、日期、发布者、详细信息等。主 iOS 应用程序可以有很多新闻条目。我只想展示 WatchOS 应用程序
在 Xcode 中,有一个地方可以设置界面 Controller 关闭时的 Action : override func didDeactivate() { // This method
我是一名优秀的程序员,十分优秀!