문제

소스 애플리케이션이 제공할 것이라고 구체적으로 선언한 것에 대해 NSPasteboard를 필터링 해제하는 방법이 있습니까?

내 애플리케이션에서 페이스트보드 데이터를 직렬화하려고 합니다.다른 응용 프로그램이 페이스트보드에 RTF 파일을 배치한 다음 사용 가능한 유형을 요청하면 원본 RTF부터 일반 문자열, dyn.* 값까지 모든 RTF의 11가지 다른 버전이 표시됩니다.

모든 데이터를 디스크의 plist 또는 원시 데이터에 저장하는 것은 크기가 매우 작기 때문에 일반적으로 문제가 되지 않습니다. 그러나 상당한 크기의 이미지가 대지에 배치되면 결과 출력이 소스보다 수십 배 더 커질 수 있습니다. 데이터(필터링을 통해 다양한 유형의 TIFF 및 PICT 데이터를 사용할 수 있음)

가능하다면 원래 앱에서 제공한 내용을 저장하고 싶습니다.


존, 당신은 저나 공룡이 지구를 돌아다닐 때부터 Mac 프로그래밍을 해온 나와 함께 일하는 신사보다 훨씬 더 관찰력이 좋습니다.우리 중 누구도 당신이 강조한 텍스트를 눈치채지 못했습니다...왜 그런지 전혀 모르겠습니다.문제를 너무 오래 시작한 것 같습니다.

귀하의 답변을 정답으로 수락했지만 원래 질문에 정확히 답변하지는 않습니다.제가 찾던 것은 그냥 판지 위에 올려놓는 것만으로 다른 맛이 될 수 있는 맛을 식별하는 방법이었습니다. 그리고 이러한 유형 중 어떤 유형이 공급자가 원래 제공했는지 확인합니다.유형 목록을 살펴보면 해당 유형을 제공한 애플리케이션에 대한 기본 순서가 표시되지만 나중에 페이스트보드를 다시 채울 때 다시 생성되므로 안전하게 무시할 수 있는 유형은 알려주지 않습니다.

나는 이 작업을 수행하는 "좋은" 방법이 없다는 결론에 도달했습니다. [NSPasteboard declaredTypesFromOwner] 정말 환상적이겠지만 존재하지 않습니다.

도움이 되었습니까?

해결책

-[NSPasteboard types] 클립보드의 데이터에 대해 사용 가능한 모든 유형을 반환하지만 이를 반환해야 합니다. "선언된 순서대로요."

에 대한 문서 -[NSPasteboard declareTypes:owner:] 말한다 "소스 애플리케이션의 선호도에 따라 유형을 주문해야 합니다."

따라서 적절하게 구현된 페이스트보드 소유자는 콘텐츠(아마도 원본 콘텐츠)의 가장 풍부한 표현을 첫 번째 유형으로 선언해야 합니다.따라서 합리적인 단일 표현은 다음과 같아야 합니다.

[pb dataForType:[[pb types] objectAtIndex: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];
}

그러나 이것이 좋은 유형을 선택하는 데 얼마나 효과적인지 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top