如何允许复制自定义项目



我有一个自定义类,我希望能够放在粘贴板上。这是我到目前为止的代码

- (NSArray *)writableTypesForPasteboard:(NSPasteboard *)pasteboard {
    static NSArray *writableTypes = nil;

    if (!writableTypes) {
        writableTypes=[NSArray arrayWithObjects:(NSString *)kUTTypeXML, nil];
     }
    return writableTypes;
}
- (id)pasteboardPropertyListForType:(NSString *)type {
    return [NSKeyedArchiver archivedDataWithRootObject:[MyClass class]];
}

这部分不对:

- (id)pasteboardPropertyListForType:(NSString *)type {
    return [NSKeyedArchiver archivedDataWithRootObject:[MyClass class]];
}

看起来您正在尝试存档实际的MyClass类,实际上您应该在其中存档MyClass对象,即MyClass的特定实例而不是类本身。此外,您可能应该检查传入的类型,以确保为正确的事情提供数据。因此,它应该看起来像这样:

- (id)pasteboardPropertyListForType:(NSString *)type {
    if ([type isEqualToString:kUTTypeXML]) {
        return [NSKeyedArchiver archivedDataWithRootObject:self.someInstanceOfMyClass];
    }
    return nil;
}

最后,确保MyClass实现了NSCoding协议,以便您可以创建包含对象数据的存档。

最新更新