8820


リッチテキストファイル(testRichText.rtf)の内容をUITextViewに表示することは、  
下記のコードによって実現できました。  
逆にUITextViewのattributedTextの内容をリッチテキストファイルとして  
出力したいのですが、方法が分かりません。

[code]

        if let url = NSBundle.mainBundle().URLForResource("testRichText", withExtension: "rtf") {
            let opts = [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType]            
            if let s = NSAttributedString(fileURL: url, options: opts, documentAttributes: nil, error: nil) {
                self.testUiText.attributedText = s
            }
        }
    
[/code]

下記の投稿を見て、Objective-Cの場合の記載方法は載っていたのですが、  
Swiftの場合、どのように記述すれば良いかが分かりません。  
<https://stackoverflow.com/questions/24134217/objective-c-how-to-create-rtf-
from-nsattributedstring>

[code]

    NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"YOLO" attributes:nil];
    NSData *data = [str dataFromRange:(NSRange){0, [str length]} documentAttributes:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType} error:NULL];
    [data writeToFile:@"/me.rtf" atomically:YES];
    
[/code]


CC BY-SA 3.0
2015-04-06T06:42:20.530
8813
2015-04-06T08:43:06.657
2017-05-23T12:38:56.083
-1
9183
question
swift
SwiftでUITextViewのattributedTextの内容をリッチテキストファイル(test.rtf)として保存するには？


自己解決しました。

[code]

    let opts = [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType]
    
    //NSDataに変換
    var data = self.testUiText.attributedText.dataFromRange(NSMakeRange(0, self.testUiText.attributedText.length), documentAttributes: opts, error: nil)
    
    //ファイル名
    var fileName = "test.rtf"
    
    //Documentsまでのパス取得
    let paths1 = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    let documentsPath = paths1[0] as String
    
    //Documentsまでのパスにファイル名を結合
    let filePath = documentsPath.stringByAppendingPathComponent(fileName)
    
    println(filePath)
    
    //RTFファイル出力
    data?.writeToFile(filePath, atomically: true)
    
[/code]


CC BY-SA 3.0
2015-04-06T08:42:39.330
8820
2015-04-06T08:42:39.330
9183
8813
answer