آيفونآيبودآبل

سلسلة دروس برمجة تطبيقات الآيفون (4)

آيفونآيبودآبل

هذا هو الدرس الرابع من السلسلة ، وإن شاء الله تكون الدروس السابقة واضحة، المواضيع التي سوف ندرسها اليوم كالتالي:

  • إنشاء تطبيق
  • تصميم ” النموذج , العرض , التحكم  (Model, View, Controller) “
  • بناء الواجهة وملف الـ Nib
  • الضوابط والفعل الهدف (Controls and Target-Action)

Line_thumb1

  • تحليل التطبيق (Anatomy of an application) :

يتكون أي تطبيق من عدة ملفات:

    1. – الكود المترجم (Compiled Code) ويتكون من الكود الرئيسي الذي سوف تكتبه و كذلك frameworks.
    2. ملفات Nib وهي التي تحتوي على عناصر UI وعلى Objects أخرى أيضا تحتوي على تفصيلات عن علاقات الـ object.
    3. المصادر (resources) من صور وأصوات وغيرها .
    4. ملف info.plist (application configuration) .
    • حياة التطبيق:

    • UIkit Framework :

الـ UIKit  يقدم العناصر الأساسية للواجهة (interface) ، ويجب عند استخدام هذا الـ framework فهمه بشكل كافي بحيث عند استخدام أكواد مختلفة معه ألا يكون هناك أي تعارض بينه وبينها.

يقوم هذا الـ framework بتشغيل البرنامج أو التطبيق ولكل تطبيق أو برنامج له عنصر واحد من UIapplication :

  1. يقوم بتنظيم دورة حياة التطبيق.
  2. يرسل الأحداث (events).
  3. نادرًا مايستخدم الـ subclassed وإنما يستخدم عوضًا عن ذلك الـ delegation.

    • Delegation :

Delegation هو عندما object يخبر object آخر عن حدث معين  أو بمعنى آخر object  ينفذ مهمة لـ object  آخر. يسمى الـ delegate object بالـ object المساعد. يستفاد من الـ delegation بأنه عندما يكون لدي عدة objects ولهم نفس behavior أو methods فبدل استخدام الـ inheritance  سأنشىء object وأسمح  للبقية بالاستفادة منه. مثال على ذلك :

كما نرى في الصورة هنا لدي 2 objects :

  1. Window object
  2. Our object

كما نلاحظ أن للـ window object دالة إجبارية (mandatory method) ودالتين اختياريتين (optional methods). عندما يريد our object أن يكون delegate من الـ window object فهنا مايهمنا في هذه الحالة بالنسبة لـ Our object هو الدالة الإجبارية فلابد من تنفيذها. فعندما ينادي window object الدالة windowShouldClose فعلى الـ our object اتخاذ قرار والرد إما بإيجاب أو نفي وهنا رد بالإيجاب بـ (yes).

للاستزادة في الشرح زيارة الرابط التالي:

http://mistytreks.com/?p=378

وهذا رابط آخر يوضح المبدأ كما لو استخدمناه في لغات ثانية سواء java  أو C++ :

http://en.wikipedia.org/wiki/Delegation_pattern

    • ملف info.plist :

هو في الغالب يكون عبارة عن ملف XML ويقوم هذا الملف بوصف الـ application من عدة نواحي:

  1. شكل الأيقونات (icon appearance)
  2. طراز status bar على هو على الشكل التلقائي أو أسود أو يكون مخفي
  3. توجهات التطبيق
  4. استخدام الـ wifi
  5. متطلبات النظام (system requirements)

يمكن التعديل على هذا الملف من خلال فتح ملف XML مباشرة أو من قائمة:

Project->edit active target “foo” menu item -> properties tab

    • Model, View, Controller (MVC) :

هو أسلوب أو نموذج تصميمي أعتمد في عدة لغات وفي لغة الـ cocoa أيضاً  :

كل من model, view, controller ملفات مفصولة فالـ view هو مانراه على الشاشة والـ model هو مخزن للمعلومات والـ controller هو الذي يقوم بالربط مابين الـ view والـ model.

فالـ model يقوم بإدراة بيانات التطبيق وحالته وعند تغير طريقة العرض ليس بالشرط أن يتغير الـ Model بل يبقى ثابتا إذا كان لنفس البرنامج.

الـ view  يقوم بعرض البيانات الموجودة في model بواجهة مناسبة للمستخدم ويسمح للمستخدم بالتعديل على البيانات لكن لا يتحفظ فيها.

الـ controller هو الواسطة مابين الـ view والـ model يقوم بتجديد الـ view عندما تتغير الـ data بالـ Model والعكس صحيح عندما يقوم المستخدم بتعديل بيانات على view فإنها تتغير في model عن طريق الـ controller .

    • بناء الواجهة (interface builder) والـ Nibs :

الـ Interface builder   هو الواجهة المرئية التي يمكن من خلالها بناء الـ Interface وملفات الـ Nib هي من تقوم بعرض هذه الواجهة.

هذه هي أيقونة ملف الـ Nib ونلاحظ هنا سميت بـ Xib لارتباطها بملف XML

