iOSアプリ開発のメモ置き場

ささたつがiOSアプリ開発で知ったObjective-Cのtipsなどを書いていく所存

initWith メソッドのあれこれ

初期化にはいろいろな方法がある。 1. UILabel などを、サイズや位置を指定しつつ生成するとき initWithFrame: 2. Storyboard から UIView を生成するとき initWithCoder: 3. xibファイルをコード上から読み込みたいとき initWithNibName:bundle: Storyboard…

XCode の便利そうなショートカットキー

// Command + 1 ~ 6 ナビゲーションバーの中のタブの移動 // Command + Shift + F プロジェクト全体からの検索 // Ctrl + 6 ファイル内のメソッド検索(絞り込みも可) // Cmd + Shift + J 現在開いているファイルにフォーカス

任意の要素をタップしたときの処理を UITapGestureRecognizer を使って登録する

// imageView がタップされたときに tapImageView という処理を行う UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView)]; [self.imageView addGestureRecognizer:tapGes…

UILocalNotification を使って iPhone に通知を出す

画面上の方にぴょこっと現れるアレ。アプリ開いてると出ないみたい。 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; NSDate *fireDate = [[NSDate alloc] initWithTimeInterval:10*60 sinceDate:[NSDate date]]; // 10分後…

新しいファイルを追加したときに、コメント部分の "年" を消す方法

ターミナルで一発でいけた!! defaults write com.apple.dt.Xcode AppleLocale en_US

Objective-C の配列周りの処理

componentsJoinedByString 覚えにくいな・・ NSMutableArray *array = [[NSMutableArray alloc] init];; for (NSDictionary *language in user.languages) { [array addObject:language[@"name"]]; } NSLog(@"%@", [array componentsJoinedByString:@","]); …

viewDidLoad と viewWillAppear の違い

viewDidLoad は View が生成された最初の一回だけ呼ばれる。viewWillAppear (や viewDidAppear )は生成後、View が表示される直前(された直後)に呼ばれる。 タブ等の切り替え等により、画面に表示されるたびに呼び出される。何度でも呼ばれる。

iOSアプリでWebフォント (IcoMoonとかFontAwesomeとか) を使いたい

IcoMoon を使う場合はこんな感じ。 label.font = [UIFont fontWithName:@"icomoon" size:12]; label.text = @"\uE605"; FontAwesome を使う場合はこんな感じ。 label.font = [UIFont fontWithName:@"FontAwesome" size:12]; label.text = @"\uf000";

navigationBarのデザインをカスタマイズする

