u16suzuの blog

日々学んだことのメモブログです。

2013-01-01から1年間の記事一覧

.zshrcで git のエイリアスを指定しているとブランチ名がtabで補完されない

git

git でチェックアウトするときに tab ボタンでブランチ名が補完されないということがありました。 理由は .zshrcで git のエイリアスを以下のように設定していたためでした。 alias g="git" 以下のように compdef を追加したところ無事補完されるようになりま…

lsを日付順にソートして表示する

$ ls -lt オプションの意味は以下の通り -l : リスト表示 -t : 時間順に表示 (タイムスタンプが新しい順に表示) -r : 逆順で表示 (タイムスタンプが古い順に表示)

Instrumentsの Leaksテンプレートを使って循環参照を図示する

Xcode付属の Instruments で大変見やすく図で循環参照を表示してくれる. やり方は以下の通り Xcodeでビルドする > Xcodeメニューの Product > Profile > Leaks template > 実行し赤い棒が出たらそこを選択して 左のメニューのLeaks を選択 > Cycles & Roots …

rubyのワンライナーで連番のファイル名と画像サイズをを一括変換する.

そろそろワンライナーに手を出そうと思いましてメモです. ファイル 1.png, ....を hoge1.png, ... にリネームする. $ ruby -e '(1..5).each { |i| system "mv #{i}.png hoge#{i}.png" }' ファイル1.png, ... を 一括で 100x60 にサイズ変換する $ ruby -e '(1…

Linuxのブレース展開を使う

連番のファイルをブレース展開を使ってまとめて指定する $ g rm public/hoge_img/movie{1,2,3,4}.png 上は1個ずつ movie1, movie2, ... を git rm するのと同じ. 以下も同じ意味 png=> jpgの形式変換を行う $ convert a.png a.jpg $ convert a{.png,.jpg} 深…

alfred を利用して素早くgithubのリポジトリをブラウザで開く方法

alfred を利用して素早くgithubのリポジトリをブラウザで開く方法を説明します. aflred のワークフローを利用することで可能になります. alfred ワークフロー機能の使用は有料のPower Packを購入することで可能になります. https://github.com/zenorocha/alf…

Xcodeのプラグインがある場所

Xcodeのプラグインがある場所は以下の通り ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/ ここでプラグインを削除できる.

NSAssertでアサーションを行う

