将带有 NSAttributed 字符串的字典保存到 PList 或 NSUserDefaults

Posted

技术标签:

【中文标题】将带有 NSAttributed 字符串的字典保存到 PList 或 NSUserDefaults【英文标题】:Saving Dictionary with NSAttributed String into a PList or into NSUserDefaults 【发布时间】:2011-10-19 17:37:35 【问题描述】:

我有一个带有 NSAttributtedString 的字典


    9 =     
        9x0 =         
            UserID = 123;
            formattedMessage = "Hi... How are you ?\n    CTForegroundColor = \"<CGColor 0x601e460> [<CGColorSpace 0x6010020> (kCGColorSpaceDeviceGray)] ( 0 1 )\";\n    NSFont = \"CTFont <name: Cochin-BoldItalic, size: 17.000000, matrix: 0x0>\\nCTFontDescriptor <attributes: <CFBasicHash 0x6070640 [0x11f8400]>type = mutable dict, count = 1,\\nentries =>\\n\\t1 : <CFString 0xf4d5c4 [0x11f8400]>contents = \\\"NSFontNameAttribute\\\" = <CFString 0x60707f0 [0x11f8400]>contents = \\\"Cochin-BoldItalic\\\"\\n\\n>\";\n";
            isDeleted = 0;
            isEdited = 0;
            lastModifiedDate = "2011-10-19 17:27:38 +0000";
            message = "Hi... How are you ?";
        ;
    ;

我尝试将此词典保存为 Documents 文件夹中的 Plist 并且, 将字典保存在NSUserDefaults 中。 它都没有奏效。 如果字典中的属性字符串被删除,这两种方法都有效。

用于保存到 Documents 文件夹中 Plist 的代码:

NSString *aDocumentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *aFilePath = [NSString stringWithFormat:@"%@/ChatHistory.plist",aDocumentsDirectory];
BOOL aStatus = [aDictionary writeToFile:aFilePath atomically:YES];

用于在NSUserDefaults 中保存字典的代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:aDictionary forKey:@"ChatHistory"];

请有人帮忙。我错过了什么吗?

【问题讨论】:

【参考方案1】:

一个有趣的实现。 猜猜这是一个解决方案:

https://devforums.apple.com/message/340283#340283

现在将对此进行探索..

【讨论】:

以上是关于将带有 NSAttributed 字符串的字典保存到 PList 或 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

目标C将带有扩展名和名称的文件保存到字典

将字符串(带有 unicode 字符)添加到字典时添加额外的斜杠( \ )

swift 轻松创建NSAttributed Strings。

将带有嵌入括号的字符串转换为字典

iOS 如何保存类对象的字典?

如何将映射字符串到结构的字典传递给带有busctl的d-bus方法?