iOS

NSProxyはARCと相性が悪い

以前にバックグラウンドスレッドでタスクを動かすためにNSProxyのフォワーディングの機能を利用する例を書いたが、その後ARCならでは問題が発生して頓挫している。問題を簡単にするために、NSProxyを単純に継承したクラスと、それを利用するクラスを書いてみ…

deallocを明示的に書くこと

ARCの素晴らしい所はretain/releaseをコンパイラとランタイムが面倒を見てくれるお陰で、プログラマの負担が大幅に減ることだが、だからといってオブジェクトの参照と解放に対して無神経になって良い訳ではない。以前にも書いたがARCは自らretain/releaseを…

XcodeでDatePickerを配置すると異常終了する?

と聞いたのでやってみた。 配置っと。 あれ、落ちないな。 うん。落ちない。現在のバージョンはXcode4.3.2だが、バージョンに依るのかな。

StoryBoardはiOS4では使えない

Xcodeのプロジェクトどころか、そもそもビルドしたバイナリ自体iOS4上では動かないのね。 UIStoryboard Class Reference Availability Available in iOS 5.0 and later. iOS4でも動かすバイナリを作るためにはStoryBoard自体諦めなければならないってことか。

fmdb

ccgus/fmdb 元々iOSではsqlite3.dylibが提供されておりその機能を使うことができるのだが、いわゆる"raw"でありお世辞にも使いやすいとは言い難い。 そのような中、JDBC風の操作で使えるfmdbは非常に使いやすく、私も使用している。このfmdbにインスパイアさ…

Lita

AndroidでもiOSでも内部データベースとしてSQLiteを利用することが出来るが、モバイルプラットホームでは大量データを一覧で確認したりSQLを実行してその結果を確認するなどを行うのはちょっと厳しい。よってSQLiteを扱うためのGUIクライアントが欲しくなる…

アプリケーションで一意のIDを生成、取得する

この仕組みを使うことでアプリケーション毎のIDを実現することができるのだが、Androidで同様のことをするにはどうしたら良いだろう。 AndroidでiOSの"KeyChain Service"似たものはあるのだろうかと調べてみたが、該当しそうなのはICS(IceCream Sandwich)か…

アプリケーションで一意のIDを生成、取得する

AppleがiOSアプリケーションからUDID(機器固有ID)の取得を禁止したことにより、開発者の間でモバイル機器の認証に使用するIDをどのように生成、取得するが議論になったのは記憶に新しいが、ドメインやアプリケーションに対して一意なIDを生成、保存するか、…

SenTestユニットテストが失敗する

EXC_BAD_ACCESSが取れて、メモリリークも取れて、KVOの警告も消えて「さあテストだ!」と勢いを付けたのだが、テストを実行すると... 2012-05-30 20:17:01.610 HogeApp[983:fb03] *** Assertion failure in -[SenTestClassEnumerator init], /SourceCache/OCU…

這い寄る混沌

今度はテスト時にこんなログが飛ぶようになった。 2012-05-29 20:02:46.675 HogeApp[409:f803] An instance 0x6e20250 of class HogeTask was deallocated while key value observers were still registered with it. Observation info was leaked, and may …

一難去ってまた一難

EXC_BAD_ACCESSは解決したのだが... 同様の処理シーケンスで大量にリークしているようだ。 嫌だなと思うのは、自分の書いたコードがトレース上に一切登場していない所。というかlibxml2.2ということはNSXmlParserだろうか。このようなケースだとリークが発生…

謎の4回

むーん、わからんな。 ゾンビになっていることだけは確実に判るんだが。 こういう場合、ARCをオフにした方が却って判りやすいのかもしれないな。コードと関係の無いところで動いているReleaseはGCDスレッドのAutorelease poolらしい。 GCDを使った場合、ブロ…

iPhoneで使用できる1D/2Dバーコードリーダーライブラリィ 2選

iOS

スマートフォンに搭載されているカメラでバーコード、QRコードを読み取り、その情報を利用するという要件は多く、Android、iPhone共に読み取り用のアプリケーションを開発する為のライブラリィが出ているが、無償で使える、それもiPhoneでとなるとある程度絞…

BOOL bool boolean

Objective-Cでブール(真偽)値を表す型として使うとされているのはBOOL型だが、これが使いにくくてたまらない。 BOOL型というその名の通り、YESとNOの二値とか取らない型なのだが、内部的には以下のように定義されている。 objc.h typedef signed char BOOL; …

ZXingWidgetをXcodeプロジェクトに取り込む

zxing - Multi-format 1D/2D barcode image processing library with clients for Android, Java - Google Project Hosting Androidプラットホームではあまりに有名なバーコード読み取りアプリケーションとそれを構成するライブラリィでお世話になっている人…

