Ios 致命错误Xcode 8 Swift 3
好的,伙计们,我能在代码方面得到一些帮助吗。运行应用程序时,我遇到一个错误,有没有办法解决这个问题Ios 致命错误Xcode 8 Swift 3,ios,swift,xcode,Ios,Swift,Xcode,好的,伙计们,我能在代码方面得到一些帮助吗。运行应用程序时,我遇到一个错误,有没有办法解决这个问题 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: pi
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))
将第一行代码替换为此行以进行可选绑定检查:-
guard let fileUrl = dict["fileUrl"] as! String else {return}
Yo应在变量可能为零的情况下进行验证,以下是一个示例:
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 {
}
}
在这里,我看到您的代码有4个大问题
dict
的fileUrl
的值强制转换为String
。如果您的字典没有fileUrl
的值,或者无法转换为字符串,则代码将崩溃。您应该将其更改为可选类型,如:
如果让fileUrl=dict[“fileUrl”]as?一串
{
//如果您有fileUrl,请输入您的代码
}
let url=url(fileURLWithPath:fileUrl)
contentsOfFile:
NSData的初始值设定项返回可选对象,该对象可能是nil
,因此另一个if
检查:
如果let data=NSData(contentsOf:url){\\code with the data}
init?(data:data)
UIImage的初始值设定项也会返回可选对象,因此如果后面的代码需要,您还应该使用if语句检查是否有图像或nil
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))
}
}
希望这有帮助。如果让检查可选的,您应该使用
,而不是使用强制展开它代码>。您确定在fileUrl中获得了正确的url吗?还要检查数据是否为零。我在哪里可以检查我是否在使用fileUrl?在解决代码的两个问题时,您的代码不会解决其他问题。请在帮助编写代码时多加注意。@FahriAzimov我还没有测试我的代码,你能指出这个解决方案可能存在的问题吗?