NSPasteboard não retornar o tipo de dados correto
-
14-11-2019 - |
Pergunta
Eu estou tentando ler o tipo de dados encontrados no quadro de colagem.No entanto, o programa é o retorno que eu tenho uma imagem (provavelmente porque é a primeira condição de se stattment).O que estou fazendo de errado?Esta é a parte do código que eu refiro.Obrigado.
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!
}
Solução
Se você está apenas tentando ler o tipo de dados de um quadro de colagem, você provavelmente vai querer usar -canReadItemWithDataConformingToTypes:
ou -canReadObjectForClasses:options:
a fim de testar apenas se estes estão disponíveis.
Se você quiser ler os objetos em si, você está fazendo as chamadas de direita, embora a maneira que você está usando pode obter mais do que uma representação do mesmo item no pasteboard no evento que existem vários itens sobre o quadro de colagem com texto e representações de imagem.
Você também pode querer verificar para [pboardImg count] > 0
.Embora a documentação indica claramente que, nulo será retornado se não pode criar objetos do tipo, você dificilmente será capaz de fazer qualquer coisa com uma matriz de comprimento zero de qualquer maneira e o objective-C telefonista de curto-circuito a chamada para nil
retornar 0, o que também vai falhar o teste (como seria de desejar).
Outras dicas
Eu encontrei uma solução para isso e como gaige disse, os dados retornados, não contém apenas o conteúdo que um usuário pode ver, mas muitos outros tipos de informações.
Eu também descobriram e experimentaram a utilização de outros tipos de informações disponíveis, alguns dos quais são os seguintes:
*NSStringPboardType;
*NSFilenamesPboardType;
*NSTIFFPboardType;
*NSRTFPboardType;
...
No entanto, o Xcode versão que eu estou usando afirma que alguns destes poderão ser removido em futuras versões (estou usando o xcode 3) então, se alguém usa estes ser cuidado..
Obrigado pela ajuda!