以下のようなコードを書くと int val = 299; NSAssert((0 <= val) && (val <= 255), @"Value is out of range!"); こんな感じでログが出て強制終了する. 2013-11-20 16:49:12.779 AppDemo[1935:60b] *** Assertion failure in -[HomeViewController viewDidL…

UIAppearanceを使ってボタンの背景画像を一括で設定する

ボタンがadd subviewされる側のクラスによって指定ができるけど, ちょっと使いづらい. カスタムなボタンを作った方がよいかもしれない. UIImage *btnImg = [UIImage imageNamed:@"hoge"]; UIImage *btnImgHighlighted = [UIImage imageNamed:@"fuga"]; [[UIB…

乱数を生成する

int r = arc4random_uniform(3); // range is 0~2 参考: http://programming-ios.com/objective_c-arc4random/

ナビゲーションバーとステータスバーを除いた画面の高さを取得する

ナビゲーションバーとステータスバーを除いた画面の高さを取得する. float backButtonYorigin = [[UIScreen mainScreen] applicationFrame].size.height - self.navigationController.navigationBar.height; コントロールの位置指定を 下からの距離で指定す…

複数の非同期処理や非同期処理内で場合分けする場合に便利な Deferred について

Deferredとは? 元ネタはjsからきた. 既存では非同期処理において完了,未完了の場合ごとにBlock実行をするというアイディアだったが そうはせずに, 完了,未完了の状態を持ったDefferedオブジェクトを即座に返すと言う方針. Defferedオブジェクトは完了もしく…

nullチェックをする

たまに補完で出てきてくれないときがあるのでメモ NSNumber *hoge; [hoge isEqual:[NSNull null]]

定数を static const で定義する

kは定数のプレフィックス. // .m file #import "ScrollButtonsView.h" static const int kButtonNumber = 5; static const float kButtonPadding = 10.0f; @implementation ScrollButtonsView /* 省略 */ @end 文字列定数の場合は以下の通り // .h file #imp…

Block propertyを使用してエラー処理を共通化する

実装ファイル #import "ViewController.h" #import "CustomView.h" typedef void(^testBlockType)(void); @interface ViewController () @property (nonatomic, copy) testBlockType success; @property (nonatomic, copy) testBlockType failuer; @end @imp…

カスタムビューの動作をビューコントローラ側で設定する

iQONのView構成紹介 14ページ目 http://www.slideshare.net/ararajp/vasilyretty?ref=http://tech.vasily.jp/2013/09/ios_iqon_view/ のスパイクプロジェクトをつくってみた. カスタムビューを作ったときにカスタムビューのなかではなく それを使うビューコ…

typedef を使って Blockの型を独自に定義する

typedef を使って Blockの型を独自に定義することができる. View.h #import <UIKit/UIKit.h> typedef void(^MyCustomBlockType)(void); @interface CustomView : UIView @property (nonatomic, copy) MyCustomBlockType blockName; @property (nonatomic, copy) void (^bloc</uikit/uikit.h>…

NSEnumeratorを使って簡単にリバース配列を取得する

SVProgressHUDのソースを読んでいたら NSEnumerator を使って Array を 逆順にしていたので試してみた. NSArray *ar= @[@1,@2,@3,@4]; NSEnumerator *enumerator = [ar objectEnumerator]; for (NSNumber*num in enumerator) { NSLog(@"num: %@", num); } en…

Objective-Cのデバッグ用ログ出力で 行数と関数名を表示する

以下を pchファイルに書けばOKです. // Debug #ifdef DEBUG #define DLOG(format, ...) NSLog((@"%s: %d: " format), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #else #define DLOG(format, ...) #endif pod にしたい... たしか, pod install したとき…

git tag の使い方メモ

git

タグ一覧を出力 $ git tag HEADが指している commit に対して アノーテーションタグをつける $ git tag -a TAG_NAME タグ名で指定したコミットを見る $ git show TAG_NAME Remote branch に 全ての tag をプッシュ $ git push --tags 1個の tag をプッシュ $…

プロパティ宣言とプロトコルをヘッダに書かずに .m ファイルに書く

ヘッダファイルはできるだけ使わない方向で. @interface QuizSelectionViewController () <UITableViewDataSource, UITableViewDelegate> @property UITableView *table; @end @implementation QuizSelectionViewController @end</uitableviewdatasource,>

main thread で 実行する

dispatch_async(dispatch_get_main_queue(), ^{ // do something });

ジェスチャーを取得する

- (void)viewDidLoad { [super viewDidLoad]; UIGestureRecognizer *gesture = [[UIGestureRecognizer alloc]initWithTarget:self action:@selector(foo:)]; [self.view addGestureRecognizer:gesture]; } - (void)foo:(UIGestureRecognizer*)sender{ }

MagicalRecordメモ

define をpchにでも書いておくとメソッドの prefix(MR_部分) を省略できるようになる. (#importの前に書く必要がある。) #define MR_SHORTHAND #import <CoreData+MagicalRecord.h> context 取得 NSManagedObjectContext *context = [NSManagedObjectContext defaultContext]; オブジェ</coredata+magicalrecord.h>…

カスタムイニシャライザMemo

- (id)initWithDict:(NSDictionary *)dict { self = [super init]; if (self) { self.content = dict[@"content"]; self.name = dict[@"name"]; } return self; }

NSErrorを出力する方法

localizedDescription method の名前をいつも忘れるのでメモ NSString *message = [error localizedDescription]; NSLog(@"plist delete Faild. message:%@",massage);

Protocolのスパイク

// SNSPost.h #import "CustomModel.h" @protocol hogeDelegate <NSObject> @required - (void)fuga; @end @interface SNSPost : CustomModel @property (nonatomic, weak) id <hogeDelegate>delegate; - (void)hoge; @end // SNSPost.m #import "SNSPost.h" @implementation SNSPost</hogedelegate></nsobject>…

typedef with enum

typedef NS_ENUM(NSInteger, HogeState) { HogeStateStart, HogeStatePause, HogeStateEnd };

KVO

あるオブジェクトのプロパティが変更されたことを検知できる. 非同期でネットからデータ持ってきてうんぬんかんぬんするときに便利. static char LoadTwitterIconUrlKVONotification_Dictionary; -(void)updateIconURL{ // KVO登録 [self addObserver:self f…

dispatch async で main threadを指定して実行する.

//バックグラウンド実行 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ネットワークとかの重い処理を書く //ここにUIをいじる処理を書いた事によってステータスバーがチカチカしたりおかしくなった }); //メインス…