アーカイブ

‘iphone’ タグのついている投稿

[Cocoa] NSMutableArrayのインスタンスを”Mutable”なまま複製したいときは”mutableCopy”メソッドを使おう

coo coo
Creative Commons License photo credit: alberthuynhphoto

iPadアプリの開発をしていて少しハマってしまったのでメモ。
最近よくハマるので、どんどんブログ記事にしてまとめていきたいと思います。

問題

NSMutableArrayのインスタンス(つまり変更可能な配列)を複製して、複製先の配列にオブジェクトを挿入しようとしたときのことです。

下記のようなコードを実行すると途中で例外が発生し、プログラムが停止してしまいました。

NSMutableArray* originalArray;
NSMutableArray* duplicatedArray;
 
originalArray = [[NSMutableArray alloc] init];
duplicatedArray = [originalArray copy];
 
[duplicatedArray addObject:@"str"]; // NSInvalidArgumentException

具体的には、最後の行で「duplicatedArrayにはaddObjectなんていうメソッドは存在しないよ」と怒られてしまいます。

duplicatedArrayはNSMutableArrayクラスのインスタンスとして宣言しているはずなのに・・。
どうしてでしょうか?

原因・解決

どうやら、copyメソッドを呼び出してNSMutableArrayクラスのインスタンスを複製しようとした場合、生成されるのはNSArrayクラスのインスタンスになってしまうみたいです。

NSArrayクラスは変更不可能な配列であり、addObjectメソッドは宣言されていないため、先程のような例外が発生してしまいます。

色々調べたところ、NSMutableArrayクラスのインスタンスを”Mutable(変更可能)な状態のまま複製するためには、どうやらcopyメソッドではなくmutableCopyメソッドを使えばいいみたいです。

早速先ほどのコードを以下のように修正してみます。
すると、無事に配列にオブジェクトが追加できることを確認できました。

NSMutableArray* originalArray;
NSMutableArray* duplicatedArray;
 
originalArray = [[NSMutableArray alloc] init];
duplicatedArray = [originalArray mutableCopy]; // copy から mutableCopyに変更
 
[duplicatedArray addObject:@"str"]; // 無事配列にオブジェクトを追加できた。

まとめ

結構些細なことが原因なのに、小一時間このことについて悩まされてしまいました。

ちゃんとリファレンスにしっかり目を通しておかなきゃいけないな、と再確認させられた僕なのでした。。
それでは!

カテゴリー: プログラミング タグ: , , ,

iOS 4とiPhone OS 3.xにおける[UIImage imageNamed]の動作の違い

my iPhone family pile
Creative Commons License photo credit: blakespot

iPhoneアプリを開発していて、少しハマってしまったのでメモ。

UIImageクラスのimageNamedメソッド

指定した名前の画像ファイルを読み込み、UIImageクラスのオブジェクトを生成するためのメソッドです。
このメソッド、OSのバージョンが3.x系かiOS 4かで、微妙に動作が違ってくることがわかりました。

On iOS 4 and later, the name of the file is not required to specify the filename extension. Prior to iOS 4, you must specify the filename extension.
iPhone OS Reference Library : UIImage Class Reference

iPhone OS 3.xまで

iPhone OS 3.xまでは、以下のように拡張子も含めたファイル名を引数としてimageNamedメソッドに渡していました。
拡張子は必ず含めなければなりません。

1
UIImage* image = [UIImage imageNamed:@"face.png"];    // iPhone OS 3.x
iOS 4から

一方、iOS 4では、下記のように拡張子を含めなくても画像を読み込めるように修正されました。
(従来のiPhone OS 3.xの方法もサポートされています。)

1
UIImage* image = [UIImage imageNamed:@"face"];    // iOS 4

何が問題?

せっかく作ったアプリが、OS 3.x系端末で動かない…

