菜鸟教程小白 发表于 2022-12-11 19:24:37

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) -&gt; Int {
    return activities.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: &#34;activity&#34;, for: indexPath) as! CustomCell

    let post = activities
    let image = images
    let username = post[&#34;username&#34;] as? String
    let text = post[&#34;text&#34;] 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![&#34;id&#34;] as! String
    let url = URL(string: &#34;https://cgi.soic.indiana.edu/~team7/posts.php&#34;)!

    var request = URLRequest(url: url)

    request.httpMethod = &#34;POST&#34;

    let body = &#34;id=\(id)&amp;text=&amp;uuid=&#34;
    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(&#34;Error while parsing&#34;)
                        return
                  }

                  guard let posts = parseJSON[&#34;posts&#34;] as? else {
                        print(&#34;Error while parseJSONing&#34;)
                        return
                  }


                  self.activities = posts

                  for i in 0 ..&lt; self.activities.count {

                        let path = self.activities[&#34;path&#34;] 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]
查看完整版本: php - Swift 3 - 从 mySQL 数据库中提取图像