- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 swift 网络管理器库,专门用于满足我自己的 API 需求。这个类被声明为 final 并且有一个静态的 let 变量来定义这个类的单例设计模式。此类中的所有其他函数都是类函数。
不幸的是,每当这个单例类被调用并且单例设计模式方法,即 static let sharedInstance : NetworkManager = NetworkManager.init() 被调用时,它给了我
stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) error.
我认为线程可能存在问题,但没有。我只是在 UIViewController 的 viewDidLoad 中调用了 NetworkManager.shared,它给了我同样的错误。
我在此提供 NetworkManager 类的全部代码
final class NetworkManager {
static let sharedInstance : NetworkManager = NetworkManager.init()
private var urlConfig = URLSessionConfiguration.default
private var urlSession = URLSession(configuration: sharedInstance.urlConfig)
var basePath : String = "https://api.myjson.com/";
private init() {
print("This is getting called at all");
}
//MARK:- POST METHODS
class func performPOST(urlString : String?, bodyParams : [String : AnyObject]? = nil, completionHandler : @escaping(Result<Data?,NetworkError>) -> Void){
self.performJSON(urlString: urlString, bodyParams: bodyParams, method : .POST, completionHandler: completionHandler)
}
class func performPOST( url : URL?, bodyParams : [String : AnyObject]? = nil, headerParams : [String : Any]? = nil,completionHandler : @escaping(Result<Data?,NetworkError>) -> Void){
self.performJSON(url: url, bodyParams: bodyParams, method : .POST, completionHandler: completionHandler)
}
class func performPOST( request : URLRequest?, completionHandler : @escaping(Result<Data?,NetworkError>) -> Void){
self.performJSON(request: request, completionHandler: completionHandler)
}
//MARK:- JSON FUNCTIONS
class func performJSON(urlString : String?, bodyParams : [String : AnyObject]? = nil, headerParams : [String : Any]? = nil,method : MethodType = .GET , completionHandler : @escaping(Result<Data?,NetworkError>) -> Void){
guard let urlString = urlString, let compURL = URL.init(string: NetworkManager.sharedInstance.basePath + urlString) else {
completionHandler(.failure(.badURL))
return
}
var urlReq = URLRequest.init(url: compURL, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 30)
do {
try self.prepareTheURLRequest( request : &urlReq,
bodyParams : bodyParams,
headerParams : headerParams,
method :method)
}catch let error as NetworkError {
completionHandler(.failure(error))
}catch let error {
completionHandler(.failure(NetworkError.unknownError(error)))
}
self.performJSON(request: urlReq, completionHandler: completionHandler)
}
class func performJSON( url : URL?, bodyParams : [String : AnyObject]? = nil, headerParams : [String : Any]? = nil,method : MethodType = .GET, completionHandler : @escaping(Result<Data?,NetworkError>) -> Void){
}
//MARK:- FIRE_THE_REQUEST
class func performJSON( request : URLRequest?, completionHandler : @escaping(Result<Data?,NetworkError>) -> Void){
if let req = request {
let _ = NetworkManager.sharedInstance.urlSession.dataTask(with: req) { (data, response, error) in
if let er = error{
completionHandler(.failure(NetworkError.unknownError(er)))
}else if let resp = response{
do {
try self.validateTheResponse(response: resp)
completionHandler(.success(data))
} catch let error {
completionHandler(.failure(NetworkError.unknownError(error)))
}
}else{
completionHandler(.failure(NetworkError.noResponseReceived))
}
}
}
}
//MARK:- VALIDATE_RESPONSE
class func validateTheResponse(response : URLResponse) throws {
if let httpResponse = response as? HTTPURLResponse {
let statusCode = httpResponse.statusCode
switch statusCode {
case 200 ... 300 :
break
default:
let newError = NSError(domain: "Improper Status Code Received", code: 42, userInfo: ["statusCode":statusCode] )
throw newError
}
}
}
}
收到错误如下
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
frame #0: 0x000000010deab9d3 libdispatch.dylib<code>_dispatch_once_wait + 101
frame #1: 0x000000010bd00579 libswiftCore.dylib</code>swift_once + 25 * frame #2: 0x000000010a7bfcd4 MVVM<code>NetworkManager.sharedInstance.unsafeMutableAddressor at
NetworkManager.swift:25:16
frame #3: 0x000000010a7c010a MVVM</code>NetworkManager.(self=0x0000600002756e20).init() at
NetworkManager.swift:28:30
frame #4: 0x000000010a7bfca0 MVVM<code>NetworkManager.__allocating_init() at NetworkManager.swift:0
frame #5: 0x000000010a7bfc4c MVVM</code>globalinit_33_100BB9A6FE18335AA78CDFBEA4A3C62B_func0 at
NetworkManager.swift:25:65
frame #6: 0x000000010deaadb5 libdispatch.dylib<code>_dispatch_client_callout + 8
frame #7: 0x000000010deac83d libdispatch.dylib</code>_dispatch_once_callout + 66
frame #8: 0x000000010bd00579 libswiftCore.dylib<code>swift_once + 25
frame #9: 0x000000010a7bfcd4 MVVM</code>NetworkManager.sharedInstance.unsafeMutableAddressor at
NetworkManager.swift:25:16
frame #10: 0x000000010a7c06c3 MVVM<code>static NetworkManager.performJSON(urlString="bins/9asku", bodyParams=nil,
headerParams=nil, method=POST, completionHandler=0x000000010a7cc650
MVVM</code>partial apply forwarder for closure #1
(Swift.Result, MVVM.NetworkError>) ->
() in MVVM.ListRequest.fetchAllLists(completionHandler:
(Swift.Result>,
MVVM.NetworkError>) -> ()) -> () at ,
self=0x000000010a7d89e8) at NetworkManager.swift:52:88
frame #11: 0x000000010a7c03fa MVVM<code>static NetworkManager.performPOST(urlString="bins/9asku", bodyParams=nil,
completionHandler=0x000000010a7cc650 MVVM</code>partial apply forwarder for
closure #1 (Swift.Result,
MVVM.NetworkError>) -> () in
MVVM.ListRequest.fetchAllLists(completionHandler:
(Swift.Result>,
MVVM.NetworkError>) -> ()) -> () at ,
self=0x000000010a7d89e8) at NetworkManager.swift:38:14
frame #12: 0x000000010a7cc547 MVVM<code>ListRequest.fetchAllLists(completionHandler=0x000000010a7cf740
MVVM</code>closure #1 (Swift.Result>,
MVVM.NetworkError>) -> () in MVVM.ListPresenter.fetchAndShowList() ->
() at ListPresenter.swift:29, self=0x0000600002b1c3a0) at
ListRequest.swift:15:24
frame #13: 0x000000010a7cf726 MVVM<code>ListPresenter.fetchAndShowList(self=0x0000600002779140) at
ListPresenter.swift:29:17
frame #14: 0x000000010a7c5551 MVVM</code>ListVC.viewDidAppear(animated=false, self=0x00007ff125e04540) at
ListVC.swift:33:25
frame #15: 0x000000010a7c55d3 MVVM<code>@objc ListVC.viewDidAppear(_:) at <compiler-generated>:0
frame #16: 0x000000010edb2536 UIKitCore</code>-[UIViewController _setViewAppearState:isAnimating:] + 942
frame #17: 0x000000010edb521c UIKitCore<code>__64-[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:]_block_invoke + 42
frame #18: 0x000000010edb35ab UIKitCore</code>-[UIViewController _executeAfterAppearanceBlock] + 75
frame #19: 0x000000010f3b9e05 UIKitCore<code>_runAfterCACommitDeferredBlocks + 634
frame #20: 0x000000010f3a9199 UIKitCore</code>_cleanUpAfterCAFlushAndRunDeferredBlocks + 358
frame #21: 0x000000010f3c7cd9 UIKitCore<code>__34-[UIApplication _firstCommitBlock]_block_invoke_2 + 142
frame #22: 0x000000010ca7eaec CoreFoundation</code><strong>CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK</strong> + 12
frame #23: 0x000000010ca7e2b0 CoreFoundation<code>__CFRunLoopDoBlocks + 336
frame #24: 0x000000010ca78b34 CoreFoundation</code>__CFRunLoopRun + 1252
frame #25: 0x000000010ca78302 CoreFoundation<code>CFRunLoopRunSpecific + 626
frame #26: 0x0000000114b302fe GraphicsServices</code>GSEventRunModal + 65
frame #27: 0x000000010f3aeba2 UIKitCore<code>UIApplicationMain + 140
frame #28: 0x000000010a7caceb MVVM</code>main at AppDelegate.swift:12:7
frame #29: 0x000000010df1f541 libdyld.dylib`start + 1 (lldb)
最佳答案
你的代码中的问题是在这一行
private var urlSession = URLSession(configuration: sharedInstance.urlConfig)
当您创建类的实例时,它的变量也会在内存中分配。但是在这里,您试图在变量初始化完成之前访问它。
要修复崩溃,您可以将变量 urlSession
更改为如下所示:
private var urlSession = URLSession(configuration: URLSessionConfiguration.default)
关于ios - swift 中的单例类给出 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56325809/
code
正常吗?
我刚刚开始使用 YARD 来记录我的 Rails 应用程序。我没有指定任何特定的标记处理程序,但我希望 `code` 会转换为 code,但这似乎没有发生。这是正常行为吗?我是否必须添加一些额外的选项
什么是Code-Server 首先程序员朋友们肯定都用过来自微软的VS Code 这款轻量而又高级的编辑器,拥有丰富的插件库,支持各种语言编译运行。而本文介绍的Code-Server就是coder 公
我是一名高中生,今年开始学习汇编。 我目前正在制作 Pacman 克隆作为我的最终项目。 我遇到的唯一问题是我的代码很大,*.exe 文件几乎有 64KB。 所以我的问题是,如果我转向模型介质,我需要
锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 挑战 按字符计数绘制 Code 39 条码的 ASCII 表示的最短代码。 维基百科关于代码 3
我正在开发 VS 代码的扩展(使用 javascript)。现在我需要安装 VS Code 的路径。 windows有一种方法: var child = require('child_process'
[Windows 10] 我在自定义目录中安装了“Microsoft VS Code(用户设置)”,每当我尝试更新它时,都会显示: 然后这个 Log Info Dec 23 11:42:40.673
我正在尝试更新我的 VS 代码,但收到一条错误消息:由于防病毒软件和/或进程失控,更新可能会失败。 附加了一个来 self 的用户的日志文件,但我不确定要检查什么。我对计算机和编程还是个新手。 最佳答
几天前我安装了 Kali Linux。我正在尝试使用 Code-OSS 而不是 VSCode,因为最新版本的 Kali 没有安装普通版本所需的库。 如果我尝试使用 code-oss . 或 code
我正在从 Atom 迁移到 VS Code,因为这似乎是当今所有酷 child 都在使用的东西。 在 atom 中,我能够如图所示突出显示当前行号(装订线中的蓝色突出显示)。 有没有办法在 VS Co
我试图找到一个明确的 G 代码语法规范,而不是单个 G 代码的含义,我无处不在的规范,我的意思是详细的语法规范,目的是编写解析器。 我编写解析器没有问题,我只是在寻找语法规范,例如。我知道您不必总是为
我想在 VS Code (Windows) 中使用 Fira Code,并且已经按照 instructions 中的说明配置了字体。 。不知何故,字体看起来很模糊。我该如何解决这个问题? "edito
这个问题已经有答案了: How can I navigate back to the last cursor position in Visual Studio Code? (16 个回答) 已关闭
如何选择当前单词,即插入符号所在的位置。 注意:我正在寻找 Visual Studio Code(VS Code)(文本编辑器)的快捷方式,而不是 Visual Studio IDE。 最佳答案 在
我需要在 VS Code 中安装 flutter 但在安装扩展中,我有这个错误 Unable to install 'Dart-Code.flutter'; there is no available
memberData
有什么区别
{@code memberData} 和有什么区别?和 memberData在 JavaDoc 中 最佳答案 有两个主要区别: {@code ...}更简洁:更易于阅读(和输入)。 {@code ..
我有这样一个字符串: Here is my code sample, its not too great: [CODE] [/CODE] I hope you enjoy. 现在我想用 highli
在 VS Code 中,我有一个少于 50 个文件的 Vue 项目,但是在运行开发服务器时 VS Code 抛出 Error: ENOSPC: System limit for number of f
Source Code Pro 如何在 VSC 中使用 ExtraLight ~? 似乎以下不起作用...... 我确定我有字体。 Source Code Pro ExtraLight 最佳答案 编辑
我对 Visual Studio Code 很陌生。我正在尝试调试一个已经存在的应用程序,我已经通过 Git 克隆了它。我的文件都没有被修改。我已经下载了微软扩展“C# for Visual Stud
Visual Code VS Visual Studio Code Insider 我还是不明白这两者有什么区别,难道其中一个是新功能的试用版吗? 最佳答案 Visual Studio Code In
我是一名优秀的程序员,十分优秀!