2013-04-08 78 views
1

我很难获取复制/粘贴以处理我的自定义管理对象Person。该对象包含属性和关系。该对象应该提供objectID。我打算实施粘贴生成一个新的对象,然后填写复制的Person的信息。核心数据中自定义管理对象的复制/粘贴

复制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; 
} 

我应该如何继续在这里?我无所事事,读了很多C程序Q & A(例如Peter Hosey对NSPasteboard and simple custom data的很好回答)以及苹果文档,仍然让我难以置信。

+0

我已经发现我的代码有一个问题;我应该在NSPasteboardReadingAsString处设置'readingOptionsForType:'。不过,我想知道这是否是处理objectID“简单”复制​​的最简单方法。 – markjs 2013-04-08 13:52:12

+0

具体问题:上述方法可以在'initWithPasteboardPropertyList:'中获得ObjectID,但我需要返回一个Person对象。不幸的是,我还没有一个托管对象的上下文。是什么赋予了? – markjs 2013-04-08 14:43:20

+0

你有没有得到一个解决方案来重新水化你的管理对象从粘贴板? – 2013-12-05 03:10:44

回答

0

您是否已经看到: Using Managed Objects

我不确定你的意思是'我需要返回一个Person对象,但我没有managed object context'。你的上下文是你的便笺来创造的东西。

+0

我有,谢谢。托管对象上下文尚不可用,因为(我猜)这个Person对象是通过NSPasteboardReading协议创建的。它尚未初始化。每个其他'Person'确实有一个托管对象上下文。 – markjs 2013-04-09 12:56:40

相关问题