Objective-C - UITableView の deleteRowsAtIndexPaths: で落ちる場合の対処法
QiitaにUITableViewで出たエラーの対処法を投稿しました。
Objective-C - UITableView の deleteRowsAtIndexPaths: で落ちる場合の対処法 - Qiita
http://qiita.com/wao9@github/items/efed9167b5cc09f5774b#1-1
NSDate initWithTimeInterval:sinceDate:でX年後の日付を求める際の注意点
現象
- NSDate の initWithTimeInterval:sinceDate: メソッドを使って簡易的に100年後の日付を求めようとしたら値がおかしい。
ソースコード(誤)
#define kOneDay (24*60*60)
#define kOneYear (365*kOneDay)
- (NSDate*)test
{
NSDate* date = [NSDate date];
NSDate* laterDate = [[NSDate alloc]
initWithTimeInterval:100*kOneYear
sinceDate:date];
// for debug
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* dc = [calendar components:NSYearCalendarUnit fromDate:laterDate];
NSLog(@">>> year = %d", [dc year]);
return laterDate;
}
結果
>>> year = 1977
どうやら、桁あふれが起きている。
TimeInterval で表現できるのは60年くらいまでのようだ。
どおりで initWithTimeInterval: のサンプルコードで○年後というのは見ないわけだ…。
上記ではうるう年等の正確な計算もできないので、NSDateComponents を使うよう修正。
ソースコード(正)
- (NSDate*)test2
{
NSDate* date = [NSDate date];
NSCalendar *calendar = [[NSCalendaralloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* offset = [calendar components:NSYearCalendarUnitfromDate: date];
[offset setYear:100];
NSDate* laterDate = [calendar dateByAddingComponents:offset toDate:self.birthday options:0];
// for debug
NSCalendar *debugCalendar = [[NSCalendaralloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* dc = [debugCalendar components:NSYearCalendarUnitfromDate:laterDate];
NSLog(@">>> year = %d", [dc year]);
return laterDate;
}
結果
>>> year = 2113
ちゃんと出た。
結論
- 「○時間後」「○日後」は initWithTimeInterval でいいが、「○年後」はうるう年の考慮もできる NSDateComponents の dateByAddingComponents:toDate:options: を使う。
- TimeInterval で表せるのは60年後程度まで
動作環境
XCode5でのテキストの置換方法
探してしまいました。
XCode5で「検索(Find)」から「置換(Replace)」にする変更する場所が見つからない。
…と思ったら
検索ボックス上の「Find」の文字が押せて
Replaceに変更できました。
「In Project」や「Ignoring Case」とちがいオンマウスで反応しないので少し見つけにくいですね。
動作環境
-
XCode5 Developer preview
-
MacOS 10.8.4
XcodeでRunをしてもシミュレータでアプリが起動しない・起動に異様に時間がかかる場合の対処法
よく忘れるのでメモ
XcodeでRunをしてもシミュレータでアプリが起動しない・起動に異様に時間がかかる場合の対処法
a.シミュレータは起動するが、黒い画面のままアプリが起動しない場合
- シミュレータで cmd + shift + h を押してホーム画面へ
- 起動しないアプリを削除し、もう一度Runする
異様に時間がかかる場合も、これでだいたい直る
b.気がつくとRunがプスンと止まっており、シミュレータが起動しない場合
- シミュレータを起動した状態でMacのメニューバーからiOSシミュレータ>コンテンツと設定をリセット>リセット
これでだいたい直る
動作環境
Storyboardで追加したUIのプロパティ名を変更するとエラー
現象
- Storyboardで配置したUIを、ViewControllerにプロパティとして追加
- スペルミスなどでViewControllerに追加したプロパティの名前を変更
- 該当のViewControllerを開こうとするとエラーで落ちる
エラーメッセージ
2013-06-22 17:25:25.108 Tasks[15010:c07] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<AddTaskViewController 0xa0b1c20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key limitAgeField.'
解決法
- ViewControllerで定義されている名前は変更したがStoryboardで設定している名前が変更されてないエラーなのはわかるが、具体的な解決法がわからない。
- エラーメッセージでぐぐるとxibファイルの変数名も変更しろと出るが、Storyboardオンリーで作っているのでxibファイルは見当たらない。
- 仕方ないので以下の方法で解決
- Main.storyboardを選択しXCode右上のボタンのうちComparisonモードで開く
(※Main.storyboardをテキストエディターで開いてもOK)
←いちばん右のボタンを押せばOK - storyboardのソースコードが表示されるので、エラーが出ているプロパティで名で検索
(テキスト画面が左右に2つ出ますが、左を修正します)
- 検索されたプロパティ名を直に変更
これでエラーが出なくなりました。
動作環境
iPhoneシミュレータでキーボードから日本語を打ち込む
よく忘れるのでメモ。
XCodeのiPhone/iPadシミュレータで、シミュレータのキーパッドではなくMacキーボードから日本語を入力する方法。
- アプリを起動している場合は command + shift + h でホーム画面を表示
- "Settings"(日本語環境の場合は"設定")アプリを選択
- General>Keyboard>Keyboards>Add New Keyboard>Japanese (Romaji) を選択。
- Japanese (Romaji) ←ローマ字入力。キーボードからローマ字を打つと日本語に変換できる。
- Japanese (Kana) ←かな入力。キーボードから英字は入力できるが日本語に変換はできない。
キーボードから日本語を入力したい場合はJapanese (Romaji)で。英字はどちらでも入力できます。
*[XCode5][iOS7][StoryBoard]TextFieldに設定できるキーボード一覧
TextFieldに設定できるキーボード一覧
- Default:デフォルト
- ASCII Capable:英字
- Numbers and Punctuation:数字+記号
- URL:URL用。.comなど
- Number Pad:テンキー
- Phone Pad:テンキー+ *# など電話に使うもの
- Name Phone Pad:
- E-mail Address:Email用。.や@など。
- Decimal Pad:小数点用。小数点がある。
- Twitter:ツイッター用。@や#がある。
- Web Search:Webサーチ用。.comなど
- Default:デフォルト
- ASCII Capable:英字
- Numbers and Punctuation:数字+記号
- URL:URL用。.comなど
- Number Pad:テンキー
- Phone Pad:テンキー+ *# など電話に使うもの
- Name Phone Pad:
- E-mail Address:Email用。.や@など。
- Decimal Pad:小数点用。小数点がある。
- Twitter:ツイッター用。@や#がある。
- Web Search:Webサーチ用。.comなど
動作環境