• 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: App-specific URLs and the pasteboard. Need help.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: App-specific URLs and the pasteboard. Need help.


  • Subject: Re: App-specific URLs and the pasteboard. Need help.
  • From: Duncan Champney <email@hidden>
  • Date: Tue, 22 Jan 2008 15:44:52 -0500

Hmm. Curiouser and curiouser.

My app creates custom URLs to encode the settings for fractal plots. Then, when the user clicks a link, my app launches, parses the parameters out of the URL, and recreates the plot.

Based on Alastair's advice (copied below), my app now creates an NSAttributedString and uses it to create RTF data, which I copy to the clipboard. In general, it works well.

However, some of the URLs my program creates are really long. (the URL encodes 20 or more parameters for every plot, plus 18 parameters for each of an arbitrary number of color gradients).

The URL shows up as correct in the clipboard when I look at it using the Clipboard viewer (thanks to Jonathon Mah for that suggestion!)

However, when I paste the URL into TextEdit or Mail, it gets truncated at slightly less than 1000 characters. (The exact count seems to vary by a few bytes, but seems to be around 988 to 992 characters for the actual URL text.)

Is there a limitation on how big an URL can be in an RTF tag? These long URLs work if my app copies them to the clipboard and then reads them back from the clipboard, so I know they are well formatted. Further, if the length of the URL is short enough, the clickable link in TextEdit or mail works perfectly. It's only when the length of the URL approaches 1000 characters that there's a problem.


Duncan --- On Jan 19, 2008, at 7:59 AM, Duncan Champney wrote:


On Jan 18, 2008, at 11:05 AM, Alastair Houghton wrote:
On 18 Jan 2008, at 15:27, Duncan Champney wrote:

I build my URL string in the variable theURLString, then add it to the general pasteboard using the following code:

theFW_URL = [NSURL URLWithString:theURLString];
[theFW_URL writeToPasteboard: thePasteBoard];
NSString* theURLName = [NSString stringWithFormat: NSLocalizedString(@FW_URL_PREFIX ,nil), theDocumentName];
success = [thePasteBoard setString:theURLName forType: NSStringPboardType];

Have you tried NSURLPboardType?

Or NSHTMLPboardType with HTML containing a link?

Or, for that matter, NSRTFPboardType, which I think you'll find can hold links too; you can make RTF fairly easily from an NSAttributedString, and if that string happened to contain a link (hint: see NSLinkAttributeName), I think you'll get the behaviour you want.

At present, I think you're relying on the end application to parse your text into a link, which won't work in many cases.

Kind regards,

Alastair.

--
http://alastairs-place.net



Alastair,

I was using NSURLPboardType, but I don't think I was using it correctly.

Based on your advice, I tried using NSHTMLPboardType. That worked better, but still not ideally.

As you say, NSRTFPboardType seems to work with the widest variety of applications. What I do now is to write RTF to the pasteboard, and also write some HTML as a string. The HTML string is useful for posting links to websites. Here's the code I came up with:

NSArray* types = [NSArray arrayWithObjects: NSRTFPboardType, NSStringPboardType, nil];
[thePasteBoard declareTypes:types owner: nil];
theFW_URL = [NSURL URLWithString:theURLString]; //theURLString contains the text of the URL
[theFW_URL writeToPasteboard: thePasteBoard];
//Create string "Fractalworks plot <theDocumentName>
NSString* theURLName = [NSString stringWithFormat: NSLocalizedString(@FW_URL_PREFIX ,nil), theDocumentName];
theFW_URL = [NSURL URLWithString:theURLString];


//Create an NSAttributedString to hold the RTF description of the URL.
theStringRange.location = 0;
theStringRange.length = [theURLName length];
theAttributesDict = [NSDictionary dictionaryWithObject: theFW_URL forKey: NSLinkAttributeName];
theRTF_string= [[NSAttributedString alloc] initWithString: theURLName attributes:theAttributesDict];
NSData* the_RTF_data = [theRTF_string RTFFromRange: theStringRange documentAttributes: nil];
success = [thePasteBoard setData:the_RTF_data forType: NSRTFPboardType];
//Also write a string with HTML text into the pasterboard, for apps that can't deal with the RTF data.
theURLString = [NSString stringWithFormat: @"<u><a href=\"%@ \">%@</a></u>", theURLString, theURLName];
success = [thePasteBoard setString:theURLString forType: NSStringPboardType];


Older Carbon apps like Appleworks don't seem to work with this code, though. They take the "vanilla" text from the RTF, rather than using the NSStringPboardType like you'd expect.
I have a preference to "write application URLS as text" and in that case, I write just the NSStringPboardType data containing the URL to the pasteboard. (That code isn't shown for the sake of brevity.)


Thanks again for your help.


Duncan

=



_______________________________________________

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: App-specific URLs and the pasteboard. Need help.
      • From: glenn andreas <email@hidden>
References: 
 >App-specific URLs and the pasteboard. Need help. (From: Duncan Champney <email@hidden>)
 >Re: App-specific URLs and the pasteboard. Need help. (From: Alastair Houghton <email@hidden>)
 >Re: App-specific URLs and the pasteboard. Need help. (From: Duncan Champney <email@hidden>)

  • Prev by Date: Shift-tab in window not working correctly?
  • Next by Date: Re: mouse down in table view without selecting the row
  • Previous by thread: Re: App-specific URLs and the pasteboard. Need help.
  • Next by thread: Re: App-specific URLs and the pasteboard. Need help.
  • Index(es):
    • Date
    • Thread