iphone

HTTPリクエストのリクエストヘッダにリファラを設定したい

NSMutableURLRequestクラスのsetValue:forHTTPHeaderField:メソッドを使う。NSURLRequestではなくNSMutableURLRequestを使うのがポイント。HTTPメソッドやHTTPヘッダをセットしたい場合はプロパティの変更が不可能(Immutable)なNSURLRequestじゃなくて変更可…

UIWebView上でJavaScriptを走らせたい

UIWebView上でJavaScriptを走らせたい場合はUIWebViewクラスのstringByEvaluatingJavaScriptFromString:メソッドを利用する。返り値には最後に評価した式の値が格納される。以下では最後に評価された「a + b」の結果である「3」が返る。 NSString *s = [webV…

明日の俺へ

つ http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/Introduction/Introduction.html

UIViewのサイズを変更したい

UIViewのサイズの変更のしかたをいつも忘れるので、メモっておく。 // オリジナルの枠を取得 CGRect original = aView.frame; // 枠の高さを半分に CGRect new = CGRectMake(original.origin.x, original.origin.y, original.size.width, original.size.heig…

現在の日時を取得したい

NSDateのクラスメソッドdateを呼ぶと現在の日時をもつNSDateのインスタンスが返されます。 NSDate *now = [NSDate date]; NSLog(@"Now: %@", now); // => Now: 2010-08-12 18:21:39 +0900

ミリ秒単位でふたつの日時の差異を求めたい

// ミリ秒単位のふたつの日時の差異を求めたい NSDate *now = [NSDate date]; NSLog(@"now: %@", now); for (int i=0; i<10; i++) { NSLog(@"delay!!"); } NSDate *then = [NSDate date]; NSLog(@"then: %@", then); NSLog(@"then - now: %1.3fsec", [then t…

文字列から日時を生成したい

// 文字列から日時を生成する NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm"]; NSDate *date = [formatter dateFromString:@"2010-7-8 13:14"]; NSLog(@"Date: %@", date);

日時をフォーマット出力したい

// 日時をフォーマット出力する // 書式はここ http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns NSDate *now = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd(E)…

n日後の日時を求めたい

// n日後の日時をもとめる NSCalendar *calendar = [NSCalendar currentCalendar]; NSDate *now = [NSDate date]; NSDateComponents *sevenDays = [[NSDateComponents alloc] init]; [sevenDays setDay:7]; NSDate *sevenDaysLater = [calendar dateByAdding…

ふたつの日時の差を求めたい(日時分)

// ふたつの日時の差をもとめる(日時分のみ) NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps1 = [[NSDateComponents alloc] init]; [comps1 setYear:2010]; [comps1 setMonth:4]; [comps1 setDay:5]; [comps1 setHour:10]; …

ふたつの日時の差を求めたい(年月日)

// ふたつの日時の差を求める(年月日のみ) NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps1 = [[NSDateComponents alloc] init]; [comps1 setYear:2009]; [comps1 setMonth:3]; [comps1 setDay:10]; NSDate *date1 = [calen…

月日、時分秒を指定して日時オブジェクトを生成したい

// 年月日、時分秒を指定して日時オブジェクトを生成する NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setYear:2010]; [comps setMonth:1]; [comps setDay:2]; [comps setHou…

日時オブジェクトから年月日や時分秒、曜日をとりだしたい

NSDate *date = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps; // 年月日をとりだす comps = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date]; NSI…

オートリリースプールとスレッドとNSOperation

Cocoaのリファレンスカウント式のメモリ管理で利用されるオートリリースプールはメインスレッドに対しては自動的に作られて自動的に解放されるので普段はあまり意識することはないのだけど、performSelectorInBackground:withObject:などを利用して別スレッ…

iPhone開発のメモリリーク対策

問い合わせ言語を使って配列内のオブジェクトをフィルタリングしたい

for文でぐるぐるまわすのもいいけど、NSPredicateクラスと問い合わせ言語「Cocoa Predicates」を使うと便利。問い合わせ言語を渡してNSPredicateオブジェクトを生成したのち、配列のfilteredArrayUsingPredicate:メソッドを呼び出して指定したオブジェクトの…

モーダルビューの2重起動を避けたい

iPhoneアプリでは、ひとつのビューから複数のモーダルビューを出そうとするとエラーが発生してしまう。モーダルビューの2重起動を防ぐには、モーダルビューを表示する前に UIViewController#modalViewController を確認して nil の時のみモーダルビューを表…

Objective-Cで正規表現を使いたい

NSPredicateを使って正規表現的なあれができるよ。 NSPredicate *regex = [NSPredicate predicateWithFormat:@"SELF matches %@", @"[hoge|fuga]+"]; NSString *s1 = @"hoge"; NSLog(@"%d", [regex evaluateWithObject:s1]); //=> YES NSString *s2 = @"fuga…

TapkuLibraryのカレンダーを使ってみた

自分用のメモとして、とりあえずコードだけ貼っておく。「+」ボタンを押すとメモに「とんかつ」と記録できるカレンダーです。 #import <UIKit/UIKit.h> #import "TapkuLibrary/TapkuLibrary.h" @interface MyCalendarViewController : TKCalendarMonthTableViewController </uikit/uikit.h>…

NSErrorな変数をnilで初期化してあげないとアレな件

NSURLConnectionを使った通信プログラムを書いていたところ、下記のようなexample.comからデータを持ってくるだけのコードがEXC_BAD_ACCESSで落ちてしまう。 - (void)doIt { NSHTTPURLResponse *res; NSError *error; NSURL *url = [NSURL URLWithString:@"h…

NSOperationを試してみた

非同期に処理を行わせたい場合は別スレッドを立てて裏で実行したりするのが定番だけど、MacOSXやiPhoneアプリではNSOperationを使って自然な感じに非同期処理を行わせることができる(らしい)。以下自分用メモ。mainの中でdoItLaterを非同期に呼び出してる…

XMLを解析したい

iPhoneで利用できるXMLパーサにはいくつかありますが今回はiPhoneSDKに標準添付されているNSXMLParserを利用します。ちなみに、NSXMLParser以外のXMLパーサには以下のようなものがあります。NSXMLParserはSAXベースのパーサなのに対し、TouchXMLやKissXMLはD…

「/Volumes/Skiiing2/CD/ViewBased/Unknown Path」が無いよ問題

iPhoneSDK3.1.XからiPhoneSDK4.0に上げたら、以前は何の問題もなかったプロジェクトが謎の警告を発生させるようになってしまった。こんなの。 ld: warning: directory '/Volumes/Skiiing2/CD/ViewBased/Unknown Path/System/Library/Frameworks' following -…

お手軽にWEBからデータを取得したい

NSString#stringWithContentsOfURL:usedEncoding:error:メソッドを利用すればWEBからお手軽にデータを取得できます。 NSURL *url = [NSURL URLWithString:@"http://example.com"]; NSStringEncoding usedEncoding; NSError *error; NSString *result = [NSSt…

RESTなリソースへリクエストを送りたい

NSMutableRequest#setHTTPMethod:でGET/POST/PUT/DELETEを指定することでRESTなリソースに対してのリクエストを送信することができる。POSTとPUTの時には送信するコンテンツのContent-Typeを指定することを忘れずに。(今回はXMLデータを送信するのでapplicat…

JSONライブラリを利用する

http://code.google.com/p/json-framework/ インストール 以下の手順でインストールを行う。 適当なバージョンのJSONライブラリのdmgファイルをダウンロードする dmgファイルを展開する JSONディレクトリをプロジェクト内のClassesへドラッグアンドドロップ…

HTTPレスポンスのステータスコードを取得したい

HTTPレスポンスのヘッダ部文の受信完了時に呼び出される connection:didReceiveResponse: の中で NSHTTPURLResponse にキャストした response からステータスコードを取得しインスタンス変数にセットし、HTTPレスポンス受信完了時に呼ばれる connectionDidFi…

年、月、日を指定してNSDateを生成したい

comps = [[NSDateComponents alloc] init]; [comps setYear:2009]; [comps setMonth:10]; [comps setDay:11]; NSLog(@">>>%@", [calendar dateFromComponents:comps]);こんな感じ。

時間ぬきの現在の日付を取得したい

NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]]; NSLog(@">>>%@", [calendar dateFromComponents:comps]);CalendarComponentsを生成する時にcomponents:で指定した…

モーダルなウインドウを表示したい

モーダル(Modal)なウインドウを表示したい場合には「UIViewController#presentModalViewController:animated:」と「dismissModalViewControllerAnimated:」を利用します。 // aViewControllerをモーダルなウインドウとして開く [self presentModalViewContro…