ملفات الـ Nib هي من تقوم بتصميم الـ V في MVC فهي من تقوم بوضع عناصر الواجهة وأيضا يمكن إضافة controller objects لها كما فعلنا في الدرس الأول عندما أضفنا controller object والربط مابينه وبين عناصر الـ UI كما فعلنا بالوصل مابين العنصر والـ controller object بالسهم.

في لحظة تحميل ملف الـ Nib يتم استعادة جميع الـ Objects من الأرشيف وجميع القيم يتم استعادتها أيضًا. يتم التأكد من أن جميع الـ outlets  والـ actions تم الربط بينها وبين العناصر.

بعد تحميل ملف الـ Nib قد يكون هناك تنفيذ لأمور أخرى منطقية كإظهار الحالة المبدئية وغيرها وأيضا للتأكد من أن جميع الأشياء تم استعادتها من ملفات الـ Nib للواجهة وأن جميع الاتصالات قد عملت يجب مناداة الدالة –awakeFromNib

-(void)awakeFromNib {

//do customization أو التخصيص

}

    • الضوابط والفعل الهدف (Controls and Target-Action) :

هذا المفهوم استخدمناه في الدرس الأول وهو الذي أعلمنا بوجود تغير في قيمة الـ slider عندما كنا نحرك فيه. فالـ control يقوم بالاستجابة لعدة أحداث منها:

  1. حدث اللمس سواء اللمس لأعلى أو أسفل أو عند السحب
  2. عند تغيير القيمة
  3. عند تعديل الحدث سواء بداية أو نهاية أو تغيير.

وعند حدوث حدث event فسيكون هناك ردة فعل لهذا الـ event باستدعاء action  للـ Object الهدف مثال ذلك:

كما نلاحظ أن هناك زر يقوم بعمل Decrease فالهدف هنا أو ال target هو الـ Object الذي أمامي أن أعمل له نقصان والنقص هنا هو الـ action الحدث الذي حصل هو أن المستخدم سوف يضغط على الزر ونسمي ذلك بـ TouchUpInside. فهنا بضغط الزر سنذهب إلى الهدف ونعمل له نقصان بقيمة معينة.

لدينا عدة أنواع للـ Action:

– إما أن تكون بسيطة فقط أنادي الـ Action  من دون إرسال أي شيء كما في المثال:

-(void)increase {

هنا الـ increase هو الـ action ولم نرسل معه شيء //

}

– أن أرسل مع الـ action أي object أو شيء آخر ويسمى هذا الـ object أو المرسل مع الـ action بـ argument وهذا مثال:

– (void)adjustNumberOfSides:(id)sender

{

هنا أرسلت الـ sender object وذلك حتى أستفيد من معلومات معينة في هذا الـ Object //

}

– قد أرسل مع الـ action اثنين من الـ arguments الـ object والثاني  الـ event  مثال ذلك:

-(void)adjustNumberOfSides:(id)sender withEvent:(UIEvent *)event{

هنا أرسلت الـ sender object مع الـ UIEvent event //

}

كما قلنا هنا أن لدينا ثلاثة أشياء action ,target, event قد تكون هذه الأمور متعددة فيمكن أن يكون لدي event ومن هذا الـ event يكون هناك عدة actions لعدة targets وقد يكون لدي events متعددة أيضًا.

دمتم بود 🙂

الوسوم

10 آراء على “سلسلة دروس برمجة تطبيقات الآيفون (4)”

  1. الله يعطيج العافيه ……

    بس عندي استفسار لو سمحتي

    وش البرامج الي احتاجها لآنشاء لعبه هل هي فقط من ادوبي

    ولا اقدر اعمل على المايا …… آو اذا كان فيه برامج ثانيه ياليت تفيديني

    شكرااا

    1. والله بالنسبة للألعاب ماعندي خبره فيها لكن هي بأي لغة برمجة تسوى مالها دخل بالمايا أو الأدوبي لكن المايا والأدوبي نستخدمهم في رسم الشخصيات الموجودة في اللعبة والخلفيات لكن بالنسبة للعبة نفسها والتحريك تبرمجة بالـ objective-c إن شاء الله أكون أفدتك 🙂

  2. الله يعطيك العافية يا استاذه روان

    أنا من المتابعين لك وأتمنى الاستمرار

  3. السلام عليكم
    شكرا علي الدروس الرائعة
    أنا عندي استفسار بخصوص ال Developer Account
    لو الحساب الخاص بي أمريكي و معرفه بدون Credit card علي آبل و قمت بعمل برنامج هل أقدر أنزلة علي الستور الأمريكي علما بأن ال Credit Card الخاص بي ليس أمريكي و إيه الفرق بين حساب الأشخاص و الشركات
    ياريت لو حد يفيدني في الموضوع دا و جزاكم الله خيرا

  4. جُزيتي خيراً روان على هذه الدروس 🙂

    كنت فقط أريد أن أسألكِ ، هل هنالك طريقة أتواصل بها معكِ ، أرسلي لي بريدك الإلكتروني لو أحببتِ عبر خانة الرسائل في المدونـة

    سأكون ممتنة لكِ ،،

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *