Pregunta

Hay una manera de quitar filtro una NSPasteboard por lo que la aplicación de origen que declaró específicamente que proporcionaría?

Estoy tratando de serializar la mesa de trabajo los datos de mi aplicación.Cuando otro de los lugares de la aplicación de un archivo RTF en una mesa de trabajo y luego pido por los tipos disponibles, tengo once diferentes sabores de dicho RTF, todo, desde el original RTF a las cadenas simples a dyn.* valores.

Ahorro de datos en la que plist o datos en bruto en el disco no suele ser un problema ya que es bastante pequeña, pero cuando una imagen de cualquier tamaño considerable se coloca en la mesa de trabajo, el resultado puede ser decenas de veces mayor que la de la fuente de datos (con varios sabores de TIFF y PICT datos disponibles a través de filtrado).

Me gustaría ser capaz de guardar lo que la aplicación original disponible, si es posible.


Juan, que son mucho más atento que yo, o el caballero de trabajo con las que ha estado haciendo Mac de programación como los dinosaurios vagaban por la tierra.Ninguno de nosotros alguna vez has notado que el texto resaltado...y no tengo ni idea de por qué.De partida demasiado tiempo en el problema, al parecer.

Y mientras yo acepté su respuesta como la respuesta correcta, no es exactamente la respuesta a mi pregunta original.Lo que yo estaba buscando era una forma de identificar los sabores que pueden convertirse en otros sabores simplemente colocándolos en la mesa de trabajo Y para saber cual de estos tipos fueron originalmente ofrecido por el proveedor.Durante el recorrido por la lista de tipos de me el orden de preferencia de la aplicación que se les ofreció, no me diga que puedo ignorar, ya que va a ser divertido cuando me vuelva a llenar la mesa de trabajo más tarde.

He llegado a la conclusión de que no hay una "buena" manera de hacer esto. [NSPasteboard declaredTypesFromOwner] sería fabuloso, pero no existe.

¿Fue útil?

Solución

-[NSPasteboard types] devolverá todos los tipos disponibles para los datos en el portapapeles, pero debe volver a ellos "en el orden en que fueron declarados."

La documentación para -[NSPasteboard declareTypes:owner:] dice que "los tipos deben ser ordenados de acuerdo a la preferencia de la aplicación de origen."

Una implementado adecuadamente el área de trabajo propietario debe, por lo tanto, declarar el más rico de la representación del contenido (probablemente el contenido original) como el primer tipo;así que una razonable sola representación debe ser:

[pb dataForType:[[pb types] objectAtIndex:0]]

Otros consejos

Usted puede ser capaz de obtener un cierto uso de +[NSPasteboard typesFilterableTo:].Estoy imaginando un fragmento de código como este:

NSArray *allTypes = [pb types];
NSAssert([allTypes count] > 0, @"expected at least one type");

// We always require the first declared type, as a starting point.
NSMutableSet *requiredTypes = [NSMutableSet setWithObject:[allTypes objectAtIndex:0]];

for (NSUInteger index = 1; index < [allTypes count]; index++) {
    NSString *aType = [allTypes objectAtIndex:index];
    NSSet *filtersFrom = [NSSet setWithArray:[NSPasteboard typesFilterableTo:aType]];

    // If this type can't be re-created with a filter we already use, add it to the
    // set of required types.
    if (![requiredTypes intersectsSet:filtersFrom])
        [requiredTypes addObject:aType];
}

No estoy seguro de que tan efectivo sería en la recogida de buenos tipos, sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top