Question

Est-il un moyen de unfilter un NSPasteboard pour ce que la source de demande expressément déclaré qu'il fournirait?

Je suis d'essayer de sérialiser les données de la table de montage dans mon application.Lorsqu'une autre application endroits un fichier RTF sur une table de montage, puis-je demander à l'un des types disponibles, je reçois onze différentes saveurs de dit RTF, de tout, de l'original de la RTF à la plaine de chaînes dyn.* des valeurs.

D'économie de toutes les données dans un fichier plist ou de données brutes sur le disque n'est généralement pas un problème car c'est assez petit, mais quand une image de toute taille considérable est placé sur la table de montage, le résultat peut être des dizaines de fois plus grand que la source de données (avec de multiples saveurs de PICT TIFF et données mises à disposition via le filtrage).

Je voudrais juste être en mesure de sauver ce que l'application d'origine si possible.


John, vous êtes beaucoup plus attentif que moi-même ou le monsieur qui je travaille qui fait la programmation Mac depuis les dinosaures parcouraient la terre.Aucun de nous n'a jamais remarqué le texte que vous avez mis en évidence...et je n'ai pas la moindre idée de pourquoi.Démarrage trop long au problème, apparemment.

Et alors que j'ai accepté votre réponse comme la réponse correcte, il n'est pas exactement la réponse à ma question originale.Ce que je cherchais était un moyen d'identifier les saveurs qui peuvent se transformer en d'autres saveurs simplement en les plaçant sur la table de montage ET pour savoir lequel de ces types ont été initialement proposées par le fournisseur.Tout en marchant, la liste des types de obtenez-moi l'ordre de préférence pour l'application qui les a fournis, il ne sera pas de me dire lesquelles je peux l'ignorer comme ils vont être recréé lorsque je recharge la table de montage plus tard.

Je suis venu à la conclusion qu'il n'y a pas une "bonne" façon de le faire. [NSPasteboard declaredTypesFromOwner] serait fabuleux, mais il n'existe pas.

Était-ce utile?

La solution

-[NSPasteboard types] sera de retour tous les types disponibles pour les données dans le presse-papiers, mais il devrait retourner "dans l'ordre où ils ont été déclarés."

La documentation pour -[NSPasteboard declareTypes:owner:] dit que "les types doivent être ordonnées selon la préférence de l'application source."

Correctement mise en œuvre de la table de montage, le propriétaire doit, par conséquent, de déclarer les plus riches de la représentation du contenu (probablement le contenu original) comme le premier type;donc raisonnable représentation unique devrait être:

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

Autres conseils

Vous pouvez être en mesure d'obtenir une certaine utilisation de +[NSPasteboard typesFilterableTo:].Je imaginant un extrait de code comme ceci:

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

Je ne suis pas sûr de savoir comment efficace, ce serait à choisir les bons types, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top