From the monthly archives: 9月 2011

裏でネットワークを大量に捌きたいときにはNSOperationQueueを使います。
NSOperationQueueは登録されたNSOperationを順次実行してくれるクラスです。

幾つか検索すれば手法が出てきますが、自分の環境ではそれらが使えなかったのでこちらに書いてみます。
NSOperationのサブクラスでNSURLConnectionを使うポイントとしては

  • データ待ちの無限ループを作る
  • isConcurrentを設定する

です。

Continue reading »

 

ちょっと前にインジゲーターを表示するのにほんの少しだけ悩んだことがありました。
今日の@iphone_dev_jpで、同じ事で悩んでそうな人がいたので書いてみます。

例として、ボタンが押されたときにUIImagePickerをmodalViewで出すことを考えてみます。
UIImagePickerは初回起動に2〜3秒ぐらいかかる嫌な子です。

Continue reading »

 

まえ別のブログで書いたのですが、こちらにも書いておきたかったのでメモっときます。

次のようなArrayの中にDictionaryがいくつか入っている構成のデータがあったとします。
[plain]
(
{
name = "wicket";
id = 1;
},
{
name = "oyabunn";
id = 2;
},
{
name = "apple";
id = 3;
},
)
[/plain]

ここから、id = 1 のdictionaryのデータを取り出す方法、 name = wicket のDictionaryを取り出す方法のお話です。

Continue reading »

 

前回のPhotoAppLinkに対応してみた!その2(画像受け取り) | エンジニア開発記の続きです

個人的にはここが最大関門でした。

Continue reading »

 

やり直し・繰り返しを制御するUndoManagerを使ったときに悩んだことをちょこっとメモ。
CoreDataやUIWebViewにはくっついてたりするので、自分でゴリゴリソースを書くことはあんましない・・・かも?

Continue reading »

 

前回のPhotoAppLinkに対応してみた!その1(画像送信) | エンジニア開発記の続きです

画像受け取り

画像を受け取るには

  1. URLスキームを設定する
  2. 画像受け取るコードをかく
  3. テスト用にいろいろがんばる

という結構めんどくさい手順があります。

Continue reading »

 

最近画像編集アプリが多くなってきています。
自分もひとつ画像編集アプリをこの前リリースしました。

その膨大な画像編集アプリを連携させようという企画があります。
アプリAで写真を取り、アプリBでフィルタを掛け、アプリCで画像を切り抜く流れが簡単にできる!というものです。
詳細はこちらで。

今回このPhotoAppLinkに対応してみたので、そのメモを残しておきます。
ほぼ100%企画元に書いてあるのですが、いかんせん英語なもので
開発よりも解読に時間がかかってしまう英語力のない自分としては日本語にして保存しておきたかったりするのです。
日本語なら簡単に読めるし、他の開発者の人もこの記事を見て対応を考えてくれればいいなと思います。

Continue reading »

 

UISliderを独自画像で使ってみたのですが、なぜかネット上で画像の大きさについての情報がなかったのでメモっておきます。

■画像の設定方法
setMinimumValueImage:
setMaximumValueImage:
setMinimumTrackImage:forState:
setMaximunTrackImage:forState:
setThumbImage:forState:
の5つを使って設定します。

それぞれの画像の位置はこんな感じです


■画像の大きさ
いろいろ試してみたところいくつかわかりました。

  • ThumbImage(中央の動かす部分)のサイズは任意で、どれだけ大きくてもいい
  • MaximunTrackImage、MinimumTrackImageは太さ固定(おそらく10px)
  • 10pxより太い場合はつぶれて表示される
  • MaximunTrackImage、MinimumTrackImageの長さは(メモリを気にしなければ)できるだけ長いほうが好ましい

MaximunTrackImage、MinimumTrackImageの長さですが、まず画像が表示領域よりも大きい場合、次のように画像が切り取られ、一部だけ表示されます。


しかし、がぞうが小さい場合はその小さい画像を表示可能領域分だけ引き延ばして表示されます。


つまり、画像が大きければ引き伸ばされることなく表示できます。
しかしリソースは有限なので、UISliderのframeと要相談というのが現実ですね。

 

アプリが起動時たときに例えばCoreDataのマイグレーションをしたり、データの整合性がとれているかをチェックしたり、更にはファイルをDocumentフォルダにインストールしたりすることがあります。
しかし、これらの処理には時間制限があり、アプリ起動時に20秒以上かかってしまうと強制終了となってしまいます。

つまり、これらの処理をするにはアプリ起動後にやる必要があります。

■アプリ起動後に重い処理をする方法(例)
AppDelegateの中で関数を定義し、
[objc]
-(void)update{
//重い処理
}
[/objc]
application:didFinishLaunchingWithOptions:の所であとで実行すると予約をする
[objc]
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
… // いろいろな処理
[self performSelector:@selector(update) withObject:nil afterDelay:0.1];
}
[/objc]
このようにやると、起動が成功したあとに思い処理をすることができます。
application:didFinishLaunchingWithOptions:の所で直接重い処理をしてしまうと
起動が完了していないため、そのまま20秒制限にかかるので気をつけてください。

思い処理をしている間はユーザーに明示的に表したほうがいいので、モーダルビューを出したりしたほうがより良いようです。

参考:Cocoaの日々: CoreData – マイグレーションを考慮した CoreDataManager パターン

 

Debugでよく「NSZombieEnabled YES」などを使ったりするのですが、プロジェクトごとに毎回書くのがすごいめんどくさくなってきました。
で、ちょっと試してみたところ、少しだけですが入力を簡略化できることがわかったのでメモっときます。

■debug用コマンド簡単入力

  1. 入力画面を開く
  2. 次の文字列をコピーする
    [plain]NSZombieEnabled=YES[/plain]
  3. 入力先に貼り付ける(クリック→Command+V)

これでコマンドのところに「NSZombieEnabled YES」が追加されたと思います。
毎回書いて綴りをみすったりする心配がなくなるのでお勧めです。

ついでによく使うdebugコマンドを書いておきます。

[plain]NSZombieEnabled=YES[/plain]
[plain]MallocStackLogging=YES[/plain]
[plain]NSDebugEnabled=YES[/plain]

[plain]-com.apple.CoreData.SQLDebug 1[/plain]

※コピー&貼付けはなぜが一行分ずつしか行えなかったため別々に書いています。
おそらく一気に貼り付ける方法があるはずですが、よくわかりませんでした