【问题标题】:Error : Command failed due to signal : Segmentation fault: 11错误:由于信号导致命令失败:分段错误:11
【发布时间】:2015-02-14 05:26:27
【问题描述】:

我正在尝试从字典中获取一个数组,但是下面一行出现错误

self.items = self.dataDictionary["geoNames"] as NSArray

完整代码如下

var dataDictionary: AnyObject!
var items: NSArray!

override func viewDidLoad() {
    super.viewDidLoad()

    var url = NSURL(string: "http://api.geonames.org/countryInfoJSON?username=temp")
    var urlRequest = NSURLRequest(URL: url!)

    NSURLConnection.sendAsynchronousRequest(urlRequest, queue:NSOperationQueue(), completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in

        if (data.length > 0 && error == nil){
            self.dataDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil)
            println(self.dataDictionary)
            self.items = self.dataDictionary["geoNames"] as NSArray
        }
    })
}

【问题讨论】:

    标签: swift nsarray xcode6.1.1


    【解决方案1】:

    假设:如果编辑器 - 由于某种原因 - 无法解析您的代码并得出关于代码正确性的结论,即使您有语法错误,它也可能允许您编译,这可能会导致您描述的错误。

    由于语法错误,我收到此错误。即,我将一维数组更改为二维数组,但忘记更新它初始化的一些位置。

    编辑器似乎无法准确指出错误的位置,当我尝试编译时,我收到了您所描述的错误。我怀疑编辑器发生了一些奇怪的事情,因为它在全白和彩色语法之间闪烁,并在编辑器顶部抛出“发生内部错误”错误消息。

    因此,如果您遇到此错误,手动仔细检查您的代码或逐个撤消您的更改,直到您到达可以成功编译的阶段,可能会提示您出了什么问题。

    发布是因为它可能对面临类似问题的人有所帮助。

    【讨论】:

    • 对我来说,这是一个包含测试数据数组的冗长函数。
    【解决方案2】:

    我在安装 cocoapod 时遇到了同样的错误,并注意到我的 Foundation.framework 停止被识别。看看我的答案on this thread,它解决了我的问题。希望这可以帮助某人。

    如果您不想访问该链接,只需运行

    sudo gem install cocoapods
    

    如果您怀疑过时的可可豆荚给您带来了框架问题,请更新豆荚

    【讨论】:

    • 哈哈好吧。在这种情况下,如果您怀疑 cocoa pod 会给您带来框架问题,请不要访问该链接并在终端中运行“sudo gem install cocoa pods”
    【解决方案3】:

    您的代码存在一些问题:

    1. 您的代码甚至无法编译。段错误来自编译器,而不是运行时

    2. 您应该将JSONObjectWithData 的结果转换为 NSDictionary,不分配给AnyObject!类型的变量

    3. 应使用if 来检查强制转换是否有效

    4. 字典键错误。是geonames(全小写)

    这里是功能代码:

    var url = NSURL(string: "http://api.geonames.org/countryInfoJSON?username=temp")
    var urlRequest = NSURLRequest(URL: url!)
    
    NSURLConnection.sendAsynchronousRequest(urlRequest, queue:NSOperationQueue(), completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
    
        if (data.length > 0 && error == nil){
            if let jsonObject = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary {
    
                let dataDictionary = jsonObject["geonames"]
                println(dataDictionary)
    
            }
    
        }
    })
    

    【讨论】:

      【解决方案4】:

      这发生在我身上,因为我错误地创建了一个 if 语句。非常非常简单的错误,我只是错过了一个键,却造成了天壤之别。:

      if textBox?.characters.count = 0{
          //...
      }
      

      我需要这样做:

      if textBox?.characters.count == 0{
          //...
      }
      

      【讨论】:

      • 这并没有真正回答问题,也没有指出这个问题中的问题......它更多的是一个旁白,当你有更多的代表时,作为评论会更好
      • 这样的事情也可能导致某些人的错误。我应该删除它吗? @Stuart Siegler
      • 不,只是为了未来...您将立即获得代表,您将能够发表评论和编辑等。我们是自我管理的,所以我们提供帮助并指导新用户。
      猜你喜欢
      • 2017-06-23
      • 2018-11-06
      • 1970-01-01
      • 2015-12-18
      • 2015-12-16
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多