0

I have code to load local rtf files in textview but how to do i make it works for files located online

Since it does not works when i use url Here is url - http://howtotechworld.com/rtfdoc.rtf

Here is code

  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");
   }
Mayank Patel
  • 3,868
  • 10
  • 36
  • 59

2 Answers2

1

You should download your rtf data asynchronously and use NSAttributedString initialiser init(data: NSData, options: [String : AnyObject], documentAttributes dict: AutoreleasingUnsafeMutablePointer<NSDictionary?>) throws to load your data when completed:

// 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()
Leo Dabus
  • 229,809
  • 59
  • 489
  • 571
-1

This works in a Playground (obviously needs better handling of optionals than forced unwrapping, but you get the point):

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)")
}
Michael Kohl
  • 66,324
  • 14
  • 138
  • 158