這台iPad是Kent的,這台iPad2是Gina的,這台iPad mini是Eric的,雖然我可以用NSArray將它們保存在一起,但我要怎麼區分這是誰的iPad呢? |
我是類別NSDictionary, 沒問題,我除了可以幫您保存裝置外, 你還可以指定每個位置所使用的key, 如此你就可以依照key找到對應人員的裝置了。 |
1. 建立iPad、iPad2與iPadmini
- 建立iPad、iPad2與iPadmini類別
iPad.h
#import <Foundation/Foundation.h>
@interface iPad : NSObject
-(void) connectInternetWithWifi;
@end
iPad2.h
#import <Foundation/Foundation.h>
#import "iPad.h"
@interface iPad2 : NSObject
-(void) connectInternetWithWifi;
@end
iPadmini.h
#import <Foundation/Foundation.h>
#import "iPad.h"
@interface iPadmini : NSObject
-(void) connectInternetWithWifi;
@end
2. 建立NSDictionary,以value&key的方式存入iPad物件
- 建立NSDictionary,透過initWithObjectsAndKeys:以value&key的方式,將每台iPad以對應姓名的方式儲存
#import <Foundation/Foundation.h>
#import "iPad.h"
#import "iPad2.h"
#import "iPadmini.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * kentPad = [[iPad alloc] init];
iPad2 * ginaPad = [[iPad2 alloc] init];
iPadmini * ericPad = [[iPadmini alloc] init];
//使用dictionary,
//讓ipad保存時可以透過key來對應到value值,
//也就是可以將ipad value值對應到每一個擁有者的key,
//initWithObjectsAndKeys:會以value,key,value,key的方式配對,
//先value值,後對應key,
//在此即將存在kentPad的pad物件valuevalue值,對應到"kent"這個key,
//在此即將存在ginaPad的pad物件值,對應到"gina"這個key,
//在此即將存在ericPad的pad物件value值,對應到"eric"這個key
NSDictionary * dic = [[NSDictionary alloc]
initWithObjectsAndKeys: kentPad, @"kent",
ginaPad, @"gina",
ericPad, @"eric", nil];
}
return 0;
}
3. objectForKey:給予key,以取出對應裝置
- 透過objectForKey:訊息取得對應的裝置物件
- 而NSDictionary皆以id型別的方式保存value與key,因此透過objectForKey:訊息取得的也是id型別的物件
#import <Foundation/Foundation.h>
#import "iPad.h"
#import "iPad2.h"
#import "iPadmini.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * kentPad = [[iPad alloc] init];
iPad2 * ginaPad = [[iPad2 alloc] init];
iPadmini * ericPad = [[iPadmini alloc] init];
//使用dictionary,
//讓ipad保存時可以透過key來對應到value值,
//也就是可以將ipad value值對應到每一個擁有者的key,
//initWithObjectsAndKeys:會以value,key,value,key的方式配對,
//先value值,後對應key,
//在此即將存在kentPad的pad物件valuevalue值,對應到"kent"這個key,
//在此即將存在ginaPad的pad物件值,對應到"gina"這個key,
//在此即將存在ericPad的pad物件value值,對應到"eric"這個key
NSDictionary * dic = [[NSDictionary alloc]
initWithObjectsAndKeys: kentPad, @"kent",
ginaPad, @"gina",
ericPad, @"eric", nil];
//當然取出物件時,
//即可透過objectForKey:訊息,
//給予對應的key,取得對應的值,
//如代入"kent"的key,則會取回kent的ipad
//當然,NSDictionary也是以id的方式保存id與value,
//因此取出時也會是id型別的物件
id kentDevice = [dic objectForKey:@"kent"];
id ginaDevice = [dic objectForKey:@"gina"];
id ericDevice = [dic objectForKey:@"eric"];
}
return 0;
}
檔案連結:objective_c_nsdictionary.zip
更多的NSDictionary使用方式:
NSMutableDictionary動態配對value&key存放的物件:- NSDictionary在透過initWithObjectsAndKeys:存入物件後即不可變更其中的內容
- 而NSMutableDictionary則可動態變數其中的物件,透過setValue:forKey:與removeObjectForKey:訊息動態的增減保存的物件
#import <Foundation/Foundation.h>
#import "iPad.h"
#import "iPad2.h"
#import "iPadmini.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * kentPad = [[iPad alloc] init];
iPad2 * ginaPad = [[iPad2 alloc] init];
iPadmini * ericPad = [[iPadmini alloc] init];
//使用NSMutableDictionary
//在此即將存在ericPad的pad物件value值,對應到"eric"這個key
NSMutableDictionary * dic = [[NSMutableDictionary alloc]
initWithObjectsAndKeys: kentPad, @"kent", nil];
//透過setValue:forKey:訊息動態加入新的value&key
[dic setValue:ginaPad forKey:@"gina"];
[dic setValue:ericPad forKey:@"eric"];
//透過removeObjectForKey:動態移除特定key所對應的value&key
[dic removeObjectForKey:@"kent"];
}
return 0;
}