[Powered by Google Translate] [Hội thảo] [iOS: Viết ứng dụng như một Boss] [Tommy MacWilliam] [Đại học Harvard] [Đây là CS50.] [CS50.TV] Được rồi, tất cả mọi người, lên iOS: Viết Apps như một Boss. Hội thảo này sẽ tập trung vào việc viết các ứng dụng cho iPhone và lần lượt viết các ứng dụng cho iPad, và do đó, về cơ bản chúng ta sẽ phải đi bộ qua một vài ví dụ về làm thế nào để làm cho một ứng dụng khác nhau, một trò chơi đơn giản như Tic Tac Toe, hoặc nếu bạn đang quan tâm nhiều hơn trong việc đưa ra một ứng dụng như một số loại trình đọc tin hoặc cái gì đó tương tác với Internet tôi sẽ nói về điều đó là tốt. Đây là chương trình nghị sự ngắn gọn của chúng tôi. IOS ứng dụng được viết bằng một ngôn ngữ được gọi là Objective-C, và vì vậy đây là một chút tương tự như C nhưng không thực sự ở tất cả, vì vậy chúng tôi sẽ nói một chút về ngôn ngữ riêng của mình và sau đó làm thế nào để xây dựng các ứng dụng iPhone bằng cách sử dụng chương trình này ứng dụng được gọi là XCode, nếu bạn không tải về nó cảm thấy miễn phí để bắt đầu tải về ngay bây giờ. Đó là một vài gigabyte. Nó nên được miễn phí trên App Store, vì vậy bạn sẽ cần phải có một máy Mac lý tưởng chạy phiên bản mới nhất của OS X. Nếu bạn không, không có vấn đề. Chúng tôi có các máy Mac trong trung tâm khoa học có sẵn để bạn sử dụng với XCode cài đặt, và do đó, cảm thấy tự do sử dụng những người phát triển. Nếu bạn muốn làm cho một ứng dụng, nhưng không có một máy Mac, đừng lo lắng. Có rất nhiều các nguồn tài nguyên trong khuôn viên trường cho rằng. Và như vậy thì chúng ta sẽ bao gồm 2 ví dụ lớn hơn của các ứng dụng khác nhau mà bạn có thể làm cho. Objective-C về mặt kỹ thuật là những gì được gọi là một bộ siêu của C. Điều đó có nghĩa rằng bất kỳ mã C cũng là mã Objective-C hợp lệ. Điều đó có nghĩa là chúng tôi loại ống ghi âm sẵn trên một số tính năng bổ sung cho C. Một số các tính năng này bao gồm không có bao giờ viết malloc một lần nữa, cảm ơn Chúa, không phải lo lắng về các con trỏ ngu ngốc và giải phóng họ và tất cả các công cụ bạn ghét về C, và nó là loại đi trong C-Mục tiêu. Bây giờ, Objective-C cũng có một thư viện chuẩn lớn hơn nhiều, do đó, có rất nhiều chức năng mà bạn nhận được cho bên trong miễn Objective-C. Nhớ khi chúng tôi đã viết PHP, chúng tôi nhận thấy rằng chúng ta đã đi từ ngôn ngữ này nhỏ nhất đến các thư viện khổng lồ của tất cả những điều điên rồ bạn có thể làm. Điều tương tự cũng xảy ra trong iOS. Có đối tượng cho những thứ như lịch Phật giáo, và bất cứ điều gì thực sự bạn có thể có thể nghĩ rằng có lẽ đã tồn tại trong việc thực hiện Mục tiêu-C. Phần Mục tiêu của Mục tiêu-C là tham khảo một cái gì đó được gọi là Lập trình hướng đối tượng. Đây là loại một khái niệm mới, nhưng chúng tôi đã thực sự chủ yếu là học rất nhiều những khái niệm này đã. Ý tưởng đằng sau Lập trình hướng đối tượng là bạn đang đi để cấu trúc rất nhiều mã của bạn xung quanh những điều này được gọi là các lớp học, và các lớp này được thực sự tôn vinh cấu trúc. Bên trong của một cấu trúc, chúng tôi về cơ bản nói ở đây là một điều, và điều này có thể có các thành viên. Ví dụ, một nút trong một danh sách liên kết có thể có những thứ khác giống như một giá trị, một con trỏ đến nút tiếp theo trong danh sách, và cùng nhau mà con trỏ và giá trị mà bao gồm trường hợp này một trong một cấu trúc. Các lớp học là rất tương tự, trừ các lớp học cũng có thể có các chức năng bên trong của họ. Khi ta khai báo một cấu trúc, chúng tôi chỉ có thể nói int n hoặc nút tiếp theo *. Bây giờ với C-Mục tiêu chúng tôi thực sự có thể đặt các chức năng bên trong những điều đó. Một điều mà các lớp học có thể làm là họ có thể kế thừa dữ liệu từ các lớp khác. Ví dụ, chúng ta sẽ xem xét một loạt các built-in Objective-C lớp học. Một trong số đó có thể là lớp học mà đại diện cho quan điểm cho màn hình, và do đó, bằng cách nói rằng tôi muốn thực hiện quan điểm của riêng tôi chúng tôi về cơ bản nói cho người nào đó tại Apple, mọi người có thể thực sự tốt đẹp, đã viết lớp này cho tôi, và nó xử lý những thứ như hiển thị các nút hoặc làm cho màn hình, và chúng tôi sẽ thực sự đau đớn để thực hiện tất cả những chức năng chính mình, và như vậy bằng cách đơn giản kế thừa dữ liệu, chúng ta có thể nói tất cả mọi thứ mà bạn đã làm trong lớp học mà Tôi cũng muốn bên trong lớp học của tôi, và sau đó tôi sẽ làm một số công cụ khác, cụ thể là thực hiện một ứng dụng. Đó là những gì mà thừa kế có nghĩa là. Chúng ta sẽ thấy một ví dụ cụ thể hơn. Và cuối cùng, quan trọng với lập trình hướng đối tượng là nó dẫn đến dữ liệu đóng gói. Trong một số vấn đề của chúng tôi đặt ra, chúng ta có thể có những biến lớn toàn cầu và globals ở khắp mọi nơi, và đó là cách chúng tôi muốn theo dõi của nhà nước. Với các lớp học, chúng ta có thể bắt đầu đóng gói thông tin bên trong của một đối tượng. Nếu chúng ta có một màn hình ứng dụng của chúng tôi, chúng tôi không thực sự cần phải có bất kỳ dữ liệu từ một màn hình bên trong ứng dụng của chúng ta về điều đó, và như vậy bằng cách đóng gói những thứ trong các lớp học này thực sự dẫn thiết kế mã tốt hơn, và điều này là có thể với một số tính năng bổ sung C-Mục tiêu. Cảnh báo trước, cú pháp cho Objective-C là chuối. Nó cũng giống như không có gì chúng ta đã thấy trước đây, vì vậy nó là một chút của một đường cong học tập để làm quen những gì heck thực hiện điều này có nghĩa là gì? Nhưng một khi bạn nhận được qua rằng đường cong học tập ban đầu, nó thực sự, thực sự trơn tru để bắt đầu viết các ứng dụng. Để khai báo một lớp, nói ở đây là lớp học của tôi, nó tồn tại, và có thể đây là một số điều mà tôi sẽ xác định sau này, Tôi sẽ nói @ interface. Tôi sẽ nói @ interface. Tôi sẽ cung cấp cho lớp học của tôi một tên. Và sau đó ở một nơi khác tôi sẽ nói @ end, và tất cả mọi thứ ở giữa giao diện và kết thúc @ @ là có được lớp học của tôi. Điều đó là có được những gì bên trong các tập tin. H. Cũng giống như trong C h tập tin. Về cơ bản nói ở đây là một số điều mà sẽ không tồn tại. Tôi không nhất thiết nói với bạn những gì họ làm được nêu ra, nhưng trình biên dịch cần phải biết rằng chúng tồn tại. Sau này trong các tập tin m của chúng tôi bởi vì m cho Objective-C là nơi mà chúng tôi đang thực sự sẽ xác định những gì các lớp làm. Cũng giống như các tập tin. C, chúng tôi cung cấp một thực hiện cho các chức năng. Bên trong của tập tin. M của chúng tôi, chúng tôi đang nói ở đây là những gì tất cả các chức năng bên trong lớp tất cả những gì họ làm. Và cuối cùng, bên trong của một cấu trúc, chúng ta có thể nói bên trong những dấu ngoặc nhọn int n hoặc nút * tiếp theo, và C-Mục tiêu chúng ta sẽ sử dụng từ khoá @ tài sản, và đây là những gì đang xảy ra để xác định tài sản, hoặc các chức năng, mà là một phần của các lớp học của tôi. Gọi chức năng trong Objective-C cũng là chuối. Khi chúng ta tuyên bố chức năng trong C, chúng tôi đã nói một cái gì đó như int foo và mở paren và sau đó đã cho nó một danh sách các đối số. Đây là những gì khai báo phương pháp hoặc các chức năng trông giống như trong C-Mục tiêu. Nếu tôi muốn khai báo một hàm hoặc một phương pháp nơi mà tôi đang nói là phương pháp thực sự chỉ là một chức năng đó là một thành viên của một lớp, do đó, loại hoán đổi cho nhau, nhưng không thực sự, bên trong phương pháp của tôi, tôi muốn tạo ra một phương pháp mới. Nó sẽ trở lại không có gì, do đó, nó sẽ là kiểu void. Đây là kiểu trả về của chức năng của tôi. Bây giờ chúng tôi có parens đây bởi vì tôi không biết. Tiếp theo là có được tên của chức năng của tôi, và cuối cùng chúng ta có một dấu chấm phẩy giống như chúng tôi đã có trong C. Có gì mới ở đây là anh chàng này ở đây. Dấu gạch ngang này thực sự là cần thiết, và điều này nói là phương pháp này ở đây phải được gọi là một thể hiện của một lớp học. Sau khi chúng tôi tuyên bố cấu trúc của chúng tôi, chúng tôi có thể nói một cái gì đó như struct n nút, và thực sự tạo ra hoặc instantiated một trong những cấu trúc như vậy mà tôi thực sự có thể bắt đầu làm việc với những gì bên trong của nó, do đó, dấu gạch ngang này có nghĩa rằng chúng ta phải khởi tạo các lớp học giống như chúng ta khởi tạo struct trước khi chúng ta có thể gọi phương thức này trên đó. Nếu tôi muốn bắt đầu thêm đối số cho phương pháp của tôi nó được chuối nhiều hơn. Dưới đây là tên phương pháp của tôi. Sau đó, tôi sẽ có một dấu hai chấm, và sau dấu hai chấm này nó nói ở đây đến một số đối số. Phương pháp này có một đối số. Các loại đối số của nó là một int, và tên của các đối số đó hoặc biến rằng tôi sẽ bắt đầu sử dụng bên trong của phương pháp được gọi là i. Một lần nữa, đây là phương pháp. Phải mất một đối số. Nếu bạn muốn để bắt đầu thêm đối số hơn nó được chuối hơn trong đó chúng tôi đã đại tràng nói ở đây đi kèm danh sách các đối số. Số đầu tiên là một số nguyên. Bây giờ, số thứ hai là thú vị. Biến rằng tôi sẽ được sử dụng bên trong chức năng của tôi được gọi là f, do đó, bên trong chức năng của tôi, tôi có thể nói f + = 1 hoặc một cái gì đó. Điều này ở đây về cơ bản là một chìa khóa cho rằng đối số hoặc tham số. Cũng giống như chúng tôi đã có cặp giá trị quan trọng và một cái gì đó như JSON hoặc mảng kết hợp Objective-C thực hiện các quyết định nói, okay, chỉ cần để nó thực sự rõ ràng khi bạn gọi một phương pháp tất cả các thông số này là gì Tôi đang thực sự sẽ để đặt tên cho tất cả. Khi bạn gọi một phương thức, bạn thực sự sẽ nói andFloat, và sau đó bạn sẽ vượt qua nó. Thật thú vị, một trong những điều này không có tên, nhưng tất cả các thông số khác, do đó, nếu chúng tôi đã có một đối số thứ 3, tôi có thể nói andFloat và một phao và như vậy. Khi tôi gọi những phương pháp này là tất nhiên của chuối, vì vậy nếu tôi có một đối tượng, và tôi xác định một phương pháp gọi là foo, và tôi muốn gọi nó, chứ không phải nói rằng foo mở / parens gần Tôi sẽ mở một khung. Đây là tên của phương pháp của tôi. Tôi sẽ đóng khung, và đây là đối tượng tôi gọi nó trên. Hãy nhớ rằng, tất cả những phương pháp này tồn tại trong các lớp học bởi vì các lớp học có thể có phương pháp xác định bên trong của họ. Ở đây tôi đã tự ý tạo ra một đối tượng của một số lớp, và đây là cú pháp để thực hiện điều đó. Có 2 bước để tạo một đối tượng. Bước đầu tiên là để nói rằng tôi muốn phân bổ không gian. Đây là tương đương với một malloc. Chúng tôi không có để nói malloc nữa. Chúng tôi bỏ m, làm cho nó alloc, và thay thế c. Với m. Sau khi một cái gì đó alloc chúng tôi, sau đó chúng tôi cần phải khởi tạo nó. Về cơ bản khi bạn tạo các đối tượng, bạn có thể muốn có một số logic thực hiện khi họ đang tạo ra, vì vậy bạn có thể vượt qua trong một số giá trị mặc định hoặc một cái gì đó như thế, và do đó, phương pháp này init là những gì thực sự tạo ra các đối tượng. Đầu tiên chúng ta phân bổ không gian, giống như chúng ta đã làm trong C, và sau đó chúng ta khởi tạo nó, mà có thể hoặc không thể làm một toàn bộ rất nhiều. Sau đó, chúng tôi đang trở về điều này vào một o đối tượng. Có một ngôi sao ở đây vì đây là kỹ thuật một con trỏ, nhưng đừng lo lắng, con trỏ không phải là lớn một thỏa thuận trong C-Mục tiêu nữa. Bây giờ chúng ta đã khởi tạo lớp này được gọi là NSObject, và điều này chỉ là một lớp ngẫu nhiên mà Apple đã có. Chúng tôi đã khởi tạo này, và bây giờ tôi có một thể hiện của lớp này trong này o đối tượng, do đó, điều đó có nghĩa rằng nếu tôi định nghĩa những phương pháp này, tôi có thể gọi chúng như thế này. Tương tự như vậy, nếu tôi muốn gọi một phương thức với một đối số, vì vậy đây là phương pháp thanh, mà phải mất một đối số, và đây là baz: qux phương pháp, do đó, điều này có 2 đối số. Điều này đang kêu gọi một chức năng trên này o đối tượng. Có ý nghĩa? Cú pháp nên có ý nghĩa, nhưng bạn loại đã quen với nó. Được rồi, chúng ta hãy nói về một vài điều mà được xây dựng vào Objective-C không nhất thiết phải được xây dựng vào C. Trong C, chúng tôi loại đã phải đối phó với chuỗi như là những mảng ký tự ngu ngốc, và nó đã thực sự gây phiền nhiễu. Objective-C có tất cả được xây dựng trong cho chúng ta, và nó được xây dựng trong bằng cách sử dụng lớp này được gọi là NSString. Khi tôi muốn tạo ra một NSString chúng tôi có cú pháp phức tạp hơn. Thay vì nói "CS50" chúng ta nói @ "CS50" và đây chỉ là cú pháp để khai báo chuỗi trong C-Mục tiêu. Điều này là vô cùng dễ dàng để quên, do đó, không. Bây giờ, khi tôi đã có điều này, đây là một chuỗi, nhưng thông báo nó thực sự chỉ là một đối tượng. Tôi nói NSString, có nghĩa là tôi instantiated các lớp học được gọi là NSString, mà người khác đã viết cho tôi, và họ rất tốt đẹp về nó, và vì vậy bây giờ Tôi có thể bắt đầu cuộc gọi phương pháp trên đó. Nếu tôi gọi là chiều dài phương pháp này đối tượng nó sẽ trở về với tôi chiều dài của chuỗi. Đây là giống như strlen trong C. Điều này sẽ trở lại 4. Tương tự như vậy, một phương pháp khác tôi có thể muốn quan tâm là characterAtIndex này. Đây là một phương pháp nói trên chuỗi s Tôi muốn bạn để có được các ký tự 0, và do đó, điều này sẽ trở lại cho tôi những ký tự c, và có một bó toàn bộ số các cách thức mà bạn có thể Google thực sự dễ dàng. Tài liệu của Apple là rất tốt, và chúng tôi sẽ xem xét trong một chút. Đó là những chuỗi. Chúng tôi cũng đã mảng kích thước biến được xây dựng. Ghi trong C khi ta khai báo một mảng chúng tôi phải nói rằng bạn có 5 yếu tố, kết thúc của câu chuyện. Khi chúng tôi đến JavaScript và PHP chúng ta có thể bắt đầu làm những việc như bổ sung thêm các yếu tố hoặc di chuyển các yếu tố. Chúng ta có thể làm như vậy trong C-Mục tiêu. Thay vì tạo ra một mảng trong cách C bình thường chúng tôi có một lớp được gọi là NSMutableArray. Ngoài ra còn có NSArray, và điều này về cơ bản đóng gói một số mảng. Điều này nói rằng điều đầu tiên tôi muốn làm là tôi muốn phân bổ không gian cho một mảng mới, và sau khi tôi phân bổ nó Sau đó tôi cần phải khởi tạo nó. Một lần nữa, chỉ cần gọi điện thoại 2 phương pháp này. Bây giờ điều này có nghĩa là bên trong của đối tượng này Tôi có một mảng sản phẩm nào ngồi ở đó. Nếu tôi muốn thêm một cái gì đó vào mảng này, tôi có thể gọi phương pháp addObject. Tôi muốn thêm một đối tượng vào một mảng, và tôi muốn thêm vào chuỗi CS50. Nếu tôi muốn ngược lại loại bỏ mà tôi có thể nói tôi muốn loại bỏ các đối tượng ở nơi đầu tiên trên mảng hoặc phản đối một. Có ý nghĩa? Được rồi, bạn loại được sử dụng để điều này khung hình vuông. Bằng cách này, bên trong rất nhiều các thư viện của Apple, bạn sẽ thấy NS này. NS thực sự đại diện cho bước tiếp theo, đó là một trong những công ty đầu tiên Steve Jobs, và đó là nơi ông thực sự bắt đầu viết rất nhiều mã như là loại cơ sở cho hệ điều hành Mac OS X và tất cả các công cụ khác, và do đó, NS này là loại di sản này tốt đẹp hét ra một trong những công ty trước đó trở lại khi Apple lần đầu tiên được bắt đầu. Đó là ở khắp mọi nơi. Chúng ta hãy xem xét một ví dụ toàn diện Objective-C. Ở đây tôi bên trong XCode. Để có được ở đây, lần đầu tiên tôi tải về XCode từ App Store, mở nó lên, và sau đó tôi đã đi lên đây để tập tin, trên đây để dự án mới, và sau đó. Sau khi tôi làm điều đó tôi có tất cả những tùy chọn của những gì tôi muốn tạo ra, và vì vậy chúng tôi sẽ xem xét các tùy chọn sau, nhưng chỉ cho ví dụ này, bởi vì chúng ta không thực sự sẽ có một ứng dụng, Tôi đến đây, và tôi nói công cụ dòng lệnh, và điều này là một ứng dụng mà tôi có thể chạy tại dòng lệnh giống như chúng ta đã chạy từ C. Đó là cách tôi tạo ra dự án này, và vì vậy bây giờ tôi đang ở đây, do đó, chúng ta hãy nhìn đầu tiên về tập tin này, và điều này nên trông khá quen thuộc. Tôi có một tên int. Có argc bạn của tôi, bạn thân khác của tôi argv. Và vì vậy chúng ta có thể thấy rằng điều này là điểm vào cho ứng dụng Objective-C đầu tiên của tôi. Ở đây chúng ta có thể bỏ qua điều này cho bây giờ. Điều này về cơ bản là một số quản lý bộ nhớ thứ mà bạn sẽ không thực sự bao giờ phải lo lắng về. Chúng ta hãy nhìn vào khối này đầu tiên ở đây. Dòng đầu tiên này, nếu tôi nói sinh viên * alice = [[Sinh viên alloc] init] những gì mà làm? Học sinh đầu tiên này ở đây, điều này có lẽ là một lớp học. Đây không phải là một lớp học mà Apple đã viết, nhưng đó là một lớp học mà tôi đã viết. Điều đầu tiên tôi muốn làm là tôi muốn phân bổ không gian cho một sinh viên mới, và sau đó tôi muốn khởi tạo nó, do đó, điều này mang lại cho tôi trở lại đối tượng này học sinh mới, và tôi đang lưu trữ trong một biến gọi là Alice. Đâu là lớp học đến từ đâu? Vâng, ở đây ở phía bên trái đó là tất cả các tập tin khác nhau bên trong dự án của tôi. Chúng ta có thể thấy ở đây tôi có một Student.h và Student.m một. H tập tin, hãy nhớ, là nơi tôi tuyên bố tất cả những điều sẽ tồn tại trong lớp. Chúng ta hãy nhìn vào lúc đó. Được rồi, ở đây chúng tôi có giao diện này @, và điều này nói rằng ở đây có tờ khai của tất cả mọi thứ sẽ tồn tại trong lớp học của tôi. Sau đó, tôi có một dấu hai chấm. Sau đó, tôi có điều này NSObject. Dấu hai chấm này có nghĩa rằng bit thừa kế chúng tôi đang thảo luận về một chút trước đó. Này nói rằng tất cả mọi thứ một NSObject có thể làm nơi NSObject là lớp này được viết bởi một người khác, tất cả mọi thứ NSObject này có thể làm tôi muốn để có thể để làm điều đó. Bằng cách nói: NSObject đó có nghĩa là tôi về cơ bản thừa hưởng tất cả các chức năng của lớp khác. Điều đó thực sự đã cho tôi một bó toàn bộ các phương pháp khác nhau và tài sản mà tôi có thể sử dụng. Xuống đây tôi là tạo ra 2 thuộc tính. Điều đó có nghĩa là học sinh của tôi, nếu điều này là một cấu trúc, những sẽ là 2 điều bên trong cấu trúc của tôi, do đó, mỗi học sinh có một tên đó là một chuỗi, và học sinh cũng có một lớp, mà là một int. Cuối cùng, xuống đây tôi sẽ tạo ra một phương pháp cho học sinh của tôi. Tôi được gọi là phương pháp của tôi, initWithName, và phải mất một đối số, và tranh luận đó là một chuỗi, và tôi gọi nó là tên. Bây giờ chúng ta hãy xem làm thế nào chúng ta thực sự thực hiện lớp này. Ở đây, bây giờ tôi là bên trong của tập tin m. Của tôi, m để thực hiện, tôi đoán. Tôi đã thực hiện, kết thúc của tôi, và đây là nơi mà tôi thực sự xác định những gì initWithName. Tôi có initWithName, tên của các tham số của tôi, và sau đó điều này là nơi tôi đang thực sự tạo ra một sinh viên, và vì vậy đây là một chút khó hiểu, nhưng điều này là loại boilerplate mà bạn muốn bao gồm trong xây dựng của bạn. Chức năng này khởi tạo ở đây, initWithName, là một loại nhà xây dựng. Về cơ bản bạn đang xây dựng một đối tượng sinh viên mới và có thể gửi một số dữ liệu bên trong của nó. Điều đầu tiên tôi muốn làm là tôi muốn gọi init về điều này siêu. Nhớ rằng khi tôi nói trở lại đây trong file h. rằng mọi thứ NSObject một có một học sinh cũng có. Điều đó có nghĩa là khi tôi tạo một học sinh những gì tôi cũng cần phải làm là đảm bảo rằng các NSObject mà tôi đang kế thừa tất cả các dữ liệu đó từ cũng được khởi tạo đúng cách. Những gì tôi cần phải nói là siêu này thực sự sẽ để tham khảo các tầng lớp phụ huynh mà tôi kế thừa từ, vì vậy tôi muốn chắc chắn rằng tôi khởi tạo tất cả mọi thứ mà tôi đang phụ thuộc vào trước khi tôi bắt đầu cố gắng để sử dụng nó. Sau đó, nếu đó là khởi tạo một cách chính xác điều này chỉ là giống như nói rằng nếu malloc không trả lại null sau đó tôi có thể bắt đầu thiết lập một số thuộc tính. Trong JavaScript và PHP chúng tôi đã từ khóa này gọi như thế này và điều này thể hiện hiện tại của một lớp. Trong C-Mục tiêu chúng ta gọi là tự này. Khi tôi nói self.name, điều đó có nghĩa là các đối tượng Tôi chỉ cần tạo ra khi tôi nói sinh viên alloc init, đó là sẽ đưa cho tôi một đối tượng. Điều đó có nghĩa là tôi muốn để thiết lập tên của đối tượng đó bất cứ điều gì tôi chỉ thông qua nhập Cũng giống như trong C, chúng tôi truy cập các thành viên với dấu chấm này, để self.name cho biết tên của các đối tượng sinh viên sẽ là bất cứ điều gì bạn chỉ cần thông qua nhập Và nên cuối cùng, tôi có thể quay trở lại nó vì vậy tôi thực sự có được trở lại một cái gì đó. Câu hỏi? Được rồi, do đó, điều này tự = siêu init, nếu bạn không hoàn toàn hiểu được những thứ thừa kế đừng lo lắng. Chỉ biết rằng nếu bạn đã bao giờ muốn làm cho phương pháp riêng của init của bạn làm điều đó, và bạn sẽ được tốt để đi. Vâng >> [Sinh viên]. Không có nghĩa là tự nếu? Điều này có nghĩa là khi chúng ta malloc một cái gì đó chúng tôi luôn luôn kiểm tra nếu nó bằng vô giá trị, và nếu nó là null, sau đó chúng tôi đã thoát. Đây là điều tương tự, bởi vì nếu điều này vô giá trị trả về, sau đó chúng ta có thể sẽ lỗi seg nếu chúng ta bắt đầu cố gắng để thao tác nó. Đó là sinh viên lớp học của chúng tôi. Điều đó có nghĩa là chúng ta có thể khởi tạo các sinh viên của chúng tôi tại một trong hai cách. Nếu tôi nói sinh viên alloc init Tôi không sử dụng rằng phương pháp mà tôi chỉ viết, và thay vào đó tôi chỉ đơn giản là có thể nói alice.name, và bây giờ tôi sẽ đặt tên tài sản đó. Tương tự như vậy, nếu tôi muốn sử dụng phương pháp initWithName Tôi chỉ có thể nói alloc, và sau đó thay vì nói init Tôi sẽ gọi đó là phương pháp mà tôi vừa tạo ra, và tôi sẽ phải vượt qua trong Bob. Tại thời điểm này, điều này Bob đối tượng có một tên bằng Bob. Được rồi, xuống đây tôi đang sử dụng mà NSMutableArray mà chúng tôi xem xét trước đó. Tôi đang phân bổ space.Then tôi khởi tạo một mảng mới. Tôi sẽ thêm 2 điều cần nó. Mảng này hiện đang nắm giữ các đối tượng sinh viên. Chú ý rằng không nơi nào tôi có thể nói đây là một mảng của các học sinh. Tôi nói nó là một mảng, thời gian. Sau đó, tôi có thể đặt bất cứ điều gì bên trong của nó mà tôi muốn. Ở đây tôi có 2 đối tượng. Cuối cùng, tôi có một đối tượng ở đây, TF này. Trên đây trong TF.h về cơ bản là giống nhau. Tôi đang kế thừa từ NSObject, và bằng cách này, khi bạn tạo ra các lớp học này là tất cả được thực hiện cho bạn, loại của boilerplate giao diện. Nó có một tài sản của học sinh. Tôi có một vài phương pháp mà không thực sự làm một toàn bộ rất nhiều, và như vậy có nghĩa là sau khi tôi tạo ra đối tượng này TF Tôi có thể gọi đây là lớp phương pháp trên nó như thế này. Bất kỳ câu hỏi về cú pháp Objective-C trước khi chúng tôi bắt đầu di chuyển vào một số chi tiết các công cụ phát triển ứng dụng thú vị? Được rồi, vậy chúng ta hãy thực sự làm cho một ứng dụng iPhone. Các lớp học cốt lõi mà bạn sẽ được sử dụng bên trong ứng dụng iPhone của bạn được gọi là bộ điều khiển xem, và một bộ điều khiển xem về cơ bản đại diện cho một màn hình duy nhất bên trong ứng dụng của bạn, vì vậy nếu tôi trên các ứng dụng âm nhạc, ví dụ, được xem một bộ điều khiển có thể đại diện cho quan điểm mà tôi xem tất cả các bài hát trên iPhone của tôi. Một bộ điều khiển xem có thể là khi tôi nhấp vào một bài hát và bắt đầu chơi nó hoặc như tôi đang đi sâu vào các nghệ sĩ. Mỗi phòng trong những màn hình khác nhau có thể được biểu diễn như một bộ điều khiển xem khác nhau, và một bộ điều khiển xem là thực sự chỉ là một lớp nói rằng màn hình này hoạt động như thế nào. Những thứ bên trong của một bộ điều khiển xem, chúng ta sẽ có các thuộc tính, do đó, những thứ như một nút là có được một tài sản của bộ điều khiển điểm của chúng tôi. Chúng tôi cũng sẽ có phương pháp, và đây là những xử lý sự kiện cơ bản. Phương pháp này nói, khi bạn nhấn nút này Tôi muốn làm một cái gì đó, và cuối cùng, một lần nữa, chúng ta sẽ được sử dụng từ khoá này tự để truy cập thể hiện hiện tại. Xây dựng giao diện trong iOS thực sự là thực sự, thực sự dễ dàng. Họ có tốt đẹp này kéo và thả giao diện được gọi là giao diện Builder, và 2 lõi khái niệm mà dây lên C-Mục tiêu của bạn để giao diện Builder là IBOutlet và IBAction. IBOutlet tôi chỉ đơn giản nói rằng nếu bạn khai báo một tài sản đó là một nút, và bạn muốn móc nó lên đến một cái gì đó trong giao diện người dùng thực tế của bạn, bạn sẽ nói đó là một lối thoát. Tương tự như vậy, nếu bạn muốn để đại diện cho một xử lý sự kiện sau đó bạn sẽ nói đó là một hành động. Để thực sự dây này đại diện đồ họa và mã của bạn nó thực sự, thực sự đơn giản. Nếu bạn muốn đính kèm một IBOutlet, tất cả những gì bạn phải làm là bạn kiểm soát nhấp chuột, và chúng ta sẽ thấy một ví dụ về điều này thực sự nhanh chóng. Bạn kiểm soát nhấp vào nơi nó nói View Controller. Bạn sẽ để kéo vào giao diện, hoặc ngược lại, nếu bạn muốn để treo lên một xử lý sự kiện bạn sẽ kéo từ giao diện theo một hướng khác. Chúng ta hãy xem xét một ví dụ iOS thực sự đơn giản. Hãy tạo ra một dự án mới. Tôi sẽ đi lên đây để ứng dụng, và tôi sẽ bấm vào ứng dụng View Single. Tôi sẽ bấm vào kế tiếp. Tôi sẽ cung cấp cho dự án của tôi một cái tên. Tôi sẽ gọi nó là Hello. Thật thú vị, Apple giả định bạn đang tạo ra một sản phẩm để bạn có thể bán nó và họ có thể kiếm tiền. Xuống ở đây tôi sẽ nói rằng đây là một ứng dụng iPhone. Bạn có thể tạo một ứng dụng iPad, hoặc nếu bạn muốn tạo ra một trong những ứng dụng hỗ trợ cả hai thiết bị mà bạn có thể làm điều đó quá. Đây là những gì bạn muốn đánh dấu của bạn trông như. Bạn muốn sử dụng storyboards, mà chúng ta sẽ thấy sau này, và bạn chắc chắn muốn sử dụng tự động tính tham khảo, đó là một tính năng tốt đẹp mà ngăn bạn phải nói malloc và miễn phí. Trừ khi bạn muốn gọi malloc và miễn phí, tôi sẽ để lại kiểm tra này. Tôi sẽ bấm vào kế tiếp, và cuối cùng, điều này sẽ hỏi tôi, nơi tôi muốn lưu nó. Tôi nhấn sẽ tạo ra, và ở đây chúng tôi đi. Tôi tạo ra một dự án mới. Trên đây ở bên trái là tất cả các tập tin bên trong dự án của tôi, và nhận thấy rằng tôi có một bó toàn bộ, và tôi thậm chí còn không làm bất cứ điều gì. IOS là rất tốt. Ví dụ, đây này ViewController.h, điều này sẽ đại diện cho bộ điều khiển xem đầu tiên của tôi, vì vậy màn hình đầu tiên bên trong ứng dụng của tôi. Bây giờ chúng ta biết những gì đang nói. Chúng tôi đang nói tôi kêu gọi này ViewController lớp, và một ViewController làm mọi thứ mà UIViewController làm, và điều này, một lần nữa, một số lớp của Apple đã viết rằng hiện rất nhiều các công cụ tiện dụng cho chúng tôi như hiển thị màn hình. Đây là nơi tôi thực sự có thể bắt đầu xác định những gì điều khiển xem của tôi không, và nó quay ra rằng tôi thực sự không cần bất cứ điều này. Đây là boilerplate mã mà Apple mang lại cho tôi miễn phí. Tôi đã cần phải có dòng đầu tiên, hoặc tôi không có một lớp học, vì vậy chúng tôi có thể nhận được thoát khỏi đó và thoát khỏi điều này. Được rồi, vì vậy đây là màn hình trống rỗng. Bây giờ hãy click vào MainStoryboard.storyboard này, và đây là nơi nó bắt đầu trở nên thú vị. Điều này thể hiện màn hình đầu tiên trên ứng dụng của tôi. Nếu tôi muốn thêm một nút, trong HTML tôi đã phải tạo ra một thẻ nút. Trong Android, bạn có để tạo ra một thẻ nút, nhưng trong iOS nếu tôi chỉ đi xuống đây để góc dưới bên phải và nếu tôi nhấp vào này thứ 3 ở đây, nơi nó nói Đối tượng, và tôi có thể di chuyển xuống, hoặc tôi có thể bắt đầu tìm kiếm cho nút. Và nhìn, một nút, vì vậy nếu tôi thực sự kéo và thả quyền này, Tôi đã chỉ cần thêm vào một nút này trên màn hình ứng dụng của tôi. Nếu tôi muốn thay đổi các văn bản, tôi có thể nhấn đôi, nói điều gì đó hấp dẫn như "Bấm nhớ." Được rồi, bây giờ nếu tôi chạy ứng dụng này, vì vậy chúng tôi biên dịch nó, để chạy nó tôi nhấn vào nút play ở bên trái phía trên cùng, và có ứng dụng của tôi. Tôi đã không làm bất cứ điều gì, và tôi có một ứng dụng iPhone tìm kiếm ngọt ngào. Nếu tôi muốn để ngăn chặn nó, bạn có thể nhấp vào nút dừng bởi vì nó thú vị hơn. Hãy nói rằng tôi thực sự muốn một cái gì đó xảy ra khi tôi bấm nút này. Để làm điều đó những gì tôi cần phải làm là tôi cần phải tạo xử lý sự kiện mới hoặc một hành động. Điều đó có nghĩa rằng tôi cần phải tạo ra một số phương pháp mà tôi muốn được gọi là khi tôi bấm nút, vì vậy chúng ta hãy tạo ra một phương pháp mới. Tôi bên trong ViewController.h. Tôi cần phải nói rằng một phương thức tồn tại. Tôi cần một dấu gạch nối đầu tiên bởi vì tôi sẽ được gọi trên bộ điều khiển xem. Tôi cần phải cung cấp một loại. Các loại này là có được điều đó IBAction mà chúng ta đã thấy trước đó. Đây là một xử lý sự kiện, do đó, nó sẽ trở lại một IBAction, và điều này là một gợi ý để XCode để nói rằng đây là một cái gì đó tôi muốn để dây một cái gì đó để. Tôi có thể cung cấp cho nó một cái tên, như dấu chấm phẩy, buttonPressed. Bây giờ tôi đã tuyên bố một phương pháp mới trong lớp học của tôi. Tôi đã cho biết phương pháp này có tồn tại. Bây giờ chúng ta hãy đi vào ViewController.m, và hãy nói rằng phương pháp này có thể làm được. Nếu tôi bắt đầu đánh máy, ví dụ, (void) buttonPressed thông báo XCode là thực sự tốt đẹp và autocompletes cho tôi. Đó là thực sự tuyệt vời. Chú ý ở đây là bên trong các tập tin. M tôi cũng có thể nói khoảng trống, và điều này là bởi vì IBAction đó không phải là thực sự là một loại. Nó thực sự hashtag xác định một nơi nào đó để có một khoảng trống, và một lần nữa, đây chỉ là một gợi ý để XCode nói rằng Tôi muốn này là một xử lý sự kiện, và chúng ta sẽ thấy lý do tại sao chỉ trong một giây. Khi nút này được nhấn, tôi sẽ làm điều gì đó gây phiền nhiễu như hiển thị một popup. Để làm điều đó tôi có thể tạo ra một thể hiện mới của lớp này được gọi là UIAlertView, và đây là một lớp học mà Apple đã viết đó sẽ hiển thị các quảng cáo gây phiền nhiễu. Chúng tôi sẽ gọi cảnh báo này bật lên, và tôi có 2 bước, hãy nhớ, để tạo ra đối tượng này. Điều đầu tiên tôi cần làm là phân bổ không gian. Tôi muốn có một UIAlertView. Tôi muốn phân bổ không gian. Đó là phương pháp đầu tiên của tôi. Phương pháp tiếp theo của tôi là tôi muốn khởi tạo nó, và vì vậy tôi có phương pháp này, lớn dài được gọi là initWithTitle. Đó là cơ bản để kiểm soát những gì bật lên này nói. Tiêu đề của sổ bật lên của tôi có thể được. Thông điệp của popup này có thể được "Đây là iOS." Đại biểu điều, tôi không biết đó là gì. Hãy nói rằng nó không có gì. Bây giờ các nút sẽ xuất hiện có thể nói một cái gì đó giống như "Đó chắc chắn là," và tôi không thực sự muốn bất cứ nút nào khác, vì vậy hãy xóa và đóng khung. Được rồi, tôi tạo ra một một trong những phụ. Hiện chúng tôi đi. Điều này là làm thế nào tôi có thể tạo một popup mới. Nếu tôi muốn thực sự hiển thị các popup tôi muốn gọi phương pháp hiển thị. Để làm điều đó tôi có thể nói cảnh báo và hiển thị, và một lần nữa, tự động hoàn chỉnh là siêu đẹp. Nếu tôi quên điều đó, nếu tôi chỉ cần gõ vào s, Tôi có thể di chuyển qua đây để tìm ra nó là cái gì, và nó sẽ lọc độc đáo. Bây giờ tôi tạo ra popup này mới. Chúng tôi sẽ quay trở lại đại biểu có nghĩa là gì sau đó, và bây giờ tôi muốn nói rằng tôi muốn phương pháp này được bắn khi tôi bấm nút, do đó, tôi sẽ trở lại kịch bản của tôi, và bây giờ tôi muốn đính kèm này IBAction. Điều đầu tiên bạn muốn làm là nhấn nút. Khi tôi bấm nút này, tôi muốn một cái gì đó xảy ra. Tôi sẽ không giữ kiểm soát. Tôi sẽ để click và kéo từ nút hơn ở đây, nơi nó nói View Controller. Chúng ta có thể thấy rằng nó độc đáo sáng lên. Nếu tôi để đi với con chuột của tôi tôi bây giờ có popup này ở đây, nơi tôi có một số tùy chọn. Một trong số đó là sự kiện mà tôi có thể đăng ký. Đây là tất cả các phương pháp đó, tôi tuyên bố trong tập tin h của tôi như IBActions. Điều này là làm thế nào XCode biết những gì sẽ xuất hiện trong danh sách nhỏ này, vì vậy đó là một gợi ý. Nếu tôi bấm vào nút bấm, bây giờ tôi đã đăng ký xử lý sự kiện. Trong JavaScript, chúng tôi phải nói rằng tôi có một số mã đăng ký xử lý sự kiện. Trong C-Mục tiêu đó là thực sự dễ dàng. Nếu tôi chạy này một lần nữa bây giờ khi tôi bấm nút xử lý sự kiện của tôi là sẽ sa thải, và tôi sẽ nhận được popup này. Siêu, siêu đơn giản. Nếu bạn đã bao giờ muốn nhìn thấy tất cả những sự kiện đó xảy ra để được đăng ký trên một thành phần nếu tôi nhấp vào nút này và tôi đến đây để các bên phải đầu tiên bạn có thể thấy ở đây tôi có thể làm những thứ như các loại của các nút, vì vậy nếu bạn muốn một trong những người của tôi hoặc liên hệ vào nút thêm hoặc bất cứ điều gì. Nếu tôi muốn xem tất cả các sự kiện vào nút này nếu tôi đến tất cả các cách trên đây để các bên phải chúng ta có thể thấy ở đây tại các sự kiện tôi có tất cả các sự kiện khác nhau. Tôi có thể nhấn nút, khi tôi cho đi của nút, khi tôi tăng gấp đôi vòi nước hoặc bất cứ điều gì, và tôi vừa đăng ký là sự kiện này được gọi là cảm ứng Up Bên trong, và điều này nói rằng ngay sau khi ngón tay của tôi đến nút sự kiện đang xảy ra cháy, và đó là chính xác những gì vừa xảy ra. Đây là loại sự kiện mặc định ấn nút. Bất kỳ câu hỏi nào cho đến nay? Được rồi, đó là làm thế nào chúng ta có thể bắt đầu để dây lên những điều trong mã của chúng tôi vào những thứ bên trong giao diện của chúng tôi. Hãy nhớ điều đầu tiên chúng tôi phải làm là để tìm mã, và sau đó chúng tôi có dây lên giao diện cho mã, và ứng dụng đầu tiên của chúng tôi. Được rồi, đó là thực sự mát mẻ, và chúng tôi tạo ra nút này. Điều gì sẽ xảy ra nếu chúng ta không muốn có để tạo ra một loạt các tài sản đại diện cho các nút này? Ví dụ, trong Tic Tac Toe tôi có 9 nút, và nó muốn được siêu, siêu khó chịu khi phải kéo và thả 9 lần hoặc nếu tôi đã có để làm cho Tic Tac Toe với 81 thay vì 9 và tôi đã phải kéo và thả 81 lần, và đó là lame. Những gì chúng ta có thể làm gì để thay là giống như một HTML khi chúng tôi đã có những thứ như ID và tên người và chúng ta có thể tìm kiếm mọi thứ ID của họ, có một khái niệm tương tự như trong iOS được gọi là thẻ. Tag đơn giản chỉ là một định danh số duy nhất cho một thành phần. Nếu tôi nói điều này có một thẻ từ 0, ví dụ, nếu tôi tạo ra một nút và cung cấp cho nó một thẻ từ 0, và chúng tôi sẽ xem làm thế nào để làm điều đó chỉ trong một giây, nếu tôi muốn nhận được rằng nút, tôi chỉ đơn giản là có thể nói rằng tôi muốn gọi , viewWithTag phương pháp trên đối tượng trên đây self.view, đại diện cho màn hình hiện tại, ví dụ. Nếu tôi gọi rằng phương pháp viewWithTag, tôi sẽ kéo lại các nút có tag 0. Chúng ta hãy xem xét điều này bằng cách xây dựng Tic Tac Toe. Thứ nhất, đây là kịch bản của tôi. Tôi đã tạo ra 10 nút giao diện người dùng này. Chú ý tất cả chúng có cùng kích thước. Nếu tôi nhấp vào một trong những điều này và tôi trở lại đây ở phía bên này phải bạn sẽ thấy, tôi chỉnh lại font chữ ở đây, nên tôi thực hiện các phông chữ lớn hơn một chút, nhưng những gì Tôi cũng đã làm tôi đặt thẻ này. Tôi nói điều này có một tag của 1, và đó là phía trên bên trái. Bây giờ, nếu tôi bấm một nút khác, như thế này thứ hai ở đây, bây giờ bạn sẽ thấy rằng từ khóa của tôi là 2. Mỗi phòng trong các nút này chỉ có một thẻ duy nhất, và do đó, điều này sau đó như thế nào tôi sẽ bắt đầu tương tác với ứng dụng của tôi. Đây là tất cả các bên trong của một bộ điều khiển xem, nhưng đây là những gì chúng tôi có. Chúng tôi có 3 thuộc tính ở đây. Người đầu tiên và mới nhất sẽ đại diện cho nhà nước của hội đồng quản trị của tôi. Về cơ bản này đầu tiên là một mảng đại diện cho nơi Xs và Os. Một trong những khác ở đây cho chúng ta biết có lần lượt là. Bạn sẽ nhận thấy rằng tôi cũng có những việc này ở đây. Trước khi chúng tôi tuyên bố tài sản, chúng tôi đã cho họ một cái tên và một loại. Chúng tôi cũng có thể cung cấp cho họ một số thông tin bổ sung ở đây. Đầu tiên này nói nonatomic, và những gì này nói về cơ bản là chỉ có một điều sẽ không bao giờ phải cố gắng để truy cập vào biến tại một thời điểm. Bạn có thể làm phức tạp hơn các ứng dụng đa luồng, và như vậy trở lại trong Scratch chúng tôi đã có các chủ đề khác nhau, và sprites khác nhau có thể làm những việc khác nhau cùng một lúc. Nếu đó không phải là trường hợp, nó không phải là bất cứ điều gì mà chúng ta sẽ được xem xét, nếu chúng ta nói nonatomic nó thực sự sẽ làm cho mọi việc nhanh hơn một chút. Chúng tôi cũng có điều này được gọi là phân công, mạnh mẽ, hay yếu. Này gán chỉ nói rằng đây là một loại tiêu chuẩn. Đây không phải là một đối tượng hoặc một con trỏ vì đây chỉ là một bool, để bool được xây dựng vào C-Mục tiêu. Điều này nói rằng không cố gắng làm bất cứ điều gì ưa thích với con trỏ ở đây. Đó là một tuổi thường xuyên scaler. Mạnh và yếu, yếu đuối này cho biết, thực sự Tôi muốn điều này để được trỏ đến một cái gì đó trong bộ điều khiển xem. Tôi sẽ không thực sự phân bổ hoặc init này bản thân mình. Các nhà xây dựng giao diện, khi tôi chạy các ứng dụng, sẽ xử lý tất cả những gì khởi tạo. Nếu tôi nói yếu, nói rằng một người nào khác sẽ được tạo ra. Nếu tôi nói mạnh mẽ, điều này nói rằng tôi sẽ là một trong những đó là tạo ra các đối tượng này hội đồng quản trị, và do đó, ở đây tôi có phương pháp một số chi tiết ở đây, ví dụ, một hành động khi được nhấn nút trò chơi mới, một hành động cho khi bất kỳ của các nút khác được ép, và vân vân. Chúng tôi sẽ không nhận ra quá nhiều của logic của Tic Tac Toe, mặc dù nó rất thú vị, nhưng chúng ta hãy xem xét một số trong những điều mà chúng ta có thể làm bên trong của iOS. Phương pháp này trò chơi mới sẽ được bắn bất cứ khi nào tôi bấm nút trò chơi mới. Để treo lên, tôi chỉ đơn giản là đi qua kịch bản của tôi. Tôi nhấp vào trò chơi mới. Nếu tôi đi qua bên phải, tôi có thể thấy rằng Chạm Bên trong là dây để phương pháp newGame. Đó là lý do tại sao điều này sẽ bị sa thải. Phương pháp newGame được để làm một số thiết lập. Nó sẽ nói rằng tôi muốn bạn để xóa trạng thái của hội đồng quản trị. Đây là một phương pháp tốt đẹp trên có thể thay đổi mảng. Điều này sẽ nói đó là X lượt, và bây giờ tôi sẽ tận dụng lợi thế của điều này viewWithTag. Tôi biết rằng các nút của tôi có các thẻ 1-9, và đó là một cái gì đó tôi tự ý chọn. Nếu tôi muốn thiết lập các văn bản của mỗi nút được sản phẩm nào bởi vì tôi chỉ mới bắt đầu một trò chơi mới và tôi không muốn bất kỳ Xs hoặc O để lại trên tôi có thể làm điều này. Tôi có thể nói rằng tôi muốn xem có tag, 1, 2, 3, 4 vân vân. Điều này sẽ kéo một nút bấm khác nhau mỗi lần. Ở đây tôi sẽ bỏ nó vào UIButton. Cũng giống như chúng ta có thể bỏ ints để nổi và ngược lại điều này nói rằng tôi muốn cast này một UIButton. Điều đó có nghĩa là các loại này sẽ là một * UIButton vì các con trỏ, nhưng đừng lo lắng, họ không đáng sợ nữa. Khi tôi đã có nút này tôi sẽ gọi một phương thức trên nó. Phương pháp này được gọi là setTitle forState, và do đó, điều này nói Tôi muốn thiết lập các văn bản của các nút là chuỗi rỗng, và tôi muốn nó là chuỗi rỗng khi nó không ép. Nếu tôi đang sử dụng phương pháp này, tôi có thể thay đổi các văn bản của các nút ngay khi có ai đánh nó, nhưng chúng tôi muốn nói khi nút được chỉ ngồi đó Tôi muốn văn bản được để trống. Cuối cùng, chúng ta sẽ khởi tạo hội đồng quản trị của tôi, và tôi sẽ nói rằng tất cả mọi thứ hiện đang ở mức 0, do đó, điều này các thành viên hội đồng quản trị không thay đổi là một mảng có thể thay đổi, có nghĩa là tôi có thể gọi phương thức addObject và chỉ bên trong một 0 của nó. Đó là những gì xảy ra khi tôi tạo ra một trò chơi mới. Chúng ta hãy xem xét một số khác. Phương pháp này ở đây là IBAction đó sẽ được ép mỗi lần một trong những hình vuông được nhấn. Bây giờ chúng tôi có một số Tic Tac Toe logic ở đây. Chúng tôi tìm ra có lần lượt là, và dựa trên đó chúng tôi thiết lập một X hoặc một O, nhưng chúng tôi nhận thấy rằng chúng tôi đang sử dụng lại cùng một xử lý sự kiện cho mỗi một đơn của các nút. Điều đó có nghĩa là tôi không có một phương pháp cho các nút trên bên trái, một phương pháp khác nhau cho nút phía dưới bên phải, mặc dù tôi có thể có thực hiện điều đó. Điều đó sẽ không thực sự được thiết kế tốt. Những gì tôi đang làm ở đây là tôi thực sự sẽ để xác định thẻ của nút được nhấn. Bạn nhận thấy rằng phương pháp này chơi mất một đối số. Nó được gọi là người gửi, người gửi là người gửi sẽ đại diện cho chính xác những gì được hành động trên. Nếu tôi nhấn một nút, người gửi sẽ được rằng UIButton rằng tôi thực sự ép, do đó có nghĩa rằng UIButton có một thẻ bởi vì tôi đã tạo ra một thẻ. Nếu tôi muốn để có được thẻ, tôi chỉ đơn giản là có thể nói Tôi muốn các thẻ của người gửi, và một lần nữa, tôi vừa mới đúc nó vào một UIButton. Tôi xảy ra để biết rằng người gửi sẽ là một UIButton. Nó không phải luôn luôn là một UIButton. Tôi có thể, ví dụ, đăng ký cùng một xử lý sự kiện  cho một cho một nút, một cho một thanh trượt. Trong trường hợp này, tôi biết họ đang tất cả các nút, do đó, tôi sẽ nói Tôi muốn này là một nút, và sau đó tôi có thể nhận được thẻ, và từ thẻ bây giờ tôi biết nơi tôi bên trong của hội đồng quản trị. Sau đó, tôi chỉ đơn giản là có thể thiết lập hoặc X hoặc O, có thể lật lần lượt, kiểm tra xem những người đã giành được, vân vân. Bất kỳ câu hỏi này cho đến nay? Được rồi, tất cả các mã chúng tôi được đăng trực tuyến chúng tôi không muốn để có được vào quá nhiều của logic Tic Tac Toe, nhưng bây giờ bạn có thể thấy rằng thực sự tất cả những gì chúng ta đang làm là chúng ta đang Looping trên mảng này, vì vậy chúng tôi có một vài cho vòng ở đây, và chúng tôi chỉ so sánh để xem chúng tôi có một trận đấu trong tất cả các hàng, một trận đấu trong một cột hoặc bất cứ điều gì như thế. Để thực sự chạy ứng dụng này, nếu tôi gõ vào một trong những nút rằng phương pháp chơi đã bị sa thải, do đó, điều đó có nghĩa là tôi chỉ cần đặt nút là một X, vì vậy bây giờ nút này sẽ là một O, và như vậy, và vì vậy đó là làm thế nào chúng ta đang bắt đầu tương tác với các ứng dụng trang duy nhất. Chúng tôi sẽ gửi mã, vì vậy cảm thấy tự do để lướt qua rằng, nhưng Bây giờ chúng ta hãy nói về một số ứng dụng mà có nhiều hơn so với chỉ một trang. Như là thú vị như Tic Tac Toe là, rất nhiều ứng dụng bên trong của iOS là loại khoan này ra những điều có nhiều màn hình. Khái niệm đầu tiên mà chúng ta sẽ cần phải nói về các giao thức, và một giao thức chỉ đơn giản là một tập hợp các phương pháp mà bạn có thể hứa hẹn để xác định. Nếu tôi tạo ra giao thức mới này với 2 phương pháp, một trong những đầu tiên này, nếu kiểu trả về là void, tôi gọi nó là foo. Nó không có đối số. Tôi có một phương pháp khác. Nó trả về một int. Tôi gọi nó là thanh này, và phải mất một đối số. Tất cả các giao thức này là được gọi là SomeProtocol lên đây, đây là một tập hợp của những điều mà một người nào đó có thể thực hiện. Tôi đã không phải bên trong của giao thức này cho biết những gì foo. Thay vào đó, tôi chỉ nói rằng bạn có thể xác định foo nếu bạn muốn. Nếu tôi là tạo ra một bộ điều khiển xem hoặc tạo ra một lớp Tôi có thể bên trong của lời hứa đó lớp để thực hiện một số phương pháp này, do đó, ví dụ, nếu nói này ngay bây giờ nói rằng tôi là làm một lời hứa với bạn rằng bên trong của lớp này điều khiển xem, tôi sẽ phải định nghĩa cho cả hai foo và bar. Tại sao là hữu ích? Rất nhiều các thành phần bên trong của iOS tận dụng điều này mẫu thiết kế được gọi là đoàn đại biểu, và những gì phân quyền là, ví dụ, nếu tôi có một hộp văn bản và có một số sự kiện có thể được đăng ký bên trong của hộp văn bản của tôi, hơn là việc tạo ra các sự kiện riêng biệt những gì tôi có thể làm là tôi có thể nói các đại biểu của hộp văn bản này sẽ có một số đối tượng. Khi tôi nói rằng đây là một đại biểu tại đó có nghĩa là bất cứ khi nào một số sự kiện có thể đã được bắn vào hộp văn bản thay vì phải đăng ký hoặc bất cứ điều gì như thế nó chỉ là để gọi một phương thức trên các đại biểu. Ví dụ, bên trong hộp văn bản của tôi, tôi có một phương pháp để khi tôi bấm mà làm nút ở góc dưới bên phải, và nên thay vì đăng ký xử lý sự kiện những gì tôi có thể nói được hộp văn bản, đây là một đối tượng mà tôi muốn bạn gọi một phương thức trên mỗi khi một người nào đó nhấn nút thực hiện, và điều đó có nghĩa là đối tượng có để thực hiện một số giao thức nói rằng tôi hứa sẽ xác định rằng hành động nút thực hiện, bởi vì nếu nó không xác định rằng phương pháp và bạn nhấn xong, sau đó nó sẽ là khó hiểu. Chúng ta hãy xem một ví dụ. Ở đây tôi chỉ đơn giản là có một hộp văn bản, và một trong các thuộc tính của hộp văn bản này ở đây này phía bên phải là các đại biểu. Đây là một tài sản của lớp. Những gì tôi đã làm ở đây là để kiểm soát nhấn vào, và tôi kéo ra khỏi vị trí này ở đây bộ điều khiển xem, và nói rằng các đại biểu của hộp văn bản này là có được bộ điều khiển xem. Điều đó có nghĩa là khi một số hành động xảy ra, chứ không phải đăng ký xử lý sự kiện riêng biệt tôi muốn bạn gửi cho các đại biểu. Bây giờ chúng ta hãy nhìn vào bộ điều khiển điểm của tôi. Bên trong của tập tin h. Tôi đã thực hiện một lời hứa. Tôi đã hứa sẽ thực hiện một số phương pháp bên trong của giao thức này gọi là UITextFieldDelegate, và một lần nữa, đây chỉ là một số danh sách của một số thứ mà tôi có thể chọn để thực hiện. Nếu tôi đến đây vào tập tin. M của tôi, tôi đã thực hiện một trong những phương pháp như vậy. Tôi đã gọi nó là textFieldShouldReturn bởi vì đó là những gì nó được gọi là bên trong của giao thức. Và bây giờ bất cứ khi nào tôi bấm nút thực hiện bên trong đó lĩnh vực văn bản đây là những gì đang xảy ra để có được gọi, vì vậy tôi đã không đăng ký một hàm xử lý sự kiện. Tôi đã kết nối đại biểu, và bất cứ khi nào sự kiện này là bắn đây là phương pháp mà sẽ được gọi, vì vậy nếu tôi đi qua đây để kịch bản của tôi và chạy nó trong khi đó tải chúng ta có thể thấy điều này không. Trên màn hình của tôi, tôi có 2 điều. Tôi có lĩnh vực văn bản này, và tôi có nhãn này. Tôi chỉ đơn giản nói rằng tôi muốn các văn bản của nhãn này bằng bất cứ điều gì người dùng gõ vào bên trong trường văn bản. Dòng tiếp theo này ở đây chỉ đơn giản là một phương pháp mà tôi đang gọi trên các lĩnh vực văn bản nói rằng tôi muốn bạn để ẩn bàn phím. Đây chỉ là phương pháp độc đoán rằng Apple đã chọn. Một lần nữa, trước khi tôi đã làm bất cứ điều gì tôi đã để dây lên tất cả mọi thứ, do đó, lần đầu tiên tôi đến đây. Từ bộ điều khiển xem tôi kéo vào hộp văn bản. Tôi để cho đi, và tôi có thể thấy ở đây mà tôi có thể làm cho tài sản lĩnh vực văn bản từ trên đây ở bộ điều khiển xem, tôi đã xác định một tài sản đó là một IBOutlet của một trường text. Điều này nói rằng tôi có thể dây này tài sản một trường văn bản trong giao diện người dùng của tôi. Bây giờ khi tôi nhấp vào này tôi có thể bắt đầu nhập. Bây giờ nếu tôi nhấp vào nút thực hiện điều này là có lửa một sự kiện mà tôi bây giờ có thể đáp ứng. Không có sự kiện xử lý. Đó là cách tôi chỉ trả lời rằng nút thực hiện. Có ý nghĩa? Đây không phải là một mẫu thiết kế rằng bạn có thể không bao giờ tìm thấy chính mình tạo ra giao thức riêng của bạn, nhưng chỉ cần biết rằng một số các thành phần khác nhau iOS đăng ký các sự kiện theo những cách khác nhau. Buttons, ví dụ, sử dụng những IBActions. Lĩnh vực văn bản, mặt khác, sẽ sử dụng các đại biểu. Chúng tôi có thể xem và bạn có thể xem tất cả các rằng bên trong lên các tài liệu hướng dẫn. Bằng cách này, có thực sự là một tấn công cụ giao diện người dùng được xây dựng vào iOS cho bạn, ví dụ như vậy, cách tôi nói rằng thực hiện ở góc dưới bên Tôi đã chọn lĩnh vực văn bản này. Tôi đi qua đây. Tôi cuộn xuống một chút để trả lại chìa khóa, và tôi thực sự có thể làm cho một bó toàn bộ những thứ này, giống như nếu tôi muốn những gì để nói trường hợp khẩn cấp gọi thay vào đó tôi có thể làm điều đó, đó là hoàn toàn ngẫu nhiên, và tôi không biết lý do tại sao có một nút khẩn cấp cuộc gọi built-in, nhưng có, nó nói cuộc gọi khẩn cấp trong chữ thực sự nhỏ. Có bạn đi. Chắc chắn khám phá tất cả các tùy chọn khác nhau trong iOS. Bất kỳ câu hỏi các đại biểu? Một lần nữa, chỉ cần một mẫu thiết kế thú vị mà bạn cần phải nhận thức. Được rồi, chúng ta hãy tiếp theo có một cái nhìn xem bảng. Một xem bảng là cơ bản mà danh sách các mục đó là tất cả các nơi trên iOS. Khi bạn flipping thông qua tất cả các địa chỉ liên lạc của bạn, bạn đang tìm kiếm trang thiết lập, và các loại danh sách những thứ được gọi là xem bảng. Thực hiện một cái nhìn bảng trong iOS là khá đơn giản. Thay vì tạo ra một lớp học mà xuống từ đó UIViewController như chúng tôi đã thực hiện trước khi chúng tôi chỉ đơn giản là cần phải nói chứ không phải là tất cả mọi thứ một UIViewController không tôi muốn làm, Tôi nói tất cả mọi thứ một UITableViewController không tôi muốn làm, để chỉ đơn giản là bổ sung thêm một số điều bổ sung được hoàn toàn làm cho chúng ta. Chúng ta cần làm rất ít về cơ bản điền vào những khoảng trống bên trong của bảng. Để hiển thị một bảng tôi cần phải trả lời một số câu hỏi. Câu hỏi đầu tiên tôi cần phải trả lời là có bao nhiêu phần trong bảng? Khi bạn đang flipping thông qua ứng dụng các địa chỉ liên lạc của bạn, bạn sẽ nhận thấy rằng đó là loại Như tổ chức, sau đó bạn có Bs, và bạn đã có tiêu đề ít phụ. Mỗi phòng trong những người được gọi là một phần. Bạn có thể hoặc có thể không cần những. Điều đầu tiên bạn cần làm là thực hiện một phương pháp gọi là tableView: numberOfSectionsInTableView. Điều đó chỉ đơn giản trả bao nhiêu phần bạn có, do đó, điều này có thể nói trở lại nếu bạn có một xem bảng lớn. Câu hỏi tiếp theo mà iOS cần biết là bạn có bao nhiêu hàng? Ví dụ, bạn đang lật qua một xem bảng. Bạn có một số cố định của các bài hát mà bạn đang tìm kiếm hoặc một số cố định của địa chỉ liên lạc. Nếu bạn là tôi, tất nhiên, không phải là nhiều, và vì vậy đó là như thế nào iOS biết bao nhiêu tế bào để hiển thị. Một lần nữa, điều này có thể nói một cái gì đó như lợi tức 3. Xem bảng của tôi có 3 dòng. Cuối cùng, iOS cần phải biết những gì mỗi tế bào trông giống như, vì vậy những gì nó thực sự sẽ làm là gọi phương thức này xuống đây, tableView: cellForRowAtIndexPath này. Nó sẽ gọi phương pháp này trên tất cả các tế bào bên trong của bảng của bạn. Làm thế nào để biết bao nhiêu lần để gọi nó? Vâng, bạn nói với nó trong số các hàng trong phần. Chúng ta sẽ gọi đây là trên mỗi tế bào của chúng ta, và bên trong của việc này là bạn thực sự có thể làm những việc như thiết lập các văn bản hoặc cho bạn biết những gì mà ít nút màu xanh ở bên phải. Các mô hình cho việc các tế bào này, chúng ta sẽ sử dụng phương pháp gọi là dequeueReusableCellWithIdentifier. Objective-C là thực sự rất nổi tiếng với chiều dài vô lý của tên phương pháp của họ, và điều này thực sự là một trường hợp tốt đẹp trong ví dụ điểm. Phương pháp này là chỉ nói tôi muốn bạn để cho tôi một tế bào. Chỉ cần một điều iOS. Nếu bạn có một cái gì đó giống như 100.000 bài hát trên iPod của bạn iOS không muốn làm là phân bổ 100.000 ô, bởi vì nếu bạn đang ở trên cùng của danh sách của bạn, bạn thực sự cần phải cấp phát bộ nhớ cho các tế bào đó là 99.000 hàng xuống? Không, bởi vì khi bạn đang di chuyển, bạn có thể loại phân bổ như bạn đi cùng. Điều này được thực hiện cho bạn. Bạn không cần phải lo lắng về tất cả những công cụ hiệu suất ngu ngốc. Tất cả những gì bạn nói là bạn gọi phương pháp này dequeueReusableCellWithIdentifier, và điều này nói, không sao, nếu bạn cần tôi sẽ tạo ra tế bào mới cho bạn. Nhưng nếu bạn ở dưới cùng của bảng và bạn đã phân bổ một số tế bào ở phía trên của bảng mà bạn đang thực sự sẽ không cần phải sớm Tôi sẽ cung cấp cho bạn một trong những người trở lại thay vì phân bổ một mới, và vì vậy đây là một mối quan tâm thực hiện tốt đẹp. Bạn không cần phải tự mình phân bổ các tế bào. Điều đó sẽ cung cấp cho bạn một tế bào. Nó sẽ trả lại cho bạn một đối tượng di động. Một khi bạn có các đối tượng di động bạn có thể làm công cụ cho nó. Bạn có thể thiết lập các văn bản của tế bào với tài sản được gọi là văn bản nhãn. Bạn có thể thêm rằng mũi tên bên phải hoặc một số công cụ khác ngẫu nhiên với các tài sản khác được gọi là accessoryType, và vv và vv. Hãy có một cái nhìn thực sự thực hiện một xem bảng giờ. Khi tôi tạo ra dự án này thay vì nói rằng ứng dụng nhìn duy nhất tôi thực sự đi qua đây ứng dụng master-chi tiết, và như vậy về cơ bản này tương ứng với các ứng dụng mail trên iPad với chế độ xem bảng bên trái và sau đó là nội dung bên phải. Trên iPod hoặc iPhone này sẽ tương ứng với một xem bảng duy nhất. Đó là nơi tôi có mã khởi động của tôi. Trước tiên chúng ta có một cái nhìn ở kịch bản này. Tất cả những điều này đã được thực hiện đối với tôi, về cơ bản tạo ra. Thanh điều hướng này cho thấy ví dụ một tế bào có thể giống như, và tôi có thể tăng gấp đôi nhấp vào, thay đổi tiêu đề. Bất kỳ mối quan tâm giao diện người dùng khác có thể xử lý. Các tập tin tiêu đề trông thật sự đơn giản. Thay vì nói rằng đây là UIViewController Bây giờ chúng ta đang nói đây là một TableViewController, vì vậy chúng tôi biết rằng chúng tôi muốn kêu gọi tất cả các phương pháp bảng. Tiếp theo, tôi muốn tạo ra một tài sản mà sẽ đại diện cho những điều bên trong của bàn của tôi. Bảng này sẽ tự ý hiển thị một danh sách các trái cây, và vì vậy tôi cần phải tạo ra một số mảng trong đó tôi có thể chèn trái cây. Bên trong của tập tin thực thi của tôi, điều đầu tiên tôi muốn làm là tôi muốn làm cho chắc chắn tôi khởi tạo mảng này. Tôi nói alloc init, tạo ra mảng trái cây của tôi, và tôi thêm 4 thứ với nó, một trong số đó là rất nhiều tranh cãi hơn khác 3. Và bây giờ tôi có một loạt các kích thước 4. Chúng tôi đang lắc nó vào CS50. Tôi đã có một loạt các kích thước 4. Bây giờ tôi sẽ bắt đầu trả lời những câu hỏi này, và trên thực tế, khi tôi tạo ra ứng dụng này tất cả những điều này đã làm cho tôi. Tôi không phải loại ra số phần trong một xem bảng. Nó đã ở đó, và tôi điền vào chỗ trống. Có bao nhiêu phần nào? One. Tất cả đã hoàn tất. Bao nhiêu hàng nào? Vâng, tôi có một hàng cho mỗi trái cây, do đó, đếm này là một tài sản của bất kỳ mảng nói rằng là nó lớn như thế nào? Đó là tôi có bao nhiêu hàng. Cuối cùng, tôi cần phải nói mỗi tế bào trông giống như những gì? Tôi sẽ nói dequeueReusableCellWithIdentifier. Một lần nữa, điều này đã được viết cho tôi. Tôi không phải làm điều này bản thân mình, và tôi muốn trở lại tế bào này tại địa điểm này. Hãy nhớ rằng chúng tôi đang gọi điện thoại cùng một phương pháp này trên tất cả các tế bào duy nhất, và lập luận này ở đây, lập luận này indexPath, hàng tôi. Nếu tôi nói indexPath.row đây đây sẽ là 0, sau đó nó sẽ là 1, sau đó nó sẽ là 2, và điều này là vì vậy tôi biết những tế bào Tôi hiện đang hiển thị. Tôi muốn thiết lập các văn bản của tế bào bằng cách sử dụng khách sạn textLabel bên trong mảng trái cây của tôi và nhận được các đối tượng tương ứng với mỗi hàng. Nếu đây là một chuỗi, tôi bây giờ thiết lập tài sản văn bản thành một chuỗi. Tôi có thể làm một điều khác. Tôi cũng có thể đăng ký một hàm xử lý sự kiện trên mỗi của các tế bào, vì vậy khi tôi tap mỗi của các tế bào này didSelectRowAtIndexPath này, điều này sẽ được gọi là cho tôi, do đó, chỉ đơn giản bằng cách định nghĩa này, tôi bây giờ có thể xử lý những gì sẽ xảy ra khi bạn chạm vào một tế bào, và một lần nữa, chúng tôi đang đi qua mà tế bào bị nghe lén để chúng tôi có thể tái sử dụng xử lý sự kiện tương tự cho tất cả các tế bào của chúng ta. Một lần nữa, đây là một cái gì đó iOS đang làm cho tôi. Hãy hiển thị một popup gây phiền nhiễu khác mà chỉ đơn giản nói rằng bạn chọn một cái gì đó mà một điều gì đó là có được các đối tượng hàng. Khi tôi chạy, tôi sẽ phải xem bảng này tốt đẹp có một hàng cho mỗi trái cây này, và nếu tôi khai thác 1 nó nói với tôi những gì đã xảy ra. Có ý nghĩa? Hãy xây dựng một chút phức tạp hơn của một ứng dụng, càng nhiều như cách nhấp vào bạn chọn cà chua. Phần tốt đẹp về viết kịch bản là nó không chỉ sẽ giúp màn hình thiết kế chúng tôi cá nhân, nó cũng sẽ giúp chúng tôi kết hợp chặt chẽ ứng dụng toàn bộ của chúng tôi, do đó, các ứng dụng cuối cùng chúng tôi sẽ xây dựng này là đọc tin tức thể thao đẹp, và do đó, nó sẽ có nhiều màn hình, và vì vậy tôi thực sự có thể đại diện cho mỗi màn hình này trên nhiều kịch bản này, và tôi có thể phóng to và thu nhỏ ứng dụng của tôi từ mức cao. Để tạo ra một phần tử bên trong mới của kịch bản của tôi nó thực sự đơn giản bên trong giao diện Builder. Nếu tôi muốn thêm một màn hình này, ví dụ, Lần đầu tiên tôi có thể thu nhỏ với zoom ít mà Apple yêu rất nhiều, và xuống đây trước khi tôi tìm kiếm một nút và tôi kéo và thả một nút nếu tôi muốn tạo ra một màn hình mới, tôi có thể thực sự chỉ cần kéo và thả một bộ điều khiển xem toàn bộ, vì vậy nếu tôi chọn này, kéo nó ở đây, hey, có một màn hình khác, và vì vậy bây giờ bằng cách sử dụng cùng một kịch bản tập tin này Tôi có thể có tất cả các màn hình bên trong ứng dụng của tôi, và tôi có thể thu nhỏ và xem cách họ tương tác. Đây sẽ không tương tác. Cách thức mà 2 màn hình này tương tác là bạn xác định các mối quan hệ. Về cơ bản bạn có thể nói màn hình này, khi bạn nhấn nút này, Tôi muốn bạn để trượt qua màn hình mới này. Điều đó có nghĩa là loại mối quan hệ giữa  màn hình đầu tiên và màn hình thứ hai. Bạn sẽ có cơ bản một mũi tên từ nút đó để màn hình thứ hai nói rằng khi bạn nhấn nút này đó là nơi tôi muốn đi. Cũng giống như chúng ta kiểm soát nhấp vào và kéo để xác định những cửa hàng chúng ta sẽ làm điều tương tự để xác định những segues. Chúng ta sẽ thấy một ví dụ cho điều đó, và trước khi chúng tôi thực sự chuyển đổi từ một màn hình khác iOS là tốt đẹp, đủ để gọi phương pháp này gọi là prepareForSegue, và đây là nơi mà chúng ta có thể bắt đầu gửi dữ liệu từ một ứng dụng khác. Trong ví dụ này, chúng tôi đang về để nhìn vào nó về cơ bản sẽ cho phép chúng tôi để lọc các đội bóng chày của giải đấu và các bộ phận. Khi tôi chọn một giải đấu, ví dụ, tôi muốn chuyển màn hình kế tiếp của tôi, nơi tôi có thể hiển thị tất cả các bộ phận trong đó các giải đấu hoặc tất cả các đội khác nhau. Tôi cần phải gửi với màn hình những gì đội bạn nên hiển thị. Để làm được điều mà tôi sẽ tận dụng lợi thế của phương pháp này ở đây. Cuối cùng, chỉ cần một điểm ngẫu nhiên trên iOS. Nếu bạn muốn lưu trữ dữ liệu có điều này được gọi là dữ liệu cốt lõi, mà thực sự là loại phức tạp để làm việc với. Bạn cũng có thể sử dụng SQL để lưu trữ dữ liệu, một lần nữa, là tốt đẹp, nhưng loại ở phía bên phức tạp hơn để làm việc với, nhưng iOS cũng hỗ trợ những điều này thực sự mát mẻ được gọi là danh sách đặc tính, và một danh sách bất động sản chỉ là một tập tin mà đại diện cho các cặp giá trị quan trọng. Bạn định nghĩa một danh sách các phím, và bạn nói phím này là có được một mảng. Đây chính là một chuỗi, và về cơ bản bất cứ điều gì bạn có thể làm trong JSON, bạn có thể làm bên trong của một danh sách bất động sản, và do đó, điều này thực sự độc đáo cho phép chúng tôi làm việc với một số dữ liệu. Ví dụ, tôi có Teams.plist mà tôi tạo ra. Tôi tạo ra một tập tin plist mới, và tôi có thể đi sâu. Đây là một từ điển, đây là một từ điển, đây là chuỗi, và vì vậy đây là một đại diện đồ họa đẹp của một tài liệu JSON hay chỉ là một tập hợp các cặp giá trị quan trọng, và do đó, điều này là các dữ liệu mà chúng ta sẽ làm việc với các bên trong ứng dụng của tôi. Hãy đầu tiên đến đây. Chúng tôi có các tập tin nhiều hơn bây giờ. Nhưng trước tiên hãy đến đây để kịch bản này. Các kịch bản ở đây nếu tôi có thể thu nhỏ bây giờ chúng ta có thể thấy rằng đây là dòng chảy của ứng dụng của tôi. Tôi đầu tiên sẽ bắt đầu trên màn hình này. Tôi sẽ đi sâu vào màn hình này, và tôi sẽ đi sâu vào màn hình này, và chúng ta có thể thấy ở đây rằng nếu tôi loại di chuyển một trong những xung quanh chúng ta có những mũi tên đi từ đây đến đây, và cách tôi xác định rằng mũi tên là nếu tôi phóng to một chút, và nếu tôi đi qua để điều khiển xem này, và đây là một tế bào, và tôi muốn nói rằng khi bạn chạm vào một tế bào Tôi muốn bạn để trượt qua màn hình khác. Tôi chỉ đơn giản là có thể giữ kiểm soát, di chuyển trên một chút, giữ kiểm soát, kéo tế bào này và để cho đi. Và ở đây chúng ta nói quá trình chuyển đổi mà bạn muốn sử dụng là những gì? Bạn có muốn sử dụng điều slide có đẩy được gọi là? Bạn có muốn trượt từ dưới lên? Đó gọi là phương thức. Và một khi tôi nhấp vào một trong những, nó sẽ vẽ mũi tên này cho tôi, và điều đó có nghĩa là tôi đã thực sự xử lý những gì sẽ xảy ra khi tôi bấm nút này đồ họa. Tôi đã không viết bất kỳ mã để thực sự trượt từ một màn hình kế tiếp. Tôi xác định trực quan bên trong giao diện Builder. Nếu tôi bấm vào mũi tên này, chúng ta có thể thấy rằng tôi đã cho điều này một tên. Tôi gọi nó là showDivisions, và đây là để tôi có thể biết quá trình chuyển đổi là gì sắp xảy ra, và chúng ta sẽ thấy lý do tại sao chỉ trong một giây. Đó là cách tôi đã có dây lên các màn hình khác nhau trong ứng dụng của tôi. Nếu đây là một nút, ví dụ, thay vì xem một bảng, Tôi có thể kiểm soát nhấp chuột vào nút, kéo qua màn hình tiếp theo, và đó là làm thế nào tôi có thể làm chuyển hướng theo cách đó. Thực sự nhanh chóng, nếu chúng ta đi vào các MasterViewController, một lần nữa, chúng tôi chỉ đơn giản là để xác định một danh sách những thứ sẽ được hiển thị trong xem bảng. Ở đây tôi đang nói rằng tôi muốn bạn để có tập tin plist, và tôi muốn bạn để tải nó lên thành một từ điển, và một khi bạn có từ điển đó, tôi sẽ trả lời những câu hỏi tương tự một lần nữa. Đây là số phần. Một, có một hàng cho mỗi giải đấu, và văn bản của mỗi tế bào nên hoặc là một trong những đầu tiên, giải đấu đầu tiên, giải đấu thứ hai, và như vậy. Cuối cùng, tôi sẽ sử dụng phương pháp này mà chúng tôi chỉ đã nhìn thấy được gọi là prepareForSegue, và đây là phương pháp đó là sẽ bị sa thải khi tôi nhấp vào trên một trong những hàng và do đó kích hoạt quá trình chuyển đổi tôi thiết lập với các mũi tên. Điều này được nói rằng tôi có thể có nhiều mối quan hệ từ một màn hình khác. Nếu tôi có 2 nút và mỗi nút sẽ đưa bạn đến một màn hình khác nhau Tôi sẽ có 2 segues, 1 cho mỗi nút. Nhưng prepareForSegue này, một lần nữa, sẽ được tái sử dụng cho mỗi người trong các mối quan hệ khác nhau, do đó có nghĩa là tôi cần một cách xác định nếu bạn bấm nút đầu tiên hoặc bạn bấm vào nút thứ hai. Nhớ khi tôi cho rằng segue một tên này showDivisions, đó là cách tôi biết rằng đây là segue đã được kích hoạt. Tất cả những gì tôi muốn làm là tôi muốn nói Tôi muốn tìm ra những gì tôi chỉ cần nhấn, và do đó, để có được điều đó, tôi có thể nói rằng tôi muốn indexPath hàng lựa chọn, nhớ indexPath chỉ nói mà tôi chỉ cần nhấp vào, và sau đó tôi muốn nói rằng tôi muốn để tìm ra nơi tôi sẽ. DestinationViewController này, đó là một tài sản của các segue. Đó là màn hình tôi sẽ, vì vậy tôi biết rằng các màn hình tôi sẽ được gọi là DivisionsViewController bởi vì tôi tạo ra mà lớp học, và vì vậy bây giờ nếu tôi nói d.divisions Tôi bây giờ thiết lập một tài sản của bộ điều khiển xem tôi là về để đi. Đây là cách tôi đang gửi dữ liệu từ màn hình đến màn hình khác. Chỉ cần nhìn vào DivisionsViewController này bạn có thể thấy ở đây trong file h. có là những quân đoàn bất động sản, và đó là những gì tôi đang về cơ bản populating, vì vậy đó là làm thế nào tôi biết rằng tôi đang hiển thị các bộ phận tương ứng với các giải đấu mà tôi nhấp vào, và một lần nữa, xem bảng thực tế trông khá nhiều như nhau, chỉ cần trả lời những 3 câu hỏi đơn giản cũng như xác định điều gì sẽ xảy ra khi bạn chuyển đến màn hình kế tiếp. Chỉ cần một vài thứ khác ở đây. Bạn nhận thấy ở đầu trang ở đây là thay vì nói # bao gồm Tôi bây giờ nói # import. Đây chỉ là một điều Objective-C. Nhập khẩu về cơ bản là một phiên bản đẹp hơn bao gồm, và ví dụ, chúng ta cần phải biết những gì lớp này là, vì vậy tôi không thể chỉ nói DivisionsViewController. Nếu chúng ta không hashtag bên trong standardio.c tập tin c của chúng tôi. trình biên dịch không có ý tưởng những gì printf là. Tương tự như vậy, nếu tôi không nhập khẩu các DivisionsViewController trình biên dịch thực sự không có ý tưởng những gì DivisionsViewController một. Chỉ cần chắc chắn rằng bên trong các file khác nhau. M bạn chắc chắn rằng nhập khẩu H tập tin tương ứng. để trình biên dịch biết những gì đang xảy ra. Cuối cùng, những gì Apple cuối cùng không được hiển thị một số dữ liệu bằng cách sử dụng một cái nhìn web, và do đó, một cái nhìn web là một đối tượng mà bạn có thể nhúng một trình duyệt web nhỏ bên trong ứng dụng của bạn. Tất cả những gì bạn cần làm là cung cấp một URL vào trình duyệt web của bạn, vì vậy tôi muốn đi mlb.mlb.com, và điều này là làm thế nào tôi có thể truy cập vào trang chủ cho mỗi đội, và như vậy bằng cách đi qua trong URL này xem web có thể hiển thị cho tôi, và tôi có thể duyệt qua xung quanh, và giả lập trong việc sử dụng đó. Bây giờ điều này đến từ plist của tôi. Nếu tôi nhấp vào điều này cũng đến từ plist của tôi, và trượt này đã được xử lý bằng cách xác định những segues. Tôi bấm và một nhiều hơn, và bây giờ ở đây là UIWebView của tôi, vì vậy chỉ cần như thế đây là trang web cho URL mà tôi chỉ cần nhúng, và tôi không phải để xử lý bất cứ điều gì điên. Điều này là làm thế nào để hiển thị một trang web. Những điều như thế này nút quay lại ở đây cũng được đưa ra với tôi hoàn toàn miễn phí bởi vì tôi đã xác định các mối quan hệ bằng cách sử dụng segues. Bất kỳ câu hỏi nào? Yeah. [Sinh viên] Vì vậy, khi bạn sử dụng alloc, bạn không bao giờ có bất cứ điều gì miễn phí? Chính xác, khi bạn gọi alloc và init, bạn không phải miễn phí. IOS sẽ xử lý tất cả những điều đó cho bạn. Thật là tuyệt vời, và bạn không vi phạm bất kỳ quy tắc. Yeah. [Sinh viên] Nếu bạn để bao gồm các đội có thể phù hợp trên màn hình, nó sẽ tự động có một lựa chọn di chuyển, hoặc là một cái gì đó bạn cần phải thêm? Chính xác, nếu tôi có đội hơn, ví dụ, nó sẽ tự động sẽ xử lý di chuyển cho tôi, và tất cả các mối quan tâm thực hiện với bảng khổng lồ cũng được xử lý hoàn toàn cho tôi. Các câu hỏi khác? Tất cả các mã này sẽ được đăng. Chúng tôi loại che đậy một chút của các chi tiết nhỏ hơn, nhưng những thứ như thiết lập một số thuộc tính để xem web chỉ là những điều mà bạn có thể nhận được bằng cách duyệt tài liệu hướng dẫn của Apple, đó là thực sự, thực sự độc đáo đặt ra. Họ có rất nhiều các ứng dụng mẫu và ví dụ tập quán các API khác nhau, vì vậy chắc chắn kiểm tra nội dung nếu bạn có thể. Chỉ cần một số liên kết hữu ích bạn có thể muốn có một cái nhìn tại. Đây là một số hướng dẫn tài liệu tiện dụng. Các URL là lớn, vì vậy họ đang rút ngắn. Một trong những đầu tiên là toàn bộ thư viện tài liệu. Có ít thanh tìm kiếm, vì vậy nếu bạn bắt đầu nút đánh máy nó sẽ bắt đầu cung cấp cho bạn tất cả các thông tin về tất cả những điều bạn có thể làm với một nút bấm. Tôi cũng bao gồm Bảng Lập trình Xem hướng dẫn. Nó xử lý xem bảng chi tiết hơn, làm thế nào để làm những việc như tự động thêm vào các tế bào hoặc chỉnh sửa các tế bào hoặc loại bỏ chúng. Có rất nhiều các ứng dụng mẫu từ Apple sẽ cho bạn thấy làm thế nào để làm điều đó, và cuối cùng, cuối cùng là một Hướng dẫn giao diện con người, và điều này về cơ bản là một số cuộc thảo luận của các thành phần giao diện người dùng, những thứ như không làm cho một nút đó là 4 điểm ảnh của 4 pixels. Đó là một ý tưởng tồi, và những thứ khác mà Apple muốn bạn làm khuyến khích thiết kế tốt. Bất kỳ câu hỏi cuối cùng trước khi chúng tôi kết thúc? Tất cả các quyền, chắc chắn cảm thấy tự do để chúng ta sẽ có nhãn đặc biệt trên bàn. Chúng tôi sẽ có một iOS, vì vậy chắc chắn cảm thấy tự do để sử dụng đó. Nếu bạn muốn làm việc với các bạn cùng lớp của bạn về dự án hoặc giúp đỡ tìm ra một số công cụ iOS ngẫu nhiên cảm thấy tự do để gửi email cho tôi, và chắc chắn lướt qua tất cả các trực tuyến mã vì chỉ trong sự quan tâm của thời gian, chúng tôi loại che đậy hơn tốt hơn các chi tiết hạt của sự vật. Nhưng nếu không, sau đó may mắn trên iOS dự án của bạn, và tôi hy vọng chúng tôi có một làn sóng lớn của các ứng dụng trong App Store. [CS50.TV]