我正在处理来自url异步的show image.我试图为下载图像创建一个新线程,然后刷新main thread.
func asyncLoadImg(product:Product,imageView:UIImageView){
let downloadQueue = dispatch_queue_create("com.myApp.processdownload", nil)
dispatch_async(downloadQueue){
let data = NSData(contentsOfURL: NSURL(string: product.productImage)!)
var image:UIImage?
if data != nil{
image = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue()){
imageView.image = image
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试调试时,当涉及到dispatch_async(downloadQueue)时,它会跳出func.有什么建议吗?谢谢
class PostFOrData {
let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist")
var picUrl = NSURL(string : "http://210.61.209.194:8088/SmarttvMedia/img/epi00001.png")
var responseString : NSString = ""
func forData() -> NSString {
let request = NSMutableURLRequest( URL: url!)
request.HTTPMethod = "POST"
var s : NSString = ""
let postString : String = "uid=59"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
return
} else {
println("response = \(response!)")
self.responseString = NSString(data: data, encoding: NSUTF8StringEncoding)!
println("responseString = …Run Code Online (Sandbox Code Playgroud) 所以我很难理解某些东西.这是我对NSURSession的理解:
一般来说,我有2个选项(据我所知)DataTask(ex dataTaskWithRequest)和DownloadTask(ex DownloadTaskWithRequest) - 使用他们的委托方法,或使用完成处理程序,不能两者兼顾.我已经设法使用dataTaskWithRequest接收DATA,如下所示:
let request = NSMutableURLRequest(URL: dataSourceURL!)
request.HTTPMethod = "POST"
let postString = "lastid=\(id)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
println("error=\(error)")
return
}
if data != nil {
println("works")
//Handle data
}
//println("response = \(response)")
}
task.resume()
Run Code Online (Sandbox Code Playgroud)它完美地运作.问题是我需要将数据下载到磁盘而不是下载到内存(我正在下载图像).所以我尝试使用DownloadTaskWithRequest +他的完成处理程序,我注意到他所采用的参数是相同的,期望第一个是NSURL,而DataTaskWithRequest是NSData,因此它使事情变得非常简单.恩.
let task2 = NSURLSession.sharedSession().downloadTaskWithRequest(request, completionHandler: { (location : NSURL!, response : …Run Code Online (Sandbox Code Playgroud) 我能找到的所有代码都围绕将图像直接加载到可视控件中.
但是,我有自己的缓存系统(从另一种语言转换项目),所以我尽可能高效地想要以下内容:
我是swift和ios平台的新手,但据我所知,cgimage尽可能接近?但是,当使用cgimage时,似乎没有办法从文件系统加载图像...但是我发现人们正在讨论UIImage的方法,所以我现在怀疑我最初的印象ha cgimage是最好的匹配我的需要.
我正在尝试创建图像的集合视图。我已经试过这些解决方案,下载图像:
一个
2
3
和
4
var tempObject = json["photos"]
for var i = 0; i < tempObject.count; i++
{
var tempImage = UIImage()
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
tempImage = UIImage(data: NSData(contentsOfURL: NSURL(string:"https://developer.apple.com/swift/images/swift-og.png")!)!)!
})
swiftImages.insert(tempImage, atIndex: i)
}
dispatch_async(dispatch_get_main_queue()) {
self.collectionView?.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
但我无法让它显示图像。我是 swift 网络的新手。
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! ImageCollectionViewCell
cell.imageView.image = swiftImages[indexPath.row]
return cell
}
Run Code Online (Sandbox Code Playgroud) 按照/sf/answers/1939869921/的建议,我可以执行异步下载,如下所示,并在viewDidLoad.
func loadItems(tuple : (name : String, imageURL : URL)) {
print("Download Started")
URLSession.shared.dataTask(with: tuple.imageURL, completionHandler :
{ data, response, error in
guard let data = data, error == nil else { return }
print(response?.suggestedFilename ?? tuple.imageURL.lastPathComponent)
print("Download Finished")
DispatchQueue.main.async() { [weak self] in
self?.displayFlag(data: data, title: tuple.name)
}
}).resume()
}
Run Code Online (Sandbox Code Playgroud)
这一切都运作良好。我的问题是,如果下载缓慢,并且我退出页面,如何以及在哪里(viewDidUnload?看起来已经不推荐使用)可以取消获取(图像下载)任务?
我真的很需要帮助
我将图像保存到 DocumentDirectory 如何获取此图像并放入 UIImageView?
照片网址:
file:///Users/zoop/Library/Developer/CoreSimulator/Devices/3E9FA5C0-3III-41D3-A6D7-A25FF3424351/data/Containers/Data/Application/7C4D9316-5EB7-4A70-82DC-E76C654sEA20profile
我正在进行一个异步调用,该响应的JSON响应同时包含要显示在UIImageView中的图像的文本和URL。现在,在标签中显示文本不是问题,但是加载图像给我带来了麻烦。在下面共享了我的代码。
//Declared variables to hold response
var offerContent: String?
var offerImage: URL?
var offerTitle: String?
var suggestionLabel:String?
var suggestionScreen: String?
//create a task to send reques
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in
if error != nil {
print("error is:: \(error!.localizedDescription)")
return;
}
//parsing the response
do {
// converting response to NSDictionary
let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
DispatchQueue.main.async {
if let parseJSON = myJSON{
var responseCode: Int!
var responseMessage: NSArray! …Run Code Online (Sandbox Code Playgroud) 我通过将图像数据传递给它来在swift中创建一个UIImage对象.类似于它在objective-c中的完成方式
UIImage imageWithData
Run Code Online (Sandbox Code Playgroud)
但是,我看到错误说:imageWithData不适用于swift.
对于Swift的imageWithData有什么替代方案?
我是一个新手开发者,我正在尝试从URL下载并显示图像并将其显示在UIImage视图中.我尝试了多种方法,使用以前问过的问题和网页信息,但它不断出现多个错误.
我有图像 URL,我想在放置在 tableView 单元格中的 UIImageView 中显示该图像。我创建了一个自定义单元格并为 imageView 添加了一个出口。由于我正在加载新闻,因此 URL 会相应更改。注意:我正在使用 Alamofire 来处理我的 HTTP 请求。
struct News {
let title: String
let text: String
let link: String
let imgUrl: String
init(dictionary: [String:String]) {
self.title = dictionary["title"] ?? ""
self.text = dictionary["text"] ?? ""
self.link = dictionary["link"] ?? ""
self.imgUrl = dictionary["imgUrl"] ?? ""
}
}
Run Code Online (Sandbox Code Playgroud)
并将信息加载到我的自定义单元格
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? newsCellTableViewCell
let news = newsData[indexPath.row]
cell?.headline.text …Run Code Online (Sandbox Code Playgroud) 我有一个URL,并希望通过返回功能下载图像,但我不能让它正确合作,这是我的功能:
func getTabImage(url: URL) -> UIImage {
Alamofire.request(url)
.responseImage { response in
if let image = response.result.value {
return image
} else {
print("Failed to get image")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我传入了URL,并希望从alamofire响应中返回一个UIImage.
但我明白了
void函数中出现意外的非void返回值
对于退货声明.
我怎样才能正确实现这一目标?
swift ×11
ios ×9
alamofire ×2
nsurlsession ×2
asynchronous ×1
cgimage ×1
image ×1
networking ×1
nsdata ×1
photo ×1
swift3 ×1
uiimage ×1
uiimageview ×1
url ×1
urlsession ×1
xcode ×1