Objective-CなどiOS関連の技術メモ。知識はここに投げ捨てて忘れる。

最終更新日 2014年08月25日 10:30

protocolに定義したプロパティを明示的にsynthesizeしていないときに起きる警告。たとえば protocol <= 抽象クラス <= 具象クラス、みたいな継承関係で抽象クラスに現れたりする。

最終更新日 2013年12月28日 21:14

変数を定義したのに使わなかったらunused variableという警告が出る。そんな変数は削除してしまえばいいと言いたいが、そうもいかない場合もある。たとえば次のようなケース。

最終更新日 2013年12月28日 21:14

メソッドが戻り値を返すにもかかわらずそれを無視すると、xcodeがExpression result unusedという警告を出す。

最終更新日 2013年12月28日 19:14

UIWebViewがloadRequest:メソッドの実行などによってコンテンツのロードを行うとき、そのロードの前に呼び出されるのがUIWebViewDelegateのwebView:shouldStartLoadWithRequest:navigationTypeメソッドである。戻り値としてNOを返せば、ロードをキャンセルすることができる。

webView:shouldStartLoadWithRequest:navigationTypeを利用するにあたって注意すべきなのは、このメソッドが、(HTTPではなく)文字列でコンテンツを読み込むときや、iframe内のコンテンツを読み込むときにも呼ばれること。iframeがひとつ含まれていると、メインコンテンツ自体とiframeで計2回呼び出されることになる(最低2回。iframeとは別の要因で更に呼ばれることもある)。

そんなときにこれを場合分けして、メインコンテンツの読み込みである場合のみ何か処理をしたいなら、次のように判定すればよい。

最終更新日 2013年12月26日 21:43

NSCharacterSetクラスには、空白関連の文字セットを取得するクラスメソッドが3つある。まずざっと並べてみよう。

最終更新日 2013年12月26日 20:05

全角スペースも半角スペースと同じ方法でトリミングできる。

最終更新日 2013年12月20日 21:58

NSUserDefaultsは、毎回ストレージ(フラッシュドライブなど永続的なやつ)にアクセスするのを避けるため、メモリ上に設定値情報をキャッシュしている。メモリ上の設定値情報をストレージに書き込む役割をもつのが、synchronizeメソッドである。synchronizeメソッドは明示的に呼び出さなくても、ランタイムによって一定間隔ごとに自動的に呼び出される。

最終更新日 2013年07月21日 18:30

カテゴリをつかって既存クラスを拡張しているスタティックライブラリをリンクしている場合、その拡張されたメソッドを呼び出すところで unrecognized selector sent to class という実行時例外が発生する。この件についてはAppleの次のドキュメントが詳しい。

Technical Q&A QA1490 Building Objective-C static libraries with categories

実行時に動的リンクする場合、既存のクラス実装(たとえばNSString)のオブジェクトコードと、それを拡張したカテゴリ実装の間を結びつけることができないのが理由だという。このことはUNIXのスタティックライブラリ実装やリンカとObjective-Cのもつ動的メカニズムの間の違いによるもので、仕方のないこと、つまり仕様のようだ。

最終更新日 2013年07月21日 12:37

いずれも、アプリケーションとして通常実行しているときとは違う場所が返ってくる。テスト環境で取得できるファイルパスは次のとおり。

最終更新日 2013年07月21日 12:41

よくあるのが次のような間違い。

これだとrelativeURLはhttps://api.service.com/files/searchになってしまう。

詳解 Objective-C 2.0 第3版

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる

iPhoneプログラミングUIKit詳解リファレンス

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる