日々精進

新しく学んだことを書き留めていきます

2012-07-01から1ヶ月間の記事一覧

AppCode1.6EAPでローカル変数などのリファクタリングができなくなる

AppCode1.6EAPでローカル変数などのリファクタリングができなくなる不具合があったが今は解消されている模様。 最新版のAppCode1.6EAPをインストールすればOK。 やっぱり正式版じゃないので注意が必要ですな。。 参考:Rename/Refactoring doesn't work afte…

cornerRadiusが効かない

以下のコードをビューの初期化時に実行しても角丸にならなくて困った。 self.layer.cornerRadius = 5.0f; 原因はmasksToBoundsをYESにしてないことだった。 下記コードを追加したら直った。 self.layer.masksToBounds = YES; 参考:In custom UIView, the Co…

親ビューと子ビューのcenterは座標系が違う

親ビューと子ビューのcenterは座標系が違うのを忘れてて、 以下のようなコードをビュークラスに書いてしまった。 self.childView.center = self.center これで子ビューが親ビューの中心にレイアウトされると思っていたが、うまくいかない。 正しくは以下。 s…

座標系の変換

UIViewのframeやcenterはsuperViewの座標系を元に計算している。これを他のビューの座標系を元に計算した座標に変換したい、という場合は以下のメソッドを使う。 [view1 convertPoint:[view1 touchLocation] toView:view2]; 下記サイトに詳しい使い方が書い…

cocoapodsを使う場合にバージョン管理するべきファイル

以下はignoreすべき。最初にソースをコピーしてきた時は各自pod installを実行してライブラリのソースをダウンロードする。 Podsディレクトリ Podfile.lock参考:CocoaPodsを複数人で運用することを考えたときにリポジトリにあげるべきファイルで悩んだので…

プロキシ越しにgithubを使う方法

プロキシ経由でインターネットにアクセスしていて、そのプロキシがsshのポートをブロックしている場合、ssh over HTTPSで迂回してsshアクセスができる。(HTTPSのポート443が開いている場合) やり方は以下参照。 http://d.hatena.ne.jp/nobeans/20090520/12…

・iOSの仮想メモリはストレージへのスワップを行わない。物理メモリに乗り切らない場合はアプリが強制終了されたりする。 よってメモリを節約することは非常に大事。ストレージからのプリフェッチなどは行わないこと。 ・浮動小数点演算は専用ハードウェアで…

プロキシ経由でGitリポジトリにアクセスする方法

下記コマンドでプロキシを指定すればOK git config --global http.proxy http://proxy:8080

UIViewの親子で別々のalphaを持たせる方法

以下のようにbackgroundcolorにUIColorをセットするとできるらしい。 複雑なレイアウトを実現するときに使えるかも。 UIView *oya = [[UIView alloc] init]; oya.backgroundcolor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.5f]; UIView *k…

iOS開発Tips

・ビューのレイアウトはlayoutSubviews内でやるといい ・frameで指定する数値が整数以外になるとボケるのでroundfで丸めること 参考:【 iOS 開発 Tips】View のレイアウトをどうするか? (フェンリル | デベロッパーズブログ) layoutsubviewsが呼ばれるタイ…

OCUnitでコントローラのユニットテスト時にXIBを読み込めない

OCUnitでコントローラのユニットテスト時にXIBを読み込めない という現象が起きたので調べてみると、なんとユニットテスト時のmainBundleは普通にアプリを実行したときのmainBundleとは違うらしい。まじか。。 同じにしたいんだけど、どうすればいいかはまだ…

initメソッドとviewDidLoadの使い分けについて

viewControllerを初期化する場合、initで始まるメソッドとviewDidLoadメソッド内で初期化することが多い。 これらの違いは以下。 ○initメソッド ・呼ばれるタイミング 自分でinitを読んだとき XIBファイル内にコントローラがある場合はそのファイルをinitWit…

iOSのバージョンについての統計情報

iOSの各バージョン別シェアの最新情報は以下のサイトにある。 iOS Version Stats - David Smith サンプル数は100k程度らしいのでそれなりに精度の高いデータと思われる。

XIBファイルからビューを生成する

