2013-10-03 4 views
0

У меня есть словарь, содержащий изображение в формате NSData, размер изображения вместе с другими атрибутами изображения. Как я могу написать NSDictionary до NSPasteboard?Напишите NSDictionary для NSPasteboard

Я написал код следующим образом:

NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; 
[pasteBoard clearContents]; 
[pasteBoard writeObjects:[NSArray arrayWithObject:myDictionary]; 

После компиляции, он выдает следующее сообщение в консоли:

экземплярам class __NSDictionaryM не действительны для NSPasteboard -writeObjects:. class __NSDictionaryM не реализует протокол NSPasteboardWriting.

ответ

1

Объекты должны реализовать протокол NSPasteboardWriting для сохранения на сервере pasteBoard.

Каркасные какао классы NSString, NSAttributedString, NSURL, NSColor, NSSound, NSImage и NSPasteboardItem реализуют этот протокол. Вы можете сделать свой собственный класс совместимым с этим протоколом, чтобы вы могли записывать экземпляры класса в картон, используя метод writeObjects: NSPasteboard.

почему бы не делать так:

NSImage *image = ...; 
NSArray *array = [NSArray arrayWithObject:image]; 
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; 
[pasteBoard writeObjects:array]; 
0

Либо сделать свой собственный класс с этими данными и осуществлять NSPasteboardWriting (и, вероятно, NSPasteboardReading тоже, так как вы хотите, чтобы прочитать эти данные из пользовательского формата картона, а также , поскольку никакое другое приложение не поймет его), или используйте setPropertyList:forType: и propertyList:forType:.

+0

Я чувствую, как вы сказали, я могу использовать plist's. Могу ли я написать plist's на NSPasteboard? –

+0

«Список свойств» означает тип списка свойств. Типы списка свойств - это массив, словарь, дата, число, строка и данные. Вы можете использовать это, если задействованы только типы списков свойств. Поскольку вы используете словарь со значением данных (это нормально), это зависит от того, как вы храните размер. Если вы используете NSValue с размером, вам нужно использовать либо два NSNumbers, либо NSString (используя 'NSSizeFromString' и' NSStringFromSize'). – Jesper

Смежные вопросы