2008-09-10 8 views
5

Есть ли способ отфильтровать NSPasteboard для того, что конкретно заявляло приложение-источник?Unfiltering NSPasteboard

Я пытаюсь выполнить сериализацию картонных данных в своем приложении. Когда другое приложение помещает RTF-файл в картотеку, а затем я запрашиваю доступные типы, я получаю одиннадцать разных вариантов упомянутого RTF, от исходного RTF до простых строк до значений dyn. *.

Сохранение всех этих данных в plist или необработанных данных на диске обычно не является проблемой, так как оно довольно мало, но когда изображение на изображении имеет какой-либо значительный размер, полученный результат может быть десятки раз больше, чем исходные данные (с несколькими вариантами TIFF и PICT данные становятся доступными посредством фильтрации).

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


Джон, вы гораздо более наблюдательны, чем я или джентльмена я работаю с тем, кто это делал программирование для Mac, так как динозавры бродили по земле. Ни один из нас никогда не замечал текст, который вы выделили ... и я не знаю, почему. По-видимому, слишком долго возникает проблема.

И хотя я принял ваш ответ как правильный ответ, он точно не отвечает на мой первоначальный вопрос. То, что я искал, - это способ идентифицировать ароматы, которые могут стать другими вкусами, просто разместив их на картоне И, чтобы узнать, какие из этих типов были первоначально предложены поставщиком. Прогуливаясь по списку типов, я получаю предпочтительный порядок для приложения, которое предоставило их, но не скажет, какие из них я могу смело игнорировать, поскольку они будут воссозданы, когда я пополняю картотеку позже.

Я пришел к выводу, что для этого не существует «хорошего» способа. [NSPasteboard declaredTypesFromOwner] было бы невероятно, но его не существует.

ответ

4

-[NSPasteboard types] будет возвращать все доступные типы для данных в буфере обмена, но он должен вернуть их "in the order they were declared."

Документация -[NSPasteboard declareTypes:owner:] говорит, что "the types should be ordered according to the preference of the source application."

Правильно реализован владелец картонный должен, следовательно, объявить богатейшее представление содержимого (возможно, исходного содержимого) в качестве первого типа; поэтому разумное одно представление должно быть:

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

Вы можете быть в состоянии получить некоторую пользу из +[NSPasteboard typesFilterableTo:]. Я изображая отрывок так:

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

Я не уверен, насколько эффективно это было бы при выборе хороших типов, однако.

 Смежные вопросы

  • Нет связанных вопросов^_^