Mar 152013
 

Pada artikel ini saya akan terangkan antara class yang penting dan kerap digunakan untuk programming objective c iaitu

NSString, NSArray dan NSDictionary.

Pertama sekali, perlu diketahui dalam sesetengah class dalam Cocoa terbahagi kepada mutable dan non-mutable.
Contohnya, NSString dan NSMutableString, NSArray dan NSMutableArray, serta NSDictionary dan NSMutableDictionary.

Perbezaan antara mutable dan non- mutable adalah kandungan dalam mutable class boleh diubah.
Contohnya dengan menggunakan NSMutableArray anda boleh menambah atau buang objek di dalam NSMutableArray tetapi tidak dengan menggunakan NSArray.

1. String
Declare string adalah mudah sahaja seperti berikut.

NSString *aString = @"I have declared a string";

Code Explanation:
Untuk menggunakan NSString, mesti declare dengan format @””

2. Array
Untuk declare array,


//Declare array kosong
NSArray *emptyArray = [NSArray array];

//declare array that have string objects in it
NSArray *array1 = [NSArray arrayWithObjects:@"ali", @"abu", @"ahmad", nil];
//declare array that have string objects in it
NSArray *array2 = @[@"ali", @"abu", @"ahmad"];

//Access array at index 1, will return abu
NSString *aString = [array1 objectAtIndex:1];
NSString *aString2 = array1[0];

//Create mutable array
 NSMutableArray *aMutableArray = [NSMutableArray array];

//Tambah objek ke dalam aMutableArray
[aMutableArray addObject:@"ali"];
 [aMutableArray addObject:@"abu"];
 [aMutableArray addObject:@"ahmad"];

//akses string pada index pertama
 NSString *aString3 = aMutableArray[0];

