php - Swift 3 - 从 mySQL 数据库中提取图像
<p><p>我目前正在设计一个具有新闻源的应用程序。图像和文本存储在我们的数据库中,但我无法提取图像并显示它。我的代码应该可以工作,但我收到一个 fatal error ,提示“THREAD 1: EXC_BAD_INSTRUCTION” </p>
<pre><code>let imageData = try? Data(contentsOf: url)
let image = UIImage(data: imageData!)!
</code></pre>
<p>并且编译器会显示此消息 - “ fatal error :在展开可选值时意外发现 nil”。</p>
<p>我在这段代码中遇到了错误:</p>
<pre><code>if!path!.isEmpty {
let url = URL(string: path!)!
let imageData = try? Data(contentsOf: url)
let image = UIImage(data: imageData!)!
self.images.append(image)
} else {
let image = UIImage()
self.images.append(image)
}
</code></pre>
<p>作为编程新手,我已经坚持了很长一段时间了。如果您有什么建议,请告诉我!谢谢!</p>
<p>另外,我要检索的照片是 .jpg,不确定这是否重要。</p>
<p>(如果需要,这里是其余代码)</p>
<pre><code>import UIKit
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var activities = ()
var images = ()
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
//tableView.contentInset = UIEdgeInsetsMake(2, 0, 0, 0)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return activities.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "activity", for: indexPath) as! CustomCell
let post = activities
let image = images
let username = post["username"] as? String
let text = post["text"] as? String
cell.titleLbl.text = text
cell.userLbl.text = username
cell.activityImage.image! = image
//cell.dateLbl.text = activities
//cell.activityImage.image = images
return cell
}
override func viewWillAppear(_ animated: Bool) {
loadActivities()
}
func loadActivities() {
let id = user!["id"] as! String
let url = URL(string: "https://cgi.soic.indiana.edu/~team7/posts.php")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let body = "id=\(id)&text=&uuid="
request.httpBody = body.data(using: String.Encoding.utf8)
URLSession.shared.dataTask(with: request) { data, response, error in
DispatchQueue.main.async(execute: {
if error == nil {
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
// clean up
self.activities.removeAll(keepingCapacity: false)
self.images.removeAll(keepingCapacity: false)
self.tableView.reloadData()
guard let parseJSON = json else {
print("Error while parsing")
return
}
guard let posts = parseJSON["posts"] as? else {
print("Error while parseJSONing")
return
}
self.activities = posts
for i in 0 ..< self.activities.count {
let path = self.activities["path"] as? String
if !path!.isEmpty {
let url = URL(string: path!)!
let imageData = try? Data(contentsOf: url)
let image = UIImage(data: imageData!)!
self.images.append(image)
} else {
let image = UIImage()
self.images.append(image)
}
}
self.tableView.reloadData()
} catch {
}
} else {
}
})
}.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension NSMutableData {
func appendString(_ string : String) {
let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
append(data!)
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>你为什么要做这一切?从服务器获取图像的 URL,然后使用 SDWebImage 在 cellForRowAtIndexPath 中异步加载它们。这是一个图书馆,你可以在这里找到它。 <a href="https://github.com/rs/SDWebImage" rel="noreferrer noopener nofollow">https://github.com/rs/SDWebImage</a> .这样您就不需要将图像存储在数组中,并且加载速度会更快。</p>
<p>或者您也可以实现自己的图像异步加载。</p></p>
<p style="font-size: 20px;">关于php - Swift 3 - 从 mySQL 数据库中提取图像,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/43173762/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/43173762/
</a>
</p>
页:
[1]