Domanda

C'è un modo per unfilter un NSPasteboard per quello che l'applicazione di origine in particolare ha dichiarato che avrebbe fornire?

Sto tentando di serializzare cartone dati nella mia applicazione.Quando un'altra applicazione posti RTF in un file su un cartone e poi chiedo i tipi disponibili, ho undici diversi sapori di detto RTF, tutto originale RTF normale stringhe dyn.* valori.

Risparmio di fuori di tutti i dati in un plist o raw di dati sul disco, di solito non è un problema in quanto è abbastanza piccolo, ma quando un'immagine di qualsiasi dimensione considerevole è posto sul tavolo di montaggio, l'output risultante può essere decine di volte maggiori rispetto ai dati di origine (con i sapori più del TIFF e PICT dati resi disponibili attraverso il filtro).

Vorrei solo essere in grado di salvare ciò che la app originale reso disponibile, se possibile.


Giovanni, tu sei molto più attento di me, o signore, io lavoro con chi fa programmazione Mac dal momento che i dinosauri vagavano per la terra.Nessuno di noi ha mai notato il testo evidenziato...e non ho un idea perché.A partire troppo il problema, a quanto pare.

E mentre ho accettato la tua risposta la risposta corretta, non risponde esattamente alla mia domanda originale.Quello che stavo cercando era un modo per identificare i sapori che possono diventare altri sapori semplicemente mettendolo sul tavolo di montaggio E per sapere quale di questi tipi sono stati originariamente offerto dal provider.Mentre si cammina i tipi di elenco di ottenere me l'ordine di preferenza per l'applicazione che ha fornito loro, non dirmi che quelli che mi può ignorare come si sarà ricreato quando mi ricarica il cartone più tardi.

Sono giunto alla conclusione che non c'è un "buon" modo di fare questo. [NSPasteboard declaredTypesFromOwner] sarebbe favoloso, ma non esiste.

È stato utile?

Soluzione

-[NSPasteboard types] restituirà tutti i tipi disponibili per i dati negli appunti, ma dovrebbe tornare "nell'ordine in cui sono stati dichiarati."

La documentazione -[NSPasteboard declareTypes:owner:] dice che "i tipi devono essere ordinati in base alle preferenze dell'applicazione di origine."

Implementati correttamente l'area di lavoro proprietario deve, pertanto, dichiarare la più ricca rappresentazione del contenuto (probabilmente il contenuto originale) come il primo tipo;per cui è ragionevole singola rappresentazione dovrebbe essere:

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

Altri suggerimenti

Si può essere in grado di ottenere un certo uso di +[NSPasteboard typesFilterableTo:].Ho in mente un frammento di simile a questo:

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];
}

Non so quanto sia efficace questo sarebbe a scegliere bene i tipi, tuttavia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top