読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

Objective-Cの配列はなんか扱いづらい(>< )NSMutableArrayで配列を追加して文字列結合してみた

Objective-C

スポンサードリンク

http://www.flickr.com/photos/97859317@N00/38836968
photo by heipei


こんにちは!


swiftにチャレンジしてObjective-Cに戻ってきた隊長です。


Objective-Cもわかりにくくて、オエってなりましたがswiftも結構な気持ち悪さ。どうしてAppleの言語ってこんなにわかりにくいものか。


さて、以前swiftで作ったUIWebViewのサンプルを用意しました。

Swiftにチャレンジしてみたが、結構ボロカスにやられました(;ω;) - ITの隊長のブログ


一部アプリ案件に使っていたコードなんだけど、何故一度は動いていたのに動かなくなったのかがわからないので、一旦Objective-Cに書きなおしましたとさ。


その時、久々に配列でハマったのでその時の簡単メモ

その前にちょっとしたトピック


基本プログラムの配列は2つ種類があり、それぞれ「通常配列」(数値で配列の要素を管理する)と、「連想配列」(キーワードで要素を管理する)があります。


Objective-Cの「通常配列」はNSArrayとNSMutableArrayの2つがあります。今回は「通常配列」のNSMutableArrayでハマりました。


ちなみに、使い分けとしては、NSMutableArrayは配列を追加したあとでもデータの変更などが可能です。


まだよく理解しているわけではないですが、面倒なので私はNSMutableArrayをよく使っています。使い分けることができれば、恐らくメモリ関連で最適化とかできるんじゃないかな。

NSMutableArrayで配列を追加する


配列に追加して、文字列結合したい。ということがやりたかった。Pythonでいう.join()みたいな処理ですね。

/*
 * ページを表示するデータを用意する中で、h1のデータを作成する部分
 */
// 配列を初期化
NSMutableArray *mArray = [NSMutableArray array];

[mArray addObject:@"<h1>"];
[mArray addObject:result];
[mArray addObject:@"</h1>"];

/* 省略 */

// 配列を、文字列’,'で結合
NSString *string = [mArray componentsJoinedByString:@","];

まとめ


ちなみに、簡単な記述ではありますが、今回ハマった点としては、初期化でハマりました。実は先程のコードは配列を初期化せずに、下記のように扱っていました。

// 配列を初期化せずに・・・
NSMutableArray *mArray;


初期化せずに使うと、何故かaddObjectを使っても配列に追加することができませんでした。ずっとnilのまま。理由を探しているんだけど、中々見つからない。。。orz


こういうのって、公式ドキュメントをみたほうがいいのかな?ちょっと探してみたいと思います。


しかし・・・、何故動いてくれないんだswiftのUIWebView・・・orz