1

カスタム管理オブジェクトでコピー/貼り付けを行うのに非常に苦労していますPerson。オブジェクトには、プロパティと関係が含まれています。オブジェクトは objectID を提供する必要があります。新しいオブジェクトを生成して貼り付けを実装し、コピーした .xml から情報を入力するつもり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;
}

ここはどうすればいいですか?多くのスタックオーバーフローの Q&A (たとえば、Peter Hosey のNSPasteboard とシンプルなカスタム データに対するすばらしい回答) や Apple のドキュメントを読んで途方に暮れていますが、これにはまだ困惑しています。

4

1 に答える 1