「iPhone SDK 4でアプリを開発したけど、iPhone OS 3.x系がインストールされた端末でも動かしたい」
こういう要望・希望もまだまだあるかと思います。

ですが、iPhone SDK 4でコンパイルしたアプリケーションに、上述の拡張子を含めない方法で書かれたコードが含まれていた場合、そのアプリはiPhone OS 3.xがインストールされた端末では動きません。

拡張子ぐらい書こうぜ!

画像ファイルの拡張子なんてピリオドいれて、せいぜい4~5文字程度。
もし、どちらのバージョンでも動作するアプリを作りたい場合は、面倒くさがらずに、きちんと拡張子を含めて画像のファイル名を指定するようにしましょう。

と、自分に強く言い聞かせてみたのでした。。
それでは!

カテゴリー: プログラミング タグ: , ,

片手で扱えるiPhoneは移動中の読書にぴったり

2010 年 5 月 14 日 kadoppe コメントはありません

iPad vs iPhone
Creative Commons License photo credit: bfishadow

最近、iPhoneで積極的に電子書籍を読むようになりました。

今まで読んだのは、

の四冊。

文字も読みやすいですし、操作性も問題なし。
電車での移動中に、片手だけを使ってスイスイと読むことができています。

電子書籍といったらまずiPadやKindleを思い浮かべますよね。

ですが、小さくて軽いiPhoneと違って、iPadやKindleは片手ではなんだか持ちにくそうです。
(実際に持ったことないですが・・)

電車の中ではつり革や荷物をつかんだりするので、どうしても片手がふさがってしまうことが多いです。
そんな時こそ、iPhoneの出番。

iPhoneで電子書籍を読むようになったおかげで、今まで無駄になっていた電車での立ち時間を有効活用できるようになりました!

もうこれでiPadは買わなくて済むかも!?
(お金がなくてiPadが買えないことに対する開き直りです。。)

カテゴリー: デバイス タグ: , , ,

[読書]「 iPhoneとツイッターは、なぜ成功したのか?」

2010 年 5 月 13 日 kadoppe コメント 2 件
iPhoneとツイッターは、なぜ成功したのか? iPhoneとツイッターは、なぜ成功したのか?

アスペクト 2010-04-26
売り上げランキング : 11106
おすすめ平均

Amazonで詳しく見る by G-Tools

ITジャーナリストの林信行さんの著書「iPhoneとツイッターは、なぜ成功したのか?」を読みました。

iPhoneのApp Storeで電子書籍版を購入することもできます。
僕はiPhoneを使って一気に読みました。とても読みやすかったですよ!

以下、読んだ感想です。

iPhoneとツイッターは、なぜ日本から生まれなかったのか?

本書のタイトルは「iPhoneとツイッターは、なぜ成功したのか?」ですが、どっちかというと「iPhoneとツイッターは、なぜ日本から生まれなかったのか?」というタイトルにした方がしっくりくるかもしれません。

革新的な製品・サービスを作ることが出来ていない日本のメーカに対して、

  • スペックじゃなくて体験を売るべき
  • 既存の製品に苦し紛れに新機能を追加していくのではなく、顧客がニーズにマッチした「原型」を追求するべき

という考えを主張されていましたが、その点については素直に同意しました。

「緩さ」はサービスが決めるもの?

本書の中で、Twitterでフォローが時々勝手に外れてしまう問題について以下のように触れられていました。

たとえば、フォロー返しを強制されて、嫌々フォローした相手をこっそりアンフォローしたとき。それが相手にばれても、「いやあ、ツイッターはいい加減で困るよね」と言い訳できるじゃないか。

人間という、いい加減で柔らかい存在を扱うサービスは、それに合わせて緩くないといけない。

「Twitterの緩さのおかげで、他人との摩擦であるとか、面倒なコミュニケーションが起こらなくて済むからいいじゃん!他のサービスももっと緩くしようぜ」、という意味であると僕は解釈しましたが、どうしても納得できませんでした。

