Objective-Cのブロックを変数に入れて呼び出す

Objective-Cのあるひとつのメソッド内のあちこちで実行される処理があるような時に、ブロックを変数に入れて何ヶ所かで呼び出したい時がある。書き方をよく忘れるので、Objective-CでBlockを変数に入れる方法の具体例を挙げる。

続きを読む Objective-Cのブロックを変数に入れて呼び出す

星でレーティングするAXRatingViewをつくった

AXRatingViewプレビュー

https://github.com/akiroom/AXRatingView

iOSアプリを作っていて星をタップしてレーティングできるビューが欲しかったのですが、フラットデザインっぽい感じで色々設定できるようなライブラリが見つからなかったので、自分で作りました。上のスクリーンショットを見ていただければ分かる通り、以下のような特長があります。

  • 漸次的/段階的なレーティング
  • 自由な文字を設定できる
  • 自由な画像を設定できる
  • editable/non-editableの切り替えが可能
  • 星の数を増減できる
  • addTarget:action:forControlEvents:で簡単に変更の通知イベントを割り当てられる
  • ★マークのような画像リソースの用意が不要

ソースコードのダウンロードは以下のURLからできます。

https://github.com/akiroom/AXRatingView

既にcocoapodsに登録済みなので、Podfileに次のように書いてpod installすればすぐに使えます。

pod 'AXRatingView', '~> 0.9.4'

Rubyで浮動小数点数の加算減算がずれないようにする

問題

Rubyで0.1を足していくと、計算結果がずれるという問題が起きた。例えば、以下のようなコードを書くと、期待しているような計算結果が得られない。

> tmp = 0.0
 => 0.0
> 1..10.times { p tmp += 0.1 }
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
 => 1..10

続きを読む Rubyで浮動小数点数の加算減算がずれないようにする

Excelですぐ開けるUnicodeなCSVをRubyで生成する

Excelで開ける、Unicode文字列を含むCSVファイルを生成する方法。Microsoft Excel for Mac 2011で開けることを確認した。

Excelで開けるUnicode文書を作るポイントは以下の2点。

UTF-16 LE with BOMで保存する
UTF-8は文字化けして、UTF-16 BEはフリーズした
タブ区切りで保存する
カンマを使う場合はテキストファイルウィザードを使わなければならない

続きを読む Excelですぐ開けるUnicodeなCSVをRubyで生成する

heightForHeaderInSection:とheightForFooterInSection:のデフォルト値

UITableViewControllerの中でヘッダーやフッターの高さを変えたいけど、デフォルトの高さも使いたい時。UITableViewAutomaticDimensionを返せばよい。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  if (section == 0) {
    return 32.0;
  } else {
    return UITableViewAutomaticDimension;
  }
}

NSStringが指定した文字のみで構成されているかチェック

NSStringが特定の文字だけで構成されているか判定したいことがある。文字種だけの問題で正規表現を使う程ではない、という時は、NSCharacterSetの包含関係の判定を使うと簡単にチェックできる。パスワードのValidationとか、UITextFieldに数字のみを受け付ける場合のちょっとしたチェックなどに便利。

続きを読む NSStringが指定した文字のみで構成されているかチェック

gitで差分を抽出してpatchで使えるファイルを生成

gitで差分を抽出してpatchで使えるファイルを生成したい時、毎回同じ検索ワードで検索して、毎回同じサイトを見ていたので、自分用にメモ。普通のpatchコマンドで取り込めるdiffファイルをgitで作成する – kanonjiの日記という記事が自分にとって一番分かりやすかった。このページを参考に、自分が使う用に書いておく。

$ # ファイルを生成
$ git diff (diffの方法) > (パッチ名.patch)
$ # 実行結果を確認
$ patch --dry-run -p1 

$ git diff develop features/dummy > diff.patch
$ patch --dry-run -p1 

gitに関する書籍

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”のチェックを外す。
Extend Edges in Xcode
この2つのチェックを外すと、TableViewの上でスクロールできるようになる。

Thanks to @shao1555!

railsでsanitizeすると閉じタグを付け忘れた時にタグが続いてしまう

sanitizeというメソッドを使うと、ホワイトリストに載ったHTMLタグ以外を削除して出力できる。例えば以下のようなコード(haml)を書くと、

%p
  - dummy_text = '斜め'
  = raw(sanitize(dummy_text))
斜め

と出力される。

通常はこれで問題ないが、タグが閉じられないままだと、続けて出力されてしまう。

%p
  - dummy_texts = ['<i>斜め' '斜めったまま']
  - dummy_texts.each do |dummy_text|
    %p
      = raw(sanitize(dummy_text))

↓こんな感じ。

斜め
斜めったまま

つまり、validではないHTMLをvalidにするにはどうすればいいかという問題。

続きを読む railsでsanitizeすると閉じタグを付け忘れた時にタグが続いてしまう