Objective-Cのあるひとつのメソッド内のあちこちで実行される処理があるような時に、ブロックを変数に入れて何ヶ所かで呼び出したい時がある。書き方をよく忘れるので、Objective-CでBlockを変数に入れる方法の具体例を挙げる。
タグ: Objective-C
heightForHeaderInSection:とheightForFooterInSection:のデフォルト値
UITableViewControllerの中でヘッダーやフッターの高さを変えたいけど、デフォルトの高さも使いたい時。UITableViewAutomaticDimensionを返せばよい。
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return 32.0;
} else {
return UITableViewAutomaticDimension;
}
}
Xcodeが起動中にフリーズする時の解決方法
NSStringが指定した文字のみで構成されているかチェック
NSStringが特定の文字だけで構成されているか判定したいことがある。文字種だけの問題で正規表現を使う程ではない、という時は、NSCharacterSetの包含関係の判定を使うと簡単にチェックできる。パスワードのValidationとか、UITextFieldに数字のみを受け付ける場合のちょっとしたチェックなどに便利。
StoryboardのTableViewでセルがはみ出して操作できない
StoryboardにUITableViewControllerを置いて、Prototype Cellを設定している時、様々な種類のセルを設定しているうちに、ViewControllerの高さが足りなくて下の方の要素が見られないことがある。その時の対処法。
以下の記事を参考にしたら解決した。
Can’t scroll to the bottom of a long Static TableViewController in XCode 5 Interface Builder to edit the cells below the fold
StoryBoard上でスクロールできるようにしたいViewControllerを選択して、Attributes InspectorのView ControllerのExtend Edgesの中にある”Under Top Bars”と”Under Bottom Bars”のチェックを外す。

この2つのチェックを外すと、TableViewの上でスクロールできるようになる。
Thanks to @shao1555!
Objective-C版Underscore.js
underscore.jsといえばJavaScriptに便利な機能を追加してくれるライブラリ。そのunderscore.jsのObjective-C版があった。その名も「underscore.m」。後でチェックしたい。
Xcodeで”Could not read from the device.”というエラー
Xcode4でiOSアプリのコンパイルは通るのに実機で起動しようとするとCould not read from the device.と出る場合の対処方法

しばらく経つと、Could not start debugserver on “(iPhoneの名前)” when trying to launch “(アプリケーションの名前)”とも表示された。

UINavigationControllerのtopViewControllerのクラスを取得
当ブログのアクセスログを見ていると、「ios クラス名 topviewcontroller」という検索ワードが。UINavigationControllerのtopViewControllerのクラス名を取得したい場合や、クラスごとに処理を分岐させるには、以下のように書けばよい。
ポイント
- [instance class]とすると、そのインスタンスのクラスオブジェクト(Class)が取得できる
- NSStringFromClass()関数を使うと、クラスオブジェクトの名前をNSStringに変換できる
- [instance isMemberOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスである場合のみYESが返ってくる。
- [instance isKindOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスか、あるいはaClassを継承したクラスのインスタンスかどちらかの場合に、YESが返ってくる
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”とエラー
UIColorをHTMLっぽく16進数でインスタンス生成する
simonwhitaker/UIColor+GSAdditions.hのjnutting氏のコメントを元に少し追加した。
こんな風に書けます。
[UIColor colorWithRGBHex:0xff0000]; // red [UIColor colorWithRGBAHex:0x00ff00ff]; // green [UIColor colorWithRGBAHex:0x0000FF80]; // translucent blue
gistにアップロードしておいた。
https://gist.github.com/4593832