//print ke output
NSLog(@"array1 = %@", array1");
NSLog(@"array1 pada index 1 = %@", aString);
NSLog(@"array2 pada index 0 = %@", aString2);
NSLog(@"aMutableArray pada index 0 = %@", aString3);

Code Explanation:
line 2: kita hanya declare array yang kosong, maksudnya tiada object di dalam array ini.
line 4: kita declare array mengandungi NSString object, kita faham adalah NSString object dengan notation @””
line 7:, ia juga adalah sama seperti line ke 4 tetapi, ia adalah cara baru untuk create array, ia lebih mudah dan pendek. Untuk akses objek dalam array, kita menggunakan format ini [array objectAtIndex:theIndex] ataupun cara baru yang lebih pendek iaitu array[theIndex] seperti line 10 dan 11.

line 13 – 16: kita declare mutable array, maksudnya ia boleh diubah. Kita tambah string kedalam array dengan menggunakan addObject:. Cuba anda guna addObject untuk NSArray class dan tentunya error kerana object dalam NSArray class tidak boleh diubah.

Satu kelebihan array dalam objective-c adalah anda boleh masukkan semua jenis class(semua class inherit daripada NSObject) ke dalam array tersebut. Boleh juga jika mahu masukkan class yang berlainan dalam satu array contohnya masukkan NSNumber pada index 0, NSDictionary pada index 1 dan sebagainya.

Anda boleh cuba masukkan code diatas dalam applicationDidFinishLaunching: pada AppDelegate.m dan lihat hasilnya.

3. Dictionary
Jika NSArray menyimpan data secara berturutan, NSDictioanary pula menyimpan data secara key dan value. Berikut adalah contoh menggunakan NSDictionary


//Create dictionary dengan key name, age, phone
NSArray *objects = @[@"ali", @"16", @"0147763269"];
NSArray *keys = @[@"name", @"age", @"phone"];
NSDictionary *person = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

//Cara baru create dictionary
NSDictionary *person2 = @{@"name": @"Ali", @"age" : @"16", @"phone" : @"0147763269"};

//Seperti array juga, NSDictionary tidak boleh boleh diubah contentnya,
//kita perlu menggunakan NSMutableDictionary jika mahu tambah key-value baru

//Create NSMutableDictioanary
 NSMutableDictionary *person3 = [NSMutableDictionary dictionary];
 [person3 setValue:@"ali" forKey:@"name"];
 [person3 setValue:@"16" forKey:@"age"];
 [person3 setValue:@"0147763269" forKey:@"phone"];

//Untuk akses value dalam dictionary, kita menggunakan format berikut
//Cara lama
NSString *name = [person3 valueForKey:@"name"];

//ataupun cara baru yang lebih pendek
NSString *name2 = person[@"name"];

NSLog(@"value untuk name = %@", name2);

4. Combination

Ketiga-tiga class yang telah diterangkan amat penting dan selalu digunakan dalam coding. Sekarang kita gabung ketiga2 class tersebut


//Declare 3 dictionary
NSDictionary *aliDict = @{@"name": @"Ali", @"age" : @"16", @"phone" : @"0147763269"};
NSDictionary *abuDict = @{@"name": @"abu", @"age" : @"23", @"phone" : @"0157773902"};
NSDictionary *ahmadDict = @{@"name": @"ahmad", @"age" : @"43", @"phone" : @"0140763264"};

//Declare array dan masukkan ketiga2 dictionary diatas ke dalamnya
NSMutableArray *personArray = [NSMutableArray array];
[personArray addObject:aliDict];
[personArray addObject:abuDict];
[personArray addObject:ahmadDict];

//Dapatkan value untuk name
NSArray *names = [personArray valueForKey:@"name"];

//print setiap name dalam names
for (NSString *nameStr in names) {
    NSLog(@"%@", nameStr);
}

Code Explanation:
line 1-11: kita hanya declare 3 dictionary untuk ali, abu dan ahmad kemudian masukkan dictioanary tersebut ke dalam array.
line 14: Pada line ini kita menggunakan valueForKey:, seperti yang anda tahu personArray bukannya dictionary. Tetapi valueForKey: untuk NSArray adalah sangat berguna, ia membolehkan anda mendapatkan setiap value daripada content dan return dalam bentuk array.
line 17-19: Pada line 17 kita menggunakan fast enumeration, dengan fast enumeration ia akan loop setiap object di dalam array. Pada line 17-19, ia loop object di dalam array names dan print ke output

Anda boleh cuba tukar key pada line ke 14 kepada @”age” atau @”phone” dan lihat output yang terhasil

Download Xcode project berdasarkan contoh diatas

Mar 102013
 

Salam,

Dalam post ni, saya akan ajar bagaimana untuk buat Simple Calculator app guna Xcode
Anda akan belajar beberapa perkara

1. Cara menggunakan interface builder
2. Cara connect interface builder dengan code
3. NSButton, NSPopUpButton, NSTextField

1. Buat projek baru Xcode dan pilih Cocoa Application, pada product name guna SimpleCalculator (tak kisah pn apa nama sebenarnya)

)Xcode 10

2. Pastikan uncheck Use Core Data dan check Use Automatic Reference Counting.

*Core Data adalah untuk app yang berasas database. Automatic Reference Counting (ARC) membolehkan kita tidak perlu fikir banyak pasal memory management kerana compiler yang ambil tugas itu.

3. Apabila project telah dibuat, pergi ke MainMenu.xib (xib dalam sebutan dipanggil nib). Apa yang anda lihat dipanggil Interface Builder (IB).

4. Object Library adalah dimana object yang akan diguna untuk interface.

SimpleCalculator.xcodeproj — MainMenu

Interface Builder

4. Pada Object Library, drag object supaya menjadi seperti rajah di bawah. Pada Object Library anda boleh search di bawahnya dan drag ke SimpleCalculator Window

Text Field (NSTextField)
Pop Up Button (NSPopUpButton)
Label (NSTextField)
Push Button (NSButton)

5. Tukar title supaya menjadi seperti dibawah. Anda boleh tukar title dengan double click pada object ataupun dengan tukar title di Attributes Inspector.

Xcode 8

Object yang telah di drag ke Window

