【问题标题】:Call Slack Webincoming hook in Swift but get "interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)"在 Swift 中调用 Slack Webincoming 钩子但得到“中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”
【发布时间】:2015-02-02 03:02:38
【问题描述】:

我使用 Swift 向 Slack 发布内容,使用 Webhook 作为 POST 请求,但收到类似的错误

interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

var request = ... 的行中。谁能告诉我为什么会出现这样的错误?谢谢!! :D

(“此处的Webhook URL”指的是真正正确的URL,但发布此问题时,我只是将其替换为“此处的Webhook URL”。)

import UIKit
import XCPlayground

let str = "payload={'channel': '#test', 'username': 'webhookbot', 'text': 'This is posted to #test and comes from a bot named webhookbot.', 'icon_emoji': ':ghost:'}"
let strData = (str as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData

var request = NSMutableURLRequest(URL: NSURL(string: "Webhook URL here")!, cachePolicy: cachePolicy, timeoutInterval: 2.0)

request.HTTPMethod = "POST"
request.HTTPBody = strData

var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
let results = NSString(data:data!, encoding:NSUTF8StringEncoding)

【问题讨论】:

    标签: ios json swift swift-playground slack-api


    【解决方案1】:

    你还应该使用可选绑定来解包你的数据

    if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) {
        let results = NSString(data:data, encoding:NSUTF8StringEncoding)
    }
    

    您也可以尝试在同步请求中记录错误,如下面的代码。

    所以你的最终代码应该是这样的

    import UIKit
    import XCPlayground
    
    let str = "payload={'channel': '#test', 'username': 'webhookbot', 'text': 'This is posted to #test and comes from a bot named webhookbot.', 'icon_emoji': ':ghost:'}"
    let strData = (str as NSString).dataUsingEncoding(NSUTF8StringEncoding)
    let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
    
    if let url = NSURL(string: "Your Webhook Url")
    {
        var request = NSMutableURLRequest(URL: url, cachePolicy: cachePolicy, timeoutInterval: 2.0)
    
        request.HTTPMethod = "POST"
        request.HTTPBody = strData
    
        var error : NSError? = nil
        if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: &error) {
           let results = NSString(data:data, encoding:NSUTF8StringEncoding)
        }
        else
        {
            println("data invalid")
            println(error)
        }
    }
    else {
        println("url invalid")
    }
    

    【讨论】:

    • 对不起,我忘了说“Webhook URL here”是指一个真实的 URL,但是当发布这个问题时,我只是将它替换为“Webhook URL here”,因为最好不要api链接公开。
    • 您是否尝试为 url 和数据添加可选的绑定检查?您将能够看到它在操场上的失败之处
    • 感谢代码!我只是运行你的并得到data invalid 错误。详细的数据信息在这里。(println(error) 部分)screenshot
    • 如何设置对特殊 URL API 的信任?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多