UIImage 错误指令
Posted
技术标签:
【中文标题】UIImage 错误指令【英文标题】:UIImage Bad instruction 【发布时间】:2015-09-15 07:56:00 【问题描述】:浏览论坛,我发现这个问题时不时出现。显然,在广泛的不同情况下这样做。不过,我设法找到的似乎都与我的相似。
在创建一个可用的 Twitter 应用程序方面,我的程序(课程)已经完成了一半。测试它当前可以正常运行程序,没有任何错误。但是,当我选择一个帐户时,程序崩溃并且错误消息显示在应该加载所选用户头像的图像方法中。我假设它根本无法检索有效图像或获取数据(因为调试区域中的 ImageData = (NSDATA?) nil 行),但我对任何事情都不确定,更不用说如何或在哪里可以找到解决方案。如果我使用错误的关键字搜索,请告诉我。 (我正在搜索 exc_bad_instruction 和 uiimage 错误)提前致谢。
我将在下面出现问题的地方发布代码的 sn-p,以及下面的调试区域中显示的内容。
if let cachedImage = image
cell.tweetUserAvatar.image = cachedImage
else
cell.tweetUserAvatar.image = UIImage(named: "camera.png")
queue?.addOperationWithBlock()
let imageURL = NSURL(string: imageURLString) as NSURL!
let imageData = NSData(contentsOfURL: imageURL) as NSData?
let image = UIImage(data: imageData!) as UIImage? // EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subode=0x0)
if let downloadedImage = image
NSOperationQueue.mainQueue().addOperationWithBlock()
let cell = tableView.cellForRowAtIndexPath(indexPath) as! TweetCell
cell.tweetUserAvatar.image = downloadedImage
self.imageCache?.setObject(downloadedImage, forKey: imageURLString)
调试区:
imageURLString String
"http://pbs.twimg.com/profile_images/465756113825067008/8jH2nZO0_normal.png"
tableView UITableView 0x00007fc52481b400
indexPath NSIndexPath * 0xc000000000000016
self Chapter7_8___Social_App.FeedViewController 0x00007fc5235f5ef0
imageURL NSURL! "http://pbs.twimg.com/profile_images/465756113825067008/8jH2nZO0_normal.png"
imageData NSData? nil None
image UIImage? 0x000000010ee778dd
downloadedImage UIImage
【问题讨论】:
【参考方案1】:我也遇到了这个问题,发现我的图像被错误的数据初始化了。也就是说我向服务器请求的图片不存在,服务器返回了一个无法转换为 UIImage 的响应。
要缓解这种情况,您可以执行以下操作:
if let cachedImage = image
cell.tweetUserAvatar.image = cachedImage
else
cell.tweetUserAvatar.image = UIImage(named: "camera.png")
queue?.addOperationWithBlock()
let imageURL = NSURL(string: imageURLString) as NSURL!
let imageData = NSData(contentsOfURL: imageURL) as NSData?
if let image = UIImage(data: imageData!)
let downloadedImage = image
NSOperationQueue.mainQueue().addOperationWithBlock()
let cell = tableView.cellForRowAtIndexPath(indexPath) as! TweetCell
cell.tweetUserAvatar.image = downloadedImage
self.imageCache?.setObject(downloadedImage, forKey: imageURLString)
我上面所做的改变了
let image = UIImage(data: imageData!) as UIImage?
if let downloadedImage = image
...
...
收件人:
if let image = UIImage(data: imageData!)
let downloadedImage = image
...
...
通过这种方式我检查了图像是否能够成功创建。如果无法创建图像,则代码将不会执行,您也不会收到错误消息。
如果您希望图像位于您在“imageURLString”中指定的 url,那么我建议您检查您正在使用的 url。
我还注意到您没有取回任何数据,这就是您无法创建 UIIMage 的原因。您可以通过以下方式进行测试,看看是否是这种情况:
let imageData = NSData(contentsOfURL: imageURL) as NSData?
if imageData != nil
Do More Stuff
...
希望我的回答对您有所帮助。如果您有任何问题,请随时发表评论,我会尽力回答。
更多信息在这里: 这个question & answer 还提供了如何处理无法从提供的数据创建 UIImage 的情况。
【讨论】:
以上是关于UIImage 错误指令的主要内容,如果未能解决你的问题,请参考以下文章
UIImage+Resize 类别扩展错误和警告 iOS 7
SwiftUI 错误:无法转换“UIImage”类型的值?关闭结果类型“无效”