سؤال

لدي NSPOPPUPBUTTON التي ترتبط قيم المحتوى الخاصة ب nsarray من NSNUMBERS. يعرض NSPOPPUPBUTTON بشكل صحيح صفيف الأرقام في القائمة المنبثقة منه. ومع ذلك، عندما أقوم بتغيير القيمة المحددة، أتلقى رسالة:

HIToolbox: ignoring exception 'Unacceptable type of value for attribute: property = "tempo"; desired type = NSNumber; given type = NSCFString; value = 106.' that raised inside Carbon event dispatch

من الواضح أن هذا يحدث لأن الكائن الذي يجب أن تكون القيمة المحددة تتوقع أن تتوقع NSNumber، ويعطيه NSPOPOPPUTTON NSSTRING. بالنظر إلى مشاركات أخرى، أعتقد أن ما أحتاج إليه هو NSNumberFormatter.

ومع ذلك، لقد حاولت استخدام NSNumberFormatter، سواء من خلال باني واجهة، وبمبرماني، ولكن النتيجة لا تتغير. للرجوع إليها، هذا هو التعليمات البرمجية التي استخدمتها عند محاولة تعيين تكثيف NSPOPUPPUTTON برمجيا:

tempoFormatter = [[NSNumberFormatter alloc] init];
[tempoFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[tempoFormatter setFormat:@"### bpm"];

[[tempoButton cell] setFormatter:tempoFormatter];

(Tempobutton هو iboutlet متصل ب NSPOPPUPUTTON)

أنا أتساءل ما إذا كان استخدام NSNumberFormatter هو حتى ما أحتاج إليه؟ إذا كان الأمر كذلك، ماذا أفعل الخطأ؟ لقد قرأت من خلال دليل برمجة تنسيق البيانات؛ يبدو الأمر مستقيما للغاية، لكنني أشعر أنني أفتقد شيئا ما.

شكرا مقدما.

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

المحلول

ذلك يعتمد على الملزم الذي تستخدمه للحصول على القيمة المحددة NSPOPPUPBUTTON.

إذا كنت تربط "القيمة المحددة"، فستحصل على nsstring.

إذا كنت تربط "كائن محدد"، فستحصل على الكائن الذي يمثله التحديد، والذي سيكون في قضيتك NSNumber.

خلاف ذلك، ستضيف NSValuetransformer إلى ربطك بتحويل القيمة المحددة إلى الكائن الذي تتوقعه.

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