致命错误 Xcode 8 Swift 3
Posted
技术标签:
【中文标题】致命错误 Xcode 8 Swift 3【英文标题】:Fatal error Xcode 8 Swift 3 【发布时间】:2017-03-10 06:10:40 【问题描述】:好的,伙计们,我可以在我的代码方面获得一些帮助。运行应用程序时出现错误,有什么办法可以解决此问题?
let fileUrl = dict["fileUrl"]as! String
let url = NSURL(string: fileUrl)
let data = NSData(contentsOf: url! as URL!)
let picture = UIImage(data: data! as Data!)
let photo = JSQPhotoMediaItem(image: picture)
self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photo))
Image here
【问题讨论】:
***.com/questions/24231680/… 您应该使用if let
来检查可选项,而不是使用!
强制解包。
您确定您在 fileUrl 中获得了正确的 url 吗?还要检查数据是否为零
我在哪里可以检查我是否正在使用 fileUrl?
【参考方案1】:
在这里,我发现您的代码存在 4 个大问题。
您正在强制将字典 dict
的 fileUrl
的值转换为 String
。如果您的字典没有fileUrl
的值,或者它不能转换为字符串,您的代码将崩溃。您应该将其更改为可选演员,例如:
if let fileUrl = dict["fileUrl"] as? String
//your code if you have fileUrl
在创建文件的url时,你使用了错误的初始化方法,你应该使用这个:
let url = URL(fileURLWithPath: fileUrl)
有了文件的url后,还要检查是否有文件的数据,因为NSData
的初始化器contentsOfFile:
返回的是可选对象,可能是nil
,所以另一个if
检查:
if let data = NSData(contentsOf: url) \\ code with the data
UIImage
的初始化器init?(data: Data)
也返回可选对象,因此如果后面的代码需要,您还应该检查是否有图像或nil
与 if 语句。
结果代码应该是这样的:
if let fileUrl = dict["fileUrl"] as? String
let url = URL(fileURLWithPath: fileUrl)
if let data = NSData(contentsOf: url)
let image = UIImage(data: data as Data) // you can cast NSData to Data without force or optional casting
let photo = JSQPhotoMediaItem(image: image)
self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photo))
希望这会有所帮助。
【讨论】:
【参考方案2】:用此行替换第一行代码以进行可选绑定检查:-
guard let fileUrl = dict["fileUrl"] as! String else return
【讨论】:
【参考方案3】:如果变量可能为nil,你应该做验证,下面是一个例子:
if let fileUrl = dict["fileUrl"] as? String
let url = URL(string: fileUrl)
do
let data = try Data(contentsOf: url!)
let picture = UIImage(data: data)
let photo = JSQPhotoMediaItem(image: picture)
self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, media: photo))
catch
【讨论】:
虽然用代码解决了 2 个问题,但您的代码并不能解决其他问题。请在帮助编写代码时多加注意。 @FahriAzimov 我还没有测试我的代码,你能指出这个解决方案可能存在的问题吗?以上是关于致命错误 Xcode 8 Swift 3的主要内容,如果未能解决你的问题,请参考以下文章
如何解决问题 UIPickerView 致命错误:索引超出范围 [IOS Swift 5.1 Xcode 11.2]
Swift Xcode 致命错误:在隐式展开可选值时意外发现 nil [重复]