لن يتم تحميل صورة البيانات الأساسية إلى خلية صورة nstableview

StackOverflow https://stackoverflow.com/questions/2862330

سؤال

في الكود الخاص بي ، أقوم بتخزين صورة في نموذج البيانات الأساسية الخاصة بي (يعمل بشكل جيد). إذا قمت بإعداد عرضي للحصول على nsimageview وربط بياناته إلى مفتاح التحكم: التحديد و modelkeypath: myimagepath ، فهو يعمل. سيظهر كل صورة للصف المحدد.

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

بما أنني متأكد من تخزين الصورة بشكل صحيح ، ما الخطأ الذي أفعله في ملزمة لمنع الصورة من الظهور في خلية الجدول؟

ًشكراً جزيلا.

(خلفيتي: مطور الكاكاو الجديد الذي مر مؤخرًا بكتاب Hillegass بأكمله.)

هل كانت مفيدة؟

المحلول

لست متأكدًا مما يحدث للتسبب في مشكلتك ولكن هناك طريقة سهلة لمعرفة ذلك. ربط nsvaluetransformer إلى الربط. ثم في هذا المحول ، يمكنك تسجيل الأشياء لمعرفة ما إذا كنت تمرر قيمة لا شيء ، أو يمكنك تحويل قيمة البيانات الخاصة بك إلى nsimage وتمرير ذلك مرة أخرى ... يمكنك أن تفعل ما تريد في فئة المحولات بشكل أساسي. إليك واحدة أستخدمها على بيانات الصورة في نموذج البيانات الأساسية.

@interface DataToImageTransformer : NSValueTransformer {

}

@end


@implementation DataToImageTransformer

+ (Class)transformedValueClass {
    return [NSImage class];
} // the class of the return value from transformedValue:

+ (BOOL)allowsReverseTransformation {
    return YES;
} // if YES then must also have reverseTransformedValue:

- (id)transformedValue:(id)value {
    if (value == nil || [value length] < 1) return nil;
    NSImage* i = nil;
    if ([value isKindOfClass:[NSData class]]) {
        i = [NSKeyedUnarchiver unarchiveObjectWithData:value];
    }
    return i;
}

- (id)reverseTransformedValue:(id)value {
    if (value == nil) return nil;
    NSData* d = nil;
    if ([value isKindOfClass:[NSImage class]]) {
        d = [NSKeyedArchiver archivedDataWithRootObject:value];
    }
    return d;
}

@end

في فئة AppController ، تقوم بتهيئة المحول:

+ (void)initialize {
    DataToImageTransformer *transformer = [[DataToImageTransformer alloc] init];
    [NSValueTransformer setValueTransformer:transformer forName:@"DataToImageTransformer"];
    [transformer release];
}

ثم في Builder Interface ، تضع "datatoimagetransformer" في الربط. الآن يمكنك التحكم في الربط ويمكنك القيام به كما أوضحت سابقًا في فئة المحولات. لاحظ أنني أستخدم nskeyedarchiver لتحويل nsimage إلى البيانات والعودة مرة أخرى ولكن يمكنك استخدام tiffrepresentation أو أي طريقة أخرى تريدها في مكانها.

نصائح أخرى

إذا كان أي شخص يواجه مشكلات مع التقنية المقترحة مع Xcode 6. قمت بإنشاء مشروع سريع ، باستخدام التطبيق المستند إلى المستند. مع التحكم في ImageWell (nsimageView) ، تعمل الروابط مباشرة دون قيمة الحاجة إلى محول. على الرغم من ذلك ، وضعك التفاصيل ملزمة لربط البيانات للعرض نفسه ، وليس على Objet ImageCell تحتها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top