如何将 keyedArchiver 转换为字符串并再次返回

问题描述

我想将自定义对象转换为 propertyList。然后我想通过 NSOutlineView 检索它。我使用 NSKeyedArchiver/unArchiver 将对象与 NSData 相互转换。

在我的自定义对象 (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;
}

在 NSOutlineView 中:

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

后来:

- (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 看起来不错,但此时数据为零。

为什么数据为零?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)