我有代码在textview中加载本地rtf文件,但如何使其适用于在线文件
因为当我使用url时它不起作用 这是网址 - http://howtotechworld.com/rtfdoc.rtf
以下是代码
if let rtf = NSBundle.mainBundle().URLForResource("http://howtotechworld.com/rtfdoc", withExtension: "rtf", subdirectory: nil, localization: nil) {
do {
let attributedString = try NSAttributedString(fileURL: rtf, options: [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType], documentAttributes: nil)
textView.attributedText = attributedString
textView.editable = false
print(attributedString)
}
catch _ {
NSLog("catched a error");
}
答案 0 :(得分:1)
您应该异步下载rtf数据,并在完成后使用NSAttributedString initialiser init(data: NSData, options: [String : AnyObject], documentAttributes dict: AutoreleasingUnsafeMutablePointer<NSDictionary?>) throws
加载数据:
// your web link
let rtfLink = "http://www.aliectronics.com.au/thefournobletruths.rtf"
// make sure your link is valid NSURL using guard
guard let rtfURL = NSURL(string: rtfLink ) else { return }
// creata a data task for your url
NSURLSession.sharedSession().dataTaskWithURL(rtfURL) {
(data, response, error) in
// use guard to make sure you get a valid response from the server and your data it is not nil and you got no errors otherwise return
guard
let httpURLResponse = response as? NSHTTPURLResponse where httpURLResponse.statusCode == 200,
let data = data where error == nil
else { return }
// you need to use dispatch async to update the UI
dispatch_async(dispatch_get_main_queue(), { () -> Void in
// NSAttributedString data initialiser throws an error so you need to implement Swift2 Do Try Catch error handling
do {
let attributedString = try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], documentAttributes: nil)
textView.attributedText = attributedString
textView.editable = false
print("attributedString=====start")
print(attributedString)
print("attributedString=====end")
} catch let error as NSError {
print(error.localizedDescription)
}
})
}.resume()
答案 1 :(得分:-1)
这适用于Playground(显然需要更好地处理选项而不是强制解包,但你明白了这一点):
import UIKit
let url = NSURL(string: "http://thewalter.net/stef/software/rtfx/sample.rtf")
let data = NSData(contentsOfURL: url!)
do {
let options = [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType]
let attributedString = try NSAttributedString(data: data!, options: options, documentAttributes: nil)
print(attributedString)
} catch {
NSLog("\(error)")
}