iPhoneアプリ開発の虎の巻
HOME > NSArray

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のメソッド

【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型から値を読み込む時はこんな感じで書きます。

// NSArrayの中身を取り出す
for(NSDictionary *d in ar){
  NSLog(@"name:%@", [d objectForKey:@"name"]);
  NSLog(@"address:%@", [d objectForKey:@"address"]);
}

結果はこんな感じで出力されます。

name:taro
address:Tokyo
name:jiro
address:Osaka
totop