イベント処理の簡易化、間接化(#2)

この方法はアクションを複数のイベントと統合できたり、動的にアクションを差し替えたりと柔軟性の高いプログラミングができるが、それでもイベント処理用のメソッドがばらまかれるのは避けられない。JavaやC#のようにラムダや無名クラスのような仕組みは使…

イベント処理の簡易化、間接化

VisualBasic等を使ったGUIプログラミングの黎明期にはイベント処理がモジュールやクラスの内部に節操なくばらまかれた状態になるのを見て嫌な気持ちになったものだが、現在、そのようなコードは少なくなってきている。それは言語側でイベントハンドラやイベ…

cellForRowAtIndexPath

このイディオムは"Dynamic Prototypes"でも"Static Cells"でも使えるはずなのだが、実際には"Static Cells"では以下の例外が発生してしまう。 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:'UITableView data…

NSInvocationは可変個引数のシグネチャに対応していない

以前に紹介したBBAsyncTaskだが、AndroidやJavaのように起動するメソッドのシグネチャを可変(Variadic)にしようと思い、プロトコルを以下のように修正して実装〜テストをしていたのだが、 BBAsyncTaskProtocol.h @protocol BBAsyncTaskProtocol <NSObject> @required -</nsobject>…

StoryBoard上で定義したUITableViewCell(Static Cells)が取得できない

最新のXcodeとStoryBoardを使うことで従来よりも直感的で柔軟なアプリケーションを開発することができる。 私が特に気に入っているのはこのスクリーンショットのように、UITableViewを配置した所にラベルやテキストフィールド使ってWISYWIGでカスタマイズし…

HTTP通信

恐らくiOSを使ったアプリケーションでは必須の処理であろうHTTP通信だが、Foundationの標準的なクラスであっても、書き方によってバリエーションがあるようだ。 同期通信 通信開始を明示的に実行し、結果が戻るまでブロックする同期通信処理 NSURL* url = [N…

BBAsyncTask その4

非同期どころかexecuteInBackgound:はメインスレッドで動作してしまうのでexecuteInBackgound:の意味が無い。 次回はこの肝心要の非同期処理=別スレッドでの処理実行と他の処理との同期を実装していこう。 Objective-C、iOS上でのスレッドによる非同期処理は…

ユニットテストでプロジェクト中のXMLファイルを読込む (解決)

デプロイ時には必要の無いファイルを、わざわざテストのためだけにアプリケーションのバンドルに追加しなくてはならないのは煩わしいので、なんとか良い方法が無いかなぁと思うのだが。 昨日はテスト時のバンドルにファイルは埋め込まれないと言ったが、それ…

アプリケーションのユニットテストでプロジェクト中のXMLファイルを読込む

ユニットテストや単体テストではテストの入力としてXMLファイルやテキストファイルを読みたいことがあるだろう。Xcodeでプロジェクトに追加したXMLファイルをテストケースで読込んでXMLパーサに渡す処理だが、最初は以下のコードを書いていた。 NSURL* url =…

BBAsyncTask その3

これでBBAsyncTaskクラスは全てのメッセージを捕捉できるようになった。 次回はプロキシ内部の実装を見ていこう。 プロキシ内部の処理だが、以下のようになるはずだ。1. 呼ばれたようとしているセレクタは"executeInBackgound:"か? 1-1. セレクタ"preExecute…

BBAsyncTask その2

さて、前回はBBAsyncTaskProtocolを定義したので今回はその実装を書いてみる。 ポイントは、実装されるかどうか判らない前処理と後処理をどのように呼び出すのか。プロトコルとして制約しているのは-executeInBackgoundだけであり、このメソッドが呼ばれたこ…

iPhone開発で使う最良のXMLパーサを選択する

以前に書いたエントリで ■[Objective-C][iOS]iOS開発で使えるXMLパーサ - Kazzzの日記 というのがあったのだが、その後探したところ海外のiOS開発者向けサイトである"RAY WENDERLICH"にそのものずばりの記事があった。How To Choose The Best XML Parser for…

BBAsyncTask その1

さて、せっかくなのでBBAsyncTaskを作っていこう。ゴールはAndroidのAsyncTaskのようなバックグラウンドスレッドで重い主処理を動かしつつ、メインスレッドと同期してGUIを更新する処理をその前後に挟める機能を持つ、いわゆる"Background Worker"である。 i…

iOS開発で使えるXMLパーサ

URLやFileに接続してXMLを取得〜解析するためのライブラリィ、いわゆる「XMLパーサー」だが、iOSで使用することができる実装はどのようなものがあるのだろう。 NSXMLParser NSXMLParser Class Reference Cocoa/Foundationの標準XMLパーサ。※ SAX形式であり、…

UIKitはKVO(Key-Value Observing)に準拠していない

今作っているライブラリではViewControllerのViewのプロパティを格納するため、Windows Phone7(Silverlight)のViewModelと同様の責務を持つクラスを用意することを考えている。ViewModelとViewのプロパティを同期させるために、.NET Frameworkではデータバイ…