Cocoa 复制/粘贴核心数据中的自定义托管对象

Cocoa 复制/粘贴核心数据中的自定义托管对象,cocoa,core-data,nspasteboard,Cocoa,Core Data,Nspasteboard,我很难让复制/粘贴在我的自定义托管对象上工作。对象包含属性和关系。对象应该提供objectID。我打算实现粘贴,生成一个新对象,然后填写复制人的信息 复制objectID可能会起作用。我确信粘贴不起作用。为了复制/粘贴对象,我在Person类中实现了以下方法: #pragma mark --- Copy functionality -(id)pasteboardPropertyListForType:(NSString *)type { if ( [type isEqualToStri

我很难让复制/粘贴在我的自定义托管对象上工作。对象包含属性和关系。对象应该提供objectID。我打算实现粘贴,生成一个新对象,然后填写复制人的信息

复制objectID可能会起作用。我确信粘贴不起作用。为了复制/粘贴对象,我在Person类中实现了以下方法:

#pragma mark --- Copy functionality

-(id)pasteboardPropertyListForType:(NSString *)type
{
    if ( [type isEqualToString:@"my.company.person"])
    {
        NSManagedObjectID *oid = self.objectID;
        NSURL *uidURL = [oid URIRepresentation];
        return [uidURL absoluteString];
    }
    return nil;
}

-(NSArray *)writableTypesForPasteboard:(NSPasteboard *)pasteboard
{
    return @[@"my.company.person"];
}

+ (NSPasteboardWritingOptions)writingOptionsForType:(NSString *)type pasteboard:(NSPasteboard *)pasteboard
{
    if ( [type isEqualToString:@"my.company.person"])
    {
        return NSPasteboardWritingPromised;
    }
    return nil;
}
要进行粘贴,请执行以下操作:

#pragma mark --- Paste functionality

+(NSArray *)readableTypesForPasteboard:(NSPasteboard *)pasteboard
{
    return @[@"my.company.person"];
}

+ (NSPasteboardReadingOptions)readingOptionsForType:(NSString *)type pasteboard:(NSPasteboard *)pasteboard
{
    if ( [type isEqualToString:@"my.company.person"])
    {
        return NSPasteboardReadingAsString;
    }
    return nil;
}

- (id)initWithPasteboardPropertyList:(id)propertyList ofType:(NSString *)type
{
    if ( [type isEqualToString:@"my.company.person"])
    {
        ...
    }
    return nil;
}

我应该如何继续?我不知所措,读了很多问答题,比如彼得·霍西的精彩答案,还有苹果的文档,仍然让我感到困惑。

你已经看到了: ?


我不确定您所说的“我需要返回一个Person对象,但我没有托管对象上下文”是什么意思。您的上下文就是您创建东西的便笺簿。

我已经发现我的代码有一个问题;我应该在NSPasteboardReadingAsString上设置类型:的ReadingOptions。不过,我想知道这是否是处理objectID简单复制的最干净的方法。具体问题:上述方法可以在initWithPasteboardPropertyList中为我获取objectID:但我需要返回Person对象。不幸的是,我还没有托管对象上下文。给出了什么?你有没有找到从粘贴板中重新水化托管对象的解决方案?我有过,但没有我想要的那么优雅。我现在使用一个文档控制器,它接收来自(例如)Person对象的通知,Person对象包含objectID。控制器可以访问托管对象上下文,并协调需要执行的任何操作。这不是我想要的,但它确实起到了作用。我做到了,谢谢。托管对象上下文还不可用,因为我猜这个Person对象是通过NSPasteboardReading协议创建的。它还没有初始化。其他人确实都有一个托管对象上下文。