【问题标题】:I'm getting nil error with image?我的图像没有错误?
【发布时间】:2015-10-13 20:49:48
【问题描述】:

我遇到致命错误:在展开可选值时意外发现 nil imagedata 不是 nil 它的值为 2604750 字节 我不知道为什么它会显示此错误,因为我可以看到 img1 是 nil 为什么? 任何厘米!!!

@IBOutlet var img1: UIImageView!
@IBOutlet var img2: UIImageView!
// in viewWillAppear I gave it a default image
self.img1.image = UIImage(named: "dummy.png" )
self.img1.image = UIImage(named: "dummy.png" )

// i changed to send the nsmanagedobject but it's still same error

func setimage(person: NSManagedObject){
let data: NSData = NSData()
if person.valueForKey("picture") as! NSData == data{
if person.valueForKey("tag") as! Int == 1 {
img1.image = UIImage(named: "dummy" )
}else if person.valueForKey("tag") as! Int == 2 {
img2.image = UIImage(named: "dummy")

}}
else{
if person.valueForKey("tag") as! Int == 1 {
img1!.image = UIImage(data: person.valueForKey("picture") as! NSData )
}else if person.valueForKey("tag") as! Int == 2 {
img2.image = UIImage(data: person.valueForKey("picture") as! NSData )

}
}

}

【问题讨论】:

  • 你的 UIImageView 是 nil (img1)
  • 那你觉得我应该怎么做? @DavidSkrundz
  • 在尝试设置它的图像之前对其进行初始化。在你的代码的某个地方你应该这样做:img1 = UIImageView()
  • 我做到了,我用我项目中的默认图像初始化它,但它仍然显示错误@Woodstock
  • @Fahad 发布实际代码和新的错误消息

标签: swift cocoa-touch core-data uiimageview iboutlet


【解决方案1】:

所以,你犯了一个简单的错误。事实上,你的网点是零。但是,并不是因为您没有在情节提要中分配它们,而是因为在 ViewController 的不同实例上调用了 setimage

您在第二个视图控制器中有一个属性view1,它被声明为:

let view1: ViewController = ViewController()

这会创建一个新的ViewController 实例。然后,当您调用 view1.setimage 时,您会遇到崩溃,因为此实例的插座未连接。

第二个视图控制器中的属性应该是

var view1: ViewController!

ViewControllerimageTapped 方法中,您应该修改代码,使其具有以下行:

view.view1 = self

强制展开可能并不理想,但只要您确保在实例化第二个视图控制器时设置view1 属性,它就应该有效。

【讨论】:

  • 我真的很感激。现在它可以正常工作了,非常感谢。 @AndriyGordiychuk
【解决方案2】:

我认为这与 Andriy 的建议相同。可能您的图像出口与视图没有连接。

【讨论】:

  • @IBOutlet var img1: UIImageView! ; @IBOutlet var img2: UIImageView! 已连接
  • 很抱歉打扰您,但可以检查 Interface Builder 中的连接,因为即使我的代码显示 @IBOutlet 之前我也遇到了问题,连接中显示它们没有连接,所以我必须重新连接又来了。
  • 我已经删除并再次重新连接,但仍然是同样的错误我不知道@JuValencia 发生了什么
  • @Fahad 在 GitHub 上上传您的代码。一定有一些容易修复的错误,但如果不运行代码真的很难发现它
  • 我把它上传为一个 zip 文件夹,它在 link@AndriyGordiychuk 下
【解决方案3】:

您的网点为零,这可能有几个原因。

  1. 它们尚未在界面构建器中连接。
  2. 您在实例化之前访问它们,例如在调用 viewDidLoad() 之前。

【讨论】:

    猜你喜欢
    • 2015-02-05
    • 2023-01-26
    • 2012-05-28
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多