Xcode 带有WebKit的简单Swift Cocoa应用程序:上传图片和#x27;行不通
在尝试了其他“freemium”应用程序后,我决定制作自己的FB聊天应用程序,只需在Xcode 带有WebKit的简单Swift Cocoa应用程序:上传图片和#x27;行不通,xcode,swift,macos,cocoa,Xcode,Swift,Macos,Cocoa,在尝试了其他“freemium”应用程序后,我决定制作自己的FB聊天应用程序,只需在WebView上显示即可 我的ViewController.swift只有几行代码在web视图上加载URL import Cocoa import WebKit class ViewController: NSViewController { @IBOutlet weak var webView: WebView! override func viewDidLoad() { s
WebView
上显示即可
我的ViewController.swift
只有几行代码在web视图上加载URL
import Cocoa
import WebKit
class ViewController: NSViewController {
@IBOutlet weak var webView: WebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "https://messenger.com")
let request = NSURLRequest(URL: url!);
webView.mainFrame.loadRequest(request);
}
override var representedObject: AnyObject? {
didSet {
// do nothing
}
}
}
除了将NSAppTransportSecurity
键添加到info.plist以通过HTTPS连接解锁HTTP流量之外,我还没有做任何其他设置
问题:
请先看这张图片
除了两件事之外,一切看起来都很好
- 通常情况下(与其他发布的应用程序或web浏览器一样),如果您单击该图标,它会显示一个浏览器以上载图片,如下所示。
- 我的应用程序完全忽略用户对该图标的点击,因此我无法将任何图片上传到聊天室有趣的是,如果我将图片拖放到
,它可以正常上传。网络视图
- 同样,在其他浏览器或发布的应用程序中,它显示了我与参与者共享的图片,如下图所示。(当然我删了照片)
- 我的应用程序尝试加载图片,但不显示它们。我可以看到它试图加载,因为加载时我看到循环进度指示器
WebView
中触发的JavaScript,并链接到文件浏览器或类似的东西session
在这里不是问题。可能是jQuery加载问题runOpenPanelForFileButtonWithResultListener
,的新面板func webView(sender: WebView!, runOpenPanelForFileButtonWithResultListener resultListener: WebOpenPanelResultListener!, allowMultipleFiles: Bool) {
let openDialog = NSOpenPanel()
if (openDialog.runModal() == NSOKButton) {
let fileName: String = (openDialog.URL?.path)!
resultListener.chooseFilename(fileName) // Use chooseFilenames for multiple files
}
}
您应该尝试从interface builder(或通过代码)启用WebView选项,如“自动加载图像”或“启用动画图像”
这段代码对我来说很有用,这里的好处是让图像的下载变得异步。您可以在此处找到有关此概念的更多信息:以及: 已编辑 I.您必须使用以下内容创建新类或名为ImageLoader的新iOS Swift文件:
class ImageLoader {
var cache = NSCache()
class var sharedLoader : ImageLoader {
struct Static {
static let instance : ImageLoader = ImageLoader()
}
return Static.instance
}
func imageForUrl(urlString: String, completionHandler:(image: UIImage?, url: String) -> ()) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {()in
var data: NSData? = self.cache.objectForKey(urlString) as? NSData
if let goodData = data {
let image = UIImage(data: goodData)
dispatch_async(dispatch_get_main_queue(), {() in
completionHandler(image: image, url: urlString)
})
return
}
var downloadTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if (error != nil) {
completionHandler(image: nil, url: urlString)
return
}
if data != nil {
let image = UIImage(data: data)
self.cache.setObject(data, forKey: urlString)
dispatch_async(dispatch_get_main_queue(), {() in
completionHandler(image: image, url: urlString)
})
return
}
})
downloadTask.resume()
})
}
}
II.在实际的viewController中,您可以根据以下代码行从ImageLoaded调用方法“imageForUrl”:
ImageLoader.sharedLoader.imageForUrl("http://upload.wikimedia.org/wikipedia/en/4/43/Apple_Swift_Logo.png", completionHandler:{(image: UIImage?, url: String) in
self.myImage.image = image!
})
我从这个链接获取了代码:
为webview上加载的图像进行编辑
这是代码。它非常适合我:
override func viewDidLoad() {
super.viewDidLoad()
let myWebView:UIWebView = UIWebView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))
myWebView.loadRequest(NSURLRequest(URL: NSURL(string: "https://scontent-vie1-1.xx.fbcdn.net/hphotos-xap1/v/t1.0-9/12144725_10204647881668565_4367944825116750386_n.jpg?oh=5ecdae91f5258ffe0e0355e176f8eb8a&oe=56B007CA")!))
self.view.addSubview(myWebView)
}
谢谢你的回答:),但是我要把这个放在代理中吗?或者必须明确地称呼它?为了更好地理解,我将编辑我的答案,因为它太多了,无法评论:)谢谢!我真的是Swift编码的新手(没问题,我们所有人都必须了解更多:)请让我知道这是否适合你。关于url路径:“你必须使用你的url,这只是一个例子。嗯,恐怕你误解了这个问题。我没有任何图像视图或任何东西从URL加载图像。我只有一个网络视图,而网站本身拥有所有加载图像的位置,我没有控制权来修复它们或任何东西。这有意义吗?:)第一个没用。我把它放在AppDelegate中,但它没有到达那里(通过调试器检查…)。我不知道原因是什么:(第二,一切都检查正确,我不知道为什么我的不起作用,而你的不起作用哈哈..奇怪..如果没有调用委托方法,那是因为你必须告诉你的WebView哪个文件是委托。你可以从界面生成器->选择你的WebView->转到右边名为“显示连接检查器”的选项卡(图标是一个箭头)然后只需将
UIDelegate
拖动到您的委托对象。如果我的解释不清楚,[link]很抱歉,这里有链接:(这是一个旧版本,但xcode 7是相同的)天哪,它工作了!我也观看了。在您和教程的帮助下,我能够附加文件:)我很高兴它有帮助:)关于加载图像可能尝试通过添加yourWebView.preferences.setValue(true,forKey:“developerExtrasEnabled”)
来检查javascript/http请求问题,以了解这些图像未加载的原因。(像在常规浏览器中一样,单击鼠标右键并检查图元)。