NSArray
NSArrayクラスは、オブジェクトをリスト形式で管理するコレクションクラスです。
変更可能なクラスとしたい場合は、NSMutableArrayクラスを使用します。
NSArrayのクラス階層
NSObject
↑
NSArray
NSArray生成
//NSArray生成例1
NSArray *ar = [NSArray arrayWithObjects:@"東京", @"名古屋", @"大阪", nil];
//NSArray生成例2
NSArray *ar = [[NSArray alloc] initWithObjects:@"東京", @"名古屋", @"大阪", nil];
//plist(hoge.plist)からNSArrayを生成
NSString *p = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"plist"];
NSArray *ar = [NSArray arrayWithContentsOfFile:p];
生成例1と生成例2の違いは、生成例1の方のオブジェクトはautoreleaseされます。
それに対し生成例2の方はautoreleaseされないので、オブジェクトが不要になった時点で明示的にreleaseする必要があります。用途に応じて使い分けてください。
最後の「nil」を忘れるとエラーになるため注意!
NSArrayのメソッド
メソッド名 | 説明 |
---|---|
-(NSUInteger)count | 要素数を返す (例)要素数を取得する int cnt = [ar count]; |
-(id)objectAtIndex: (NSUInteger)index |
指定した位置の要素を返す (例)3番目に格納されているオブジェクトを取得する [ar objectAtIndex:2]; |
-(id)lastObject | 一番最後の要素を返す (例)id obj = [ar lastObject]; |
-(BOOL)isEqualToArray: (NSArray*)otherArray |
リストが同じであるかの判定 (例)ar1とar2が同じ要素であるか判定する BOOL b = [ar1 isEqualToArray ar2]; |
-(BOOL)containsObject: (id)anObject |
ある要素が含まれているかの判定 (例)要素に"hoge"が含まれているか判定する BOOL b = [ar containsObject:@"hoge"]; |
+(id)array | 空のリストを返す ※NSMutableArrayの生成で使用します。 |
+(id)arrayWithContentsOfFile: (NSString*)path |
plist形式のファイルからNSArrayを生成して返す ※例は下記「plistからNSArrayを生成する」欄参照。 |
主要なメソッドのみ掲載しています。
上記「NSArrayのクラス階層」にあるクラスのメソッドも使用できます。
NSArray例文
// リストを作成する
NSArray *nozomi =
[[NSArray arrayWithObjects:
@"東京", @"品川", @"新横浜", @"名古屋", @"京都", @"大阪", nil] retain];
※以下、上記 nozomi を元とした例文です。
// リストに含まれる要素数を取得する
int cnt = [nozomi count];
cnt → 6
// リストの4番目の要素を取り出す
NSString *str = [nozomi objectAtIndex:3];
str → 名古屋
// リストの最後の要素を取り出す
NSString *str = [nozomi lastObject];
str → 大阪
// リストに「福岡」が含まれているか判定する
BOOL flg = [nozomi containsObject:@"福岡"];
flg → NO
plistからNSArrayを生成する
データをplist形式のファイルで作成しておくと、簡単にNSArray型に取り込むことができます。
アプリ内で使用するデータは、ハードコーディングするよりもplistファイルで作成しておいてそれを読み込むようにすれば後々のメンテナンスも楽になります。
(plistはアプリの設定ファイルでも使用されているので参考にしてみてください。)
plistファイルはこんな感じで書きます。plistファイルはXMLファイルがベースです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer
/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>taro</string>
<key>address</key>
<string>Tokyo</string>
</dict>
<dict>
<key>name</key>
<string>jiro</string>
<key>address</key>
<string>Osaka</string>
</dict>
</array>
</plist>
plistからNSArrayに読み込む時はこんな感じで書きます。
// ファイル(hoge.plist)からNSArrayを生成する
NSString *p = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"plist"];
NSArray *ar = [NSArray arrayWithContentsOfFile:p];
上のplistを読み込むと、NSDictionary型が格納されたNSArray型になります。
NSArray型から値を読み込む時はこんな感じで書きます。
// NSArrayの中身を取り出す
for(NSDictionary *d in ar){
NSLog(@"name:%@", [d objectForKey:@"name"]);
NSLog(@"address:%@", [d objectForKey:@"address"]);
}
結果はこんな感じで出力されます。
name:taro
address:Tokyo
name:jiro
address:Osaka