Part 2 Make Connections Hình 2,16 là một sơ đồ đối tượng cho thấy các đối tượng cần phải được kết nối trong ví dụ của bạn.. bạn sẽ đặt biến đối tượng Foo's Textfield để trỏ đến các đối
Trang 1Part 2
Make Connections
Hình 2,16 là một sơ đồ đối tượng cho thấy các đối tượng cần phải được kết nối trong ví dụ của bạn
bạn sẽ đặt biến đối tượng Foo's Textfield để trỏ đến các đối tượng
NSTextField trên các cửa sổ hiện nay là Label Right-click (hoặc Control-click neu bạn sử dụng chuột 1nut) vào biểu tượng đó đại diện của biến đối tượng Foo của bạn đến text filed bảng điều khiển Inspector sau đó sẽ xuất hiện Kéo từ Textfield đến Lable (Hình 2.17)
Trang 2Bước này là về tất cả các điểm: Bạn chỉ cần đặt trỏ Textfield trong đối tượng Foo của bạn để trỏ đến các textfiled
Bây giờ bạn sẽ thiết lập mục tiêu của nút seed để trỏ outlet của bạn đến đối tượng Foo ngoài ra, bạn muốn nút để kích hoạt method Foo's seed
kéo thả từ nút đến đối tượng Foo Khi xuất hiện bảng điều khiển chọn
seed:
Trang 3làm tương tự với generate button
Bạn đã thực hiện xong giao diện Builder, nên lưu các tập tin và ẩn các ứng dụng Quay trở lại Xcode
Back in Xcode
Nếu đây là lần đầu tiên mà bạn nhìn thấy Object-c, bạn có thể khám phá rằng nó có vẻ khá khác nhau từ C + + hay Java code Có thể được các cú pháp khác nhau, nhưng những khái niệm là cùng Ở Java, ví dụ, một class
sẽ được khai bao như thế này:
Trang 4import com.megacorp.Bar;
import com.megacorp.Baz;
public class Rex extends Bar implements Baz {
methods and instance variables
}
nó thể hiện rằng class Rex thừa kế từ class Bar và thực hiện methods được khai báo trong giao diện Baz
Các class tương tự trong object-csẽ được khai báo như thế này:
#import <megacorp/Bar.h>
#import <megacorp/Baz.h>
@interface Rex : Bar <Baz> {
instance variables
}
methods
@end
Nếu bạn biết Java, object-c thực sự là như vậy không lạ Lưu ý rằng như Java,object-c duy nhất chỉ cho phép thừa kế; có nghĩa là, một class chỉ có một superclass
Types and Constants in Objective-C
Mục obj-c lập trình sử dụng một vài kiểu mà không được tìm thấy trong thế giới của C
id là một trỏ đến bất cứ kiểu đối tượng
BOOL cũng giống như char nhưng được sử dụng như là một giá trị
Boolean
YES is 1
NO is 0
Trang 5IBOutlet là một macro mà để ước lương không có gì Bỏ qua nó (IBOutlet
là hint để giao diện Builder khi đọc những khai báo của một class từ một tập tin.h.)
IBAction cũng giống như void và vai trò như là một hint giao diện Builder
nil cũng giống như NULL Chúng tôi sử dụng nil thay vì NULL cho đến các
đối tượng
Look at the Header File
Bấm vào Foo.h Nghiên cứu nó một lúc Foo khai báo nó là một Subclass của NSObject biến đối tượng được khai báo trong {}
#import <Cocoa/Cocoa.h>
@interface Foo : NSObject
{
IBOutlet NSTextField *textField;
}
- (IBAction)generate: (id)sender;
- (IBAction)seed: (id)sender;
@end
#import là tương tự với những preprocessor của C # include Tuy nhiên,
#import đảm bảo rằng các tệp tin được bao gồm chỉ một lần Bạn đang import <Cocoa/Cocoa.h> bởi vì trong đó bao gồm việc khai báo NSObject,
đó là superclass của Foo
Lưu ý rằng việc khai báo của các class bắt đầu với @ interface @là biểu tượng không được sử dụng tron ngôn ngữ lập trình C Để giảm thiểu các nhầm lẫn giữa C và obj-C từ khóa đó là @
Dưới đây là một số các Objective-C keywords: @end, @implementation,
@class, @selector, @protocol, @property, and @synthesize
nhìn chung, bạn sẽ dễ dàng hơn tìm thấy code nhập vào nếu mở
Trang 6syntax-aware indention Trong Xcode Preference, chọn indentation pane Kiểm tra hộp có nhãn Syntax-ẩe indenting , như được hiển thị trong Hình 2,20
Edit the Implementation File
obj-c là một ngôn ngữ rất đơn giản Nó không có hiển thị đặt biệt Tất cả các methods được public, và tất cả biến đối tượng được bảo vệ (Trong thực tế, có hiển thị đặt biệt cho các biến đối tượng, nhưng chúng hiếm khi được sử dụng Mặc định được bảo vệ, và làm việc rất hoàn hảo.)
import "Foo.h"
@implementation Foo
- (IBAction)generate: (id)sender
{
// Generate a number between 1 and 100 inclusive
int generated;
generated = (random() % 100) + 1;
Trang 7NSLog(@"generated = %d", generated);
// Ask the text field to change what it is displaying
[textField setIntValue:generated];
}
- (IBAction)seed: (id)sender
{
// Seed the random number generator with the time
srandom(time(NULL));
[textField setStringValue:@"Generator seeded"];
}
@end
(Nên nhớ rằng IBAction cũng giống như void )Bởi vì obj-C là C với một số
mở rộng, bạn có thể gọi function, chẳng hạn như random() và srandom(),
từ các thư viện tiêu chuẩn C và Unix
Trước khi bạn xây dựng và chạy các ứng dụng, bạn có thể muốn chỉnh sửa thêm một số chi tiết Xcode Trước tiên, có một log, thường gọi là bàn điều khiển (console), nơi mà các lỗi của bạn sẽ xuất hiện khi bạn chạy mã của bạn Bạn sẽ muốn xóa log sau khi chạy Thứ hai, bạn sẽ flip từ tập tin .h tương ứng tập tin m một nghìn lần / ngày Chìa khóa tương đương là Command-Option-UpArrow và bạn sẽ muốn hai file xuất hiện trong cùng một cửa sổ
Trang 8Build and Run
Khởi chạy ứng dụng của bạn Bấm vào các nút và xem thông số ngẫu nhiên tạo ra -Xin chúc mừng bạn có một ứng dụng làm việc Cocoa
awakeFromNib
Thêm methods awakeFromNib vào Foo.m Bạn sẽ hiểu rõ về sau Ngắn
gọn, bạn đang tạo đối tượng của NSCalendarDate đại diện cho thời điểm hiện tại Sau đó, bạnnói cho text field để cài đặt các giá trị lịch ngày mới cho các đối tượng
- (void)awakeFromNib
{
NSCalendarDate *now;
now = [NSCalendarDate calendarDate];
[textField setObjectValue:now];
}
Theo thứ tự các methods , xuất hiện trong các tập tin không phải là quan trọng Chỉ cần chắc chắn rằng bạn thêm chúng sau @implementation và trước @end
Bạn sẽ không bao gi gọi awakeFromNib; nó được gọi tự động Đơn giản chỉ cần xây dựng và chạy các ứng dụng của bạn một lần nữa Bây giờ bạn
sẽ thấy trong ngày và thời gian khi app chạy (Hình 2,24)