Objective-C

GLib2のインストールに失敗した話

Mac OS X 10.11.6, GCC 6.3.0, GLib 2.52.1ご存知のようにGLibとpkg-configは相互依存している。願わくば、次に生まれる時には基盤となるようなツールやライブラリーに、相互依存関係というものが存在しない世の中に生まれたい。結論から言えば、どちらも存…

ViewController#viewDidLoad内でアニメーションを開始してはいけない

このミス定期的にやっちゃうよね!いや、それはただの物忘れ・・・私の脳が衰えてきているだけか・・・ ビューのアニメーションを開始するのは、ViewControllerのviewDidAppear以降でなければならない。 以下は、ラベルをゆっくりと点滅させるだけの単純な画…

クラス内から自身のクラスメソッドを呼び出すときの書き方について

小ネタ。クラス内部のクラスメソッドを呼び出すときに、よく以下のような書き方を見る。 @interface MyObject : NSObject @end @implementation MyObject +(void)func1 { NSLog(@"hello"); } +(void)func2 { [MyObject func1]; } -(void)method1 { [MyObject…

AutolayoutされたViewをアニメーション移動させるには

Xcode 5.1今、以下のような単純な画面を作っていたとする。ご覧のように、画面上にはラベルが1つとボタンが1つ存在するだけである。Helloラベルには、以下のように4つのAutolayout制約があるものとする。・Width(固定) ・Height(固定) ・Vertical Space…

部屋とObjective-Cと私

PCがたくさん動いてる部屋は暑いよ〜;;昔話をするにはまだ早い。勢い余ってObjective-Cカテゴリをつけたことを早くも後悔し始めている。だが!それでも! 特にこれといった話でもないが、なんとなく、Objective-Cとの付き合いを振り返ってみる。私はそれほ…

Objective-CのEnum

標準C++03ではenumの構文が拡張され、標準C++11では更に、scoped enumerationがサポートされたそうだ。C++11のEnum 参考: http://d.hatena.ne.jp/spinor/20110918/1316321563Cのenumとの主な違いは、・enum型の前方宣言が可能 ・名前空間を汚さずに、identi…

コントロールに登録したイベントハンドラをすべて解除するには

Xcode 5.1 [someControl removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents]; 【参考】 http://stackoverflow.com/questions/3340825/uibutton-remove-all-target-actionsなるほどな〜 この発想はなかった。APIリファレンスをよく見れ…

可変長引数を取るメソッドを作成するには

Objective-Cで可変長引数を処理するには、Cと同じようにva_arg系の関数を使用する。Objective-Cでは、引数の数を受け取るよりも、可変長引数をnil終端で受け取る方が一般的である。可変長引数がnil終端であることを明示するには、メソッドの定義に、NS_REQUI…

Autolayoutされた後の座標を調べるのはviewDidLayoutSubviews内で

Xcode 5.1.1少し前に書いたStoryboardでAutolayoutに関する補足。Autolayoutが登場する以前のViewの初期座標設定というのは、UIViewController#viewDidLoadで行っていた。Autolayoutが主流になりつつある最近であっても、すべてのViewの座標をすべてAutolayo…

NSIntegerのフォーマット指定はlongで

iPhone, iPadアプリを32bit, 64bit両対応でコーディングするには、intやfloatの代わりに、NSInteger, CGFloatなどを使うことが多い。NSIntegerやCGFloatは、コンパイル時のプラットフォーム指定によって切り替えられる単なるtypedefなので、printf形式の書式…

連想配列の扱い方2

前回「連想配列の扱い方1」に続いて、Objective-Cの連想配列のお話。前回は、NSDictionaryとjava.util.Mapの違いを説明した。 今回は主にNSMapTableというクラスについて解説する。NSMapTableは一言でいうと、チューニング可能なNSDictionaryといったイメー…

連想配列の扱い方1

Javaプログラマ向け、Objective-Cにおける連想配列の扱い。Objective-Cでjava.util.Mapのような連想配列を扱いたければ、多くの場合、NSDictionaryを使うのが手っ取り早いだろう。例えば、単純な文字列と整数値のマッピングを行ってみる。Java public class …

NSStringから1文字を取ったらunichar

Javaプログラマ向け、Objective-Cにおける文字列と1文字の扱い。Javaでは、char型は2バイトのUnicode 1文字を表す。 Objective-Cでは、unichar型が1文字に相当する。たとえば、Javaでは以下のように、String#charAt で1文字を取得できる。 public class Test…

配列を末尾からイテレーションするには

Javaプログラマ向け、Objective-Cにおける配列イテレーションの小技。配列(リスト)の末尾から先頭までを順にイテレーションするには。Java public class Test { public static void main(String[] args) { java.util.List<String> list = new java.util.ArrayList<</string>…

配列をプロパティにするときには注意する

Javaプログラマ向け、Objective-Cにおける配列プロパティの扱い。自作クラスの属性で可変配列を管理したいということはよくある。 そして、その内部配列を読み取り専用として外部に公開したいということもあるだろう。たとえば、以下のようなチャットルーム…

配列のソート2

JavaプログラマのためのObjective-Cにおける配列ソート解説。第2弾。前回は、NSSortDescriptorクラスを使った配列のソート方法を紹介した。 内容的にはシンプルであったとは思うが、Key-Valueコーディングや、セレクタなど、Objective-C独特の手法が絡んでい…

配列のソート

JavaプログラマのためのObjective-Cにおける配列ソート解説。いくつかのソート方法がある。 そのうち簡単なのは、以下のようにNSSortDescriptorクラスを使うことだ。 NSSortDescriptor* dec = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES…

10進数クラスの話

Javaプログラマ向け、Objective-Cの10進数クラスの話。JDK 7, Xcode 5.0 浮動小数点型では、10進数の小数部を正しく表現できないことが多い。 具体的には、2の-n乗の値の組み合わせでしか小数値を表せない。 これはIEEE 754の仕様上、当然のことである。たと…

iOS7でNSString#sizeWithFontがDeprecated

代わりにsizeWithAttributesが使えるようだ。 CGSize size = [s sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20.0f]}]; 【参考】 http://stackoverflow.com/questions/18897896/replacement-for-deprecated-sizewithfont-in-ios-7

iOS7のボタンを旧Round Rect Buttonのようにする

iOS 6.1、あるいはそれ以前に作られたアプリにおけるボタンとは、Round Rect Buttonという角丸のボタンがデフォルトであった。まあ、それ自体、決して良い見た目ではなかったので、多くの場合はカスタムボタンを作成していたわけだが、中にはRound Rectを使…

NSOperationQueue#addOperationはブロックをコピーする

マルチスレッド絡みの話を少々。iOS 4.0以降は、GCD(Grand Central Dispatch)という仕組みが導入されており、ちょっとしたバックグラウンド処理ならば、ブロック構文と合わせて、とても簡単に記述できるようになっています。ブロックは、他の言語でいうと…

copyしたらreleaseを忘れずに

戯れ言が長くなるので結論だけ先に書きます。 タイトルの通りで、copyしたらreleaseかautoreleaseしなければならないということです。 考えてみれば当たり前のことですが、案外忘れがちかと思います。 -(NSArray*)array { NSMutableArray* ary = [NSMutableA…

数値 → 文字列変換

Objective-Cで、int値を文字列に変換する簡単な方法は2つくらいあります。 (たぶんもっとありますが、今回は以下の2つに絞ってみました。)1. NSString.stringWithFormatを使う NSString* str = [NSString stringWithFormat:@"%d", 100]; 2. NSNumber#strin…

何回やっても覚えられないならメモしておくしかないじゃない!

あなたも・・・私も・・・ よく使う、しかもよく忘れる、 すごく単純な命令をここにメモしていくことにしました。 Foundation関連 ・大文字小文字を区別せずに文字列比較を行う // 大文字小文字区別なしで、同じ文字列かどうかを調べる BOOL equals = NSOrde…

62進数を扱おう

昔、16進数というものを習ったときに、「どうしてFまでしか使わないんだろう?」 「Zまで使えばもっと大きな値を短く表現できるのに」と思ったものです。 そこで私は、62進数というものをObjective-Cのカテゴリってやつを使って、NSString, 及びNSNumberクラ…

Apple iOS7を発表

昨夜でしたか、新しいiOSが発表されたそうです。http://www.itmedia.co.jp/mobile/articles/1306/11/news039.htmlぱっと見た感じ、UIはボタンなどがフラットで、Windows 8っぽいですね。 これが良いのか悪いのかは、私にはちょっと分かりません。リリースは…

Apps which appear confusingly similar to an existing Apple product or advertising theme will be rejected

以前、iOSアプリにスライドジェスチャーを組み込むための方法を模索しました。確認画面に遷移させるまではしたくないけど、単純なボタンで直アクションは操作ミスしやすい、といった場合に便利そうですよね。試しに、スライドアクションを実装したアプリをAp…

Slide to Unlock

iPhoneのロック画面を解除するときの、最近、特許やらでなにかと話題のアレSDKとして標準で用意されているコントロールではないものの自作するのはそれほど難しくもないようだhttp://growthfield.hatenablog.jp/entry/2012/11/23/121721http://xcodenoobies.…

リフレッシュコントロールというやつを使ってみる

OS X 10.7, iOS 6.1, Xcode 4.6 なにそれ? ビュー(UITableView)を下にスライドさせることによって、更新アクションを起こすアレです。こういうやつ。 ↑のこれをやりたかったんですけど、最初、これの名前が分からなかったので、どう実装すれば良いのかも…

○○くんのそういうところあんまり好きじゃないな〜

自身の精神安定のために、たまに戯れ言を吐きます。 気を悪くする人がいたらごめんなさい。Objective-Cの嫌いなところが3つあります。 1. それメソッドコールだから! Objective-Cでは、メソッドコールのことをメッセージ送信といいます。私はあまり好きじゃ…