سؤال

هل هناك طريقة unfilter وهو NSPasteboard لما التطبيق المصدر تحديدا أعلنت أنها سوف تقدمها ؟

أنا محاولة إجراء تسلسل كرتون البيانات في التطبيق الخاص بي.عند تطبيق آخر يضع ملف RTF على الكرتون ثم أطلب الأنواع المتاحة ، أحصل على عشر نكهات مختلفة من قال RTF, كل شيء من الأصل RTF عادي سلاسل dyn.* القيم.

توفير إيقاف جميع تلك البيانات إلى plist أو الخام البيانات على القرص ليست عادة مشكلة كما انها صغيرة جدا, ولكن عندما صورة من أي حجم كبير يوضع على ورق مقوى ، إخراج الناتج يمكن أن يكون عشرات المرات أكبر من البيانات المصدر (مع نكهات متعددة من TIFF و PICT البيانات المتاحة عبر تصفية).

أود أن تكون قادرة على انقاذ ما الأصلية التطبيق متاحا إذا كان ذلك ممكنا.


جون أنت الآن ملاحظ أكثر من نفسي أو الرجل أنا أعمل مع من يفعل ماك البرمجة منذ الديناصورات تجوب الأرض.لا أحد منا من أي وقت مضى لاحظت النص الذي سلط الضوء...و ليس لدي فكرة لماذا.ابتداء من فترة طويلة جدا في المشكلة ، على ما يبدو.

وبينما قبلت الإجابة لأن الإجابة الصحيحة ليس هو الإجابة على سؤالي.ما كنت تبحث عن طريقة تحديد النكهات التي يمكن أن تصبح النكهات الأخرى ببساطة عن طريق وضعها في الكرتون و لمعرفة أي من هذه الأنواع أصلا عرضت من قبل الموفر.في حين أن المشي أنواع القائمة سوف يحصل لي المفضل أجل تطبيق التي قدمت لهم ، لن أقول لي تلك التي لا يمكن بشكل آمن تجاهل كما أنها سوف تكون صوغه عندما عبوة الكرتون في وقت لاحق.

لقد جئت إلى استنتاج مفاده أن ليس هناك "جيدة" طريقة للقيام بذلك. [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