NSPasteboard не возвращает правильный тип данных

Я пытаюсь прочитать тип данных, найденных на картоне. Однако программа возвращает, что у меня есть изображение (вероятно, потому что это первое условие в статте 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!
}

person Kevin    schedule 01.03.2012    source источник
comment
Сколько записей в массиве?   -  person Stephen Darlington    schedule 01.03.2012
comment
Разве это не потому, что pboardImg не равен нулю   -  person Michael Smith    schedule 01.03.2012


Ответы (2)


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

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

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

person gaige    schedule 03.03.2012
comment
Я нашел решение этой проблемы, и, как сказал Гейдж, возвращаемые данные содержат не только контент, который может видеть пользователь, но и много другой информации. - person Kevin; 07.03.2012

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

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

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

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

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

person Kevin    schedule 07.03.2012