Ken,

thank you very much for your enlightening and in-depth explanation! This is 
what I hoped somehow to receive back in February...

Over the next days I will try and put your approach to practice. If it works as 
I hope I will certainly withdraw my comment about the new API being a 
half-baken technology.

Since you are at it ;-), I remember having one more problem back then:

With the old API I could (and still do) put a list of path strings with empty 
elements on the pasteboard, e.g. four paths, the third one empty as in

/path1/item1
/path2/item1

/path2/item2

but since the new API moved to NSURLs I don't see a way to accomplish this. I 
could not find something like an empty NSURL. I use this for copying data from 
a table area to another table or table area, meaning the empty element is a 
valid piece of data. Any ideas?

Thank you!

Am 26.05.2012 um 11:13 schrieb Ken Thomases:

> On May 26, 2012, at 2:42 AM, Peter wrote:
> 
>> One more half-baked technology from Apple (as is the new pasteboard API in 
>> its current implementation even if it looks very elegant on the surface - I 
>> guess quite a good deal of people will be bitten by it if it becomes 
>> compulsory, since it prevents you from doing some simple things possible 
>> with the current API; see my inquiry on this list a couple of weeks ago).
> 
> This led me to look up your earlier messages, quoted below:
> 
> On February 27, 2012, at 2:44 AM, Peter wrote:
> 
>> I am still very much puzzled by the issue I described below, so I still hope 
>> to find a taker for it.
>> 
>> While the OS 10.5 API cleanly separated pasteboard types, the 10.6 API 
>> converts NSURL data to strings and adds it to any existing string data - 
>> i.e. when pasting the data into e.g. a text view in 10.6 I get
>> 
>> file://localhost/Users/peterjhartmann/Desktop/Eigene Bilder/jan.jpg
>> file://localhost/Users/peterjhartmann/Desktop/Eigene Bilder/Nob.jpg
>> jan
>> Nob
>> 
>> instead of
>> 
>> jan
>> Nob
>> 
>> which is the result using the 10.5 API. As described, this happens no matter 
>> wether I use writeObjects: or setString: and no matter wether I write the 
>> URLs before or after the strings.
>> 
>> I consider this to be a bug. Am I wrong? If so, what am I doing wrong?
>> 
>> Does anybody use the 10.6 pasteboard API? Judging from my web searches it 
>> seems that almost nobody does.
>> 
>> One member contacted my privately stating ...
>> 
>>> Not sure if you've fixed this or had any other replies, but in reading it 
>>> through, I notice you're not declaring the pasteboard type ([pb 
>>> declareTypes:...]) within this block.  Does this explain the symptoms?
>> 
>> but declareTypes belongs to the old API. Mixing this with the new API is 
>> discouraged on p. 33 of Apple's PasteboardGuide106.pdf.
>> 
>> I'd be very happy about any pointers into the right direction.
>> 
>> My original post is here:
>> 
>> Am 19.02.2012 um 21:24 schrieb Peter:
>> 
>>> I am using the following code:
>>> 
>>>     NSPasteboard *pb = [NSPasteboard generalPasteboard];
>>> 
>>>     if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_5) {
>>>        //linesArray contains file paths as NSStrings
>>>        //namesArray contains file names as NSStrings
>>>        [pb declareTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, 
>>> NSStringPboardType, nil] owner:nil];
>>>        [pb setPropertyList:linesArray forType:NSFilenamesPboardType];
>>>        [pb setString:[namesArray componentsJoinedByString:@"\n"] 
>>> forType:NSStringPboardType];
>>>     }
>>>     else { // >= 10.6
>>>        //linesArray contains NSURLs
>>>        //namesArray contains file names as NSStrings
>>>        [pb clearContents];
>>>        [pb setString:[namesArray componentsJoinedByString:@"\n"] 
>>> forType:NSPasteboardTypeString];
>>>      //[pb writeObjects:namesArray];
>>>        [pb writeObjects:linesArray]; // write the URLs
>>>    }
> 
> I think you are failing to understand the nature of the change introduced 
> with 10.6.  Prior to 10.6, there was always a single pasteboard item.  It 
> could have multiple types/representations.
> 
> Since it is clearly sometimes desirable to have multiple things on the 
> pasteboard, there was a hack.  Some of the types were "plural", like 
> NSFilenamesPboardType.  So, with your 10.5 code path, there's a single item.  
> One of its types/representations is an array of filenames, the other is a 
> string (which you've constructed by joining multiple strings with newlines).
> 
> From 10.6, the pasteboard supports multiple items.  _Each_ item can have 
> multiple types/representations.  Because of that, it's no longer necessary to 
> use plural types like NSFilenamesPboardType.  You can just add an array of 
> NSURLs.
> 
> However, if you add NSURLs and you add strings, you have established that 
> _all_ of those items are on the pasteboard _individually_.  Given how you've 
> done it, the URLs and the strings are not alternative representations of the 
> same items, they are all separate items on the pasteboard.  It is not a bug 
> for TextEdit to paste them all; it would be a bug for it to not do so.
> 
> If what you want is a number of items, where each item has two 
> types/representations – a URL or a string – then that's what you have to put 
> on the pasteboard.  Create an NSPasteboardItem for each item.  For each item, 
> for each type/representation, set the data.  So, if an item is supposed to 
> have an NSURL representation and a string representation, do something like:
> 
>    for (NSString* type in [someURL writableTypesForPasteboard:pb])
>        [item setPropertyList:[someURL pasteboardPropertyListForType:type] 
> forType:type];
>    [item setString:someString forType:NSPasteboardTypeString];
> 
> Put all of the pasteboard items constructed in this manner into an array and 
> write that array to the pasteboard using -writeObject:. Then you will have 
> set up the pasteboard in a manner that's analogous to what you were doing 
> with the 10.5 API.
> 
> Regards,
> Ken
> 
> 


_______________________________________________

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