一言で「緩さ」といっても色々なものがあると思いますが、本書でいうところの「緩さ」って本当にサービスが用意するべきものなのでしょうか?

ITによって生み出されたサービスは、人間の能力をほんの少し向上させるためのもの、人間を少し進化させるためのものです。

だけど、本書でいうサービスの「緩さ」によって人間が「面倒な」コミュニケーションをしなくても済むようになったのなら、それは人間が退化してるってことになりませんか?
人間の「真摯さ」という大切な要素が無くなってしまうような気がしてなりません。

サービスに必要なのは「緩さ」よりも、「サービスの向こう側には不特定多数のユーザが実際に存在する」ということを、ユーザが意識しやすくなるような要素だと、僕は思います。

ユーザはサービスを介して、たくさんのユーザとコミュニケーションする(楽しいことも、面倒なことも)。

その結果、サービスは「緩く」なるかもしれないし、「キツく」なるかもしれないけれど、それはそのサービスを使うユーザ次第。

もちろん楽しいことをたくさん経験できた方がいいとは思いますが、面倒なことや失敗を経験しないと、いつまでたっても進化のための道具としてのサービスの使い方を覚えることができないんじゃないか、と思います。

一応文中に、

サービスに緩さを追加することは意味があると思うが、それ以上に大事なのは、大人も子どももソーシャルメディアに適応したリテラシーを身につけることだろう。

とフォローがありましたが、あまりにもサラっとしたフォローだったので、素直に自分が思ったことを書いてみました。

まとめ

全体的な感想ですが、読んでみて、最近ネット上でよく見られるようになった議論・テーマを色んなところから集めて一冊の本にしちゃった、というような印象を受けました。

今Webやモバイルの世界で起きていることを、広く浅く捉えるのにはいいのかもしれませんが、個人的にはもっと深く踏み込んだ議論を期待していたので、少し残念。

林信行さんの次回作に期待したいと思います!

カテゴリー: 読書 タグ: , , , ,

Cocoa勉強会関西に参加します

2010 年 4 月 22 日 kadoppe コメントはありません

Hot Chocolate and Truffles
Creative Commons License photo credit: Digital Sextant

先日、Cocoa勉強会関西というコミュニティに、メンバーとして参加させていただくことになりました。

Cocoaというのは、Mac OS Xのクライアントアプリケーションや、iPhoneアプリケーションを開発する際に用いるフレームワークです。

仕事で、MacアプリやiPhoneアプリの開発に関わることになったのと、趣味で個人的にiPhoneアプリをリリースしてみたいと思っていたことから、関西でCocoaを扱っている勉強会をWebを探していたのですが、僕の求めているコミュニティとほぼドンピシャなところが見つかりました。

Cocoa勉強会関西は、関西で活動しているIT勉強会の中では比較的昔から存在するコミュニティです。二ヶ月に一度開催される例会はすでに32回も開催されています。

まずは見学からということで、2010年4月3日に開催された例会を見学させていただきました。見学した結果、Xcodeを使った開発やiPhoneアプリを開発する時に役立ちそうな濃い内容の発表をたくさん聞く事ができたので、今後もこの勉強会に参加させていただくことに決めました。

まだまだCocoa初心者な僕ですが、ゆくゆくは自分も発表者として他の参加者のみなさんにとって役に立つような発表ができるように、頑張って勉強していきたいと思います。仕事ももっとサクサクできるようになりたいですしね!

今後ともどうぞよろしくお願いいたします。

iPhoneとau携帯(G9)の使い分けについて

2010 年 1 月 2 日 kadoppe コメント 1 件

僕は今、iPhoneとau携帯(G9)を二台持っています。それぞれの使い方をしっかり定義して上手く使い分けないと何だかもったいない事になるんじゃないか、と思ったので、ここにまとめてみようと思います。

iPhone

Geocaching

