الكاكاو - مشكلة في هذا الرمز باستخدام NSBundle
سؤال
اقترح أن أستخدم هذا الخط من التعليمات البرمجية لاستدعاء صورة من مجلد الموارد / حزمة المشروع. أرى أيضا أنه يستخدم تماما مثل هذا على العديد من دروس المواقع المختلفة.
NSBundle *mb=[NSBundle mainBundle];
NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"];
NSImage *image=[NSImage initWithContentsOfFile:fp];
ومع ذلك، أتلقى التحذير التالي:
nsimage قد لا يستجيب ل + interwithcontentsoffile +
يوضح وثائق NSIMAGE أن initwithcontentsoffile في الواقع طريقة يجب أن تعمل. ما قد أكون في عداد المفقودين هنا؟
المحلول
أنت في عداد المفقودين +alloc
NSImage* image = [[NSImage alloc] initWithContentsOfFile:fp];
تستطيع ايضا استخذام +imageNamed:
, ، الذي يجلب الصور من حزمة الخاص بك الرئيسية.
NSImage* image = [NSImage imageNamed:@"topImage.png"];
نصائح أخرى
initWithContentsOfFile:
هي طريقة مثيل، ولكنك ترسل تلك الرسالة إلى فئة NSIMAGE. تحتاج إلى إرسالها إلى مثيل - على وجه التحديد، مثيل مخصص حديثا.
هذا هو المكان alloc
يأتي في. إنها طريقة فئة تخصيص مثيل، والتي ترسلها فورا init…
رسالة (كما أظهر دارين).
لا تنس أن تصدر المثيل عند الانتهاء منه. أنا عموما autorelase المثال مباشرة بعد تسريقها؛ بعد ذلك، ستطلق الكاكاو المثال بالنسبة لي في الوقت المناسب. انظر دليل برمجة إدارة الذاكرة للكاكاو للمزيد من المعلومات.