1

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

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
        }
    })
}
4

4 回答 4

2

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

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

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

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

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

于 2016-04-04T20:19:08.883 回答
2

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

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

sudo gem install cocoapods

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

于 2016-06-14T17:35:37.093 回答
1

您的代码存在一些问题:

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

  2. 您应该将结果从JSONObjectWithDataas 转换为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)

        }

    }
})
于 2015-02-14T06:10:28.313 回答
0

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

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

相反,我需要这样做:

if textBox?.characters.count == 0{
    //...
}
于 2015-09-06T18:28:31.283 回答