How to convert a keyedArchiver to a string and back again

81 Views Asked by At

I want to convert a custom object into a propertyList. Then later I want to retrieve it via NSOutlineView. I use a NSKeyedArchiver/unArchiver to convert my object to and from a NSData.

In my custom object (OutlineItem):

-(id)pasteboardPropertyListForType:(NSPasteboardType)type
{
if ([[[info draggingPasteboard] types] containsObject: kPrivateDragUTI])
{
     NSData *itemData = [NSKeyedArchiver archivedDataWithRootObject:self];
     NSString* itemString = [[NSString alloc]initWithData:itemData encoding:NSASCIIStringEncoding];
     return itemString;
}

In NSOutlineView:

- (id<NSPasteboardWriting>)outlineView:(NSOutlineView *)outlineView pasteboardWriterForItem:(id)item
{
   OutlineItem* anItem = item;
   return anItem;
}

Later:

- (BOOL)outlineView:(NSOutlineView *)destinationOutlineView
             acceptDrop:(id <NSDraggingInfo>)info item:(id)destinationParentItem
             childIndex:(NSInteger)destinationIndex
{    
    NSPasteboard *pboard = [info draggingPasteboard];
    OutlineItem* pbItem = nil;
    if ([[pboard types] containsObject: kPrivateDragUTI])
    {
        NSString* stringForData = [[info draggingPasteboard] stringForType:kPrivateDragUTI];
        NSData *data = [stringForData dataUsingEncoding:NSASCIIStringEncoding];

StringForData looks OK, but data is nil at this point.

Why is data nil?

0

There are 0 best solutions below