iOS 8リマインダーアプリの挙動調査 その2
前回の内容は以下
優先順位の !!!
は UITextView
の中に含まれている事が分かった。
これをコピーすると何が入っているのか。
UIPasteboard
を使って中身を見てみた。
すると pasteboardTypes
には
( "com.apple.flat-rtfd", "public.utf8-plain-text", "Apple Web Archive pasteboard type" )
items
には
( { "Apple Web Archive pasteboard type" = <3c21444f ... 746d6c3e 0a>; "com.apple.flat-rtfd" = <72746664 ... ae426082>; "public.utf8-plain-text" = \U30bf\U30a4\U30c8\U30eb; } )
といった具体的な内容が入っていた。(上2つのデータ内容は省略表記している)
調べてみると Web Archive 形式の方は中身を取得するのにはいろいろ面倒な様なので、rtfd形式の方の中身を見てみる。
以下のコードで rtfd 形式の NSData
から NSAttributedString
を作成する。
ログ出力の結果は以下
{ NSAttachment = "<NSTextAttachment: 0x1742ab460> \"Attachment.png\""; NSFont = "<UICTFont: 0x13dd0ae90> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 36, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0"; }タイトル{ NSFont = "<UICTFont: 0x13dd0ae90> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt"; NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 36, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0"; }
タイトル
以降のデータが文字列 タイトル
の中身で、それ以前のデータが !!!
の部分の中身になっている。
Attachment.png で作成された NSTextAttachment
クラスが存在しているので、!!!
の部分は画像という事になる。
NSTextAttachment
の中身をさらに見ていく。
attachment は image
contents
は nil で fileType
は public.png
fileWrapper が設定されていたので NSFileWrapper
を取得してそこからさらに fileWrapper の中身を見ていく。
fileWapper の attributes
は
NSFileModificationDate = "2015-06-22 13:45:49 +0000"; NSFilePosixPermissions = 438; NSFileType = NSFileTypeRegular;
regularFileContents
でコンテンツの NSData
が取得でき、そこから UIImage
を生成する事が出来た。
最終的に取得できた UIImage
と NSAttributedString
をそれぞれ UIImageView
と UITextView
に表示してみると以下のようになった。
という事でまとめとしては、
リマインダーアプリの優先順位の表示 !!!
は NSFileWrapper
の regularFileContents
へ画像データを設定し、そこから作成された NSTextAttachment
を attributes として持つ NSAttributedString
を UITextView
に表示。
という事になる。