Hi,

I have a pair of almost-matching flat-file database apps, iData Pro for the Mac 
and iData Mobile for mobile devices. Datafiles for both apps are written to 
disk as xml.

Records in iData Mobile datafiles each include a block of plain text, which is 
an NSString object that is displayed in a UITextView. The NSString is encoded 
like this:

                        <key>TextString</key>
                        <string>
                        Mr. Fred Farkle
                        1234567 Northwest Broadway Ave.
                        Austin, TX  77777

                        Work: 515-555-0987
                        FAX: 515-555-6789
                        Home: 515-555-4567
                        </string>

Records in iData Pro datafiles also include a block of RTFD text, which is an 
NSAttributedString object that is displayed in an NSTextView. The 
NSAttributedString is encoded as NSData like this:

                        <key>TextRTFD</key>
                        <data>
                        cnRmZAAAAAADAAAAAgAAAAcAAABUWFQucnRmAQAAAC51AQAAKwAA
                        AAEAAABtAQAAe1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2Fy
                        dGYxMjY1XGNvY29hc3VicnRmMjEwCntcZm9udHRibFxmMFxmbmls
                        XGZjaGFyc2V0MCBHZW9yZ2lhO30Ke1xjb2xvcnRibDtccmVkMjU1
                        XGdyZWVuMjU1XGJsdWUyNTU7fQpccGFyZFx0eDU2MFx0eDExMjBc
                        dHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0
                        ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwCgpcZjBcZnMy
                        NCBcY2YwIE1yLiBGcmVkIEZhcmtsZVwKMTIzNDU2NyBOb3J0aHdl
                        c3QgQnJvYWR3YXkgQXZlLlwKQXVzdGluLCBUWCAgNzc3NzdcClwK
                        V29yazogNTE1LTU1NS0wOTg3XApGQVg6IDUxNS01NTUtNjc4OVwK
                        SG9tZTogNTE1LTU1NS00NTY3XApcCn0BAAAAIwAAAAEAAAAHAAAA
                        VFhULnJ0ZhAAAADBUAtVtgEAAAAAAAAAAAAA
                        </data>

After looking at the Notes app on the iPhone, and fooling around with styled 
text and embedded images, I decided to modify iData Mobile to handle RTFD.

What I was expecting was that the RTFD text blocks created on the Mac would 
look the same on the iPhone or iPad (assuming the availability of the same 
fonts on the mobile device). Of course, the routines used are not very similar 
(and I’m not sure why).

Here’s what I do in iData Pro when parsing the NSData TextRTFD  for the display 
of a new record:

    IBOutlet NSTextView *freeformTextView; // the text view in the datafile 
window controller
    NSData *textRTFD = [record textRTFD]; // extracted from the TextRTFD block 
in the xml datafile
    NSRange rtfdRange = NSMakeRange(0,[freeformTextView.string length]);

    /* clear attributes from the old record */
    [freeformTextView setTypingAttributes:nil];
    [[freeformTextView textStorage] removeAttribute:NSLinkAttributeName range: 
rtfdRange];

    /* replace the old record’s RTFD with that of the new record */
    [freeformTextView replaceCharactersInRange:allRange withRTFD:textRTFD];

This results in the display of the RTFD styled text with any attachments, 
including links, images, and/or sound files. (And this code has been in use for 
over a decade with no problems.)

Here’s what I thought would be the equivalent under iOS (obviously I was wrong):

    notesContentField = [mw_fieldContentTableCells objectAtIndex:fieldCount]; 
// the UITextview
    NSError *error;
    NSDictionary *attrs = 
@{NSDocumentTypeDocumentAttribute:NSRTFDTextDocumentType};
    NSData * textRTFD = [record textRTFD]; // extracted from the TextRTFD block 
in the xml datafile
    notesContentField.attributedText = [[NSAttributedString alloc] 
initWithData:textRTFD options:attrs documentAttributes:NULL error:&error];

When a record that has complex formatted text, including different fonts; a 
variety of font sizes; regular, bold, and italic styles; some underlining; and 
an embedded image is displayed in iData Mobile, the font and font attributes of 
the first item of the record text are applied to the entire block of text, and 
the embedded image disappears. When entering text in a record, it’s possible to 
set various parts of the text to bold, italic, and/or underlined in a variety 
of combinations, so it’s not that only one style can be displayed. Then there’s 
Notes, which seems to be able to save text with mixed formatting and embedded 
images.

So, I’d appreciate any ideas about what I’m doing wrong. (I have a different 
problem going the other way — encoding the text view’s attributedString as 
NSData, replacing the TextRTFD value, and saving it to disk. However, I figure 
I’d better work on one problem at a time.)

Thanks,
Mike Wright


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to