長所:
豊富なアプリケーション。ソフトバンク同士の通話が無料。インターネットが使い放題。

短所:
電波の弱さ(僕の家に至っては圏外!)。赤外線機能がない。

主な用途:
通話・メール、Web上で公開されているサービスの利用、ゲーム、ライフログ

やっぱりなんといっても、iPhoneを便利なものにしているのはその豊富なアプリケーションです。

Twitter、Googleリーダー、Gmail、Googleカレンダー、Evernote、Instapaper、Smart.fm、mixi、facebook、食べログなどのWeb上のサービスを便利に使うことができます。iPhoneのメールクライアントとGmailは簡単に連携することができるので、研究室関係の仕事のメールも瞬時に確認することができます(遊んでいるときにメールを見てしまうと精神的によくないですが・・)。

家計簿や睡眠ログ、ジョギングログなどもiPhoneを使って計測しています。ゲームもたくさんインストールしていて、気分転換に遊んだりすることもあります(パワプロのペナントモードとか)。そんなこともあって、僕にとってiPhoneは一刻も手放せないものになりました。

「手放せなくなってしまった=常に持っている」という事なので、電話やメールに関してもiPhoneがメイン携帯になります。友人・知人と携帯番号を交換する時には基本的にiPhoneの番号・アドレスを使います(赤外線がないのが不便ですけど)。

電波が届くエリアが狭いような気がしますが、外出時は地下に潜らない限りほぼ問題ないかと思います。ただし、自宅が圏外なのは問題です。めちゃくちゃ寒いベランダにでないと通話できません。

au携帯(G9)

DSCN3548

長所:
Softbankと比べて電波が良い(僕の家でも電波が入る)。おサイフケータイ付き。赤外線機能付き。グローバルパスポートの存在。

短所:
プランの都合上インターネットの利用が従量課金制かつ電話代が高い。

主な用途:
緊急時の通話。特定のau携帯との通話。モバイルSuica。

iPhoneの存在感が強すぎるため、au携帯はどうしてもサブ携帯になってしまいます。プランも月額料金が出来る限り安くなるように選択しているので、電話やインターネットをアクティブに使うことはできません。それでも便利な使い道はあるはず!

まず、au携帯の最大の長所は僕の家でも電波が入るということです。僕の家以外の場所でもSoftbankと比較して電波の入りが良い気がするので、基本的に緊急時の待受専用電話として使おうと思います。発信は基本的に行いませんが例外もあります。一つ目の例外はiPhoneが圏外 or 電磁切れの時などの緊急時です。二つ目の例外は、指定した3名までのau携帯との通話料が定額になる「指定通話定額」サービスを利用した通話です。

おサイフケータイは、まだ使ったことがないけど今後利用していきたい機能です。モバイルSuicaとして使うことを考えています。関西では私鉄で使うことはできないみたいですが・・

赤外線機能も便利。今ではデジカメにも赤外線機能がついていたりするので、撮影した写真を瞬時に携帯に送信することができます。プリクラを撮影した後も、赤外線で撮ったプリクラを画像データとしてその場でゲットすることができますね!

最後はグローバルパスポート機能です。海外でもau携帯を使うことができる国際ローミングサービスなんです。iPhoneの場合「いつの間にか通信が発生していて請求額が大変な事に・・」というケースもあるそうなので(きちんと設定すれば回避可能)、海外に持っていくことに不安があるのですが、au携帯(G9)だとそのような問題は発生しないと勝手に判断しています。なので、海外に今度行く時にはau携帯がメイン携帯として活躍することになると思います。

まとめ

うわー、思いつくままに書いていたら結構長くなってしまいました。これで上手く使い分けることができているのかな?iPhoneとG9、どちらもデザインがかっこいい携帯なので、二刀流としてバリバリ使いこなしたいですね!

他にもこんな使い方があるよ!という方はぜひ教えていただけると嬉しいです!

カテゴリー: デバイス タグ: , , , ,