• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: "Toll free" bridge from NSAttributedString * to CFAttributedStringRef
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "Toll free" bridge from NSAttributedString * to CFAttributedStringRef


  • Subject: Re: "Toll free" bridge from NSAttributedString * to CFAttributedStringRef
  • From: glenn andreas <email@hidden>
  • Date: Thu, 08 Apr 2010 08:34:55 -0500

On Apr 8, 2010, at 7:02 AM, vincent habchi wrote:

> Hi there,
>
> I've been fiddling with NSAttributedString lately, and the way to display them through Core Text. In the docs, I've read that NSAttributedString and CFAttributedStringRef were supposed to be "toll free" bridged; I assumed that meant that one could be used in lieu of the other with (or maybe even without) a simple cast.
>
> But I found this is not true. Specifically, I was getting strange errors like "CFSet[Stroke|Fill]ColorFromColor : invalid context 0x0" each time I printed my NSAttributedString by CTLineDraw(), although I had a perfectly valid context. The glyph were drawn, but always in black, while I was attempting to get another color via the NSForegroundColorAttributeName. At the end, I had to replace the pair (NSColor, NSForeground…) by a (CGColorRef, kCTForeground…), and now it works.
>
> Is that supposed to be a "normal" behavior, did I misunderstand the meaning of "toll free", or is it a bug?

NSAttributedString and CFAttributedStringRef "the data structure" are toll free bridged, but that just means that the objects themselves can be interchanged.  The problem is that, like an NSDictionary, they can store arbitrary objects that may not be toll free bridged - in this case, NSColor and CGColorRef are not interchangeable, nor are the keys NSForegroundColor and kCTForegroundColorAttributeName documented as the same.

So CTLineDraw expects to have the color specified as a CGColorRef in kCTForegroundColorAttributeName, while drawString: expects to have the color specified as an NSColor in NSForegroundColor.



Glenn Andreas                      email@hidden
The most merciful thing in the world ... is the inability of the human mind to correlate all its contents - HPL

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: "Toll free" bridge from NSAttributedString * to CFAttributedStringRef
      • From: vincent habchi <email@hidden>
References: 
 >"Toll free" bridge from NSAttributedString * to CFAttributedStringRef (From: vincent habchi <email@hidden>)

  • Prev by Date: Re: [ANN] AppKiDo-for-iPhone 0.984 fixes bug with 3.2 SDK
  • Next by Date: Re: Best way to Define Project Wide Static Strings?
  • Previous by thread: "Toll free" bridge from NSAttributedString * to CFAttributedStringRef
  • Next by thread: Re: "Toll free" bridge from NSAttributedString * to CFAttributedStringRef
  • Index(es):
    • Date
    • Thread