UINavigationControllerのtopViewControllerのクラスを取得

当ブログのアクセスログを見ていると、「ios クラス名 topviewcontroller」という検索ワードが。UINavigationControllerのtopViewControllerのクラス名を取得したい場合や、クラスごとに処理を分岐させるには、以下のように書けばよい。

ポイント

  • [instance class]とすると、そのインスタンスのクラスオブジェクト(Class)が取得できる
  • NSStringFromClass()関数を使うと、クラスオブジェクトの名前をNSStringに変換できる
  • [instance isMemberOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスである場合のみYESが返ってくる。
  • [instance isKindOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスか、あるいはaClassを継承したクラスのインスタンスかどちらかの場合に、YESが返ってくる

続きを読む UINavigationControllerのtopViewControllerのクラスを取得

UIWebViewでNSBundle内のリソースを読み込むと”WebKit discarded an uncaught exception”とエラー

UIViewControllerのviewWillAppearの中でUIWebViewに対してバンドル内のリソースを読み込もうとすると、エラーが起きた。しかも、実機では狙った通り動くのに、iOSシミュレーターでのみエラーが起きる。書いたコードは以下の通り。

- (void)viewWillAppear:(BOOL)animated
{
	[super viewWillAppear:animated];
	NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
	NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:path]];
	[self.webView loadRequest:request];
}

起きたエラーは次の通り。

*** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate:  *** -[NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]: nil argument

続きを読む UIWebViewでNSBundle内のリソースを読み込むと”WebKit discarded an uncaught exception”とエラー

gitで後からリモートを追加する

git initしたあとにリモートを追加してorigin masterを省略するメモ – gabuchanの日記に答えが書いてあった。

例えば、クライアントでプロジェクトをプロジェクトを新規作成、しばらく経って「githubにアップロードしておこう」と思った時に使う。以下のように実行すればよい。

$ git remote add origin git@github.com:username/gitname.git
$ git pull origin master
$ git push -u origin master

元のページと比べてgit pullを追記しているのは、githubでリポジトリを新規作成した時にREADMEを自動生成した場合、競合を防ぐためにpushの前にpullが必要だったから。

Mongooseでフィールドのデフォルト値を現在時刻にする

公式ドキュメントのdefaultsのページに書いてあった。

以下のように書けばドキュメント作成時のデフォルト値を現在時刻に指定できる。

new Schema({
	date: { type: Date, default: Date.now }
})

次のように書いていて、データベースに追加するたびに同じ時刻が書き込まれるので不思議に思っていた。

new Schema({
	date: { type: Date, default: Date.now() }
})
// あるいは
new Schema({
	date: { type: Date, default: (new Date()).getTime() }
})

上記のように書いてしまうと、スキーマを作成した時刻が毎回書き込まれてしまう。defaultには、値も渡せるし、関数も渡せるということをよく理解していなかったためにミスした。

UIColorをHTMLっぽく16進数でインスタンス生成する

simonwhitaker/UIColor+GSAdditions.hjnutting氏のコメントを元に少し追加した。

こんな風に書けます。

[UIColor colorWithRGBHex:0xff0000];    // red
[UIColor colorWithRGBAHex:0x00ff00ff]; // green
[UIColor colorWithRGBAHex:0x0000FF80]; // translucent blue

gistにアップロードしておいた。
https://gist.github.com/4593832

node.jsでMongoDBの接続に失敗する時

node.js, Express, MongoDBという組み合わせを、Ubuntu12.04のVM上で動かしていたら、Webアプリケーションを起動(npm start)した時に以下のようなエラーが出るようになってしまった。

[Error: failed to connect to [localhost:27017]]

以下2つの記事を参考にして解決。

続きを読む node.jsでMongoDBの接続に失敗する時

Rubyで深い階層のディレクトリを一気につくる

Rubyで深い階層のディレクトリを一気につくるには、FileUtils.mkdir_pを使う。
参考URL: http://doc.ruby-lang.org/ja/1.9.3/class/FileUtils.html

require 'fileutils'
FileUtils.mkdir_p('./public/images/')

./publicディレクトリが存在しない場合は、publicディレクトリをつくった上でimagesディレクトリを生成する。

Sinatra用のテンプレートつくった

SinatraでWebアプリケーションを作ろうとしていつも一から作るのもナンセンスなので、自分用のテンプレートを作った。とはいっても、shokaiさんの作っていたsinatra-templateをフォークしてオレオレ改造を施しただけ。

githubにあります。
https://github.com/akiroom/sinatra-template

Webアプリケーション開発に明るくないので、何か変なところがあったらご指摘いただけると嬉しいです。

続きを読む Sinatra用のテンプレートつくった