RubyではKernel#exitを実行すると、SystemExitというエラーが発生して終了する。Rubyのrescue
節は=>evarの形式でエラーオブジェクトを取得できるので、begin..rescue..endで挟んでみる。
カテゴリー: プログラミング
OSXでmongodした時にDBアクセスが異常に遅い
新しくMacBookProを買い換えてキャピキャピしながらコーディングしていると、前のMacで作ったRailsアプリの動作が異常に重い。
$ mongod
を実行後に出力されているログを見ると、以下のような警告が出力されていた。
2015-08-00T00:00:00.000+0900 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
これの解決方法について。
pod installが永遠に終わらない
pod installを実行したところ、以下のような表示でフリーズしてしまった。解決策は下に。
Objective-Cのnil/Nil/NULL/NSNullの使い分け
Objective-Cには「null」に相当するものがnil, Nil, NULL, NSNullの4種類ある。それぞれの意味の説明はあったが、使い分けに踏み込んだ記事が少なかったのでメモ。
nil
- null オブジェクトを表す
- もっとも頻繁に使うnull
-
nil
にメッセージを送信してもnil
がreturnされる - Blocks は
copy
メソッドで retain count を増やすことがあるので、Blocks の null を表すにはnil
を使う(Which is the right one, nil or NULL, to mark “no Objective-C block”? – Stack Overflow)
// 初期化に失敗した時はnilが入る
SomeClass *myInstance = [[SomeClass alloc] initWithFailCode];
// 変数に代入
id hoge = nil;
NSObject *fuga = nil;
if (fuga) {
// false
}
if (!fuga) {
// true
}
if (fuga == nil) {
// true
}
// nilにメッセージを送信してもnilが返る
if ([fuga doSomething] == nil) {
// true
}
// ブロックを渡す時のnullオブジェクトはnilで渡す
[something setCompletionBlock:nil];
Nil
-
Nil
はnullクラスオブジェクトを表す
// クラスを取得する
Class something = [NSObject class];
// クラスの指定がnull
Class anything = Nil;
NULL
- C言語の
(void *)0
と同じ -
void*
型のnullとして使う
[objA addObserver:objB forKeyPath:@"hoge" options:NSKeyValueObservingOptionNew context:NULL];
NSNull
- nullであることを示す、シングルトンのインスタンス
- シングルトンの取得には
[NSNull null]
を実行する - インスタンスなので、
[NSNull null] == nil
はNO
(false) になる - NSArrayやNSDictionaryの値のように、nilを指定できないところでnullオブジェクトを表したい時に使う
NSDictionary *someVars =
@{
@"keyA" : @"abc",
@"keyB" : [NSNull null]
}
// 1. NSNullはシングルトンなのでisEqualで比較できる
if ([someVars[@"keyB"] isEqual:[NSNull null]]) {
// true
}
// 2.NSDictionary#objectForKeyは存在しないキーを指定するとnilを返す
if (someVars[@"keyC"] == nil) {
// true
}
// 1.と2.により、キーに値が存在するかどうかは2つの検査が必要
if (someVars[@"keyA"] != nil && ![someVars[@"keyA"] isEqual:[NSNull null]]) {
// nilではなく、NSNullでもない
// => true
}
参考資料
iOSでTwitter投稿で「ツイートを送信できません」とエラーが出る
iOSにTwitter投稿する機能をSLComposeViewControllerを使ってつくったところ、「ツイートを送信できません」というエラーが出るという報告がきた。全文を書くと以下のような感じ。
ツイートを送信できません
Twitterに接続できなかったため、ツイート"◯◯◯◯◯◯"は送信できません。
これは、iOSで設定されているTwitterアカウントが、パスワードが間違っていたり変更忘れがあったりで、本当にTwitterに接続できなくなってるだけ。設定 -> Twitter -> @(アカウント名)から再ログインしなおしてもらうと解決する
UIScrollViewでAutolayoutを使う
【UIScrollView × Autolayout 問題】Appleエンジニア直伝のファイナルアンサー – Over&Out その後
http://d.hatena.ne.jp/shu223/20141030/1414623275
Tinderっぽい左右にスワイプするカードのようなUIを実装
Objective-Cで、Tinderっぽい左右にスワイプするカードのようなUIを実装する際に便利なCocoapodsのライブラリ。
pod lib lintで他のdependencyなライブラリのせいでnot pass validationになる時
pod lib lint hoge.podspec
を実行した時に以下のようにエラーが起きてしまい、lintが通らないことがある。
続きを読む pod lib lintで他のdependencyなライブラリのせいでnot pass validationになる時
Cocoaでタイトルバーのないウィンドウでキー入力を受け付ける
タイトルバーを表示していないウィンドウ(NSBorderlessWindowMask)でキー入力を受け付けるようにするには、NSWindowを継承して以下を実装すればよい
- (BOOL)canBecomeKeyWindow
{
return YES;
}
これをやると、レスポンダーチェインも上手くいく。
samurai-native: Objective-CなのにHTML+CSSっぽくViewを構築できる黒魔術ライブラリ
まだ使っていないので黒魔術と断定するのも失礼な話かもしれないけれど、ちゃんと動くならかなり便利そうなライブラリを見つけた。