如何使用url而不是本地加载rtf

时间:2016-01-20 07:20:53

标签: ios swift swift2 rtf

我有代码在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");
   }

2 个答案:

答案 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)")
}