[Powered by Google Translate] [ندوة] [دائرة الرقابة الداخلية: كتابة تطبيقات مثل بوس] [تومي MacWilliam] [جامعة هارفارد] [هذا CS50.] [CS50.TV] كل الحق، والجميع، مرحبا بكم في دائرة الرقابة الداخلية: كتابة تطبيقات مثل بوس. هذه الندوة سوف تركز على الكتابة تطبيقات لفون وبدوره كتابة تطبيقات لتطلب الشركة، وهكذا نحن في طريقنا أساسا على المشي من خلال بضعة أمثلة مختلفة لكيفية جعل التطبيق، لعبة بسيطة مثل التشنج اللاإرادي تاك تو، أو إذا كنت أكثر اهتماما في صنع التطبيق مثل بعض النوع من قراءة الأخبار أو شيء من هذا يتفاعل مع شبكة الإنترنت وسوف نتحدث عن ذلك أيضا. وهنا جدول أعمالنا وجيزة. تمت كتابة تطبيقات IOS بلغة تسمى الهدف-C، وهكذا هذا هو قليلا مماثلة لC ولكن ليس حقا مطلقا، لذلك سنتحدث قليلا عن اللغة نفسها ثم كيف لبناء تطبيقات آي فون باستخدام هذا البرنامج التطبيق دعا كسكودي، إذا كان لديك والتي لم يتم تنزيلها حتى الآن لا تتردد في بدء التحميل الآن. انها عدة غيغابايت. وينبغي أن تكون حرة في المتجر، لذلك عليك أن يكون لديك جهاز ماكنتوش تشغيل مثالي أحدث إصدار من نظام التشغيل العاشر إذا كنت لا، لا مشكلة. لدينا أجهزة ماكينتوش في مركز العلوم متوفرة للاستخدام الخاص مع كسكودي المثبتة، ولذا لا تتردد في استخدام هذه من أجل التنمية. إذا كنت تريد أن تجعل التطبيق ولكن لم يكن لديك جهاز ماكنتوش، لا تقلق. هناك الكثير من الموارد لهذا الحرم الجامعي. وحتى ذلك الحين ونحن في طريقنا لتغطية أكبر الأمثلة على 2 تطبيقات المختلفة التي يمكن أن تقدمها. الهدف-C من الناحية التقنية ما يسمى مجموعة من السوبر C. وهذا يعني أن أي رمز C هو أيضا صالح الهدف-C التعليمات البرمجية. وهذا يعني أننا نوع من القناة سجلت على بعض الميزات الإضافية لC. بعض من هذه الميزات تشمل عدم وجود لكتابة أي وقت مضى مرة أخرى malloc، والحمد لله، لا وجود للقلق بشأن هذه المؤشرات غبي واطلاق سراحهم وجميع الاشياء التي يكره لكم عن C، وانها نوع من ذهب في C-الهدف. الآن، الهدف-C ويحتوي أيضا على مكتبة القياسية أكبر من ذلك بكثير، ولذلك لا يوجد وظائف أكثر بكثير لتحصل على الهدف داخل خالية من-C. تذكر عندما كنا PHP الكتابة لاحظنا أن ذهبنا من هذا أصغر اللغة إلى مكتبة عملاقة من كل هذه الأشياء التي يمكنك القيام به مجنون. نفس الشيء يحدث في دائرة الرقابة الداخلية. هناك أشياء لأشياء مثل التقويم البوذي، وحقا أي شيء ربما يمكنك أن تفكر من يحتمل وجودها بالفعل في تنفيذ الهدف-C ل. الجزء الهدف من الهدف-C يتم الرجوع شيء دعا البرمجة الشيئية. هذا هو نوع من مفهوم جديد، ولكن تعلمنا في الواقع معظمها الكثير من هذه المفاهيم بالفعل. الفكرة الكامنة وراء وجوه المنحى البرمجة هو أن كنت تريد الذهاب لهيكلة ودعا الكثير من التعليمات البرمجية للتغلب على هذه الأشياء الطبقات، ويتم تمجيد حقا هذه الفئات البنيات. من داخل البنية قلنا في الأساس هنا هو شيء، ويمكن أن يكون هذا الشيء عضوا. على سبيل المثال، يمكن عقدة في قائمة المرتبط أشياء أخرى مثل قيمة، مؤشر إلى عقدة التالي في القائمة، ومعا هذا المؤشر والقيمة التي تتألف هذه الحالة واحدة من البنية. الطبقات متشابهة جدا باستثناء يمكن أيضا فئات الوظائف داخل منهم. عندما كنا أعلنت البنية، فإننا لا يمكن إلا أن أقول ن الباحث أو عقدة * المقبل. الآن مع الهدف C-نستطيع فعلا وضع الوظائف داخل تلك الأشياء. وشيء آخر أن الطبقات يمكن القيام به هو أنها يمكن أن ترث البيانات من الطبقات الأخرى. على سبيل المثال، سنقوم أن ننظر في مجموعة من المدمج في الهدف جيم الطبقات. يمكن أن يكون واحد منهم الفئة التي تمثل العرض للحصول على الشاشة، وذلك بقوله أريد أن تنفيذ رأيي الشخصي نقول أساسا شخص في أكثر من أبل، والناس ربما لطيف، كتب هذه الفئة بالنسبة لي، وكان يعالج اشياء مثل عرض أزرار أو جعل الشاشة، وسنكون حقا يتألمون لتنفيذ كل ما وظيفة أنفسنا، وذلك ببساطة عن طريق وراثة البيانات يمكننا أن نقول كل ما قمت به في تلك الفئة وأريد أيضا داخل صفي، ومن ثم أنا ذاهب إلى القيام ببعض الأشياء الأخرى، وهي تنفيذ التطبيق. هذا ما يعني أن كلمة الميراث. سنرى مثال أكثر واقعية. وأخيرا، والمفتاح مع البرمجة الشيئية هو أن أنه يؤدي إلى تغليف البيانات. في بعض مشكلتنا مجموعات يمكن أن لدينا هذه الكبيرة، والمتغيرات العالمية وغلوبالس في كل مكان، وهذه هي الطريقة التي كنا تتبع الدولة. مع الطبقات يمكننا أن نبدأ التغليف المعلومات داخل كائن. اذا كان لدينا شاشة واحدة على التطبيق لدينا، ونحن لسنا في حاجة حقا أن يكون أي من البيانات شاشة أخرى في داخل التطبيق لدينا من ذلك، وذلك عن طريق التغليف الأمور داخل صفوف هذا يؤدي في الواقع لتصميم رمز أفضل بكثير، وهذا ممكن مع بعض من ميزات إضافية من C-الهدف. إنذار مسبق، بناء الجملة من أجل الهدف-C هو الموز. هو مثل أي شيء رأيناه من قبل، ولذلك فمن قليلا من التعود منحنى التعلم ل ما هيك يعني هذا؟ ولكن بمجرد الحصول على الماضي أن منحنى التعلم الأولي انها حقا، على نحو سلس حقا للبدء في كتابة التطبيقات. إعلان فئة، يجب قوله هنا هو صفي، كان موجودا، وربما هنا بعض الأشياء التي أنا ذاهب إلى تحديد وقت لاحق، انا ذاهب الى القول اجهة @. انا ذاهب الى القول اجهة @. أنا ذاهب لإعطاء صفي اسما. ثم في وقت لاحق في مكان آخر انا ذاهب الى القول @ الغاية، وبين في كل شيء واجهة @ @ وحتى نهاية ستكون صفي. أن سيكون ما هو داخل ملفاتنا ح. تماما كما في C لدينا. ملفات ح وقال في الأساس هنا هي بعض الأشياء التي من شأنها أن توجد. أنا لا أقول بالضرورة لك ما يفعلونه بعد، لكن المترجم يحتاج إلى معرفة أن وجدت. في وقت لاحق من داخل م. لدينا الملفات، لأن الهدف متر لل-C وأين نحن ذاهبون في الواقع لتحديد ما تفعل هذه الفئات. مثل الكثير من ملفاتنا ج.، قدمنا ​​تنفيذا لوظائفها. داخل الملف. م لدينا ونحن في طريقنا إلى هنا هو ما يقول كل من وظائف داخل بلدي الطبقة ما يفعلونه جميع. وأخيرا، من داخل البنية يمكن أن نقول داخل تلك الأقواس المتعرجة الباحث، ن أو عقدة المقبلة * والهدف في C-ونحن في طريقنا إلى استخدام الكلمة @ الممتلكات، وهذا هو ما يحدث لتحديد الخصائص، أو وظائف غير التي هي جزء من دروسي. استدعاء دالات في الهدف C هو أيضا الموز. عندما أعلنا في وظائف C قلنا شيء من هذا القبيل فو الباحث وأعطى مفتوحة PAREN وبعد ذلك قائمة من الحجج. هذا ما يعلن أساليب أو وظائف تبدو في C-الهدف. إذا كنت تريد أن تعلن وظيفة أو أسلوب حيث أنا أقول الأسلوب هو في الحقيقة مجرد وظيفة هذا العضو في فئة، ذلك النوع من تبادل، ولكن ليس حقا، حتى داخل بلدي أريد طريقة لخلق طريقة جديدة. انها تسير في العودة شيئا، لذلك سيكون من نوع الفراغ. هذا هو نوع من العودة مهامي. الآن لدينا parens هنا ل-I لا أعرف. القادم سيكون اسم مهامي، ثم أخيرا لدينا فاصلة منقوطة تماما مثل كان لدينا في C. ما الجديد هنا هو هذا الرجل هنا. هذا اصلة من الضروري في الواقع، وهذا هو ما يقول ان يجب استدعاء هذا الأسلوب هنا على مثيل فئة. بعد أن أعلن لدينا البنيات قلنا ربما شيء من هذا القبيل ن البنية عقدة، والتي خلقت الواقع أو مثيل واحد من هذه البنيات كي أتمكن من بدء العمل فعليا مع ما هو داخل منه، لذلك هذا يعني أن اندفاعة لدينا إنشاء مثيل فئة فقط وكأننا مثيل أن البنية قبل أن نتمكن من استدعاء هذا الأسلوب على ذلك. إذا كنت ترغب في البدء في إضافة الحجج إلى أساليبي فإنه يحصل الموز أكثر من ذلك. وهنا اسمي الأسلوب. ثم انا ذاهب الى لديها القولون، القولون وبعد هذا تقول هنا يأتي بعض الحجج. هذا الأسلوب يأخذ وسيطة واحدة. نوع حجتها هو الباحث، واسم هذه الحجة أو ما يسمى المتغير الذي أنا ذاهب لبدء استخدام داخل الأسلوب الأول. مرة أخرى، وهذا هو الأسلوب. فإنه يأخذ وسيطة واحدة. إذا كنت ترغب في البدء في إضافة مزيد من الحجج يحصل أكثر الموز في أن لدينا هذه القولون الذي يقول هنا يأتي قائمتي من الحجج. هذه الحجة الأولى هي عدد صحيح. الآن، هذه الحجة الثانية هي مثيرة للاهتمام. المتغير الذي أنا ذاهب إلى استخدام داخل مهامي و يسمى، من الداخل حتى مهامي أستطيع أن أقول و + = 1 أو شيء. هذا الشيء هنا هو في الأساس الرئيسية لهذه الحجة أو المعلمة. مثلما كان لدينا أزواج قيمة المفتاح وشيء من هذا القبيل أو JSON صفائف النقابي جعل الهدف-C القرار أن أقول، حسنا، مجرد أن ذلك كان واضحا حقا عند استدعاء أسلوب ما كل هذه المعلمات أنا ذاهب فعلا إلى اسم كل منهم. عند استدعاء الأسلوب، سوف أقول لكم الحقيقة andFloat، ثم عليك أن تمر فيه. ومن المثير للاهتمام، لا يدعى هذا واحد، ولكن كلها من العوامل الأخرى، حتى لو كان لدينا حجة 3 يمكن أن أقول andFloat وآخر تطفو وهلم جرا. عندما أدعو هذه الأساليب التي هي من الموز بطبيعة الحال، إذا كان الأمر كذلك لدي كائن، وأنا يعرف طريقة تسمى فو، وأريد أن يطلق عليه، بدلا من القول فو فتح / إغلاق parens أنا ذاهب لفتح قوس. وهنا اسم الأسلوب الخاص بي. أنا ذاهب لإغلاق قوس، وهذا هو موضوع ادعو عليه. تذكر، كل هذه الأساليب موجودة داخل الفصول لأنه لا يمكن تعريف أساليب الطبقات يكون داخل منهم. هنا لقد قمت بإنشاء كائن تعسفا من بعض صفا، وهذا هو بناء الجملة من أجل القيام بذلك. هناك 2 الخطوات اللازمة لصنع كائن. الخطوة الأولى هي أن أقول أريد أن تخصيص مساحة. هذا هو ما يعادل malloc. نحن لا يجب أن أقول بعد الآن malloc. اسقطنا م، جعلت من alloc، واستبدال ج. مع. م. بعد شيء alloc نحن نحتاج بعد ذلك إلى تهيئة ذلك. أساسا عند إنشاء كائنات قد ترغب في الحصول على بعض المنطق الذي ينفذ عند الانتهاء من إنشائها، بحيث يمكنك تمرير بعض القيم الافتراضية في أو شيء من هذا القبيل، وهكذا هذه الطريقة الأولية هو الذي يخلق الواقع الكائن. نحن تخصيص مساحة 1، مثلما فعلنا في C، وبعد ذلك تهيئة ذلك، التي قد تكون أو لا تفعل الكثير كله. ثم نحن العودة إلى هذا الشيء يا كائن. هناك نجم هنا لأن هذا هو مؤشر تقنيا، ولكن لا تقلق، مؤشرات ليست كبيرة الى اتفاق في الهدف C-بعد الآن. الآن لقد كنا مثيل هذه الفئة تسمى NSObject، وهذا هو مجرد عشوائية طبقية أن أبل لديها. لقد اتخذنا هذا مثيل، والآن لدي مثيل من هذه الفئة في هذا الكائن س، وهذا يعني أنه إذا كنت تعرف هذه الأساليب يمكن أن ندعو لهم مثل هذا. وبالمثل، إذا أردت أن استدعاء أسلوب مع وسيطة واحدة، لذلك هذا هو الأسلوب بار، الذي يأخذ وسيطة واحدة، وهنا هو الباز: qux الأسلوب، لذلك هذا يأخذ 2 الحجج. هذا وتدعو وظيفة واحدة على هذا الكائن س. معنى؟ يجب بناء الجملة معنى، ولكنك النوع من تعتاد على ذلك. حسنا، دعونا نتحدث عن عدد قليل من الأشياء التي هي في صلب الهدف-C وليس ذلك بالضرورة إلى بناء C. نحن في C نوع من كان عليها أن تتعامل مع السلاسل والمصفوفات هذه الحرف غبي، وحصلت عليه مزعج حقا. الهدف-C لديه تلك التي بنيت في جميع بالنسبة لنا، والذي بني في باستخدام هذه الفئة تسمى NSString. عندما كنت ترغب في إنشاء NSString لدينا جملة غامضة أكثر. بدلا من القول "CS50" نقول @ "CS50" وهذا هو مجرد بناء الجملة من أجل إعلان السلاسل في C-الهدف. هذا من السهل للغاية أن ننسى، لذلك لا تفعل ذلك. الآن، مرة واحدة لدي هذا، وهذا هو سلسلة، ولكن تلاحظ انها حقا مجرد كائن. قلت NSString، وهو ما يعني أنني مثيل فئة دعا NSString، والتي كتب شخص آخر بالنسبة لي، وكانت لطيفة جدا حول هذا الموضوع، وحتى الآن أستطيع أن أبدأ استدعاء أساليب على ذلك. إذا كنت استدعاء أسلوب على طول هذا الكائن ق انها سوف يعود لي طول السلسلة. هذا هو تماما مثل التوابع strlen في C. وهذه العودة 4. وبالمثل، I طريقة أخرى قد ترغب في يهتمون هو هذا characterAtIndex. هذا هو الأسلوب الذي يقول في هذا ق سلسلة أريدك أن تحصل على حرف 0، وهكذا فإن هذا يعود لي ج حرف، وهناك مجموعة كاملة من أكثر هذه الأساليب التي يمكنك بسهولة جوجل حقا. وثائق أبل كبيرة، ونحن سوف نلقي نظرة على ذلك في شيء. تلك هي سلاسل. لدينا أيضا حجم متغير صفائف بنيت فيها تذكر عندما كنا في C أعلنت مجموعة كان علينا أن نقول لديك 5 عناصر، نهاية القصة. عندما وصلنا إلى تفعيل جافا PHP ويمكن أن نبدأ تفعل أشياء مثل إضافة عناصر أو نقل العناصر. يمكننا أن نفعل نفس الشيء في C-الهدف. بدلا من إنشاء مجموعة في الطريقة العادية C لدينا مرة أخرى فئة أخرى تسمى NSMutableArray. هناك أيضا NSArray، وهذا يحدث أساسا لتغليف بعض الصفيف. هذا يقول أول شيء أريد أن أفعله هو أنني أريد أن تخصص مساحة للمجموعة الجديدة، وبعد أن تحيله ولست بحاجة بعد ذلك إلى تهيئة ذلك. مرة أخرى، واصفا هذه الأساليب فقط 2. الآن هذا يعني أن داخل هذا الكائن على لدي مجموعة فارغة يجلس هناك. إذا كنت أريد أن أضيف شيئا إلى هذه المجموعة، لا أستطيع استدعاء الأسلوب addObject. أريد أن أضيف كائن إلى مجموعة A، وأريد أن أضيف سلسلة CS50. إذا أردت لإزالة العكس أستطيع أن أقول أريد أن إزالة الكائن في المقام الأول على مجموعة أو كائن. معنى؟ حسنا، كنت نوع من التعود على هذا الشيء قوس مربع. بالمناسبة، داخل الكثير من المكتبات أبل سترى هذا NS. وNS تقف فعلا للخطوة التالية، والتي كانت واحدة من الشركات ستيف وظائف 1، وهذا حقا حيث بدأ الكتابة الكثير من التعليمات البرمجية كما نوع من الأساس لنظام التشغيل Mac OS X وجميع الأشياء الأخرى، وحتى هذا NS هو نوع من هذا الإرث لطيفة تصرخ لإحدى الشركات في وقت سابق الى الوراء عندما كان أبل بدأت لأول مرة. انها في كل مكان. دعونا نلقي نظرة على سبيل المثال أكثر شمولية الهدف-C. أنا هنا داخل كسكودي. للوصول الى هنا، لقد قمت بتحميل 1 كسكودي من المتجر، افتتح عنه، ثم ذهبت هنا للملف، أكثر من هنا إلى مشروع جديد، وبعد ذلك. بعد أن تفعل ذلك لدي كل هذه الخيارات ما أريد إنشاء، ولذا فإننا سوف نلقي نظرة على هذه الخيارات لاحقا، ولكن فقط على سبيل المثال هذا، لأننا في الواقع لن يكون لأحد التطبيقات حتى الآن، جئت إلى هنا، وقلت اداة سطر الاوامر، وهذا هو أحد التطبيقات التي سبق أن تشغيل في سطر الأوامر مثلما كنا يمتد من C. كيف لي ان خلق هذا المشروع، وحتى الآن أنا هنا، لذلك دعونا ننظر أولا في هذا الملف، وهذا ينبغي أن تبدو مألوفة جدا. لدي اسم الباحث. هناك argc صديقي، ي آخر الأصدقاء لargv. وهكذا يمكننا أن نرى أن هذا هو المدخل لطلبي الهدف جيم الأولى. هنا يمكننا تجاهل هذا في الوقت الراهن. هذا هو في الأساس بعض الاشياء إدارة الذاكرة التي سوف لا حقا لديك ما يدعو للقلق من أي وقت مضى. دعونا ننظر في هذه المجموعة الأولى هنا. هذا السطر الأول، إذا قلت طالب * أليس = [[alloc الطلاب] التهيئة] ما هذا تفعل؟ هذا الطالب الاول هنا، وربما هذا هو فئة. هذه ليست فئة التي كتبت أبل، ولكنها لفئة التي كتبت. أول شيء أريد أن أفعله هو أنني أريد أن تخصيص مساحة للطالب الجديد، ثم أريد أن تهيئة، لذلك هذا يعطي لي مرة أخرى هذا الكائن طالب جديد، وأنا تخزين هذه في متغير يسمى أليس. أين تلك الفئة تأتي من؟ حسنا، أكثر من هنا على الجانب الأيسر وهذه كلها من الملفات المختلفة داخل مشروعي. يمكننا أن نرى هنا لدي Student.h وStudent.m أ. الملف ح.، تذكر، حيث أعلن كل من الأشياء والتي توجد داخل الصف. دعونا نلقي نظرة على ذلك. حسنا، هنا لدينا هذه الواجهة @، وهذا يقول ان يأتي هنا الإعلانات من كل شيء من شأنها أن توجد داخل صفي. ثم لدي القولون. ثم لدي هذا الشيء NSObject. هذا يعني أن القولون بت الميراث كنا نناقش قليلا في وقت سابق. هذا كل شيء ليقول NSObject يمكن القيام به حيث NSObject هذه الفئة هو مكتوب من قبل شخص آخر، كل شيء يمكن أن يفعله هذا NSObject أريد أن أكون قادرا على القيام بذلك. بالقول: NSObject هذا يعني أن الأساس الأول ورثت جميع وظائف فئة أخرى. الذي أعطى حقا لي في مجمله مجموعة من الأساليب المختلفة والخصائص التي يمكنني استخدامها. إلى هنا أنا خلق 2 الخصائص. وهذا يعني تلميذي، إذا كان هذا البنية، فإن هذه الأمور 2 يكون داخل البنية بلدي، لذلك كل طالب له اسم هذا هو سلسلة، وطالب أيضا الصف، وهو الباحث. وأخيرا، إلى هنا أنا ذاهب لخلق وسيلة لتلميذي. دعوت لي طريقة، initWithName، ويستغرق وسيطة واحدة، وهذه الحجة هي سلسلة، ويطلق عليه اسم I. الآن دعونا ننظر في كيفية تنفيذه فعلا هذه الفئة. هنا، والآن أنا داخل ملفي م.، م للتنفيذ، وأنا أعتقد. لدي تنفيذ بلدي، نهايتي، وهنا حيث أنا في الواقع تحديد ما initWithName لا. لدي initWithName، اسم المعلمة الكمبيوتر، ومن ثم هذا هو المكان الذي أنا فعلا خلق الطالب، وحتى هذا قليلا خفي، ولكن هذا النوع من المتداول التي تريد أن تدرج في المنشئات الخاصة بك. هذه الوظيفة التهيئة هنا، initWithName، هو نوع من المنشئ. كنت أساسا بناء كائن طالب جديد وربما إرسال بعض البيانات داخل منه. أول شيء أريد القيام به هو أريد أن أدعو الحرف الأول على هذا الشيء عظمى. تذكر أنه عندما قلت هنا مرة أخرى في ملف ح. أن كل شيء على NSObject لديه طالب أيضا. وهذا يعني عندما أقوم بإنشاء الطالب ما أحتاج أيضا إلى القيام به هو تأكد من أن NSObject أنني يرث كل ذلك من البيانات كما تتم تهيئة بشكل صحيح. ما أريد أن أقول هو هذا السوبر يجري في الواقع أن أشير إلى الفئة الأصل انني وراثة من، لذلك أريد أن أتأكد من تهيئة كل ما أنا اعتمادا على قبل أن أبدأ في محاولة لاستخدامها. ثم إذا كان ذلك تهيئة بشكل صحيح هذا هو تماما مثل قوله إذا malloc لم يعودوا فارغة ثم أستطيع أن أبدأ تحديد بعض الخصائص. في جافا سكريبت PHP وكان لدينا هذه الكلمة الرئيسية هذا ما يسمى، وهذا يشير إلى المثيل الحالي من فئة. في C-الهدف ونحن نسمي هذا المصير. عندما أقول self.name، وهذا يعني أن الكائن أنا خلقت للتو عندما قلت alloc الطالب الحرف الأول، وهذا سوف تعطيني العودة كائن. وهذا يعني أريد أن تعيين اسم هذا الكائن إلى أي مررت فقط فيه. مثلما هو الحال في C، ونحن مع هذا الوصول أعضاء نقطة، حتى self.name يقول اسم الكائن الطالب يجري الآن أن يكون كل ما مرت للتو فيها وأخيرا كان الأمر كذلك، لا أستطيع إعادته حتى أحصل على شيء في الواقع مرة أخرى. الأسئلة؟ حسنا، لذلك هذا المصير = سوبر الحرف الأول، إذا كنت لا تفهم تماما الاشياء الميراث لا تقلق. نعرف فقط أنه إذا كنت تريد من أي وقت مضى لجعل طريقة التهيئة الخاصة فقط نفعل ذلك، وعليك أن تكون على ما يرام. نعم. >> [طالب] ماذا يعني إذا النفس؟ هذا يعني أننا عندما malloc شيء بحثنا دائما إذا كان يساوي فارغة، وإذا كان فارغة، ثم خرجت علينا. هذا هو الشيء نفسه، لأنه إذا كان هذا باطلا العودة، ثم ونحن في طريقنا لربما خطأ SEG إذا بدأنا بمحاولة التلاعب به. هذا طبقتنا الطلاب. هذا يعني أننا يمكن تهيئة طلابنا في واحدة من طريقتين. إذا قلت alloc الطالب الحرف الأول أنا لا تستخدم هذه الطريقة التي كتبت للتو، وبدلا من ذلك يمكن أن أقول ببساطة alice.name، والآن انا ذاهب الى أن تعيين اسم الخاصية. وبالمثل، إذا كنت ترغب في استخدام هذه الطريقة initWithName ويمكنني أن أقول ببساطة alloc، ومن ثم بدلا من القول الحرف الأول أنا ذاهب لاستدعاء هذا الأسلوب بأنني خلقت للتو، وأنا ذاهب لتمرير في بوب. في هذه المرحلة، وهذا الكائن بوب له اسم يساوي بوب. حسنا، إلى هنا أنا باستخدام أن NSMutableArray أن ننظر في وقت سابق. أنا تخصيص space.Then أنا تهيئة مجموعة جديدة. أنا ذاهب لإضافة 2 الأشياء إليه. هذه المجموعة الآن يحمل كائنات الطالب. لاحظت أن مكان لم أود أن أقول هذا هو مجموعة من الطلاب. قلت انها مجموعة، هذه الفترة. ثم يمكن أن أضع كل ما داخل منه أن أريد. هنا لقد 2 الكائنات. وأخيرا، لا بد لي هنا كائن آخر، وهذا TF. هنا في TF.h أساسا نفس الشيء. أنا من وراثة NSObject، وبالمناسبة، عند إنشاء فئات ويتم كل هذا بالنسبة لك، هذا النوع من النمطي واجهة. أنه يحتوي على خاصية من الطلاب. لدي بضعة طرق هنا أن لا تفعل في الواقع الكثير كله، وبعد ذلك وهذا يعني يمكنني إنشاء هذا الكائن TF يمكن أن أدعو هذا الصف على ذلك الأسلوب من هذا القبيل. أي أسئلة حول الهدف-C قبل أن نبدأ في بناء الجملة الانتقال إلى بعض أكثر مثيرة للاهتمام الاشياء التنمية التطبيقات؟ حسنا، لذلك دعونا تجعل في الواقع التطبيق فون. وتسمى الطبقات الأساسية التي سوف تستخدم داخل التطبيق الخاص بك iPhone وحدات تحكم عرض، ويمثل وحدة تحكم عرض في الأساس شاشة واحدة من داخل التطبيق الخاص بك، حتى إذا أنا على تطبيق الموسيقى، على سبيل المثال، يمكن للمرء مشاهدة تحكم تمثل وجهة نظر التي يمكنني عرض جميع الأغاني على اي فون بلدي. يمكن أن تكون وحدة تحكم أخرى عرض عند النقر فوق أغنية وبدء تشغيله أو أنا حفر أسفل إلى الفنانين. يمكن تمثيل كل من هذه الشاشات المختلفة كوحدة تحكم جهة نظر مختلفة، وحدة تحكم عرض هو في الحقيقة مجرد فئة التي تقول كيف تعمل هذه الشاشة. الأشياء داخل وحدة تحكم عرض، ونحن في طريقنا لديها خصائص، حتى أشياء مثل زر ستكون خاصية تحكم رأينا. ونحن في طريقنا أيضا إلى الأساليب، وهذه هي أساسا معالجات الأحداث. هذه الطريقة يقول عند الضغط على هذا الزر أريد أن أفعل شيئا، وأخيرا، مرة أخرى، ونحن في طريقنا إلى استخدام هذه الكلمة الرئيسية الذات للوصول إلى المثيل الحالي. لبناء الواجهات في دائرة الرقابة الداخلية هو في الواقع حقا، من السهل حقا. لديهم هذا السحب لطيفة واجهة واجهة انخفاض دعا باني، والمفاهيم الأساسية 2 أن يصل الأسلاك C-هدفكم لبناء واجهة هي IBOutlet وIBAction. ويقول ببساطة أن IBOutlet إذا قمت بتعريف خاصية هذا زر واحدة، وتريد وصل الأمر إلى شيء في واجهة المستخدم الخاص بك الفعلية، كنت أريد أن أقول انها متنفسا. وبالمثل، إذا كنت تريد لتمثيل معالج حدث ثم كنت تريد الذهاب ليقول انها عمل. لسلك فعليا حتى هذا تمثيل رسومي والتعليمات البرمجية انها حقا، حقا بسيطة. إذا كنت ترغب في إرفاق IBOutlet، كل ما عليك القيام به هو يمكنك التحكم انقر فوق وسنرى مثالا على هذا حقا سريعة. يمكنك التحكم انقر حيث تقول وحدة تحكم عرض. وأنت تسير لسحب في واجهة، أو العكس، إذا كنت ترغب في ربط معالج حدث وأنت تسير لسحب من واجهة في الاتجاه الآخر. دعونا نلقي نظرة على مثال بسيط حقا دائرة الرقابة الداخلية. دعونا إنشاء مشروع جديد. انا ذاهب الى الخروج هنا إلى التطبيق، وانا ذاهب الى فوق واحدة التطبيق عرض. انا ذاهب الى فوق التالي. سوف أعطي مشروعي اسم. سوف أسميها مرحبا. ومن المثير للاهتمام، وأبل يفترض كنت تقوم بإنشاء المنتج بحيث يمكنك بيعه وأنها يمكن أن تجعل المال. هنا أنا ذاهب إلى أسفل أن أقول أن هذا هو التطبيق فون. يمكنك إنشاء التطبيق باد، أو إذا كنت ترغب في إنشاء واحدة من تلك التطبيقات يدعم كلا الجهازين يمكنك أن تفعل ذلك أيضا. هذه هي علامة في مربع ما تريد الخاص بك لتبدو وكأنها. كنت ترغب في استخدام القصص المصورة، والتي سنرى في وقت لاحق، وأنت بالتأكيد تريد استخدام حساب مرجع التلقائي، التي هي ميزة لطيفة التي يمنعك من الاضطرار إلى القول malloc وحرة. إلا إذا كنت ترغب في الاتصال malloc وحرة، وأود أن أترك هذا التحقق. أنا انقر فوق التالي، وأخيرا، وهذا هو الذهاب الى حيث يطلب مني أريد لحفظه. أنا ضربت خلق، وتذهب هنا نحن. أنا خلق مشروع جديد. أكثر من هنا على اليسار هي كافة الملفات الموجودة داخل المشروع الخاص بي، وتلاحظ أن حصلت على مجموعة كاملة، وأنا لم تفعل أي شيء حتى. IOS كبيرة. على سبيل المثال، هنا في هذا ViewController.h، هذا هو الذهاب لتمثيل بلدي تحكم القول الأول، وبالتالي فإن الشاشة الأولى داخل بلدي التطبيق. الآن نحن نعرف ما هو هذا القول. نقوله ادعو هذه الطبقة ViewController، وViewController يفعل كل شيء أن يفعل UIViewController، وهذا، مرة أخرى، هو أن أبل بعض صفا كتب أن يفعل الكثير من الاشياء المفيدة بالنسبة لنا مثل عرض الشاشة. هنا حيث أنا يمكن أن تبدأ فعلا تحديد ما تحكم جهة نظري لا، واتضح أن أنا حقا لا تحتاج إلى أي من هذه. هذا هو رمز المتداول أن أبل يعطيني مجانا. لم أحتاج أن السطر الأول، أو ليس لدي فئة، حتى نتمكن من التخلص من ذلك والتخلص من هذا. حسنا، لذلك هذا هو شاشتي فارغة. الآن دعونا الضغط على هذا MainStoryboard.storyboard، وهذا هو المكان الذي يبدأ للاهتمام. هذا يمثل الشاشة الأولى على بلدي التطبيق. إذا كنت ترغب في إضافة زر، في HTML واضطررت الى إنشاء علامة زر. في الروبوت لديك لإنشاء علامة زر، ولكن في دائرة الرقابة الداخلية إذا وصلت للتو الى اسفل هنا إلى أسفل اليمين وإذا كنت انقر على هذا أحد 3rd هنا حيث تقول كائنات، ويمكنني أن انتقل لأسفل، أو يمكنني البدء في البحث عن زر. وتبدو، زر، حتى لو كنت فعلا سحب وإسقاط هذا الحق هناك، واضاف لقد فقط على زر لهذه الشاشة على بلدي التطبيق. إذا كنت ترغب في تغيير النص، ويمكنني أن انقر عليه مرتين، أقول شيئا تحريضية مثل "اضغط البيانات". حسنا، الآن إذا قمت بتشغيل هذا التطبيق، ولذا فإننا ترجمة عليه، حتى لتشغيله I انقر فوق زر التشغيل في أعلى اليسار، وهناك بلدي التطبيق. أنا لم أفعل أي شيء، وأنا حصلت على الحلو التطبيق فون يبحث. إذا كنت ترغب في التوقف عن ذلك، يمكنك النقر فوق زر التوقف لأنه أكثر متعة. دعنا نقول أنني أريد فعلا أن يحدث شيء عند الضغط على هذا الزر. للقيام بذلك ما عليك القيام به هو أنني بحاجة إلى إنشاء معالج حدث جديد أو إجراء. وهذا يعني أنني بحاجة إلى خلق بعض الطريقة التي أريد ليتم استدعاؤها عند الضغط على الزر، لذلك دعونا إنشاء أسلوب جديد. أنا داخل ViewController.h. ولست بحاجة إلى القول بأن أسلوب موجود. ولست بحاجة أولا لواصلة انا ذاهب الى أن يدعو هذا على وحدة تحكم طريقة العرض. ولست بحاجة إلى إعطاء هذا نوع. نوع هذا سيكون هذا الشيء IBAction التي رأيناها في وقت سابق. هذا هو معالج حدث، لذلك سيكون لإرجاع IBAction، وهذا في إشارة إلى القول بأن كسكودي هذا شيء أريد أن سلك شيئا. يمكن أعطيها اسما، مثل الفاصلة المنقوطة، buttonPressed. لقد أعلن الآن أنا طريقة جديدة داخل صفي. قلت له هذا الأسلوب في الوجود. الآن دعونا حيز ViewController.m، ودعونا نقول ما هذا الأسلوب يمكن القيام به. إذا كنت ابدأ الكتابة، على سبيل المثال، (الفراغ) buttonPressed إشعار كسكودي لطيف وautocompletes بالنسبة لي. هذا رائع حقا. تلاحظ هنا أن داخل الملف. م أستطيع أن أقول أيضا باطل، وهذا هو لأنه IBAction ليست في الواقع نوع. في الواقع أنه في مكان ما تعريف الوسم ليكون باطلا، ومرة أخرى، وهذا هو مجرد تلميح إلى أن يقول كسكودي أريد هذا ليكون معالج الأحداث، وسنرى ماذا في الثانية فقط. عند الضغط على هذا الزر انا ذاهب الى القيام بشيء مزعج مثل عرض المنبثقة. للقيام بذلك يمكنني إنشاء مثيل جديد من هذه الفئة تسمى UIAlertView، وهذه هي فئة أن أبل كتب أن يحدث لعرض النوافذ المنبثقة مزعج. سوف نطلق هذا التنبيه المنبثقة، ولقد 2 الخطوات، تذكر، لخلق هذا الكائن. أول شيء أنا بحاجة إلى القيام به هو تخصيص مساحة. أريد UIAlertView. أريد أن تخصيص مساحة. هذا الأسلوب بلدي الأول. طريقة وجهتي المقبلة هو أريد أن تهيئة ذلك، وذلك لدي بهذا الحجم، طريقة طويل يسمى initWithTitle. أن يجري أساسا للسيطرة على ما يقول هذا الإطار المنبثق. يمكن عنوان الإطار المنبثق بلدي يكون مرحبا. يمكن للرسالة أن تكون هذه المنبثق "هذه هي دائرة الرقابة الداخلية". الشيء مندوب، وأنا لا أعرف ما هو. دعونا نقول لا شيء. الآن يمكن الزر الذي يحدث أن يظهر شيء من هذا القبيل يقول "من المؤكد أن" وأنا لا أريد حقا أي الأزرار الأخرى، لذلك دعونا أن حذف وإغلاق قوس. حسنا، أنا خلقت واحدة إضافية. هناك نذهب. هذه هي الطريقة التي يمكنني إنشاء الإطار المنبثق جديدة. إذا كنت تريد أن تظهر في الواقع المنبثق أريد أن استدعاء الأسلوب المعرض. للقيام بذلك أستطيع أن أقول في حالة تأهب والعرض، ومرة أخرى، كان الإكمال التلقائي سوبر لطيفة. إذا نسيت ما كان، إذا كتبت في ليالي فقط، ويمكنني أن انتقل من هنا لمعرفة ما كان عليه، وبتصفية جيد. الآن إنشاء هذا الإطار المنبثق I جديد. سوف نعود إلى ما يعني مندوب في وقت لاحق، والآن أريد أن أقول أريد أن أطلق هذه الطريقة عند الضغط على زر، لذلك انا ذاهب الى العودة الى بلدي القصة المصورة، وأريد أن نعلق الآن هذا IBAction. أول شيء تريد القيام به هو النقر على زر. عند الضغط على هذا الزر أريد شيئا أن يحدث. أنا لن باستمرار السيطرة. انا ذاهب الى فوق واسحب من الزر لأكثر من هنا حيث تقول وحدة تحكم عرض. يمكننا أن نرى أن ينير لطيف حتى. إذا كنت ترك مع الماوس بلدي لدي الآن هذا الإطار المنبثق أكثر من هنا حيث لدي بعض الخيارات. واحدة من هذه الأحداث هو أن أتمكن من التسجيل هذه كلها من تلك الأساليب I أعلن في ملف ح بصفتي IBActions. هذه هي الطريقة التي ينبغي أن يعرف ما كسكودي تظهر في هذه القائمة قليلا، ذلك أن مجرد التلميح. إذا كنت انقر على زر ضغط، لقد لقد سجلت الآن معالج الأحداث. في جافا سكريبت كان علينا أن نقول لدي بعض التعليمات البرمجية التي سجلت معالج الأحداث. في C-الهدف كان حقا بهذه السهولة. إذا قمت بتشغيل هذا مرة أخرى الآن عند الضغط على زر معالج الحدث بلدي هو الذهاب الى اطلاق النار، وانا ذاهب الى الحصول على هذا المنبثقة. سوبر سوبر بسيطة هناك. إذا كنت تريد من أي وقت مضى لرؤية كل الأحداث التي تحدث لتكون مسجلة على مكون إذا كنت اضغط على هذا الزر ولقد جئت إلى هنا إلى الجانب الأيمن الأولى يمكن أن ترى أكثر من هنا يمكنني أن أفعل أشياء مثل نوع من زر، حتى إذا كنت تريد واحدة من تلك لI أو زر الاتصال الوظيفة أو أيا كان. إذا كنت تريد أن ترى كل الأحداث الموجودة على هذا الزر إذا كنت تأتي على طول الطريق أكثر من هنا إلى الجانب الأيمن يمكننا أن نرى هنا في أحداث لدي كل هذه الأحداث المختلفة. يمكن الضغط على زر، وعندما ترك الزر، وعندما يتضاعف الحنفية أو أيا كان، ولقد سجلت واحد فقط هو هذا الحدث يسمى اتصال ومتابعة في الداخل، ويقول ان هذا في أقرب وقت إصبعي يأتي قبالة زر هذا الحدث هو الذهاب الى النار، وهذا هو بالضبط ما حدث للتو. هذا هو نوع من الحدث الافتراضي زر الضغط. أي أسئلة حتى الآن؟ حسنا، هذه هي الطريقة التي يمكننا البدء في سلك الأمور في قانوننا في الأشياء داخل واجهة لدينا. تذكر أول شيء كان علينا القيام به هو العثور على رمز، وحتى ذلك الحين ونحن السلكية واجهة للمدونة، وهناك التطبيق الأول. حسنا، كان هذا رائع حقا، وأنشأنا هذا الزر. ماذا لو أننا لا نريد أن يكون لإنشاء مجموعة من الخصائص تمثل هذه الأزرار؟ على سبيل المثال، في التشنج اللاإرادي تاك تو لدي 9 أزرار، وكنت يكون من سوبر، سوبر مزعج لدينا لسحب وإسقاط 9 مرات أو إذا كان لي لجعل تيك تاك تو مع 81 بدلا من 9 وكان لي لسحب وإسقاط 81 مرة، وهذا عرجاء. ما يمكننا القيام به بدلا من ذلك هو يشبه إلى حد كبير HTML عندما كان لدينا أشياء مثل معرفات وأسماء ويمكننا البحث عن الأشياء من هوياتهم، وهناك فكرة مشابهة في دائرة الرقابة الداخلية تسمى به. العلامة هي مجرد معرف فريد العددية لمكون. إذا قلت هذا له علامة من 0، على سبيل المثال، إذا كنت إنشاء زر وإعطائها سمة من 0، وسنرى كيف نفعل ذلك في ثانية واحدة، إذا كنت ترغب في الحصول على هذا الزر ويمكنني أن أقول ببساطة أريد أن أدعو و، viewWithTag الأسلوب على الكائن أكثر من هنا وself.view، الذي يمثل الشاشة الحالية، على سبيل المثال. إذا أعطي الكلمة هذه الطريقة viewWithTag، انا ذاهب لسحب زر مع البطاقات 0. دعونا نلقي نظرة على هذا المبنى من قبل التشنج اللاإرادي تاك تو. أولا، وهذا هو بلدي القصة المصورة. لقد قمت بإنشاء هذه الأزرار UI 10. لاحظت انهم جميعا نفس الحجم. إذا كنت انقر فوق واحدة من هذه وأعود إلى هنا على هذا الجانب الأيمن سترى I ضبط الخط هنا، لذلك أنا جعلت الخط أكبر قليلا، ولكن كان ما فعلته أنا أيضا تعيين هذه العلامة. قلت له أن هذا علامة من 1، وهذا هو أعلى اليسار. الآن، إذا كنت انقر فوق زر آخر، مثل هذا ثانية واحدة هنا، الآن سترى أن العلامة بلدي هو 2. كل من هذه الأزرار للتو علامة فريدة من نوعها، وذلك في وقت لاحق هذا هو كيف أنا ذاهب لبدء التفاعل مع بلدي التطبيق. هذا هو كل شيء داخل وحدة تحكم عرض واحد، ولكن هنا هو ما لدينا. لدينا 3 خصائص هنا. أول واحد وآخر ذاهب لتمثيل الدولة في مجلس بلدي. أساسا هذا واحد الأول هو مجموعة تمثل فيها XS ونظام التشغيل هي. هذا واحد يقول هنا لنا الأخرى من عليه الدور. ستلاحظ أن ولدي أيضا هذه الأشياء هنا. قبل أن عندما أعلنا خصائص أعطاهم الاسم والنوع. يمكننا أيضا أن نقدم لهم بعض المعلومات الإضافية هنا. هذا أولا يقول nonatomic، وهذا ما يقول هي في الأساس واحدة فقط من أي وقت مضى أن الشيء تحاول الوصول إلى هذا المتغير في كل مرة. هل يمكن أن تفعل أكثر تعقيدا التطبيقات التي هي متعددة الخيوط، ويعود ذلك في خدش كان لدينا المواضيع المختلفة، ويمكن أن تقوم به مختلف العفاريت أشياء مختلفة في نفس الوقت. إذا كان هذا ليس هو الحال، التي ليست في أي شيء سنكون تبحث في، اذا قلنا انه سيكون nonatomic فعلا لجعل الامور قليلا أسرع. لدينا أيضا هذا الشيء يسمى بتعيينه، قوية، أو ضعيفة. هذه مجرد تعيين تقول أن هذا هو نوع القياسية. هذه ليست كائن أو مؤشر للأن هذا هو مجرد BOOL، لذلك تم بناء BOOL إلى C-الهدف. هذا يقول لا تحاول أن تفعل أي شيء يتوهم مع مؤشرات هنا. انها قشارة العادية القديمة. القوي والضعيف، وهذا في الواقع يقول ان ضعف أريد هذا أن يشير إلى شيء في وحدة تحكم طريقة العرض. أنا لا أذهب إلى تخصيص فعلا أو الحرف الأول هذا بنفسي. منشئ واجهة، عند تشغيل التطبيق، سوف تعامل مع كل ما التهيئة. إذا قلت ضعيفة، تقول لشخص آخر سوف يتم إنشاء هذا. إذا قلت قوية، وهذا يقول ان انا ذاهب لتكون واحدة هذا ما خلق هذا الكائن المجلس، وحتى هنا بعض الأساليب لدي المزيد هنا، على سبيل المثال، عندما يتم العمل من أجل الضغط على زر لعبة جديدة، دعوى عند الضغط على أي من الأزرار الأخرى، وهلم جرا. ونحن لن ندخل في الكثير من منطق التشنج اللاإرادي تاك تو، على الرغم من أنها مثيرة للغاية، ولكن دعونا نلقي نظرة على بعض الأشياء التي يمكننا القيام به داخل دائرة الرقابة الداخلية. هذه الطريقة لعبة جديدة ستكون أطلقت كلما كنت اضغط على زر لعبة جديدة. لربط ما يصل ببساطة لقد جئت الى بلدي القصة المصورة. الأول بالضغط على لعبة جديدة. إذا جئت إلى هنا إلى اليمين أستطيع أن أرى أن على اتصال ومتابعة الداخل السلكية إلى الأسلوب newGame. هذا هو السبب في هذا هو الذهاب الى الحصول على النار. طريقة newGame هو الذهاب الى القيام ببعض اقامة. انها سوف يقول لك أريد لمسح الدولة للمجلس. هذه هي طريقة لطيفة على صفائف قابلة للتغيير. هذا هو الذهاب الى القول انها الآن بدوره X ل، والآن انا ذاهب الى الاستفادة من هذا الشيء viewWithTag. وأنا أعلم أن بلدي أزرار لديها به 1-9، وهذا شيء أنا اختار تعسفا. إذا كنت تريد تعيين نص كل زر لتكون فارغة لأنني بدأت للتو لعبة جديدة وأنا لا أريد أي أن تترك XS أو OS أكثر من أستطيع أن أفعل ذلك. أستطيع أن أقول أريد رأي مع العلامة، 1، 2، 3، 4 وهلم جرا. وهذا سحب الزر مختلفة في كل مرة. هنا انا ذاهب الى صبغه لUIButton. مثلما يمكن أن يلقي رجات ليطفو والعكس بالعكس هذا يقول أنني أريد أن يلقي هذا إلى UIButton. وهذا يعني نوع من يكون هذا UIButton * لأن من المؤشرات، ولكن لا تقلق، انهم ليسوا مخيف بعد الآن. مرة واحدة لدي هذا الزر انا ذاهب الى استدعاء أسلوب على ذلك. ويسمى هذا الأسلوب setTitle forState، ويقول لذلك هذا أريد أن يرد نص على الزر ليكون سلسلة فارغة، وأريد أن تكون سلسلة فارغة عندما لا يضغط عليه. إذا أنا باستخدام هذا الأسلوب، لا أستطيع تغيير نص الزر بمجرد شخص يضرب به، لكننا نريد أن نقول عندما يكون الزر مجرد الجلوس هناك أريد النص أن يكون فارغا. وأخيرا، نحن ذاهبون إلى تهيئة مجلس بلدي، وانا ذاهب الى القول ان كل شيء حاليا في 0، لذلك هذا هو غير قابل للتغيير أعضاء مجلس الإدارة مجموعة قابلة للتغيير، وهو ما يعني أنني يمكن استدعاء الأسلوب addObject ومجرد 0 من داخل ذلك. هذا ما يحدث عند إنشاء لعبة جديدة. دعونا نلقي نظرة على آخر واحد. هذا الأسلوب هنا هو أن IBAction سيكون الضغط كل مرة يتم فيها الضغط واحدة من تلك الساحات. الآن لدينا بعض التشنج اللاإرادي تاك تو المنطق هنا. نحن معرفة من عليه الدور، وبناء على ذلك وضعنا إما X أو O و، ولكن نلاحظ اننا إعادة استخدام هذا المعالج نفس الحدث لكل واحد من تلك الأزرار. وهذا يعني أن ليس لدي وسيلة لزر أعلى اليسار، طريقة مختلفة لأسفل الزر الأيمن، على الرغم من أن فعلت ذلك. لن يكون ذلك حقا التصميم الجيد. ما أقوم به هنا هو في الواقع انا ذاهب لتحديد ما علامة من الزر الذي تم الضغط عليه. لاحظت أن هذا الأسلوب يأخذ وسيطة واحدة اللعب. انه دعا المرسل، والمرسل هو ما هو الذهاب الى المرسل تمثل تماما ما لم تتخذ إجراءات بشأنها. إذا كنت اضغط على زر واحدة، هذا المرسل سيكون ذلك UIButton أن ضغطت فعلا، بحيث أن يعني أن UIButton لديه علامة لأنني خلقت علامة. إذا كنت ترغب في الحصول على العلامة في ويمكنني أن أقول ببساطة أريد علامة من المرسل، ومرة أخرى، لقد مسبوكة I فقط لUIButton. أنا أعلم أن المرسل سيكون UIButton. انها لا تملك دائما أن يكون UIButton. ويمكنني أن، على سبيل المثال، تسجيل معالج الحدث نفسه  لمدة لزر واحدة، واحدة لشريط التمرير. في هذه الحالة، وأنا أعلم أنهم جميعا الأزرار، لذلك أنا ذاهب الى القول أريد أن يكون هذا الزر، ثم يمكنني الحصول على العلامة، ومن العلامة أعرف أين أنا الآن داخل المجلس. بعد ذلك يمكنني أن مجرد مجموعة إما X أو O، ويمكن أن الوجه المقابل، تحقق الذي فاز، وهلم جرا. على أي أسئلة حتى الآن هذا؟ حسنا، نحن كافة التعليمات البرمجية نشرها على الإنترنت، ونحن لا نريد ان نصل الى الكثير تيك تو للمنطق تاك، ولكن الآن يمكنك أن ترى أن حقا كل ما نقوم به هو أننا على حلقات هذه المجموعة، لذلك لدينا بضع لحلقات هنا، ونحن فقط لرؤية مقارنة هل لدينا مباراة في جميع الصفوف، مباراة في عمود أو أي شيء من هذا القبيل. لتشغيل هذا التطبيق في الواقع، إذا كنت اضغط على أحد هذه الأزرار وقد أطلقت هذه الطريقة المسرحية، وهذا يعني أنني مجرد مجموعة على الزر ليكون X، وحتى الآن وسوف يكون هذا الزر O، وهلم جرا، وهكذا هذه هي الطريقة التي بدأنا التفاعل مع هذا التطبيق صفحة واحدة. سنقوم بنشر التعليمات البرمجية، لذا لا تتردد في الاطلاع ذلك، ولكن دعونا نتحدث الآن عن بعض التطبيقات التي هي أكثر من صفحة واحدة فقط. وكان ومثيرة كما تيك تاك تو، والكثير من التطبيقات داخل دائرة الرقابة الداخلية هذه هي نوع من الحفر أسفل الأشياء مع شاشات متعددة. مفهوم الأولى التي سنحتاج للحديث عن البروتوكولات هي، والبروتوكول هو مجرد مجموعة من الأساليب يمكنك أن نعد لتحديد. إذا كنت إنشاء هذا البروتوكول الجديد مع 2 طرق، وهذا أول واحد، إذا كان نوع الإرجاع هي باطلة، أطلقت عليها فو. فإنه يأخذ بدون وسائط. لدي طريقة أخرى. تقوم بإرجاع عدد صحيح. دعوت عليه بار، ويستغرق وسيطة واحدة. كل هذا البروتوكول هو أن يطلق SomeProtocol هنا، هذه هي مجموعة من الأشياء التي يمكن للشخص تنفيذها. وقال أنا لم داخل هذا البروتوكول ما يفعل فو. بدلا من ذلك، أنا فقط أقول لك يمكن تحديد فو إذا كنت تريد. إذا أنا خلق وحدة تحكم طريقة العرض أو إنشاء فئة يمكنني داخل هذا الوعد فئة لتنفيذ بعض من هذه الأساليب، لذلك على سبيل المثال، إذا يقول هذا يقول الآن أنا وعدت لكم أن داخل من وجهة النظر هذه الطبقة تحكم سيكون لي تعريفات لكلا فو وبار. لماذا هو أن فائدة؟ وهناك الكثير من مكونات داخل دائرة الرقابة الداخلية الاستفادة من هذا ودعا الوفد نمط التصميم، وما يقول الوفد هو أنه، على سبيل المثال، إذا كان لدي مربع نص وهناك بعض الأحداث التي يمكن أن تكون مسجلة داخل مربع النص الخاص بي، بدلا من خلق أحداث منفصلة ما يمكنني القيام به هو ما يمكنني قوله سوف مندوب مربع النص هذا يكون بعض وجوه. عندما أقول أن هذا هو مندوب الآن وهذا يعني أن وكلما كان من بعض الأحداث النار في مربع النص بدلا من الاضطرار إلى تسجيله أو أي شيء من هذا القبيل انها مجرد الذهاب الى استدعاء أسلوب على المفوض. على سبيل المثال، داخل مربع النص الخاص بي لدي طريقة لعند الضغط أن تفعل زر في أسفل اليمين، وذلك بدلا من تسجيل معالج حدث ما يمكنني قوله هو مربع النص، وهنا كائن أريدك أن استدعاء أسلوب على في كل مرة يضغط شخص على زر القيام به، وهذا يعني أن هذا الكائن لديها لتنفيذ بعض البروتوكول يقول أعدك أن العمل لتحديد زر القيام به، لأنه إذا كان لا يعرف هذه الطريقة واضغط على الانتهاء، ثم انها سوف تكون مربكة. دعونا نلقي نظرة على مثال. هنا لدي مجرد واحد مربع النص، واحدة من خصائص مربع النص هذا أكثر من هنا على هذا الجانب الأيمن هو مندوب. هذا هو خاصية للفئة. ما فعلته هنا هو التحكم في النقر عليها، وأنا جر من هذه البقعة أكثر من هنا إلى وحدة تحكم عرض، والتي تقول الآن مندوب مربع النص هذا ستكون وحدة تحكم طريقة العرض. وهذا يعني أنه عندما يحدث بعض الإجراءات، بدلا من تسجيل معالجات الأحداث منفصلة أريد منك أن ترسل لهم إلى المفوض. الآن دعونا نلقي نظرة على وحدة تحكم جهة نظري. داخل الملف ح. لقد قدمت وعدا. لقد عدت لتنفيذ بعض الطرق داخل هذا البروتوكول دعا UITextFieldDelegate، ومرة ​​أخرى، هذه مجرد بعض من قائمة بعض الأشياء التي يمكنني اختيار لتنفيذها. إذا جئت هنا في الملف. م بلدي، نفذت I أسلوب واحد من هذا القبيل. لقد دعوت عليه textFieldShouldReturn لأن هذا هو ما كان يطلق عليه داخل من البروتوكول. والآن كلما كنت اضغط على الزر تم داخل هذا الحقل النص هذا هو ما يحدث للحصول على ودعا، لذلك أنا لم تسجل معالج حدث. I توصيل مندوب، وكلما أطلقت هذا الحدث هذا هو الأسلوب الذي سوف الحصول على استدعاء، إذا كان الأمر كذلك جئت إلى هنا لوحة العمل الخاص بي وتشغيله، في حين أن هذا التحميل يمكننا أن نرى هذا ما يفعله. على الشاشة لدي أشياء 2. لدي هذا المجال النص، ولدي هذه التسمية. أنا أقول ببساطة أريد نص هذه التسمية لتكون مساوية بغض النظر عن المستخدم بكتابتها في داخل حقل النص. هذا السطر التالي هنا هو مجرد الطريقة التي ادعو على حقل النص الذي يقول أريد لك لإخفاء لوحة المفاتيح. هذا هو مجرد طريقة التعسفي أن أبل اختارت. مرة أخرى، قبل أي شيء فعلته كان لي لسلك كل شيء، لذلك جئت لاول مرة أكثر من هنا. من وحدة تحكم عرض I اسحب فوق إلى مربع النص. اسمحوا لي ان اذهب، وأستطيع أن أرى هنا أنني يمكن أن تجعل هذا المجال نص الخاصية منذ أكثر من هنا في وحدة تحكم عرض تعريف I لقد خاصية التي هي IBOutlet حقل النص. هذا يقول أستطيع أن سلك هذا العقار يصل إلى حقل النص في واجهة المستخدم الخاصة بي. الآن عندما كنت فوق هذا أستطيع أن أبدأ الكتابة. الآن إذا كنت انقر على زر ذلك هو الذهاب الى اطلاق النار وهو الحدث الذي يمكنني الآن الرد على. أي حال من معالجات. كيف لي ان رد فقط لهذا الزر القيام به. معنى؟ هذه ليست نمط التصميم الذي، قد لا تجد نفسك يوما بروتوكول إنشاء الخاصة بك، ولكن نعرف فقط أن بعض مكونات مختلفة دائرة الرقابة الداخلية تسجيل الأحداث بطرق مختلفة. أزرار، على سبيل المثال، استخدام تلك IBActions. حقول النص، من ناحية أخرى، تنوي استخدام المندوبين. يمكننا أن نرى ويمكنك أن تبحث كل ذلك داخل تتكون من الوثائق. بالمناسبة، هناك في الواقع من نصف طن من الاشياء UI في صلب دائرة الرقابة الداخلية بالنسبة لك، ذلك على سبيل المثال، والطريقة التي يتم لي أن أقول في أسفل اليمين يتم تحديد هذا المجال I النص. جئت إلى هنا. I تمريره أسفل قليلا ليعود الرئيسية، ويمكن في الواقع جعل هذا أنا في مجمله مجموعة من الأشياء، مثل إذا كنت أريد أن أقول أن مكالمة طوارئ بدلا أستطيع فعل ذلك، وهو عشوائي تماما، وأنا لا أعرف لماذا هناك مكالمة طوارئ المدمج في زر، ولكن هناك، تقول مكالمة طوارئ في رسائل صغيرة حقا. هناك تذهب. استكشاف بالتأكيد كل هذه الخيارات المختلفة في دائرة الرقابة الداخلية. أي أسئلة على المندوبين؟ مرة أخرى، مجرد نمط تصميم مثيرة للاهتمام التي يجب أن تكون على علم. حسنا، دعونا نلقي نظرة على التالي طرق عرض الجدول. طريقة عرض جدول هو في الأساس أن قائمة العناصر التي هي في كل مكان في دائرة الرقابة الداخلية. عندما كنت التقليب من خلال جميع جهات الاتصال الخاصة بك، كنت تبحث في ويطلق على الصفحة تحديد، وهذا النوع من الأشياء من قائمة طريقة عرض جدول. تنفيذ طريقة عرض جدول في دائرة الرقابة الداخلية هو بسيط جدا. بدلا من جعل فئة التي ينحدر من أن UIViewController مثل فعلناه قبل أن يقول ببساطة الحاجة الى بدلا من كل شيء UIViewController لا أريد القيام به، أقول كل شيء UITableViewController لا أريد القيام به، بحيث يضيف ببساطة بعض الأمور الإضافية التي تتم تماما بالنسبة لنا. يتعين علينا القيام به سوى القليل جدا لملء الفراغات أساسا في داخل الجدول. من أجل عرض جدول أحتاج إلى الإجابة على بعض الأسئلة. السؤال الأول ولست بحاجة للرد هو عدد المقاطع في الجدول؟ عندما كنت التقليب من خلال التطبيق جهات الاتصال الخاصة بك ستلاحظ أنه نوع من التي نظمتها و، ثم لديك الإفطار، وكان لديك القليل الذي رأس الفرعية. ويسمى كل من هذه المقطع. قد أو قد لا تحتاج هذه. أول شيء عليك القيام به هو تنفيذ أسلوب دعا tableView: numberOfSectionsInTableView. وترجع ببساطة عدد الأقسام لديك، لذلك يمكن القول هذه العودة واحدة إذا كان لديك رأي واحد مائدة كبيرة. والسؤال الثاني الذي يحتاج إلى معرفة دائرة الرقابة الداخلية هو عدد الصفوف التي لديك؟ على سبيل المثال، كنت التقليب من خلال طريقة عرض جدول. لديك عدد محدد من الأغاني التي تبحث في أو عدد محدد من الأسماء. إذا كنت لي، بطبيعة الحال، لا أن الكثير، وهكذا هذه هي الطريقة دائرة الرقابة الداخلية يدري كم من الخلايا لعرضه. مرة أخرى، يمكن أن تقول شيئا مثل هذا الإرجاع 3. رأيي يحتوي الجدول 3 صفوف. وأخيرا، دائرة الرقابة الداخلية يحتاج إلى معرفة ما يشبه كل خلية، ذلك ما يحدث فعلا القيام به هو استدعاء هذا الأسلوب هنا إلى أسفل، هذا tableView: cellForRowAtIndexPath. انه سيكون لاستدعاء هذا الأسلوب في كل خلية واحدة داخل الجدول الخاص بك. كيف تعرف كم مرة أن نسميها؟ حسنا، قلت لك ذلك داخل عدد من الصفوف في القسم. ونحن في طريقنا للدعوة على كل من هذه الخلايا لدينا، وداخل هذا هو المكان الذي يمكن القيام به في الواقع أشياء مثل تعيين النص أو اقول لكم ما هذا الزر الأزرق قليلا على الجانب الأيمن لا. نمط للحصول على هذه الخلايا، ونحن في طريقنا إلى استخدام هذا الأسلوب دعا dequeueReusableCellWithIdentifier. الهدف هو في الواقع-C معروف جدا لطول المضحكة من أسماء طريقتهم، وهذا هو في الحقيقة حالة طيبة في سبيل المثال النقطة. ما هذا الأسلوب لا هو هذا فقط يقول أنا أريد منك أن تعطيني الخلية. مجرد شيء دائرة الرقابة الداخلية. إذا كان لديك شيء من هذا القبيل 100،000 الأغاني على أجهزة أي بود الخاص بك ما دائرة الرقابة الداخلية لا تريد القيام به هو تخصيص 100،000 الخلايا، لأنه إذا كنت في أعلى القائمة الخاصة بك، هل حقا بحاجة الى تخصيص الذاكرة للخلية وهذا 99000 الصفوف أسفل؟ لا، لأنه كما كنت التمرير يمكنك تخصيص نوع من كما تذهب على طول. يتم ذلك بالنسبة لك. لم يكن لديك ما يدعو للقلق كل الاشياء التي الأداء غبي. كل ما عليك قوله هو استدعاء هذا الأسلوب dequeueReusableCellWithIdentifier، وهذا يقول: حسنا، إذا كنت بحاجة إلى أنا ذاهب لإنشاء خلية جديدة لك. ولكن إذا كنت في الجزء السفلي من الجدول ولقد قمت بالفعل تخصيص بعض الخلايا في الجزء العلوي من الجدول الذي كنت حقا لن تحتاج في أي وقت قريب انا ذاهب الى ان نعطيكم واحدة من تلك العودة بدلا من تخصيص واحد جديد، وحتى هذا هو مصدر قلق الأداء لطيفة. لم يكن لديك لتخصيص الخلايا نفسك. وهذا سوف تعطيك عودة خلية. انه سيكون لك للعودة إلى كائن الخلية. مرة واحدة لديك كائن الخلية التي يمكن أن تفعل أشياء لذلك. يمكنك تعيين نص الخلية مع هذه خاصية تسمى تسمية نص. يمكنك إضافة هذا السهم على اليمين أو بعض الأشياء الأخرى عشوائي مع هذه الخاصية أخرى تسمى accessoryType، وهلم جرا وهلم جرا دعونا نلقي نظرة على الواقع تنفيذ طريقة عرض جدول الآن. عندما أنا خلقت هذا المشروع بدلا من القول واحد التطبيق مشاهدة جئت إلى هنا في الواقع لسيد التفاصيل التطبيق، وذلك أساسا هذا يتوافق مع التطبيق الإلكتروني على الآي باد مع طريقة عرض جدول على اليسار ومن ثم محتويات على اليمين. على أجهزة أي بود، أو فون هذا هو الذهاب الى تتوافق مع طريقة عرض جدول واحد. حيث ان قانون بلدي حصلت على كاتب. دعونا أولا نلقي نظرة على لوحة العمل. وقد تم كل هذا بالنسبة لي، التي أنشئت في الأساس. وأظهرت شريط التنقل هذا لي ما خلية سبيل المثال يمكن أن تبدو وكأنها، ويمكنني النقر المزدوج هذا، تغيير العنوان. أية مخاوف أخرى UI أستطيع التعامل هناك. ملف الرأس تبدو بسيطة حقا. بدلا من القول هذا هو UIViewController نقوله الآن هذا هو TableViewController، حتى نعرف أننا نريد لدعوة كل تلك الأساليب الجدول. القادم أريد إنشاء الممتلكات التي يجري لتمثيل الأمور داخل بلدي الجدول. هذا الجدول هو الذهاب الى عرض بشكل تعسفي قائمة الفاكهة، وغير ذلك لست بحاجة لخلق بعض مجموعة التي يمكن إدراج I الفاكهة. داخل ملف تطبيق بلدي أول شيء أريد القيام به هو أريد أن أتأكد من تهيئة هذه المجموعة. قلت alloc الحرف الأول، إنشاء مجموعة بلدي الفاكهة، وانا اضافة 4 أشياء إليها، واحدة منها هي أكثر إثارة للجدل من ال 3 الأخرى. والآن لدي مجموعة من حجم 4. نحن تهز أنه حتى في CS50. لدي الآن مجموعة من حجم 4. الآن انا ذاهب لبدء الإجابة على هذه الأسئلة، وفعلا، عندما خلق هذا التطبيق تم بالفعل كل هذا بالنسبة لي. لم يكن لدي لكتابة عدد من المقاطع في طريقة عرض جدول. كان بالفعل هناك، وأنا ملء الفراغات. عدد المقاطع لدي؟ واحد. جميع القيام به. عدد الصفوف لدي؟ حسنا، لدي صف واحد لكل الفاكهة، لذلك هذا العدد هو خاصية في أي مجموعة أن يقول كيف كبيرة هو؟ هذه هي الطريقة العديد من الصفوف لدي. وأخيرا، أريد أن أقول ماذا كل خلية تبدو وكأنها؟ انا ذاهب الى القول dequeueReusableCellWithIdentifier. مرة أخرى، وكتب بالفعل هذا بالنسبة لي. لم يكن لدي للقيام بذلك نفسي، وأريد أن نعود هذه الخلية في هذا الموقع. تذكر أننا يدعو هذا الأسلوب نفسه في كل خلية واحدة، وهذه الحجة هنا، هذه الحجة indexPath، يقول ما أنا فيه صف إذا قلت indexPath.row أسفل هنا هذا وسوف تكون 0، بعد ذلك سوف يكون 1، بعد ذلك سوف تكون 2، وهذا إذا كنت لا تعرف ما أنا الخلية تعرض حاليا. أريد أن تعيين النص من الخلية باستخدام هذه الخاصية textLabel للذهاب داخل مجموعة الفواكه والحصول على بلدي الكائن المقابلة لكل صف. إذا كانت هذه هي سلسلة، وأنا الآن تحديد خاصية النص إلى سلسلة. أستطيع أن أفعل شيئا واحدا الأخرى. يمكنني أيضا تسجيل معالج حدث على كل من الخلايا، لذلك عندما كنت اضغط على كل من هذه الخلايا هذا didSelectRowAtIndexPath، وهذا هو الذهاب ليتم استدعاؤها بالنسبة لي، ذلك ببساطة عن طريق تحديد هذا لا أستطيع التعامل مع ما يحدث الآن عند النقر فوق خلية، ومرة ​​أخرى، نحن يمر في الخلية التي تم استغلالها بحيث يمكننا إعادة استخدام هذا المعالج نفس الحدث لكافة خلايانا. مرة أخرى، هذا شيء تقوم به دائرة الرقابة الداخلية بالنسبة لي. دعونا عرض آخر المنبثقة المزعجة تقول ببساطة اخترت شيئا حيث أن شيئا سيكون الكائن صف. عند تشغيل هذا، وأنا ذاهب ليكون هذا الرأي جدول لطيفة مع صف واحد لكل من هذه الفاكهة، وإذا كنت على إحدى يقول لي ما حدث. معنى؟ دعونا نبني قليلا أكثر تعقيدا من التطبيق، بقدر ما اخترت النقر الطماطم. الجزء الجميل في storyboarding وانها ليست فقط الذهاب للمساعدة في تصميم شاشات لنا بشكل فردي، انه سيكون أيضا لمساعدتنا ربط التطبيق معا بأكمله، وبالتالي فإن التطبيق النهائي سنكون المبنى هذا لطيف أخبار الرياضة القارئ، وهكذا ستكون لدينا شاشات متعددة، ولذا فإنني يمكن أن تمثل الواقع كل من هذه الشاشات متعددة على لوحة العمل، ويمكنني تصغير وانظر بلدي التطبيق من مستوى عال. من أجل إنشاء عنصر جديد من داخل بلدي القصة المصورة انها حقا بسيطة داخل واجهة منشئ. إذا كنت ترغب في إضافة شاشة أخرى لهذا، على سبيل المثال، يمكنني تكبير أول مرة مع قرصة التكبير أن أبل يحب كثيرا، وإلى هنا قبل أن بحث عن زر وأنا سحب وإسقاط زر إذا كنت ترغب في إنشاء شاشة جديدة يمكن أنا فعلا مجرد سحب وإسقاط وحدة تحكم كامل مشاهدة، حتى لو كنت يلتقط هذا، تسحبه أكثر من هنا، مهلا، هناك شاشة أخرى، وذلك باستخدام هذا الملف الآن وحة العمل نفسه ويمكنني أن كل من الشاشات داخل بلدي التطبيق، وأستطيع أن تصغير وانظر كيف تتفاعل. وهذه لا تتفاعل حتى الان. الطريقة التي تتفاعل هذه الشاشات 2 هو تعريف العلاقات. يمكنك أن تقول في الأساس هذه الشاشة، عند الضغط على هذا الزر، أريدك أن تنزلق الى هذه الشاشة الجديدة. وهذا يعني أن هناك هذا النوع من العلاقة بين  الشاشة الأولى والشاشة الثانية. سيكون لديك أساسا سهم من ذلك الزر إلى الشاشة الثانية قائلا أنه عند الضغط على هذا الزر وهذا حيث كنت تريد أن تذهب. مثلما تتحكم النقر نحن ننجر وراء وتعريف هذه المنافذ ونحن في طريقنا لفعل الشيء نفسه لتحديد هذه segues على. سنرى مثالا لذلك، وقبل أن تمر بمرحلة انتقالية في الواقع من شاشة إلى أخرى دائرة الرقابة الداخلية هو لطيف بما يكفي لاستدعاء هذا الأسلوب دعا prepareForSegue، وهذا هو المكان الذي يمكن أن تبدأ إرسال البيانات من التطبيق إلى آخر. في المثال سوف نكون على وشك أن ننظر في الأمر يسمح لنا أساسا لتصفية فرق البيسبول البطولات من قبل والانقسامات. عند تحديد الدوري، على سبيل المثال، أريد أن الانتقال إلى الشاشة وجهتي المقبلة حيث يمكنني عرض كافة الانقسامات في هذا الدوري أو كل الفرق المختلفة. ولست بحاجة لإرسالها إلى الشاشة التي ما الفرق يجب عرضه. للقيام بذلك وأنا ذاهب للاستفادة من هذه الطريقة هنا. وأخيرا، مجرد نقطة عشوائية على دائرة الرقابة الداخلية. إذا كنت ترغب في تخزين البيانات هناك هذا الشيء يسمى البيانات الأساسية، الذي هو في الواقع نوع من التعقيد للعمل مع. يمكنك أيضا استخدام SQL لتخزين البيانات، التي، مرة أخرى، هو لطيف ولكن نوع من على الجانب أكثر تعقيدا للعمل مع، ولكن دائرة الرقابة الداخلية كما يدعم هذه الأشياء حقا بارد يسمى قوائم الممتلكات، وقائمة الممتلكات هو مجرد ملف الذي يمثل أزواج قيمة المفتاح. يمكنك تعريف قائمة المفاتيح، وكنت أقول هذا المفتاح سيكون صفيف. هذا المفتاح سيكون سلسلة، وأساسا أي شيء يمكنك القيام به في JSON يمكنك أن تفعل داخل قائمة الممتلكات، وحتى هذا لطيف حقا يسمح لنا بالعمل مع بعض البيانات. على سبيل المثال، لدي هذا Teams.plist بأنني خلقت. أنا خلق جديد ملف PLIST، وأستطيع أن انتقل لأسفل. هذا هو القاموس، وهذا هو القاموس، وهذه هي الجمل، وحتى هذا هو تمثيل رسومي لللطيفة وثيقة JSON أو مجرد مجموعة من أزواج قيمة المفتاح، لذلك هذا هو والبيانات التي سوف يتم العمل مع داخل بلدي التطبيق. دعونا يأتي أولا أكثر من هنا. لدينا الكثير من الملفات الآن. ولكن دعونا يأتي أولا إلى هنا إلى لوحة العمل. هنا لوحة العمل، ما اذا كان يمكنني تصغير- يمكننا أن نرى الآن أن هذا هو تدفق بلدي التطبيق. أنا ذاهب الأولى لبدء على هذه الشاشة. أنا ذاهب إلى أسفل هذه الشاشة ل، وانا ذاهب الى أسفل هذه الشاشة ل، ويمكننا أن نرى هنا أنه إذا النوع الأول من نقل واحدة من هذه في جميع أنحاء لدينا هذه السهام ذاهب من هنا الى هنا، وكانت الطريقة التي يمكنني تحديد إذا كنت سهم تكبير قليلا، وإذا كنت تأتي إلى وحدة تحكم عرض، وهنا خلية، وأريد أن أقول أنه عندما قمت بالنقر فوق الخلية أريدك أن تنزلق أكثر إلى شاشة أخرى. يمكن انا اقدر ببساطة باستمرار السيطرة، انتقل أكثر من قليلا، باستمرار السيطرة، اسحب هذه الخلية مرارا وترك. وأكثر من هنا نقول ما هو التحول الذي تريده للاستخدام؟ هل تريد استخدام هذا الشيء الشريحة التي يطلق دفعة؟ تريد أن تنزلق من القاع؟ أن يسمى مشروط. ومرة كنت فوق واحدة من هذه، انها سوف تسحب هذا السهم بالنسبة لي، وهذا يعني أن التعامل مع الواقع لقد ماذا يحدث عند الضغط على هذا الزر بيانيا. لم أكتب أي رمز لشريحة فعلا من شاشة واحدة إلى المرحلة التالية. I تعريف هذا داخل بصريا من بناء واجهة. إذا كنت اضغط على هذا السهم، يمكننا أن نرى أن هذا الشيء أعطى اسما. دعوت عليه showDivisions، وهذا حتى أستطيع أن أعرف ما الانتقالية على وشك أن يحدث، وسنرى ماذا في ثانية واحدة فقط. هذه هي الطريقة التي كنت السلكية حتى شاشات مختلفة في بلدي التطبيق. إذا كان هذا الزر، على سبيل المثال، بدلا من طريقة عرض جدول، يمكن التحكم في النقر على زر، اسحب فوق إلى الشاشة التالية، وهذه هي الطريقة التي يمكنني القيام به الملاحة بهذه الطريقة. بسرعة حقا، إذا وصلنا إلى MasterViewController، مرة أخرى، نحن ذاهبون لمجرد تحديد قائمة من الأشياء سيتم عرض ذلك في طريقة عرض جدول. هنا أنا أقول أريد منك أن تأخذ هذا الملف PLIST، وأنا أريد منك أن تصل إلى تحميله القاموس، وبمجرد الانتهاء من ذلك القاموس، وانا ذاهب للرد على تلك الأسئلة نفسها مرة أخرى. هنا هو عدد من الأبواب. واحد، وهناك صف واحد لكل جامعة، والنص من كل خلية يجب أن يكون إما أول واحد، والدوري للمرة الأولى، الدوري الثاني، وهلم جرا. وأخيرا، أنا ذاهب إلى استخدام هذا الأسلوب فقط أننا رأى دعا prepareForSegue، وهذا هو الأسلوب الذي سيكون عندما أطلقت فوق على واحدة من تلك الصفوف وتفعيل ذلك أن الانتقال أن أقوم بإعداد مع الأسهم. هذا يقول أنني يمكن أن يكون لها عدة العلاقات من شاشة واحدة إلى أخرى. إذا كان لدي 2 أزرار كل زر ويأخذك إلى شاشة مختلفة انا ذاهب الى دينا 2 segues على، 1 لكل زر. ولكن هذا هو prepareForSegue، مرة أخرى، سوف يتم إعادة استخدامها لكل من علاقات مختلفة، بحيث يعني أنني بحاجة إلى وسيلة تحديد إذا قمت بالضغط على الزر الأول أو تضغط على الزر الثاني. أتذكر عندما أعطى أن يواصل. اسم، وهذا showDivisions، هذه هي الطريقة وأنا أعلم الآن أن هذا هو يواصل. أن تم تفعيل. كل ما أريد القيام به هو أنني أريد أن أقول أريد معرفة ما مجرد ضرب، وذلك للحصول على ذلك، أستطيع أن أقول أريد indexPath للصف المحدد، تذكر فقط حيث يقول indexPath أنا النقر فقط، ثم أريد أن أقول أريد أن معرفة أين أنا ذاهب. هذا destinationViewController، وهذا هو ملك لليواصل.. هذا هو الشاشة انا ذاهب الى، إذا كنت لا تعرف أن ما يسمى الشاشة انا ذاهب الى DivisionsViewController أنا خلقت لتلك الفئة، وحتى الآن إذا قلت d.divisions أنا الآن تحديد خاصية تحكم عرض انا على وشك الانتقال إليه. هذه هي الطريقة التي انا إرسال البيانات من شاشة إلى شاشة أخرى. مجرد النظر في هذا DivisionsViewController هنا يمكنك ان ترى ذلك في ملف ح. هناك هو أن الانقسامات الممتلكات، وهذا ما أنا ملء أساسا، لذلك هذه هي الطريقة وأنا أعلم أنني عرض الانقسامات الموافق الدوري أنني النقر عليها، ومرة ​​أخرى، وعرض جدول الفعلية تبدو الى حد كبير هي نفسها، فقط تلك الإجابة 3 أسئلة بسيطة فضلا عن تحديد ماذا يحدث عند الانتقال إلى الشاشة التالية. فقط بضعة أشياء أخرى هنا. لاحظت في الجزء العلوي هنا أنه بدلا من القول تشمل # أنا أقول الآن استيراد #. هذا هو مجرد شيء الهدف-C. استيراد هي في الأساس نسخة من أجمل تضمين، وعلى سبيل المثال، ونحن بحاجة لمعرفة ما هو هذا الصنف، لذلك لا أستطيع أن أقول فقط DivisionsViewController. إذا لم نكن داخل الوسم standardio.c من الملفات لدينا ج. كان المترجم أي فكرة عما كان printf. وبالمثل، إذا كنت لا استيراد DivisionsViewController المترجم له حقا أي فكرة عما هو DivisionsViewController. فقط للتأكد من أن الملفات داخل م مختلفة. عليك التأكد من استيراد المقابلة. ملفات ساعة بحيث مترجم يعرف ما يجري. وأخيرا، ما يفعله هو في نهاية المطاف أبل عرض بعض البيانات باستخدام طريقة عرض على شبكة الإنترنت، وهكذا وجهة نظر شبكة الإنترنت هو كائن التي يمكنك تضمين مستعرض ويب قليلا داخل التطبيق الخاص بك. كل ما عليك القيام به هو توفير URL لمتصفح الويب الخاص بك، لذلك أريد أن أذهب إلى mlb.mlb.com، وهذه هي الطريقة التي يمكنني الوصول إلى الصفحة الرئيسية لكل فريق، وذلك عن طريق تمرير في هذا URL يمكن للعرض ويب عرض هذه بالنسبة لي، ويمكنني تصفح حولها، ومحاكاة قيد الاستخدام من قبل أن واحدا. جاء هذا من الآن PLIST بلدي. إذا كنت فوق هذا جاء أيضا من هذا PLIST بلدي، وكان التعامل مع هذا الانزلاق من خلال تحديد هذه segues على. I فوق هذا وأكثر واحد، والآن هو هنا UIWebView بلدي، فقط حتى من هذا القبيل وهنا موقع لأنني جزءا لا يتجزأ من URL فقط، وأنا لم يكن لديك للتعامل مع أي شيء مجنون. هذه هي الطريقة لعرض صفحة ويب. وترد أيضا أشياء مثل هذا الزر مرة أخرى هنا بالنسبة لي تماما مجانا لأنهم تعريف هذه العلاقات باستخدام I segues على. أي أسئلة؟ نعم. [طالب] لذلك عند استخدام alloc، لست مضطرا ابدا الى أي شيء مجانا؟ بالضبط، عند استدعاء alloc والحرف الأول لم يكن لديك لاطلاق سراحه. IOS هو الذهاب الى التعامل مع كل ذلك لك. إنه لأمر رائع، وكنت لا كسر أية قواعد. نعم. [طالب] إذا كنت لتشمل المزيد من الفرق التي يمكن أن يصلح على الشاشة، كان يمكن أن يكون تلقائيا خيار التمرير، أو شيء هو أن تحتاج إلى إضافة؟ بالضبط، إذا كان لي المزيد من الفرق، على سبيل المثال، فإنه تعامل مع تلقائيا التمرير بالنسبة لي، وجميع الشواغل الأداء مع الجدول يتم التعامل مع ضخمة أيضا تماما بالنسبة لي. أسئلة أخرى؟ كل هذا الرمز سوف يتم نشرها. نحن نوع من التغاضي عن القليل من تفاصيل أكثر طفيفة، لكن الأمور مثل تحديد بعض الخصائص لعرض ويب ليست سوى الأشياء التي يمكنك الحصول عليها من خلال التصفح وثائق أبل، الذي هو في الحقيقة، حقا لطيف وضعت بها. لديهم الكثير من تطبيقات نموذج ومثال الأعراف واجهات برمجة التطبيقات المختلفة، وذلك بالتأكيد اطلاع تلك إذا كنت تستطيع. فقط بعض الروابط مفيدة قد ترغب في إلقاء نظرة على. هذه هي بعض الأدلة الوثائق في متناول يدي. محددات مواقع المعلومات هائلة، لذلك كنت تقصير فيها. هذا واحد الأول هو مكتبة كاملة من الوثائق. هناك أشرطة البحث قليلا، حتى إذا كنت بدء زر الطباعة انها ستبدأ مما يتيح لك كل المعلومات حول كل الأشياء التي يمكنك القيام به مع زر واحدة. لقد تضمنت أيضا عرض دليل البرمجة الجدول. يتعامل بها جهات النظر الجدول بالتفصيل أكثر من ذلك بكثير، كيف أن تفعل أشياء مثل إضافة حيوي الخلايا أو خلايا تحرير أو إزالتها. هناك الكثير من تطبيقات عينة من أبل التي سوف تظهر لك كيفية القيام بذلك، وأخيرا، وهذا هو آخر المبادئ التوجيهية واجهة الإنسان، وهذا هو في الأساس مناقشة بعض مكونات واجهة مستخدم، أشياء مثل لا تجعل هذا الزر 4 بكسل بنسبة 4 بكسل. وهذا هو فكرة سيئة، وغيرها من الأمور التي يريد أبل لك أن تفعل لتشجيع التصميم الجيد. أي أسئلة قبل أن مشاركة حتى الانتهاء؟ حسنا، بالتأكيد يشعر حرة إلى we're ستكون لدينا علامات خاصة على مناقشتها. سيتعين علينا أن ننتظر لدائرة الرقابة الداخلية واحدة، بحيث يشعر بالتأكيد مجانا للاستفادة من ذلك. إذا كنت ترغب في العمل مع زملائك في مشاريع أو مساعدة معرفة بعض الاشياء عشوائي دائرة الرقابة الداخلية لا تتردد في الكتابة لي، وبالتأكيد جميع الاطلاع على الانترنت متاحة ل فقط في مصلحة الوقت ونحن نوع من التغاضي عن أكثر التفاصيل الدقيقة الحبيبات من الأشياء. ولكن إذا لم يكن كذلك، ثم حظا سعيدا في مشاريع دائرة الرقابة الداخلية الخاصة بك، وآمل أن يكون تدفق كبير من التطبيقات في المتجر. [CS50.TV]