5. Tekan butang Run dan anda ia akan memaparkan Window seperti yang telah dibuat di IB tetapi ia masih tidak boleh melakukan apa2.

6. Pada pop up button, kita mahu ia sebagai math operator, double click pada popup button, kemudian double click setiap menu item dan namakan seperti rajah di bawah.

Pada mulanya anda hanya ada 3 menu item, untuk tambah satu lagi menu item, click pada mana2 menu item. Kemudian copy dan paste menggunakan keyboard.

Menu items dalam pop up button

Menu items dalam pop up button

7. Bahagian interface sudah siap. Sekarang kita perlu connect object di dalam IB kepada AppDelegate. Untuk ini tekan Assistant Editor

Xcode

8. Selepas tekan Assistant Editor, sepatutnya view akan terbahagi 2 bahagian seperti di bawah.

SimpleCalculator

9. Untuk connect setiap object ke AppDelegate, hold Ctrl key, kemudian drag object ke AppDelegate.h menggunakan mouse.

Xcode 6

Connect outlet by dragging from IB to AppDelegate.h

10. Pastikan Connection adalah Outlet untuk setiap object melainkan Calculate button gunakan connection Action.

Xcode 4

11. Setelah siap setiap nama sepatutnya seperti berikut.

*IBOutlet bermaksud sesuatu property itu diconnect dengan IB supaya kita boleh mendapat value dan sebagainya. manakala IBAction bermaksud sesuatu Action (method) akan dipanggil setelah diclick di interface

@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *firstTextField;
@property (weak) IBOutlet NSPopUpButton *operatorPopup;
@property (weak) IBOutlet NSTextField *secondTextField;
@property (weak) IBOutlet NSTextField *resultTextField;

- (IBAction)calculate:(id)sender;

12. Sekarang pergi ke AppDelegate.m, anda akan dapati – (IBAction)calculate:(id)sender. Ia secara automatik dibuat oleh Xcode selepas di connect.

13. Sekarang dalam AppDelegate.m tambah seperti dibawah.

- (IBAction)calculate:(id)sender
{
    NSLog(@"In calculate method!");
}

14. Kemudian Run dan tekan butang Calculate. Jika betul maka dalam Output Area iaitu bahagian bawah akan tertulis seperti berikut

2013-03-09 13:53:32.758 SimpleCalculator[4680:303] In calculate method!

14. Dalam method calculate:, tukar code menjadi seperti di bawah

- (IBAction)calculate:(id)sender {
    NSLog(@"In calculate method!");
    CGFloat firstNumber = self.firstTextField.floatValue;
    CGFloat secondNumber = self.secondTextField.floatValue;
    CGFloat result = 0;

    switch (self.operatorPopup.indexOfSelectedItem) {
        case 0: //X
            result = firstNumber * secondNumber;
            break;
        case 1: // /
            result = firstNumber / secondNumber;
            break;
        case 2: //+
            result = firstNumber + secondNumber;
            break;
        case 3: //-
            result = firstNumber - secondNumber;
            break;
        default:
            break;
    }
    self.resultTextField.floatValue =result;
}

15. Run dan cuba kalculator yang telah siap!

16. Dalam code ni mula2 kita ambil nilai daripada textfield di IB dan masukkan dalam firstNumber dan secondNumber.

17. Kemudian untuk tahu operator mana yang dipilih kita gunakan switch dan method dari NSPopupButton indexOfSelectedItem. Index adalah bermula dari 0, daripada nilai index kita buat operasi yang sewajarnya ke dalam variable result.

18. Akhirnya nilai result di pas ke resultTextField untuk update interface.

*Jika tak faham sesuatu fungsi, documentation sangatlah berguna. Pada bahagian sebelah kanan di Quick Help, apabila anda tekan cursor mouse contohnya di indexOfSelectedItem. Quick Help akan tulis description untuk indexOfSelectedItem. Kemudian tekan NSPopUpButton Class Reference untuk maklumat lebih lanjut tentang class NSPopUpButton ni.

Quick Help

Quick Help