سؤال

في AppDelegate، أقوم بتخصيص مثيل محدد في مكتبة ثابتة.يحتوي هذا المثيل على خاصية NSString لتعيين "نسخة".عندما أقوم بالوصول إلى خاصية السلسلة في هذا المثيل، يتعطل التطبيق بسبب "تم إرسال محدد غير معروف إلى المثيل".يوفر Xcode تلميحًا برمجيًا للخاصية، مما يعني أنها معروفة في تطبيق الاتصال.يتم تجميع فئة معينة في هدف المكتبة الثابتة.ماذا ينقصني؟

إضافة بعض التعليمات البرمجية.

//static library 
//ClassA.h
@interface ClassA : NSObject {
...
NSString *downloadUrl;
}
@property(nonatomic, copy) NSString *downloadUrl;

//ClassA.m
@synthesize downloadUrl;

في appDelegate الخاص بتطبيق الاتصال.

//app delegate header file
@interface myApp : NSObject <UIApplicationDelegate> {
ClassA *classA;
}
@property (nonatomic, retain) ClassA *classA;

//app delegate .m file
@synthesize classA;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
classA = [[ClassA alloc] init];
//exception occurs here.  downloadUrl is of type NSCFNumber
classA.downloadUrl = @"http://www.abc.com/";
...}

ستحصل الفئات الأخرى في التطبيق على إشارة إلى المفوض وتتصل بـ classA.downloadUrl.

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

المحلول

1) هو توليف داخل كتلة @implementation؟

2) يجب أن أشير إلى self.classA = [[ClassA alloc] init]; وself.classA.downloadUrl = @"..." بدلا من classA سهل؟

و3) في ملف myApp.m الخاص بك تحتاج إلى استيراد ClassA.h، عندما يكون عداد المفقودين سوف الافتراضي إلى رقم أو مؤشر؟ (في المتغيرات C الافتراضي لكثافة العمليات إذا لم يتم العثور من قبل المترجم):

و#import "ClassA.h".

نصائح أخرى

تعيين العلم -ObjC في علامة رابط أخرى في إعداد المشروع الخاص بك...(ليس في مشروع المكتبة الثابتة ولكن المشروع الذي تستخدمه مكتبة ثابتة...) وتأكد من تعيين التكوين في إعداد المشروع على كل التكوين

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

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

في الشفرة التي نشرت، كنت ترسل واضع setDownloadURL: إلى ClassA - وهذا هو، <م> الفئة نفسها . تريد تعيين الخاصية مثيل.

وكيف حالك المستوردة ClassA إلى الدرجة AppDelegate الخاصة بك؟ هل تضمين ملف .H في المشروع الرئيسي؟ كان لي هذه المشكلة لفترة من الوقت، لأنني لا نسخ ملف رأس في المشروع الرئيسي وكذلك تتضمن # طبيعية "ClassA.h".

ونسخ، أو خلق. ح حل بالنسبة لي.

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

والأعمال المتعلقة بالألغام كان شيء بسيط / غبي. خطأ مبتدئ، لأحد أن حولت NSManagedObject بهم إلى NSObject العادية.

وكان لي:

@dynamic order_id;

وعندما كان ينبغي أن يكون:

@synthesize order_id;

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

غطت

ومات غالاغر قضية غلوبالس كذلك في الكاكاو له مع المادة الحب في <لأ href = "http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html" يختلط = " noreferrer نوفولو "> http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html . في كل يكيليهود، يجب أن يكون لديك ClassA عن المفردة بدلا من عالمي في AppDelegate، على الرغم من الممكن أنك ClassA لها عازمة على أن تكون أكثر أغراض العامة وليس مجرد المفرد. في هذه الحالة، وكنت ربما يكون أفضل حالا مع أي أسلوب فئة للعودة مثيل تكوين مسبقا من الفئة (أ)، شيئا مثل:

+ (ClassA*) applicationClassA
{
    static ClassA* appClassA = nil;
    if ( !appClassA ) {
        appClassA = [[ClassA alloc] init];
        appClassA.downloadURL = @"http://www.abc.com/";
    }
    return appClassA;
}

وأو بدلا من ذلك (لأن ذلك من شأنه إضافة تطبيق أشياء محددة إلى ما هو ربما فئة أغراض العامة)، إنشاء فئة جديدة الذي يهدف إلى احتواء هذه الطريقة الطبقة غرض وحيد.

والنقطة المهمة هي أن غلوبالس التطبيق لا تحتاج إلى أن تكون جزءا من AppDelegate. فقط لأن AppDelegate هو المفرد معروف، لا يعني كل التطبيقات الأخرى العالمي ينبغي أن تكون مختلطة في معها حتى لو كانوا لا يملكون شيئا من الناحية النظرية لا علاقة لها التعامل مع الطرق مندوب NSApplication.

وغريب جدا، ولكن. لديك ليعلن الطبقة على سبيل المثال طلبك في myApplication: UIApplication بدلا من myApplication: NSObject. ويبدو أن البروتوكول UIApplicationDelegate لا يقوم رسالة + registerForSystemEvents. واجهات برمجة التطبيقات مجنون أبل، مرة أخرى.

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