普通、viewとcontrollerは1対1の関係なので、controllerのinitWithNibNameメソッドを使ってXIBファイルを読み込む。 controllerに紐付かないviewをXIBファイルから生成するにはviewクラスのinitを以下のようにする。 - (id)init{ NSArray *ary = [[NSBundle …

不要なdidReceiveMemoryWarning

ちょくちょく以下のコードを見かけるけど、 これって何のためにあるんだろう。 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } didReceiveMemoryWarningをオーバーライドしなくても、親クラスのdidReceiveMemoryWarningは呼ばれるし…

SSH over HTTP

IT

HTTPのポート経由でSSH接続が出来るCorkscrewというソフトがあるらしい。 Corkscrewを使ってHTTP経由でSSHのトンネリング接続を行う - builder by ZDNet Japan これは便利そう。

http proxy越しにgitを使う

IT

環境変数にプロキシのアドレスを設定すればいいらしい。 export http_proxy=http://proxy.example.com:8080/ただし、httpsは通らないのでhttps://github.com/〜には接続できない。httpsをhttpにすると接続できる。

プロキシ越しにRubygemをインストール

会社の環境ではプロキシを通してネットにアクセスしないといけない。 そうするとRubygemがインストールできなくて困っていたんだけど、プロキシを指定すればインストールできることが判明。 以下のようにプロキシを指定してやればOK。 sudo gem install mech…

BlocksKitをcocoaPods経由で導入

BlocksKitをcocoaPodsを使ってインストールしようとしたらはまった。 cocoaPodsで検索するといくつか日本語で使い方を解説しているサイトがあるが、 そのほとんどが既に古くなっているっぽい。Podfileの書き方とかコマンドとか 変わっているのでhttps://gith…

macにgemをinstallしようとしてはまる

cocoapodsをインストールしようとして sudo macgem install cocoapodsを実行すると、以下のエラーが出た。 ERROR: While executing gem ... (NoMethodError) undefined method `to_str' for #<Errno::EAGAIN:0x400741a00>検索すると、gemのバージョンを上げると直るよと書いてあったので</errno::eagain:0x400741a00>…

BlocksKit導入ではまる

・BlocksKit便利そうだから導入しよう ・iOSコーディングスタイルを変えてしまうBlocksKitの紹介 - 中継地点を参考にやってみるもうまくいかない ・cocoaPodsを使えば簡単に導入できるっぽい? ・sudo gem install cocoaPodsがエラーになる・・・ ・ググった…

UIViewをUIImageに変換

簡単に変換できてすごい。下記サイトを参考に実装しました。 EZ-NET: UIView を UIImage に変換する : Objective-C プログラミング

UITableViewCellをドラッグしてTable外のViewにドロップする

以下の記事を参考にして実装した。 objective c - Tutorial on How to drag and drop item from UITableView to UITableView - Stack Overflow 処理の流れは以下。 ・長押しジェスチャーを登録 ・長押し時にCellをImageに変換してCellと同じ見た目のUIImageV…

Popovers cannot be presented from a view which does not have a window

presentPopoverFromRect でPopoverを表示しようとすると以下のようなエラーメッセージが出た。 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window…

UITouchがあるView内にあるかどうかを判定する

以下のコードで判定できる。 CGPoint touchLocation = [touch locationInView:self]; if (CGRectContainsPoint(myImageView.frame, touchLocation)) 参考:http://stackoverflow.com/questions/2221367/comparing-a-uitouch-location-to-uiimageview-rectang…

初Instruments

InstrumentsのAllocationsを使ってメモリリークを調査してみた。手順は以下。 まず下記記事を参考に設定。 二重解放 (double free) や 解放済みオブジェクトへのアクセス (EXC_BAD_ACCESS) によるクラッシュを Instruments を使って調べる - 24/7 twenty-fou…

カテゴリを使ってインスタンス変数を追加する方法

カテゴリを使うとインスタンス変数を追加できないが、Assosiative Referenceを使うと追加できる。 以下の記事を参考にして書いたら結構簡単にできた。 object - Objective-C: Instance Variable in Category - Stack Overflow Faking instance variables in …

– addObserverForName:object:queue:usingBlock:で登録したObserverが削除できない

以下のコードで削除しようとしていたが、ブロックを使った場合はこれでは削除できない。 [[NSNotificationCenter defaultCenter] removeObserver:self]; 以下のようにObserverを登録するときの返値をインスタンス変数に持っておいて、それをremoveObserverに…

iPadアプリ開発方針続き

○不変条件を満たすことを保証するオブジェクトを極力少なくする 画面上表示してないけど、オブジェクトとしては存在しているコントローラやビューって普通いっぱいあると思う。 そういうオブジェクトの状態も最新の状態に合わせよう、いつ画面に表示されても…

iPadアプリの設計方針

最近大事だなと思った方針を箇条書きにしてみる。 ○MVC-VM-Sパターンを使う。 MVCに加えてViewModelとStoreを使う。対応するCocoaのクラスは大体以下のようになると思う Model:Core Dataのサブクラス View:CALayer。普通は直接操作しない Controller:UIVi…