剛開始學寫iOS時一定得弄清楚什麼是delegate什麼是datasource,爬了前人研究的結論,其實兩者是一樣的機制,只是前者處理介面,而後者處理資料。
接下來就是探討何謂代理(delegatation)?舉個例子就很容易瞭解,當使用者點選視窗中的確定或取消的按鈕,會由代理者(delegater)來負責回應下一步的動作。
剛開始學寫iOS時一定得弄清楚什麼是delegate什麼是datasource,爬了前人研究的結論,其實兩者是一樣的機制,只是前者處理介面,而後者處理資料。
接下來就是探討何謂代理(delegatation)?舉個例子就很容易瞭解,當使用者點選視窗中的確定或取消的按鈕,會由代理者(delegater)來負責回應下一步的動作。
設計UITextField遇到一個問題,就是使用者在Text Field輸入完畢之後,鍵盤無法如期消失,想要設定按下Enter讓它消失該怎麼做呢?目前我知道有兩種方法~
對應NSArray,接著來練習NSMutableArray!屬於可變 (mutable) 的物件種類,裡頭可以放任何的型態的物件。
常用方法如下:
範例程式碼:
//
// main.m
// HappyMan's Program - NSMutableArray
// Xcode 4.5
// Created by ShengWen on 12/9/26.
// Copyright (c) 2012年 ShengWen. All rights reserved.
// https://cg2010studio.wordpress.com/
#import <Foundation/Foundation.h>
@interface monster : NSObject
{
int life;
}
@property int life;
-(void) show;
@end
@interface posion : NSObject
{
int cure;
}
@property int cure;
-(void) show;
@end
@implementation monster
@synthesize life;
-(void) show{
NSLog(@"life = %i",life);
}
@end
@implementation posion
@synthesize cure;
-(void) show{
NSLog(@"cure = %i",cure);
}
@end
int main (int argc, const char * argv[]) {
monster* lion1 = [[monster alloc] init];
monster* lion2 = [[monster alloc] init];
monster* lion3 = [[monster alloc] init];
posion* red1 = [[posion alloc] init];
posion* red2 = [[posion alloc] init];
posion* red3 = [[posion alloc] init];
NSMutableArray* mArray = [[NSMutableArray alloc] init];
lion1.life = 99;
lion2.life = 199;
lion3.life = 299;
red1.cure = 49;
red2.cure = 149;
red3.cure = 249;
// 將物件加入陣列中
[mArray addObject:lion1];
[mArray addObject:lion2];
[mArray addObject:lion3];
[mArray addObject:red1];
[mArray addObject:red2];
[mArray addObject:red3];
// 使用陣列內物件的方法
NSLog(@"使用物件方法:");
[mArray makeObjectsPerformSelector:@selector(show)];
// 刪除物件
NSLog(@"刪除物件:");
[mArray removeObject:red2];
[mArray makeObjectsPerformSelector:@selector(show)];
// 取代物件
NSLog(@"取代物件:");
[mArray replaceObjectAtIndex:2 withObject:red3];
[mArray makeObjectsPerformSelector:@selector(show)];
// 對調物件
NSLog(@"對調物件:");
[mArray exchangeObjectAtIndex:0 withObjectAtIndex:2];
[mArray makeObjectsPerformSelector:@selector(show)];
return 0;
}
執行結果:
2012-10-04 23:51:42.926 HappyMan’s First Program[8898:403] 使用物件方法:
2012-10-04 23:51:42.928 HappyMan’s First Program[8898:403] life = 99
2012-10-04 23:51:42.929 HappyMan’s First Program[8898:403] life = 199
2012-10-04 23:51:42.929 HappyMan’s First Program[8898:403] life = 299
2012-10-04 23:51:42.930 HappyMan’s First Program[8898:403] cure = 49
2012-10-04 23:51:42.930 HappyMan’s First Program[8898:403] cure = 149
2012-10-04 23:51:42.931 HappyMan’s First Program[8898:403] cure = 249
2012-10-04 23:51:42.931 HappyMan’s First Program[8898:403] 刪除物件:
2012-10-04 23:51:42.932 HappyMan’s First Program[8898:403] life = 99
2012-10-04 23:51:42.932 HappyMan’s First Program[8898:403] life = 199
2012-10-04 23:51:42.933 HappyMan’s First Program[8898:403] life = 299
2012-10-04 23:51:42.933 HappyMan’s First Program[8898:403] cure = 49
2012-10-04 23:51:42.934 HappyMan’s First Program[8898:403] cure = 249
2012-10-04 23:51:42.934 HappyMan’s First Program[8898:403] 取代物件:
2012-10-04 23:51:42.935 HappyMan’s First Program[8898:403] life = 99
2012-10-04 23:51:42.935 HappyMan’s First Program[8898:403] life = 199
2012-10-04 23:51:42.936 HappyMan’s First Program[8898:403] cure = 249
2012-10-04 23:51:42.936 HappyMan’s First Program[8898:403] cure = 49
2012-10-04 23:51:42.937 HappyMan’s First Program[8898:403] cure = 249
2012-10-04 23:51:42.937 HappyMan’s First Program[8898:403] 對調物件:
2012-10-04 23:51:42.938 HappyMan’s First Program[8898:403] cure = 249
2012-10-04 23:51:42.940 HappyMan’s First Program[8898:403] life = 199
2012-10-04 23:51:42.940 HappyMan’s First Program[8898:403] life = 99
2012-10-04 23:51:42.941 HappyMan’s First Program[8898:403] cure = 49
2012-10-04 23:51:42.942 HappyMan’s First Program[8898:403] cure = 249
話說,輸出明明就很少,結果大部分的內容都是時間加上專案名稱,下次該把這部分給刪除掉~
參考:Objective-C 陣列物件、NSMutableArray Class Reference、Objective-C 入門指南 – NSMutableArray。
來練習一下NSArray怎麼寫吧!屬於不可變 (immutable) 的物件種類,裡頭可以放任何的型態的物件。
常用方法如下:
範例程式碼:
//
// main.m
// HappyMan's Program - NSArray
// Xcode 4.5
// Created by ShengWen on 12/9/26.
// Copyright (c) 2012年 ShengWen. All rights reserved.
// https://cg2010studio.wordpress.com/
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSString* str1 = @"HappyMan";
NSString* str2 = @"WaterMan";
NSString* str3 = @"BrightMan";
NSArray* mArray;
// 將物件加入 array
mArray = [NSArray arrayWithObjects: str1, str2, str3, nil];
NSInteger count = [mArray count];
for(int i=0;i<count;i++){
NSLog(@"index: %i, value: %@", i, [mArray objectAtIndex: i]);
}
// 取得物件的所在位置
NSInteger index;
if ((index = [mArray indexOfObject:@"WaterMan"]) != NSNotFound) {
NSLog(@"陣列的第%li個位置,值為%@", index, [mArray objectAtIndex:index]);
}
return 0;
}
執行結果:
2012-10-03 22:57:40.546 HappyMan’s First Program[2451:403] index: 0, value: HappyMan
2012-10-03 22:57:40.548 HappyMan’s First Program[2451:403] index: 1, value: WaterMan
2012-10-03 22:57:40.549 HappyMan’s First Program[2451:403] index: 2, value: BrightMan
2012-10-03 22:57:40.549 HappyMan’s First Program[2451:403] 陣列的第1個位置,值為WaterMan
繼續做NSMutableArray的練習吧~
參考:Objective-C 陣列物件、NSArray Class Reference、Objective-C 入門指南 – NSArray。
真不敢相信,我可以提早把玩iPhone 5!雖然這支不是我的,但能比一般台灣人先摸到,就是爽快XDDD~
為何Apple總不把台灣列為第一波銷售名單呢?裡頭很多零件可是我們台灣廠商代工製造的呢!難道代工真的不值錢?小彈丸香港和新加坡都在第一波名單之內,不知道我們台灣出了什麼問題?不過沒關係,沒有錢錢的我先觀望一下,作足功課之後拿到手,必能將iPhone 5的功能發揮到淋漓盡致!
經過三個月半(6/18 – 10/2)的時間,瀏覽人數從200000倍增為400000,真是可喜可賀!這兩天因為台北捷運東門站開始運行,進而有許多民眾搜尋到我的文章台北捷運路線圖 (Taipei MRT Route Map(8/9 – 4080)和台北捷運路線圖歷史 (History of Taipei MRT Route Map)(7/27 – 429)。

HappyMan・迴響