NSPasteboard не возвращает правильный тип данных - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь прочитать тип данных, найденных в монтажном столе. Тем не менее, программа возвращает, что у меня есть изображение (возможно, потому что это первое условие в статуте if). Что я делаю неправильно? Это та часть кода, на которую я ссылаюсь. Спасибо.

NSArray * imgType = [NSArray arrayWithObject:[NSImage class]];
NSArray * strType = [NSArray arrayWithObject:[NSString class]];

NSArray * pboardImg = [pboard readObjectsForClasses:imgType
                                         options:nil];
NSArray * pboardStr = [pboard readObjectsForClasses:strType
                                         options:nil];

if( pboardImg ){
// Got an image!
}

if( pboardStr ){
   // Got a string!
}

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Я нашел решение этой проблемы, и, как сказал Гейдж, возвращенные данные содержат не только контент, который может видеть пользователь, но и многие другие виды информации.

Я также нашел и экспериментировал с использованием других доступных типов информации, некоторые из которых следующие:

*NSStringPboardType;        
*NSFilenamesPboardType;  
*NSTIFFPboardType;      
*NSRTFPboardType;      
...

Однако версия Xcode, которую я использую, утверждает, что некоторые из них могут быть удалены в будущих версиях (я использую xcode 3), поэтому, если кто-то их использует, будьте осторожны ..

Спасибо за помощь!

0 голосов
/ 04 марта 2012

Если вы просто пытаетесь прочитать тип данных из монтажной панели, вы, вероятно, захотите использовать либо -canReadItemWithDataConformingToTypes:, либо -canReadObjectForClasses:options:, чтобы просто проверить, доступны ли они.

Если выЕсли вы хотите прочитать сами объекты, вы делаете правильные вызовы, хотя способ их использования может получить более одного представления одного и того же элемента на монтажной панели в случае, если на монтажной панели имеется несколько элементов с обоими текстами.и представления изображений.

Вы также можете проверить наличие [pboardImg count] > 0.Хотя в документации четко указано, что nil будет возвращено, если он не может создать объекты такого типа, вы вряд ли сможете что-либо делать с массивом нулевой длины, и диспетчер Objective C будет закорачивать вызовnil, возвращая 0, что также провалит тест (как вы бы хотели).

...