背景色を変えたい → barTintColor を使う [UINavigationBar appearance].barTintColor = [UIColor colorWithRed:1.000 green:0.447 blue:0.176 alpha:1.0]; ナビゲーションバー上の戻るリンクの色を変えたい → tintColor を使う [UINavigationBar appearance…

UITableView のデータ再読込 (reloadData) の処理

この辺の話いまいち理解出来てないけどそういうものらしい。 http://ebisu.surbiton.jp/sysblog/2012/04/uitableview.html [(UITableView)tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

UIAlertView と UIActionSheet の違い

UIAlertView ユーザの情報を利用する際の警告(OKで選べるようなやつ) バックグラウンドで発生した事象に関する警告 UIActionSheet ユーザになんらかのアクションを選択させる ユーザのアクションに対して確認を取りたい

UIViewController はなぜ必要なのか

画面が2画面以上存在するときに、どうやってそれらの間を遷移するか。不要な要素を hidden で隠したり、新しい要素を追加したりすれば一応可能だけど、そもそも画面全体をごっそりと入れ替えられると便利。それをやってくれてる(複数の UIView をまとめて画…

すべては UIView のサブクラス

UIView は画面を構成する要素の基本クラス 位置とサイズを持つ四角形で、背景色やコンテンツを持つ コンテンツとして文字を持つ UIView が UILabel コンテンツとして画像を持つ UIView が UIImageView 初期化時には initWithFrame で位置やサイズを決定する …

NSInteger と int の違いとは?

基本的には同じものとして考えて良い。ちなみに NSNumber はオブジェクト。 詳しくはこちら。 iphone - When to use NSInteger vs int? - Stack Overflow http://stackoverflow.com/questions/4445173/when-to-use-nsinteger-vs-int

NSArray, NSDictionary, NSNumberの省略記法

NSArray @[@"apple", @"banana", @"orange"]; NSDictionary @{@"key1":@"value1", @"key2":@"value2", @"key3":@"value3"}; NSNumber @100 @(3.14 / 2.0)

個人的なコーディング規約メモ

ドット修飾子でアクセスするのはプロパティのみにする // goodCount は profile のプロパティ user.profile.goodCount; // intValue は NSNumber クラスのメソッド [user.profile.goodCount intValue];

Block構文を使ったサンプルコード

ややこしいなー // (戻り値の型 (^)(引数))メソッド名 - (NSArray *)filter:(NSArray *)array block:(BOOL (^)(int))block { NSMutableArray *result = [NSMutableArray array]; for (NSNumber *num in array) { if (block(num.intValue)) { [result addObje…

空の配列 (NSMutableArray) を作成する

NSMutableArray *numbers = [NSMutableArray array]; 追記(4/12) 最近はこっちの方がモダンなのかな〜 iOSアプリ開発 いまさら聞けないモダンな書き方 [@[] mutableCopy]; // 空の mutable array [@{} mutableCopy]; // 空の mutable dictionary

最近気になってる便利そうなライブラリ

Blocksの活用法について - 中継地点 http://d.hatena.ne.jp/h_mori/20120303/1330791880 GTM HTTP Fetcherを利用した通信方法まとめ - プログラミングノート http://d.hatena.ne.jp/ntaku/20120115/1326620484

NSFetchedResultsController について

データを Core Data に入れて UITableView を利用するときに使うものらしい。 NSFetchedResultsController を使えば、Core Data にデータが入ったときにそのイベントを取得してビューを自動で表示したり、データを Core Data に追加したときにはビューにも自…

Objective-C のカテゴリとは?

既存のクラスにメソッドを追加できる機能。 インスタンス変数は宣言できない インスタンスメソッド、クラスメソッドは自由に書ける メソッドのモジュール化ができる

Xcode5 で作ったアプリを実機で動かすための Provisioning Profile の設定

1) Xcode > Preferences > Accounts に、Apple の審査に通ったアカウント(iPhone Developer Programに加入しているアカウント)を追加する (これのことを Provisioning Profile って言うんですかね?) 2) 右下の View Details から詳細を開いて、更新ボタ…

RestKit のマッピングメモ その2

RKObjectManager を継承した ObjectManager とか作って管理すると楽かも。 #import "ObjectManager.h" #import "Stock.h" @implementation ObjectManager - (instancetype)init { NSURL *baseURL = [NSURL URLWithString:@"https://qiita.com"]; AFHTTPClien…

RestKit のマッピングメモ

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Gist" inManagedObjectStore:managedObjectStore]; [entityMapping addAttributeMappings…

.xcdatamodeld ファイルとはいったい!?

Use Core Data ってすると生成されるみたいだなー。Core Data の保存先かな。

RestKit の Example を実行する方法

v0.20.3 を持ってきて、Edit Scheme から Executable のところから実行したいサンプルを選択する

SDWebImage を使うと画像をちょー簡単に非同期読み込みにしてくれる

#import <SDWebImage/UIImageView+WebCache.h> NSURL *userImageURL = [NSURL URLWithString:url]; // setImageWithURL が表示したい画像、placeholderImage が画像を取得してくる間での間とりあえず表示したい画像 [self.imageView setImageWithURL:userImageURL placeholderImage:[UIImage ima</sdwebimage/uiimageview+webcache.h>…

xib ファイルを UITableViewCell として使うときの Tips

普通はこう書くけど、 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } xib ファイルを使…

特定の Web ページを WebView で表示する

親クラスは UIViewController でおk :D - (void)viewDidLoad { [super viewDidLoad]; UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; NSURL *url = [NSURL URLWithString:@"http://sasata299.hatenablog.com"]; NSURLRequest *r…

ナビゲーションバーにタイトルを設定する

UINavigationController を使ったアプリを作るときに、表示されている NavigationBar にタイトルを表示させる方法。 self.navigationItem.title = @"タイトル";