On Apr 26, 2010, at 5:58 AM, Billy Flatman wrote:

> I'm trying to put a custom object into past board in order to perform a drag 
> operation.

You can’t do that, for the same reason you can’t directly write a custom object 
to a file. The pasteboard basically stores bytes, so it has to be able to 
convert what you store in it to and from a stream of bytes. There are a limited 
number of data types it understands — strings, numbers, arrays, dictionaries 
and of course raw data.

>       ** This doesn't (actually stops drag and drop working for my 
> application until I logout).
>       [pboard setData:[items objectAtIndex:0] forType:kOutlineViewGroupType];

You’re passing the wrong type of object to the setData: parameter. Look at the 
header or the docs — it takes an NSData. You’re passing it some other custom 
object. The result is going to be an exception or a crash. (The reason this 
doesn’t produce a warning at compile time is because -objectAtIndex: just 
returns type id, which is compatible with anything (it’s like void* for 
objects.) You have to pay attention to what type of object you know is in the 
array.

If you want to put a custom object in the pasteboard, there are several ways:

(1) Wrap it in an NSValue via [NSValue valueWithPointer:]. This is kind of 
dangerous because you have to make sure the object won’t get dealloced before 
the pointer is eventually used, since -valueWithPointer: doesn’t retain the 
object.
(2) Store some value that refers to the object, like a row number or an access 
key. You have to make sure that value will continue to work, i.e. the row 
number remains correct.
(3) Implement a way to serialize the object into data or a dictionary/array. 
Implementing the NSCopying protocol is a standard way to do that.

The first two techniques are OK for drag-n-drop because the lifetime of the 
pasteboard is limited. If you want to implement copy and paste you probably 
need to go with #3 because the pasteboard could stay around for an arbitrary 
amount of time.

—Jens_______________________________________________

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to