RHED SHI: ברוכים באים לראות סמינר CS50 - מבוא לiOS. תודה לכולכם שבאתם. אני מקווה שאתה מתרגש בדיוק כמו כמו שאני על iOS. בשנה שעברה, לקחתי CS50 כמו בכיתה י ', ואני בעצם למדתי iOS עבורי פרויקט גמר. וזה היה די - טוב, זה לא היה קל, אבל יש הרבה הדרכות תמיכה מקוונת. ואני באמת מקווה שעם זה סמינר, אני אתן לך חבר 'ה בראש להתחיל בפיתוח iOS לכן, במונחים של פיתוח iOS, יש שני דברים עיקריים שאנחנו רוצה לכסות היום. ראשית, את השפה - השפה הולכת להיות ב Objective-C. למעשה אנחנו שומעים משהו ממש מרגש. אז, אתה יכול להצטרף לכולו אפל קהילה של מפתחים ולבנות כמה אפליקציות ממש אחלה. כמו כן, 7 iOS הוא יפה, בתקווה, לחלק מכם. אבל זה שנוי במחלוקת, אני יודע. ובעיקר, מה שאני רוצה לעשות הוא מדריך שלך דרך Objective-C, וגם Xcode, שהיא משולבת סביבת פיתוח שתהיה עבודה בעבור iOS. וכך, רק מילה על Objective-C. בעיקרון, זה בדיוק אותו הדבר כמו C, אבל עם הרבה דברים אחרים. וכך, יותר חמור, זה בעצם של ג להגדיר סופר אז כל דבר שאתה יכול לעשות ב-C עכשיו, שהוא בעצם רוצה pset 0 עד 6, אתה יכול לעשות בObjective-C. אז, לא מרגיש פחד על זה חדש שפה שבה אתה הולך ללמוד. אתה כבר כיסה הרבה ממנו, כי כל מה שעשית C האחרון סמסטר, אלא שעכשיו אתה הולך יש לי הרבה יותר לעבוד איתו. ואני רק הולך להוביל אותך דרך כמה דוגמאות כדי להדגיש כמה של מפתח ההבדלים שמצאתי היו באמת חשוב כאשר נודע לי Objective-C בשנה שעברה. טוב, בעצם, כל כך, הנקודה אחרת הוא, Objective-C הוא, כמובן, מונחה עצמים. ונדברנו קצת על מה זה אומר מאוחר יותר. בעיקרון, זה כמו איך אתה עבד עם structs בpset האחרון, עם צמתים ואחרים דומים דברים כאלה. למעט, בObjective-C, כל מה שהוא אובייקט, ואתה הולך להיות עובר סביב מצביעים לאובייקטים ולא הערכים עצמם. אז, זה רק משהו חשוב כדי לזכור. אז, למה שלא נתחיל עם כמה הבדלים בתחביר בין C ו Objective-C? אני רוצה להדגיש # כולל, אתה יודע, io.h הסטנדרטי ב-C ו-C + +, עם גרסת Objective-C של זה, אשר הוא # יבוא, ואז איזה קובץ כותרת. במקרה זה, יהיה זה UIKit, מכיר אותך, לחתוך UIKit.h. זה יכול להיות גם, אתם יודעים, MKMapview לך לקצץ MKMapview.h אם אתה רוצה לעשות, כמו, מפה פנימית של האפליקציה שלך. דברים דומים כאלה. לכן, הדבר החשוב הוא כולל כעת השתנה ליבוא. אבל הרעיון עדיין נשאר. אתה הולך להיות יבוא כלשהו של קובץ כותרת לתכנית שלך. אני גם רוצה להדגיש את ההבדל בין printf וNSLog. עם זאת, כפי שאמרנו קודם לכן, Objective-C הוא סופר מערכת קפדנית של C, מה שאומר שprintf קיים בObjective-C, יותר מדי. אבל, רוב האנשים לא משתמשים בזה. רוב האנשים משתמשים בזה כי זה NSLog נותן לך חותמת זמן, ואנו רואים אותו בפעולה מאוחר יותר. אבל, זה בדרך כלל מועיל יותר הדרך להדפיס את המשתנים. ואני רוצה גם להדגיש כי NSLog לוקח בבדיוק אותו הדבר ערכים מציין מיקום כמו printf עושה - כך% d הוא לint, f% הוא למצוף. עם זאת, אני רוצה להדגיש מאוד זה האחרון - NSLog% בסימן - שהוא מציין מיקום עבור אובייקט. וכפי שאמרתי קודם לכן, עסקות Objective-C פחות או יותר בעיקר בחפצים, ואז זה יבוא בשימוש בעת רוצה להדפיס, אולי, אולי NSArray, או NSDictionary, או NSString. לכן, גם, שים לב, כי בNSLog הצהרה, שיש לנו בשלט בחזית לציטוט - כי הוא מסמן מחרוזות ש, עכשיו, בObjective-C הם אובייקטים. הם כבר לא כוכבים פשוט char. הם אובייקטים, והם להתייחס אליהם ככאלה. אז, זה באמת חשוב שכאשר אתה משתמש NSLog זה לוקח בNS מחרוזת, מה שאומר שיהיה לך לכלול במולך מרכאות. וזה למה שאתה רואה, כאן, בכל הפונקציה שלי קוראת לNSLog זה, אני יש במול הציטוטים, אפילו למרות% d ו% f שלהם כולם אותו הדבר מג כל שאלות עד כה? אני אנסה לעבור את זה מהר כל כך שיכול להיות לנו יותר זמן לעבוד עם Xcode וObjective-C, ולכן כי אתם יכולים לקבל יותר מכיר את זה. בשלב הבא, אני רוצה להדגיש משהו חשוב מבחינה מושגית. אז, ב-C, רוב הדברים הם פונקציות. אנחנו עושים את קריאה לפונקציה. אנו מצהירים פונקציות בדרך זו, עם תמורת סוג ראשונה, ולאחר מכן את שם פונקציה, סוגריים, ולאחר מכן כל טיעונים והסוג של טיעונים אלה אנחנו רוצים להעביר פנימה וObjective-C, כי הכל הוא אובייקט או בכיתה - כך מחלקה ואובייקט הם שני מונחים ש הם בעיקר שם נרדף לכל אחד אחר, אז אני יכול להשתמש בם לסירוגין במהלך הסמינר. אבל, אתה תראה שיש לנו שיטות ב Objective-C ולא פונקציות. ושיטות שייכות לאובייקטים. אז באותה מידה, אולי לקחת לדוגמא, צומת - הסוג שלנו [לא ברור] צומת מpset 6 או 5 - יש לנו את המילה, רכוש, או מצביע הצומת הבא. שיטות הן פשוט פונקציות בתוך מסוג כלשהו של מבנה. לכן, במקרה זה, המבנה יהיה האובייקט, ולאחר מכן בשיטה הוא משהו ששייך לאובייקט. וכך היית להצהיר, סוג של, שיטה. היית מתחיל איתו, שוב, את התשואה סוג - כך, אני ניסיתי צבע קוד מילות מפתח כאן, כך שאתה חבר 'ה יכול לראות, לפחות, העיצוב דמיון בין הפונקציה הצהרות והצהרות שיטה. אז, אתה מתחיל עם, אתה יודע, תמורה סוג - במקרה הזה, זה מערך, או מצביע NSArray - ואז יש לך בשיטה זו. ואז, מה שמעניין כאן הוא כי במקום שיש סוגריים, אנחנו יש נקודתיים אלה. ואז, מול הטיעונים שלנו, לשים, שוב, בסוגריים את הסוג הטיעון שלנו. אז, עכשיו שאני מנסה לעשות השוואה בין, אתה יודע, וn מספר, כי הם שני ints כדומה. ואז, אחר אחד הוא סוג NSUInteger. ולאחר מכן, עם Objective-C, כאשר אתה רוצה להיות טענות מרובות ב הסעיף שלך שיטה, אתה, סוג של, להפריד אותם כמו סוג של זה - אני לא ממש בטוח איך לתאר את זה, אבל זה הוא דוגמא טובה לאופן שבי יכול להיות ויכוחים מרובים שם. אתה יכול, כמובן, רק לחלוטין להתעלם מהמעי גס andArray NSArray מערך, אם אתה רוצה רק שיטה שלוקח בנימוק אחד. כן, שאלה. קהל: האם שני NSUInteger ו טיעוני NSArray שניתן לנקוט ב בתוך NSArray? RHED SHI: כן. אז, תן לי להסביר. אז, כן. לכן, השאלה הייתה הם NSUInteger ו NSArray * סוגים של הטיעונים, וזה נכון. אז, אתה תמיד רוצה לציין מה הסוג של הטיעון שלך הוא. וכאן, אני מנסה להכיר לך לחלק מהתחביר וvocab של Objective-C, ולכן אלה הם סוגים בפועל כי אתה תהיה התמודדות עם. וכמו שאתה תשים לב, מערכים הם כבר לא, סוג של, דברים סוגר פשוטים. הם אובייקטים. אמנם, אם אנחנו הולכים על למשנהו שקופיות, אנו יכולים לראות שאנחנו יכולים קשה קוד NSArray בObjective-C עם פשוט סמל במול סוגריים. אני לא, למעשה, די בטוח שאם אני מבחינה תחבירית בקידוד קשיח מערך כראוי לגרסת C, אבל זה אמור להיות במערך C. אז, זה איך היית, אתה יודע, אולי להשתמש בפונקציות או שיטות שיצרנו קודם לכן. נכון? אז, זה מקום שבו אנו מצהירים פונקציה ואת השיטה שלנו. ועכשיו אנחנו רוצים להשתמש בם ב התכנית שלנו, ואת זה הוא איך היינו עושה את זה. אז, ב-C, היית צריך, אתה יודע, אולי, ב bool, ואתה מגדיר את זה שווה את הפונקציה, ולאחר מכן אתה עובר בויכוחים. בObjective-C, זה די יותר אותו הדבר. יש לך NSArray * my_array, וזה הולך להיות שווה - עכשיו, רק הבדל כאן הוא דבר האובייקט הזה, שבו אני כבר מסומן בצהוב, ו כפי שאתה יכול לראות, ב-C, יש אין מילה אחרת צהובה. וזה בגלל ששיטות שייכות עם חפץ מסוים. אז בגלל זה אני צריך אובייקט זה, פחות או יותר, קורא בשיטה זו ב המספר אפס, ולאחר מכן NSArray, b, c, d. כל שאלות על זה? אנחנו תראו את המושגים האלה בפעולה די מהר, כאשר אנו נכנסים להדגמה. על אישור. עכשיו, אני רוצה לדבר קצת בקצרה כ -5 Xcode, שהוא סביבת פיתוח משולבת כי אתה תהיה עובד עם. אני יודע שהרבה מכם, או חלק מכם, אין לי מחשבי מקינטוש, אשר מהווה בעיה בגלל Xcode אינו זמין עבור Windows ו-PC. אל תשאל אותי למה, אבל כנראה - כן, של חברה. לא משנה מה. אבל בכל מקרה, ולכן, אני מתנצל אם חלק מן אתה צריך להוריד איזה מכונה וירטואלית עבור Mac ב כדי להפעיל Xcode 5. אבל זה מגניבות למדי תוכנה לשימוש. וכך, לפני שאנחנו צוללים לתוך כל סוג של הדגמה, אני רוצה רק להראות לך תמונה של מה שנראה כמו בXcode שלך חלון, ולאחר מכן גם לדבר על מה הוא כל המרחב הזה. אז, זה סוג של כמו ללמוד כיצד להשתמש ב-Microsoft Word, אלא אתה רוצה מקבל להכיר עם כל דברים שונים ש הולכים כאן. אז קודם כל, אני רוצה להפנות אותך לסרגל הכלים בראש. אתה תראה את זה, בחלקו העליון, יהיה לך את שם קובץ - או, בעצם, שם הפרויקט שלך ולאחר מכן את שם הקובץ שלך. שימו לב למשחק ו לחצני העצירה. אלה הם אלה שאתה תהיה משתמש כדי להפעיל את היישום שלך על סימולטור - סימולטור iOS. זה באופן אוטומטי מגיע עם Xcode 5, אז אתה לא צריך לדאוג הורדה איזה סימולטור. אתה פשוט לוחץ לשחק ו לאחר מכן הוא מפעיל את האפליקציה שלך. ואתה יכול לשחק איתך, ו תראה איך זה עובד מאוחר יותר. ואז, במרכז, כמובן, שבו כל הקוד היפה שלך הוא הולך. ולאחר מכן, בצד שמאל, תוכל יש את זה, בערך, תיקייה - ניווט - ולאחר מכן, תוכל גם לראות את זה, יחד עם סמל התיקייה, יש חבורה של סמלים אחרים שם כי יהיה שימושי בהמשך. ולאחר מכן, בצד ימין הוא כלי אזור שבו אתה יכול לעבוד עם חלק מהאובייקטים ולציין, אתה יודע, מה הצבע צריך להיות, מה גופן הטקסט צריך להיות, וכולי. אמנם, כל מה שאתה עושה באזור השירות, אתה יכול לעשות בקוד גם כן. וכך, אני הולך באמצעות שני דוגמאות לשימוש, פשוט, לא קוד ב כל - או קוד מינימאלי מאוד - פסוקים כל הקוד, רק כדי שאתם לדעת מה אתה יכול ולא יכול לעשות ב Xcode וObjective-C. ואז, סוף סוף, למטה בתחתית, יש לך את אזור ניפוי השגיאות. אז, אתה כבר לא צריך לרוץ GDB, וכולי וכולי, על התוכניות שלך. זה באופן אוטומטי עושה את זה בשבילך. ואתה גם יכול להדפיס חומר לאזור זה. אז בעצם, מאוחר יותר, נלך דרך mario.c, אם אתם עדיין זוכרים כי, בXcode. אז זה צריך להיות כיף. ואז, רק כדי להחזיר אותו ל Objective-C, אני רוצה להדגיש את מה אתה יכול לעשות עם אם דוחות. אז, אתה יודע, כי Objective-C הוא על של C, כל מה שאתה צריך לעשות זה, פשוטו כמשמעו, כמו ג אתה פשוט יש הבדלים קלים. אז, תוכל להבחין בצורה לאם אמירה עדיין היא אותו הדבר - יש לך אם, ואז יש לך סוגריים עם מצב הפנימי שלו, ואז סוגריים מסולסלים לכל מה שאתה רוצה לעשות בתוך משם. עם זאת, אני רוצה לשים שקופית את זה כאן, פשוט כדי להמחיש את זה, עם חפצים כי יש לנו עסק עם החברה, אנו צריכים להשתמש בדברים האלה נקרא כמו, שווה למחרוזת, אשר היא, במקרה, שיטה של מחרוזת או אובייקט NSString. לכן, מילה, במקרה זה, היא NSString מתנגד, ויש לה שיטה הנקראת הוא שווה למחרוזת, ואז אנחנו עוברים במחרוזת מקודדת קשה לראות אם אלה הם שווים אחד לשני. כל שאלות עד כה? על אישור. וכן, אני רוצה ללכת על עבור גם הצהרה. כך, למשל, אם אנחנו רוצים לולאה על פני האורך של מחרוזת ב-C, זה צריך להיות מוכר לך. וגם, בObjective-C, אני רוצה כדי להדגיש את זה, סוג של, שיטה הנקראת ספירה. טוב, בעצם, תן לי פשוט לקחת את זה בחזרה. רוזן הוא שיטה של ​​מערך. עם זאת, זה באופן ספציפי יותר רכושו של מערך, ולכן אתה ניתן להשתמש בסימון הנקודה. אבל אני לא רוצה להיכנס ליותר מדי חומר רעיוני זה, אני רק רוצה כדי להראות לך איך דברים היו נראים כמו בObjective-C לעומת ג וגם, אני רוצה לציין כי למרות שאני כבר משתמש NSUInteger מול כל מה שאני שלי בObjective-C, אתה יכול גם להשתמש int, כי int הוא חוקי לחלוטין בObjective-C, גם. כן? קהל: האם זה רק סגנונית, או - RHED SHI: כן. לכן, כפי שתראה - כך, השאלה הייתה היא ש רק עניין סגנוני. כפי שתראה, יש לי, סוג של, כוכב דבר כוכבית למטה בתחתית, ו הקישור שיוביל אותך להצפת מחסנית טופס, שבו מישהו מסביר ההבדל בין int ב NSInteger וNSUInteger. וכך, אתה יכול לקרוא על כך בהמשך. שקופיות אלה יהיו, כמובן, עומד לרשותך. בואו נראה. אוקיי, מדהים. אז, זה כלול גם בשקופית כי חשבתי שזה היה נהדר אתר שמציג לך לתחביר Objective-C. אז, בעצם, למה שלא נעבור ל כרום ולבדוק את האתר הזה? נכון. לכן, מה שאני רוצה להראות לך החבר 'ה כאן היא תמונה זו. אז, זה, בערך, מה שהולך להיות אתה הולך לראות את החלק פנימי של כל קובץ Xcode. בעצם, למה שלא פשוט לקחת רגע, סוג של, קח את זה פנימה לכן, הספר הזה - זה האובייקט ש עם יש לנו עסק. ואז, זה ללא ספק הולך להיות ירושה מאובייקט אחר כלשהו, ​​אבל אתה לא צריך לדאוג בקשר לזה. ולאחר מכן, אותו, אולי, יש חלק ממשתני חבר. הדבר החשוב שאני רוצה להראות לך היא השיטות למשל, כאן. לכן, שיטות למשל מסומנות על ידי סימן מינוס הזה. ואז, כמו שאתה תשים לב, אנחנו כבר מתחיל לראות את הפרדיגמה להכרזת שיטה, נכון? סוג התמורה, את שם השיטה, ו אז הסוג של הוויכוח, ו אז את שמו של הוויכוח. וסימן מינוס זה אומר שזה שיטה, למשל, מה שאומר ש שיטות אלה זמינות רק ל אובייקטים שכבר מופעים. לעמת זאת, שיטות עם תוספת לחתום מולם הן ברמה שיטות, מה שאומר שאתה יכול להתקשר שיטות אלה, גם אם אין לך אובייקט שנוצר עדיין. לכן, לדוגמה ברורה, NSString היא בכיתה. ואתה יכול לקרוא, למשל, שיטות בכיתה על NSString - בפועל, כמו, המילה NSString. עם זאת, על מנת להשתמש בם שיטות, אתה בעצם צריך ליצור מחרוזת. לדוגמא, מחרוזת הכוכבים NSString שווה במרכאות, שלום עולם. ואז, אתה יכול להשתמש בשיטות אלה - שיטות למשל - שבמחרוזת עולם שלום. אז, זה ההבדל בין שיטות למשל ושיטות בכיתה. ו, אנחנו פשוט כיסינו את החלק הזה. מאפיינים הם עוד דבר שהם חלק פנימי של אובייקטים, בעצם. ולך להכריז עליהם עם במילות מפתח של נכס. יש לך אפשרויות אלה, לכאן, שאני אסביר לך מאוחר יותר, כאשר אנחנו הולכים להדגמה. כן? היי. קהל: האם אתה יכול להגדיל את התצוגה, בבקשה? RHED SHI: אה, כן. סליחה. קהל: תודה לך. RHED SHI: זה צריך להיות הרבה יותר טוב. קהל: כן. תודה. RHED SHI: כן, בבקשה להזכיר לי אם אני שוכח כדי להגדיל או להקטין את התצוגה. אז, זה כל מה שרציתי כדי להראות לך על - וואו, זה המון - לאתר זה. אז, בואו נחזור לשקופיות שלנו. למעשה, עכשיו בואו ניקח רגע לצלול לתוך הדגמה. אז, נתחיל עם פרויקט Xcode חדש. לכן, אם אתה פותח את Xcode על כל המכונות שלך, זה צריך לקחת לך קצת דף שבו הוא אומר, כאילו, או פתוח עד פרויקט קיים או חדש פרויקט, ואתה צריך לחץ על פרויקט חדש. ואז, זה צריך לקחת לך מסך זה. כן? קהל: אם אין לנו מק, אנחנו פשוט סוג של צמרמורת? RHED SHI: או להסתכל על עם מישהו, כן. כן. אתה יכול להירגע, יותר מדי. על אישור. לכן, מה שאנחנו הולכים לעשות קודם, עכשיו, הוא, בעצם, אנחנו הולכים לעשות יישום תצוגה אחת. לכן, אם תשימו לב, מה נהדר על Xcode ותמיכה אפל עבור המפתחים הוא שיש לך הרבה תבניות לעבוד עם כבר. אתה יכול, למשל, לעשות יישום של האדון ופירוט. אתה יכול לעשות את משחק - ובעצם, אני לא אכנס למשחקים, משום שמשחקים הם סיפור אחר לפיתוח iOS. והם סוג של להפריד, אז אני לא אכנס לזה. לאחר מכן, יש המבוסס על דף שאתה יישומים. יש לך יישום כרטיסייה - כל כך אוהב, למשל, בנק אוף אמריקה כנראה יש לו, כמו, אפליקציה באמצעות כרטיסיות. זה אלה שבם יש לך הכפתורים בתחתית. ואז, יש לך משחק ערכת ספרייט. או שאתה יכול לעבוד מהתחלה, אשר הוא מה שנעשינו מאוחר יותר. אבל בואו, קודם כל, תתחיל עם יישום תצוגה אחת. ואז, זה ישאל לשם מוצר, ואנחנו יכולים פשוט לעשות את הבדיקה. שם ארגון - כן, שם ארגון, מזהה חברה - אלה הם חשובים אם אתה הולך לשים את האפליקציה שלך בחנות היישומים. חוץ מזה, הקוד שלך הולך לרוץ בסדר גמור בלי זה. זה הולך להיות חשוב אם אתה רוצה - כן, כשלעצמה, כמו, לשים את האפליקציה שלך על גבי הטלפון או משהו, והבדיקה שלך את זה, אתה יודע, בחיים אמיתיים - זה יהיה חשוב. זה נוטה בדרך כלל להיות מזוהה עם איזה חשבון מפתחים עם אפל. וכן, אני יודע, כנראה, הרבה מכם לא יהיה כל חשבונות מפתחים. אני יודע שיש האוניברסיטה אחת. אני חושב שיש CS אחד. אבל, אתה יכול שלח לי ואני אנסה כדי להבין את זה בשבילך. אבל כרגע, אני פשוט לשים כמה דברים מציין מיקום כאן. ואתה יכול, כמובן, כאן, בחר אם אתה רוצה שזה יהיה אך ורק ב ה-iPhone, באייפד, או שניהם - יישום אוניברסלי. לכן, לעת עתה, בואו נעשה אוניברסלי, רק לראות את שני הצדדים של הפלטפורמה. בואו נראה. אז, עכשיו, אני הולך לחסוך זה באיזשהו תיקייה. לא משנה איפה - אתה תמיד יכול להעביר אותו מאוחר יותר. ועכשיו, אנחנו הבאנו לפרויקט Xcode שלנו. אני לא הייתי דואג על כל זה. הייתי מציע לא לגעת בכל של זה, אלא אם כן אתה יודע בדיוק מה אתה עושה. אז, כל זה, פשוט להתעלם על פי רוב. אתה לא צריך לגעת בו, ואם אתה לעשות בלגן לך עד כמה דברים כאן, זה נעשה קצת מסובך. אז, למה שלא נסתכל לתוך הקבצים על בצד שמאל בנווט שלנו. הנה, יש לנו AppDelegate.h. יש לנו AppDelegate.m אז, כפי שאתה הודעה, יש לנו כותרת קבצים, אשר בסופו בשעתי נקודה, ויש לנו יישום - למעשה, תן לי להתקרב פנימה על אישור. תן לי להתקרב פנימה נכון, אז יש לך כותרת קבצים ו יש לך קבצי יישום. למעשה - על אישור. זה קצת מוזר, אבל לשאת איתי. ואז, בגלל שאנחנו בחרנו בתצוגה אחת יישום, אנחנו הולכים להיות עבודה עם לוח תכנון. לכן, התכנון הוא משהו שאפל יש לבוא עם כדי באמת לעזור מפתחים במהירות אב טיפוס היישומים שלהם. אז, זה מקום שבו אתה יכול ליצור אפליקציה ללא כתיבה שורה אחת של קוד. עם זאת, ביישום התצוגה היחיד שלנו, אין, כמובן, יש לנו להגיש להשקפתנו, אשר הוא בקר תצוגה. אז, יש לנו את הכותרת ו קובץ יישום, כאן. וגם, אני הולך להקטין את התצוגה עכשיו כי אנחנו נצטרך לעבוד בלוח התכנון. אז, הנה דעתנו. אם אנחנו, פשוט, הפעילו את האפליקציה עכשיו, אין הרבה מרגש קורה. אז, אתה תראה מסך הלבן הזה. בסדר? וגם, באזור השירות שלנו, אנו יכולים להוסיף חבורה של דברים שונים לזה. אז, עם מסכי כאשר אתה מתעסק בiOS, בקרי תצוגה הם אובייקטים שלתמצת, סוג של, את השקפותיך. לכן, בקר תצוגה תמיד יש תכונה שנקרא תצוגה. והדעה כי, בדרך כלל, מכילה, מכיר אותך, מה שאתה רוצה לראות על מסך. אז, כן, בואו פשוט להתחיל על ידי הצבת, אולי, אולי תווית. אז, בואו לשים תווית על שם - לתקוע אותו באמצע. אז, עכשיו שאני כבר לחצתי על תווית, אני יכול להיכנס למפקח המאפיינים ולהתחיל לשנות את הערך שלו. בואו נקראים לזה CS50 צבעים. וכן, אני יכול גם לשנות את הגופן. אז, במקום לעשות מערכת, שהיא ברירת המחדל, אנחנו יכולים לעשות אחד מותאם אישית. אנחנו יכולים לשנות - אתה יודע, Ultralight, להפוך אותו 32. ואז, אנחנו יכולים לעשות את התיבה שלנו גדולה יותר. קהל: האם אתה חושב שאתה יכול להגדיל את התצוגה בקצת יותר, אולי? RHED SHI: כן? על אישור. קהל: רק להקיש את זה? RHED SHI: בוא נראה. זה עובד? קהל: פשוט להעביר את Xcode? RHED SHI: בטח. על אישור. מדהים. קהל: התווית תחת? התווית? RHED SHI: מה זה? קהל: מה נפתחת היה התווית תחת? RHED SHI: לכן, השאלה הייתה, מה נפתחים היה התווית תחת? זה צריך, פשוט, להיות תחת כאן. אני מניח שזה דבר קובייה. אבל בדרך כלל, זוהי ברירת המחדל - אני בדיוק הולך כאן למטה עד שאני מוצא תווית. כן. אז עכשיו, יש לנו התווית שלנו. בואו נתרכז בו. וXcode נותן לנו הנחיות למרכוז אובייקטים. אז, עכשיו בואו להפעיל הקוד שלנו שוב. הנה. אז, יש לנו CS50 צבעים. ועכשיו, בואו נשים את כפתור על שם, נכון? מכיוון שאנחנו רוצים לעשות זה אינטראקטיבי. אז, בואו נשים את הכפתור כאן. ואנחנו קוראים לזה ברז לחצן "כאן כדי להמשיך. "אנחנו גם במרכזה, למעשה, זה כבר מרוכז. כן. אז, עכשיו יש לנו כפתור. ואם אנחנו מפעילים את זה שוב, אנחנו הולכים יש כפתור קטן ונחמד כאן. ואני יכול ללחוץ עליו, אבל זה לא עושה שום דבר, משום שלא עשינו כל דבר עם הכפתור עדיין. אז, בואו ליצור מבט אחר, נכון? אז, בואו נגיד שאני רוצה לנצל שכפתור ואני רוצה לעבור לדף אחר - מבט אחר. מה שאני הולך לעשות הוא, שאני יכול ליצור בקר תצוגה, נכון? עכשיו אני אלחץ על הכפתור שלי, ולאחר מכן, הדבר החשוב הוא, אני הולך לחץ - או - כן, שליטת עיתונות על המקלדת שלי. שליטה. לחץ על הכפתור, ולאחר מכן לגרור. אז, זכור החזק את מקש השליטה. בואו נעשה את זה שוב. אז, תחזיק בשליטה, לחץ וגררו למה שאתה רוצה לעשות. על אישור. ועכשיו, יש לי כמה אפשרויות כאן. אני יכול גם לדחוף, או שאני יכול לעשות מודאלית, או שאני יכול לעשות מותאם אישית. Push הוא רק אם יש לך בקר ניווט. נכון לעכשיו, התצוגה הראשונה שלנו הבקר הוא לא בתוך מכל בקר ניווט. לכן, בקר הניווט הוא אחד שנותן לך את הכפתור חזרה על האפליקציה iOS שבו יש לך, אתה יודע, עליון כי, בערך, סרגל עבה - שבו אתה יכול לחזור, או קדימה, וכולי. נכון לעכשיו, אין לי את זה. וכך, בגלל זה אני לא יכול לעשות את דחיפה. אז, אני לוחץ על דחיפה בטעות, כאן. ובעצם, בואו להפעיל את הקוד, ויש לו לקרוס עליי. רק אם אני לוחץ על הכפתור אם כי, כך - נכון. אז, זה רע. וגם, כפי שאתה יכול לראות, כאן, אנחנו יש הודעת השגיאה. לכן, "ניתן להשתמש רק segues Push כש בקר המקור מנוהל על ידי מופע של בקר ניווט בממשק משתמש ". אז, בגלל שזה לא היה בתוך בקר ניווט, אני לא יכול לעשות את זה. אז, עכשיו, אני חוזר ל תיקייה, חוזר ללוח התכנון. קהל: מה הניווט בקר, שוב? RHED Shi: אז, עכשיו אני אראה לך. בואו נראה. אז, אני הולך ללחוץ על תצוגה זו בקר, ולאחר מכן אני מתכוון ללכת עד מוצר - בעצם, לא, מצטער - עורך. ואני הולך להיכנס - בעצם, האם אני לוחץ על זה? לא. הנה. אני הולך לעלות לעורך, לרדת להטביע ב, ולאחר מכן ניווט הבקר. על אישור. ו, סביבת העבודה שלי נראית ממש מבולגנת, אז בואו לנקות את זה. אז, כל זה הוא התכנון. ובדרך זו - בסדר, תפסיק - אני יכול לבנות משהו במהירות ככה. ולאחר מכן, עכשיו אני יכול לחזור, אתה יודע? אבל זה די משעמם, נכון? לכן, מה שאני רוצה לעשות זה, אני לא רוצה לעשות, פשוט, נוף הבקר. נניח שאני רוצה לעשות בעצם בקר תצוגת טבלה, כך שאני יכול לשים ב כמה צבעים נחמדים, לשולחן. אז, עכשיו ששמתי בתצוגת השולחן שלי בקר, אני צריך לחבר אותו בחזרה מכפתור זה כדי בקר תצוגה. אז אני צריך לעשות את השליטה שלי, לחץ, דבר לגרור שוב. ועכשיו אני יכול לעשות את הדחיפה, כי אני להטביע זה חלק פנימי של בקר ניווט. קהל: ניווט בקר פשוט מאפשר לך לעבור מהמקום למקום? RHED SHI: כן. לכן, יותר מבחינה טכנית, זה אובייקט שבו - כך, בתוך הניווט אובייקט בקר, זה עוקב אחר מערך. ומערך שמחזיק את כל הבא להציג בקרים. זו הסיבה שכאשר אתה לוחץ על גב, זה חוזר לדף הקודם. משום שבקר הניווט אובייקט, או את הקוד שמטפל אובייקט זה, יש מערך ששומר לעקוב אחר בקרי המבט האלה, ו אז יכול, אתה יודע, DQ התצוגה הבקר ולהחזיר לך את קודמו. אז, זה דברים טכניים, אבל - ואני אראה לך בהמשך קוד, אם יש לנו זמן. אני די הולך ואוזל בזמן, אבל - אז, עם תצוגת השולחן, מה אנחנו יכולים לעשות הוא - זה בדרך כלל מוגדר באופן אוטומטי לדינמי אב טיפוס - אנחנו הולכים לעשות את זה תאי סטטי, אחרת אנו הולכים להיתקל בכמה בעיות. ואז, נניח שאני הולך יש סעיף אחד. לכן, חלקים הוא כמו - אם ראו אי פעם את יישום המוזיקה, כאשר יש לך אמנים, קטעים הייתם להיות של דרך Z's - האותיות - ואז, אתה יודע, הפרט שורות יהיו השמות האומנים. וכך, מה שמגניב כאן הוא, שאני יכול לגשת לכל האובייקטים בתוך לוח התכנון שלי לעבור את זה תפריט נפתחים, יותר מדי. אז, אני הולך ללחוץ על הקטע שלי, ואני רוצה, אתה יודע, אולי חמש שורות. ואז, בתוך כל שורה, אני רוצה לשים את תווית. ואני הולך לקרוא כחול הזה. ואז, אני רוצה לשים את תצוגת ממשק משתמש, אתה יודע, אולי ל, כמו, קופסא קטנה. כדי שאוכל להראות לאנשים תצוגה מקדימה של הצבע. ואני אחזור לנכס ו לשנות את הצבע של, הו, אני לא יודע, זה אחד. ואז, שים לב גם, כאן, כאשר אני צריך האביזרים, אני יכול יש לי המון של האביזרים השונים כי בדרך כלל אתה רואה. חיווי הגילוי, הפירוט, או לבדוק את חותם, או פשוט סתם פרט ופרט. אז, אולי אנחנו יכולים לעשות, כמו, גילוי מחוון, למשל. ואז, למה שלא ניקח, להעתיק אלה להדביק אותם, ולשים אותם לתוך השורה בטבלה הבאה. לכן, אנחנו יכולים לקרוא לזה צהוב. וייתכן שאצטרך להרחיב את זה. בואו נעשה את זה צהוב. ובדרך זו, אנו יכולים להעתיק הדבק את דרכנו למטה. מה זה היה? סגול. לכן, כל אלה הם CS50 הטיפוסי צבעים שראיתם בכיתה - בעצם, סליחה - או באתר האינטרנט. אני מקווה שאתם יכולים לראות מה אני עושה כאן. על אישור. האחרון. קהל: איך אתה מוסיף השורה בהתחלה? RHED SHI: לכן, השאלה הייתה, איך היה לי להוסיף השורה בהתחלה? אני נכנסתי לסעיף בטבלה זו - או בכל אופן אני יכול בחר את מקטע השולחן - ולאחר מכן, הנה, אני מתעדכן מספר השורות. ו, תן לי מקווה שזה עובד. על אישור. בואו אראה אם ​​זה עובד. אה, מושלם, מדהים. על אישור. בזמן שאני בונה את הדמו שלי, כמה דברים לא היו מסודרים, כל כך, תודה על מחיאות הכפיים. כן. אז, בואו נראה. אנחנו עושים תשע זה רק כדי להפוך את הכל - או בעצם, בואו פשוט להפוך את כל אלה לגילוי מחוונים. ואז, מה שאני רוצה להראות לך, יותר מדי, היה איך אני יכול לקחת כל אחד מאלה שורות בטבלה ויש להם אינטראקציה - הו. לא. אה. כמו כן, אני רוצה להראות לך - כאן, אני יכול לשים את הכותרת שלי בקר ניווט, נכון? אז בעצם, תוכל להבחין, ברגע שאני מוטבע בקר תצוגה זו בתוך של בקר הניווט, אנו רואים סרגל ניווט זה בראש שלנו ייצוג לוח תכנון של בקר תצוגה. וכך, זה נותן לנו, כמו, חזותי, סוג של, להדריך למסך הגלוי שלנו. זה ללא ספק הולך להיות סרגל הניווט. ומה שאני רוצה לעשות במהירות, עכשיו, הוא לשים אחר - אז זה הבקר תצוגת טבלה שעשיתי על ידי לוקח אחד מהם וגרירתו כאן, וזה מה שאפשר לי מהירות, באמת, ליצור תצוגת שולחן הבקר. אם יש לך את הזמן שאנחנו, תוכלו רואה את זה, באופן תכנותי, זה קצת מסובך יותר כדי ליצור טבלה צפה בבקר, כי יש הם כמה שיטות שאינן נדרש לך, בערך, לכתוב בצו לתצוגת השולחן הבקר שיוצג בצורה נכונה. עם זאת, אני רוצה רק להראות לך, עכשיו, דוגמא לשם, אם אני לוקח את זה, לדוגמא - שמתי בבקר תצוגה אחרת. ועכשיו, בואו נגיד שאני רוצה לשלוט alt הכחול הראשונה שלי שורה בטבלה לכאן. ואני רוצה לקרוא לכחול הזה. ולאחר מכן - בואו נראה. אני במבט עכשיו, ואני יכול לשנות הרקע לכחול. וכך, הודעה מוקדמת, כאן, נפתחת זו תפריט גם נותן לך היררכיה של כל של האובייקטים האלה. אז דבר חשוב לציין, כאן, הוא שכל הדברים האלה, כאן - בקר שולחן השקפה זו, את השולחן נוף, סעיף תצוגת טבלה, תצוגת שולחן תא - כל אלה הם אובייקטים, בקוד. אז, אתה יודע, תווית כרגע היא תחת צפה בתוכן, וכולי. כן הלאה וכן הלאה. לכן, אם אנו מפעילים את הקוד הזה, אנחנו צריך לראות משהו - בואו תראו אם זה - כן. לכן, יש לנו ללכת. אבל, אם אנחנו לא עושים את זה, אף אחד הדברים אחרים האלה עובדים. נכון? אז רק זה עובד. וגם, למען הזמן, אני לא נכנס, אתה יודע, לשים את האחרים. וזה סוף, סוג של, לוח תכנון - מה שרציתי להראות שלך ללוח התכנון. וגם, יש לי דוגמא הסתדר, למעשה, ממש כאן. אז, זה לוח התכנון שאני עשיתי בעבר. אז כמו שאתם יכולים לראות, זה היה בקר הניווט שלי. ואז היה לי הבקר התצוגה הראשון שלי, לאחר מכן היה לי הבקר תצוגת טבלה שלי, ולאחר מכן היה לי כל אלה - כך בעבר, אני עושה משהו שונה מאוד. אז, תסלח לי את הדברים האלה. אני בטח לנקות אותו מאוחר יותר לפני אני שולח אותה לייצור. אבל, אם אנחנו מנהלים את זה, נוכל לראות כי כל האפשרויות הם עומד לרשותנו. חוץ מזה שלא עשה את הרקע אלה צבעים. לכן, יישום פשוט נחמד. עכשיו, בואו ננסה להתמודד עם בעיה זה תכנותי. על אישור. לכן, כדי לעשות את זה, אנחנו פשוט הולכים כדי להתחיל פרויקט Xcode חדש. אנחנו נעשה את זה יישום ריק עכשיו, בגלל שאנחנו לא רוצים לקבל את לוח תכנון. אז, אני פשוט מגביל את עצמי לא להשתמש בכל לוח התכנון, ו יישום ריק לא יהיה תן לי את לוח תכנון. זה רק כדי למנוע את עצמי מרמאות. בואו נראה. חכה. עשיתי לי - כן. על אישור. נכון. אז, הנה, אנחנו נשארים עם שום דבר אבל אחר קוד. אז, תן לי לעבור חלון זה מעט מעל. נכון. כפי שאתם יכולים לראות כאן, רק הקבצים אנחנו נתון AppDelegate.h ונקודה מ ', ואין לנו storyboard יותר. אז אם אנחנו מנהלים את זה, אנחנו עדיין הולכים להגיע למסך הלבן, תודה לאל. אישור - מסך לבן, אבל לא שום דבר אחר. וכן, כאן הוא החלק החשוב. זה מקום בו הפעולה שקורה. בגרסאות הקודמות, יש בדרך כלל אף קוד כאן, אבל לוח תכנון למעשה מספק הקוד לחלק זה. אני לא אכנס לפרטים על איך. ומה שאנחנו רוצים לעשות עכשיו הוא, שאנחנו רוצים ללכת לכאן, והמרחב הקטן הזה מתחיל ביצירת האפליקציה שלנו שוב. אז - כן? קהל: זום? RHED SHI: זום. כן, בטח. על אישור. אני אהיה הקלדה, כך שזה לא צריך משנה יותר מדי. על אישור. אז קודם, זוכר שרצינו ליצור בקר ניווט, נכון? וגם, כפי שאתה יכול לראות כאן, Xcode עושה עבודה גדולה באמת של מילוי עצמי. אז, כפי שאתה שם לב, את שמותיהם של כל מה שהם הרבה יותר מאשר כרגיל, אבל Xcode ממלא את זה בשבילך. אז אני פשוט יכול ללחוץ על Enter. לכן, אני רוצה ליצור ממשק משתמש ניווט מצביע הבקר, ואני יכול לקרוא לזה navigationController. עכשיו, מה אני עושה עכשיו? לאחר סימן שוויון זה, אני צריך, קודם כל, ליצור אותו בתוך הזיכרון. אז, אני הולך לעשות NavigationController alloc - כן, זה דומה לmalloc, כי אתם השתמשו ב-C - ולאחר מכן, אני הולך init זה. אז, זה באמת חשוב כי כל אובייקט שאתה יוצר, אתה רוצה alloc וinit זה. זה הולך ליצור אותו ו instantialize הפנימי של זיכרון, ו עכשיו אתה יכול להשתמש בו. בסדר? אם אתה לא עושה את זה, האובייקט שלך עושה לא קיימות, ואתה נתקל בחבורה של בעיות. ואז, אני רוצה ליצור בקר תצוגה, נכון? לכן, אני רוצה ליצור UIViewController כוכב - כך, כל מה שהוא מצביע ב Objective-C, ואני הולך לעשות משהו דומה, כאן - alloc, init. על אישור. ואז מה שאני הולך לעשות הוא, אני הולך - כן, יש לזכור בעת שעשינו להטביע בבקר ניווט? זה איך אתה עושה את זה בקוד. אתה הולך לעשות navigationController pushViewController - קהל: [לא ברור]. האם זה יקרה לנו, או -? RHED SHI: הו, כן. לא. הוא אוהב אותי יותר טוב. לא, זה יעבוד גם בשבילך. לכן, כל אלה הם השיטות. אז pushViewController היא שיטה, ו גם, ליתר דיוק, זה שיטת מופע של ממשק המשתמש בקר ניווט. כי היה לי כדי ליצור ניווט בממשק המשתמש שלי כוכבים בקר, ואז אני אפשר לקרוא לזה pushViewController עליי מופע ספציפי של ניווט בממשק משתמש הבקר. קהל: האם אנחנו צריכים לעשות בדיוק מילה, או שהיא כבר קיימת עבורו? RHED SHI: כן, בגלל שזה שיטה. זה כמו פונקציה. זה כמו printf. זה כמו scanf. זה כמו strcompare. מלבד שהוא יודע מה שאתה אולי כדאי לך ההקלדה, ולשים לב שזה תמיד יהיה לבוא עם דברים שהם מותר באופן חוקי בשבילך. לכן, אם דבר לא מופיע כאן, אז משהו לא בסדר. אז, pushViewController. אז, עכשיו, אני רוצה לדחוף נוצר חדש UIViewController, ולאחר מכן, אנימציה - ואולי לא. כי זה הולך להיות בקר המבט הראשון. אני מתכוון, גם אם אני לא עושה אנימציה, זה כנראה לא יופיע, משום זה המסך הראשון. וזוכר את סוגריים. אז, זוכר איך היינו בסוגריים? ובתוך סוגריים, האובייקט קורא לשיטה - כך האובייקט שלנו הוא הניווט הבקר, והשיטה היא לדחוף בקר תצוגת אנימציה. ולראות איך זה לוקח בשתי טענות, והם מופרדים על ידי, סוג של, מילות, ומעי גס. אז, Objective-C מנסה לעשות את זה יפה וקל לך לקרוא בקול רם - הקוד שלך - ויש לו למחצה, סוג של, הגיוני. עם זאת, עושה בדיוק את זה זה לא מספיק. תן לי להקטין את התצוגה עכשיו. עושה בדיוק את זה הוא לא מספיק כדי לקבל את מה שיש לנו בעבר. אז הנה, תוכל להבחין שיש בעצם לא הולך להיות כל סוג של בר, כאן, נכון? אין סרגל ניווט, שפירושו שאנחנו עדיין לא קיבלנו אותה. ואנחנו יכולים לבדוק את זה, גם, על ידי, אולי, לשנות את הרקע של ViewController, נכון? ViewController.background-- אה. אז, לראות איך ViewController לא הייתה לי צבע רקע, למרות שאני רציתי לגשת אליו? וזה בגלל שViewController הוא מיכל לתצוגה. אז, יש לו רכוש נוף, אשר אז יש לו צבע רקע. וכן, אני יכול להגדיר את זה, סוג של עייפה, על ידי קורא את הצבע על אובייקט UIColor. לכן, הודעה כאן, redColor היא שיטה. זו שיטה ברמה של UIcolor. כי אני לא צריך ליצור למשל בפועל של UIColor כדי לקרוא לשיטה על זה. אני פשוט, פשוט, קראתי לזה על שם כמו הסוג. אני, כמו, קראתי לזה בint, אם היה לי int, כמו, שיטה לזה, למשל. וכך, אם אנו מפעילים את הקוד הזה, אנחנו שם לב שהרקע הוא בעצם לא אדום. זה עדיין לבן. ואיך אנחנו יכולים לעקוף את זה הוא, שים לב איך יש self.window. כלומר, כמו, המכל האולטימטיבי עבור היישום שלך. זה הדבר האולטימטיבי שמכיל כל מה שעל המסך, ל iPhone או יישום iPad. וגם, בנוחות, self.window יש הנכס הזה שנקרא rootViewController. וזה הולך להיות המצביע בקר הצפייה הראשון בתוך של היישום שלך. אז, מה שאנחנו רוצים לעשות כאן, עכשיו, הוא כדי לקבוע ששווה לניווט שלנו הבקר. נכון? כי, מבחינה טכנית, ניווט הבקר הוא התצוגה הראשונה שלנו הבקר. היא עוקבת אחר מערך מבט אחר בקרים, ואנחנו דחפתי את זה בקר מבט לתוך המערך ש בבקר הניווט. אז, אתה לא רוצה לעשות את זה. כי לא באמת אעזור לך. אתה רוצה לעשות את זה, אם אתה רוצה לעשות בקר ניווט, שבה רוב שלך יהיה כנראה בגלל שאתה רוצה ל, בערך, יש להם איזושהי, כמו, תפריט לחזור לחלק או דף הבית של לחזור ל, ולא מסך ריק. כן? קהל: האם זה לא נוח כדי שתוכלו להתמקד על - RHED SHI: כן. אז, כן. זהו הקוד, ועכשיו בואו לבדוק את זה. לכן, יש לנו ללכת. קסם. אז בסדר. תודה. על אישור. אז עכשיו, מה שאנחנו רוצים לעשות הוא - כן, אנחנו מוגבלים סוג של, כאן, נכון? אנו עלול לכתוב את הכל בתוך פונקציה אחת זה. אבל, זה לא איך פיתוח iOS בדרך כלל עובד. לכן, מה שאנחנו הולכים לעשות זה, אנחנו הולך ליצור כמה קבצים חדשים. אבל, באופן ספציפי יותר, אנחנו הולכים ליצור עוד כיתת Objective-C, או אובייקט אחר - בכיתה וחפצים ניתנים להחלפה כאן. וגם, הנה איך שאני יכול, באופן פוטנציאלי, ליצור סוג אחר של בקרי U. אז, זה תת רמה, כמו שתשימו לב, כאן, זה תת רמה של בקר תצוגת ממשק משתמש, אבל אני יכול קורא לזה בכל שם אחר כאן. אני יכול להתקשר לCS50 זה, אני יכול לקרוא בקר השקפה זו, אני יכול לקרוא בקר תצוגה זו בלה - כל דבר שאני רוצה. זה רק שם לכיתה. עם זאת, זה הולך להיות חשוב כי, בעצם, מה שאני עושה כאן הוא, אני יוצר שם מחלקה אחרת. אז, זה הולך להיות, כמו, חלק סוג של סוג או אובייקט. לכן, זה צריך להיות קצת גנרי. זה לא הולך להיות מאוד ספציפי. וגם, אני רוצה להצביע מתוך שתי אפשרויות אלה. בגלל שאנחנו עושים כל מה שבתוך קוד, לפעמים זה הרבה יותר קל להביא בקובץ ממשק, כך ש אני יכול, פשוטו כמשמעו, לגרור ולשחרר, כמו שעשינו קודם לכן עם לוח תכנון - מכיר אותך, תווית, או כפתור, או כל דבר אחר. וכך, xibs הם קבצים המאפשרים לך אתה עושה את זה, ויש לי לחבר אותו לקובץ הבקר תצוגה זו. לכן, אני הולך בכוונה לא בדק את זה. בדרך כלל הייתי לבדוק את זה, ואם אני רק עשיתי את זה עבור iPhone או iPad, אני יבדוק את זה ופשוט צריך אחד ל, אתה יודע, ה-iPhone או iPad. אבל מאז שאני עושה אוניברסלי, אני הולך כדי ליצור שניים מאלה מאוחר יותר. לכן, אני הולך בכוונה בטל את זה. זה גם ממש חשוב. הרבה פעמים, היה לי באגים שבו זה לא נבדק. וכך, כמובן, בקובץ זה הוא לא, סוג של, כמו, כלול או מיובא בתוך התיקייה את המבחן הזה. וכך, הקוד שלי יש שום מושג על קיומו של קובץ זה, ו שגורם להרבה כאב ושעות של ניפוי שגיאות. אבל, רק לוודא שזו מסומנת כך כי, אתם יודעים, המטרה של זה קובץ הוא ליישום זה. על אישור. אז, עכשיו אנחנו כבר יצרנו שני קבצים חדשים. וקבצים אלה נראים די ריקים. וזה, בעצם, בואו גם נמשיך על ידי יצירת קבצי xib. אז, בעבר, הייתי ב הנפתח Touch הקקאו. עכשיו, אני הולך להיכנס למשתמש ממשק מגע, וכמו שאתה יכול לראות, אני ניתן ליצור לוח תכנון. לכן, גם אני התחלתי עם ריק יישום, אני עדיין יכול להשתמש לוח תכנון. אמנם, זה נהיה מסובך במונחים של איך אתה רוצה להתחבר כי לקוד שלך. לכן, אני לא הולך לשם. אבל, מה שאנחנו רוצים לעשות כרגע הוא ליצור תצוגה. ואתה יכול לבחור עבור iPhone או iPad. ובדרך כלל, כדי לציין את הבדל - אם אתה עושה יישום אוניברסלי - אתה גם לשים את ה-iPhone תחתון, או שאתה יכול לעשות Twiddly. זה לא משנה באמת. זה פשוט כדי שתוכל לבדל שמבט הוא על איזה מכשיר. וכך, עכשיו נראה. יש לי מסך שאני יכול לעבוד איתו. וכך, לדוגמא, אני יכול לשים את תווית כאן, אתה יודע, ואני יכול גם לשים כפתור אחר כאן. אני לא יטריד את שינוי הערכים כאן. אבל, מה שחושב כאן הוא כי הבעלים של הקובץ - כן, אני פנימי של ה-iPhone נוף, קובץ xib-iPhone. ולמטה באזור ניווט זה או תפריט הנפתח, אני רוצה ללכת ל הבעלים של הקובץ. וזה באמת צעד חשוב כאן. אני רוצה להפוך את התצוגה בכיתה הבקר, כך שקובץ xib זה הולך להיות מזוהים עם בקר המבט שלי. וכל דבר שאני עושה בתוך המבט שלי בקר באמצעות תכנות הוא הולך להיות משתקף כאן. אז, עם זאת, שים לב כי - בעצם, בואו נעשה את השקפה זו רקע כחול, למשל. או ירוק. ולאחר מכן, כך שאם תשים לב, בגב ב את הקוד הזה, זה שבו הגענו לשלנו בקר ניווט. למרות שאנחנו עשינו את הצעד הזה, זה עדיין הולך להיות אדום, לא ירוק. ויש סיבה למה. זה בגלל שכאשר אנו inited בקר לדעתנו, כאן - מצטער, זה קצת מטורף - כאשר אנו inited הבקר המבט שלנו כאן, אנו inited זה מהסוג הכללי UIViewController. בסדר? אז אנחנו אפילו לא לעשות זה עם זה בכיתה. אז תזכור, זה כמו בכיתה עכשיו. זה יכול להיחשב כסוג, רק כUIViewController הוא סוג. וכדי להשתמש בו, מה אנחנו צריכים לעשות הוא לייבא אותו - ViewController יבוא - ו, כפי שאתה יכול לראות, זה autofills את זה בשבילי. אז, ViewController - ועכשיו, הנה, אני יכול לשנות את זה UIViewController לViewController. ועכשיו, הנה, אני יכול לשנות זה כדי ViewController. בואו נריץ את זה שוב. זה עדיין אדום. והסיבה למה זה עדיין הוא אדום כי - woah, מה קרה שם? רצינו לשייך xib זה להגיש עם בקר התצוגה. עם זאת, על מנת לעשות בעצם כי, אנחנו צריכים להיכנס לזה. וכאשר אנו עושים init, שאנחנו רוצים לעשות initWithNibName, ולאחר מכן אנחנו רוצים לעשות View_iPhone המחרוזת ב, למשל. אתה יכול להתעלם מהצרור כאן. וזה הולך כדי לאפשר לנו, בעצם - אה אה, יש בעיה. נכון. וכן, יש בעיה, כי, ב קובץ xib המבט שלנו, יש לנו תווית ו יש לנו כפתור. עם זאת, למרות שאנחנו כבר מחוברים שני אלה, אין שום דבר בתוך ViewController.h או ViewController.m שמשקפים את אלו כפתורים או מדבקות אלה. לכן, אנחנו צריכים לכתוב אותם כב מאפיינים של הבקר התצוגה. אז, זה איך אתה מצהיר רכוש. זה לוקח ב, בדרך כלל, שתי אפשרויות אלה. לענייננו, והסמינר הזה, הייתי אומר כי, באופן כללי, רוב הנכסים הם nonatomic ולשמר. אתה יכול לקרוא על ידי גוגל בחיפוש, מכיר אותך, את ההבדל בין nonatomic ולשמור על, אתה יודע, גוגל או משהו. ואני אקח אותך ל, כמו, סטאק גלישה, שבו אנשים יהיו לי תשובות להבדלים בין אלה. אבל לעת עתה, זה מה שאנחנו רוצה להיות מודאג עם. ואנחנו רוצים לעשות תווית ממשק משתמש, כוכב, ואנחנו יכולים לקרוא לזה מה שאנחנו רוצים. אנחנו יכולים לקרוא לזה, אתה יודע, תווית. ו, ניצור עוד אחד לכפתור. ולזכור לכלול את הכוכבית, עם מצביעים, כי אנו עוסקים פחות או יותר בכל מקום בפנים של Objective-C. עם זאת, זה עדיין לא יפתור הבעיה, כפי שאתה יכול לראות כאן. והסיבה לכך היא, כל פעם שאנחנו רוצה להתחבר תווית קובץ xib או לחצן לתכנית, או את הכותרת וקובץ יישום, אנחנו רוצים להוסיף קטע קוד הזה - שקע. שים לב שזה מילת מפתח. וגם, ברגע שאני אסיים להקליד שיצא, זה צריך להיות אלה שני עיגולים, כאן. בדרך כלל, הם לא מלאים פנימה אני לא בטוח למה שהם. אבל בדרך כלל, יהיה לך באופן ידני לחבר אותם על ידי לחיצה על הצד הזה של אזור השירות. וכך, ברגע זה, יש לי התווית שלי נבחר, ואני רוצה לגרור את זה חדש התייחסות לשקע לבעלים של הקובץ שלי, ולאחר מכן לחץ על תווית. אז עכשיו, סוף סוף, תווית זו היא מחובר לתווית זו. ותווית זה מה שאנחנו הולכים להשתמש באופן שיטתי אל לשנותה טקסט, גופנה, הרקע שלה צבע, וכולי. אז, למה שלא נעשינו את אותו דבר עבורן? וכמו שאתה תשים לב, ללחץ, זה קצת יותר מסובך. כי, כלומר, אתה אתה אמור הקש על לחצן, ולכן יש לה הרבה אפשרויות לכמה משתמשים ניתן ללחוץ על כפתור. ולאחר מכן, אנו נראים בהמשך כי אנו יכולים להתחבר לזה שלנו קוד כדי לגרום לזה לעבוד. לכן, לעת עתה אם כי, אנחנו רוצים להתחבר אותו ללחצן בפועל בתוך הקוד שלנו. אז אנחנו הולכים לפורקן התייחסות החדש, ולאחר מכן לעשות אותן. עכשיו, בואו נריץ את זה שוב. אה אה. על אישור. אני לא יודע מה קורה כאן עכשיו. וואו. רק רגע, כאן. בעצם, למה שלא ניקח את להסתכל על דוגמא נוספת ב העניין של זמן. על אישור. אז, הנה מוכן יותר בקלות דוגמא לViewController. כפי שאתם יכולים לראות כאן, צירפתי המאפיינים עבור תווית והכפתור. ואז, זה חתיכת הקוד כאן - IBaction זה - היה קשר ללחצן זה כאן. אז כפי שאתם יכולים לראות כאן, מגע בפנים מחובר לבורר לחצן שנקרא לחוץ. לכן, אנחנו יכולים למעשה לעבור את תנועה שוב, כאן, על ידי לקיחת Touch Up בתוכו וגרירתו ל הבעלים של הקובץ, ולאחר מכן לחץ על כפתור לחוץ. עכשיו, בואו להפעיל הקוד שלנו. אז עכשיו, לחצן זה עכשיו עובד ו ייקח אותנו לדף הבא. וגם, במונחים של בקר המבט שלנו, זה חתיכת הקוד שלקח אכפת הכפתור הלחוץ. וזה חשוב לציין כאן, כי יצרתי סוג אחר של מבט בקר נקרא שולחן בקר תצוגה. אז, זה היה דומה לגיבוי ב לוח תכנון, כשגררתי את אחד בקרי תצוגת הטבלה הבאים ללוח התכנון. אני יוצר עוד מצביע אל הבקר תצוגת טבלה, alloc וinit-ing אותו, ולאחר מכן עושה בקר ניווט נקודה עצמית, לדחוף ViewController, זה חדש viewController. ואני קבעתי לאנימציה כן, כי עכשיו בתוך האפליקציה שלי, ואני רוצה לראות בעצם האנימציה הולכת מהעמוד הבית לשולחן בקר תצוגה. קהל: האם אתה עדיין לדאוג על איסוף אשפה? RHED SHI: מה זה? לא. לכן, השאלה הייתה, האם יש לך לעבוד עם איסוף אשפה? אז, 4 Xcode היה כמו ARC, שהוא ספירת התייחסות אוטומטית. וכך, בדרך כלל כשאתה מתחיל חדש פרויקט, היית לבדוק את זה, כי אף אחד לא באמת רוצה להתמודד עם לשחרר את הזיכרון וכאלה. אבל אני חושב בXcode 5, אין אפילו האפשרות כי על הפרויקט החדש. אז, זה באופן אוטומטי עושה את זה בשבילך. כן? קהל: אתה יכול לייצא PDF בלוח התכנון שלך? RHED SHI: כן, בהחלט. לכן, כל אלה ייכללו ב קוד המקור, כך שאתם יכולים לבדוק את פרויקט Xcode בפועל עבור זה. כן? קהל: אבל, אני מתכוון, כאילו, אני יכול להדפיס PDF עם לוח התכנון שלי? אם אני רק רוצה לייצא תמונות להראות למישהו. RHED SHI: אה, כן. אני חושב, שאולי, רק אתה יכול לקחת צילום מסך. כן, ולשלוח אותם מסך זריקה או משהו. כן. אז, בואו נראה. בעניין של זמן, אני חושב זה כל מה שאני יכול לכסות היום. אבל, אני יודע שזה, בעצם, רק בקושי נוגע במשטח של iOS פיתוח. אז, אנא אל תהסס לפנות אלי אם יש לך שאלות על iOS פיתוח. וגם, בתקווה, אני אהיה מסוגל לנקות על חלק מהקוד למקור קבצי קוד, כך שיהיה לך כמה דוגמאות ממש נחמדים לעבוד איתו. חוץ מזה, אם אתם הולכים לHackathon CS50, אני יכול או לא יהיה שם, ואני יכול לעזור עם כמה פיתוח iOS, יותר מדי. אז, תודה רבה, חבר 'ה.