Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 致命错误:在使用Swift展开可选值时意外发现nil_Ios_Swift - Fatal编程技术网

Ios 致命错误:在使用Swift展开可选值时意外发现nil

Ios 致命错误:在使用Swift展开可选值时意外发现nil,ios,swift,Ios,Swift,我正在尝试在Swift中实现UICollectionView 关于第let array=objects.objectForKey(“image\u url”)行中的可选值作为[String] 我不知道这是怎么回事,我的代码 ViewController.swift import UIKit var data: [String] = [] ; class ViewController: UICollectionViewController{ override func viewDidLoad

我正在尝试在Swift中实现
UICollectionView

关于第
let array=objects.objectForKey(“image\u url”)行中的可选值作为[String]

我不知道这是怎么回事,我的代码

ViewController.swift

import UIKit

var data: [String] = [] ;

class ViewController: UICollectionViewController{

override func viewDidLoad() {
    super.viewDidLoad()

    var collectionView: UICollectionView

    let json = "https://api.photozou.jp/rest/search_public.json?keyword=bike"//"http://dl.dropboxusercontent.com/u/7817937/nameko.json"
    let uri = NSURL(string: json)
    let uridata = NSData(contentsOfURL: uri)
    let objects = uridata.objectFromJSONData() as NSDictionary
    let array = objects.objectForKey("image_url") as [String]
    data += array

    //println(array)



}

override func numberOfSectionsInCollectionView(collectionView: UICollectionView?) -> Int {
    return 1
}

override func collectionView(collectionView: UICollectionView?, numberOfItemsInSection section: Int) -> Int {
    return data.count
}

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as CollectionViewCell
    let url = NSURL(string: data[indexPath.row])
    cell.image.setImageWithURL(url, placeholderImage: nil)

    return cell
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

有人对此错误有解决方案吗?

您可以通过以下方式避免崩溃:

 if objects != nil  
{
   if objects.objectForKey("image_url") != nil
   {
      let array = objects.objectForKey("image_url") as [String]
       data += array
   }
}

您可以像这样避免崩溃:

 if objects != nil  
{
   if objects.objectForKey("image_url") != nil
   {
      let array = objects.objectForKey("image_url") as [String]
       data += array
   }
}
错误在这里:

let array = objects.objectForKey("image_url") as [String]
字典总是返回一个可选值,可以是
nil
,但您也在对
字符串数组进行强制转换。错误可能由以下任一原因引起:

  • 字典没有带
    image\u url
    键的值(
    objectForKey
    返回
    nil
  • 字典中有该键的值,但它不是
    数组
我将这一行(以及下一行)改为:

如果
image\u url
键没有值,或者其值**不是*字符串数组,则第一行不会崩溃。可选绑定确保仅当
array
不是
nil
时才执行
data+=array
(它还从可选变量中打开数组)

错误如下:

let array = objects.objectForKey("image_url") as [String]
字典总是返回一个可选值,可以是
nil
,但您也在对
字符串数组进行强制转换。错误可能由以下任一原因引起:

  • 字典没有带
    image\u url
    键的值(
    objectForKey
    返回
    nil
  • 字典中有该键的值,但它不是
    数组
我将这一行(以及下一行)改为:


如果
image\u url
键没有值,或者其值**不是*字符串数组,则第一行不会崩溃。可选绑定确保仅当
array
不是
nil
时才执行
data+=array
(并且它还从可选变量中打开数组)

是否验证了收到的JSON数据?对象不是零吗?objects.objectForKey(“image_url”)是字符串数组吗?是的,object不是nil和String。您是否验证了收到的JSON数据?对象不是零吗?objects.objectForKey(“image_url”)是字符串数组吗?是的,对象不是nil和String。注意:1。第一个
if
是多余的,因为有一个显式强制转换到
NSDictionary
(如果为nil或不是dictionary,则例外);2.它不处理该键的值不是数组的情况strings@Antonio谢谢你的评论。我不太擅长斯威夫特。但我可以肯定的是,这段代码会让崩溃消失,但事实并非如此——如果
objects[“image\u url”]
不是字符串数组,它会生成一个运行时exception@Antonio是的,你是对的,但我的意思是“在展开可选值时意外地发现了零”,更准确地说,
致命错误:在展开可选值时意外发现nil
可替换为另一个运行时错误注意:1。第一个
if
是多余的,因为有一个显式强制转换到
NSDictionary
(如果为nil或不是dictionary,则例外);2.它不处理该键的值不是数组的情况strings@Antonio谢谢你的评论。我不太擅长斯威夫特。但我可以肯定的是,这段代码会让崩溃消失,但事实并非如此——如果
objects[“image\u url”]
不是字符串数组,它会生成一个运行时exception@Antonio是的,你是对的,但我的意思是“在展开可选值时意外地发现了零”,更准确地说,
致命错误:在展开可选值时意外发现nil
可被另一个运行时错误替换