【问题标题】:reading binary data (rtf) to string将二进制数据 (rtf) 读取到字符串
【发布时间】:2010-10-15 14:23:26
【问题描述】:

我从事核心数据程序已经有一段时间了。我正在尝试在文本视图中组合实体的属性以保存到 PDF 和打印。实体的属性之一使用二进制数据。

当我执行这个时:

NSData *myData = [object valueForKey:@"cueNotes"];

...它返回这个:

  typedstreamè@
NSMutableDataNSDataNSObjecti[276c]{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
{\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural

\f0\fs20 \cf0 step one text}

当我尝试这个时:

NSAttributedString* myDataTry = [[[NSAttributedString alloc] initWithRTF:myData documentAttributes:nil] autorelease];

... myDataTry 为零。我读了一些关于 rtf 格式的内容,然后删除了这个:

typedstreamè@
NSMutableDataNSDataNSObjecti[276c]  

...来自 myData 数据,但仍然得到 nil 结果。有谁知道我做错了什么?

更新:在考虑了第一个答案后,我尝试了这个(以及几个排列):

NSString* notesString = [[[NSString alloc] initWithRTF:[object valueForKey:@"cueNotes"] documentAttributes:nil] autorelease];

以及分配的字符串,仍然没有结果。

这是我从中提取的实体的结果:

2010-10-30 00:47:32.867 lzshow7.2[4222:10b] <NSManagedObject: 0x2a4850> (entity: Song; id: 0x26a030 <x-coredata:///Song/t172F066B-285C-4125-B2FA-CFFA6A353D102> ; data: {
cueName = Stupid;
cueNo = 001;
cueNotes = <040b7479 70656473 74726561 6d8103e8 84014084 84840d4e 534d7574 61626c65 44617461 00848406 4e534461 74610084 8408>;
songToEffect =     (
);
songToInstrument =     (
);

})

【问题讨论】:

    标签: objective-c core-data nsdata binary-data nsattributedstring


    【解决方案1】:

    当你将像 NSAttributedString 实例这样的实际对象保存到 Core Data 时,你应该将它保存为可转换类型,而不仅仅是数据。这将使您“冻结”实际实例,然后将其原封不动地恢复原状,无需进一步处理。

    【讨论】:

    • “冻干”数据会影响 myData 返回为 nil 的事实吗?
    • 不,我很确定您得到的是一个 nil 属性字符串,因为您在保存时将属性字符串转换为原始数据而不是 RTF。您正在尝试使用旨在写入 Core Data 中的文本文件的方法。您需要避免所有这些,并将实际的属性字符串实例本身保存在可转换的属性中。
    • 你有你在说什么的例子吗?
    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多