なんでもいいから書くブログ。iPhoneアプリやAndroidアプリといったスマートフォンアプリを開発していこうと考えてはいるが、はたしてどこまでできるか、、とにかく記録していこうと思い書いているブログである。有益な情報はあるかもしれないし、ないかもしれない。
久々にブログ更新だ。続けるのって大変だね。
iPhone開発ネタ。
NSUserDefaultsに値をセットするとファイルに書き出されるので、
アプリケーションを終了しても、データを維持できる。
しか〜し、すぐに保存されるわけではないらしい。
値を変更し、すぐにアプリを終了すると、保存されていないのだ。
けっこうハマッた。ブレークポイントでステップ実行すると確かに値が変わっている。
で、ステップ実行している分、時間が立っているので、保存してくれている。
ブレークポイントを外して、実行すると、保存されていない。
だから、何がおかしい?となったわけだ。
ようはキャッシュからファイルに書き出すタイミングがずれているので、NSUserDefaults のsynchronize メソッドで、同期してやればオッケー。ただし、毎回はやるなとドキュメントには書いてある(っぽい)。アプリ終了時にやるのがよいでしょう。
iPhone開発ネタ。
NSUserDefaultsに値をセットするとファイルに書き出されるので、
アプリケーションを終了しても、データを維持できる。
しか〜し、すぐに保存されるわけではないらしい。
値を変更し、すぐにアプリを終了すると、保存されていないのだ。
けっこうハマッた。ブレークポイントでステップ実行すると確かに値が変わっている。
で、ステップ実行している分、時間が立っているので、保存してくれている。
ブレークポイントを外して、実行すると、保存されていない。
だから、何がおかしい?となったわけだ。
ようはキャッシュからファイルに書き出すタイミングがずれているので、NSUserDefaults のsynchronize メソッドで、同期してやればオッケー。ただし、毎回はやるなとドキュメントには書いてある(っぽい)。アプリ終了時にやるのがよいでしょう。
PR
iPhone開発
3桁以上の数字はカンマを入れたほうが見やすい。
次の方法で解決。1234567 → 1,234,567 になる。
NSNumber *number = [[NSNumber alloc] initWithInt:1234567];
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setNumberStyle:NSNumberFormatterDecimalStyle];
[fmt setGroupingSeparator:@","];
[fmt setGroupingSize:3];
NSLog(@"%@", [fmt stringForObjectValue:number]);
[number release];
[fmt release];
(最初は setNumberStyle をしていなくて、ハマった。。)
なお、setNumberStyle、setGroupingSeparator、setGroupingSize、を使わなくても、
次の書式でもできる。
[fmt setPositiveFormat:@"#,##0"];
NumberStyleもいろいろあるので、自前で関数作らなくてもフォーマットしてくれるぞ。
3桁以上の数字はカンマを入れたほうが見やすい。
次の方法で解決。1234567 → 1,234,567 になる。
NSNumber *number = [[NSNumber alloc] initWithInt:1234567];
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setNumberStyle:NSNumberFormatterDecimalStyle];
[fmt setGroupingSeparator:@","];
[fmt setGroupingSize:3];
NSLog(@"%@", [fmt stringForObjectValue:number]);
[number release];
[fmt release];
(最初は setNumberStyle をしていなくて、ハマった。。)
なお、setNumberStyle、setGroupingSeparator、setGroupingSize、を使わなくても、
次の書式でもできる。
[fmt setPositiveFormat:@"#,##0"];
NumberStyleもいろいろあるので、自前で関数作らなくてもフォーマットしてくれるぞ。
iPhone開発。
リストをテーブルで表示した際、特定の行を自動で選択(というより、その行に移動)してほしいケースがある。
例えば、日付毎にリストを表示していたら、画面が表示された時に、今日(もしくはその直近)を表示してくれたら、うれしい。
行番号を指定して、行を選択、移動するには、次のメソッドが使える。
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
indexPathで行を指定しなくてはならないので、次のメソッドで行番号から生成しよう。
+ (NSIndexPath *)indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section;
scrollPosition はスクロール位置だから、目的に応じて指定すべし。
例)tblViewというテーブルの 0セクションの10行目を真ん中位置へ アニメ効果なし
[tblView selectRowAtIndexPath: [NSIndexPath indexPathForRow:10 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
こんな感じか。
リストをテーブルで表示した際、特定の行を自動で選択(というより、その行に移動)してほしいケースがある。
例えば、日付毎にリストを表示していたら、画面が表示された時に、今日(もしくはその直近)を表示してくれたら、うれしい。
行番号を指定して、行を選択、移動するには、次のメソッドが使える。
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
indexPathで行を指定しなくてはならないので、次のメソッドで行番号から生成しよう。
+ (NSIndexPath *)indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section;
scrollPosition はスクロール位置だから、目的に応じて指定すべし。
例)tblViewというテーブルの 0セクションの10行目を真ん中位置へ アニメ効果なし
[tblView selectRowAtIndexPath: [NSIndexPath indexPathForRow:10 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
こんな感じか。
文字列内の特定の文字をある文字に置換する。よくあることだ。
SQLiteを使うアプリだが、Like句による検索をしたい。変数は?でバインドするので、
部分一致させるには、%hoge% のように%パーセントをつける必要がある。
そうすると、'%'の文字が使えなくなるので、今度はエスケープ文字を指定する必要がでてくる。
で、'%'を→'$%'のように置換したい。というのが本題。
SELECT * FROM tablename WHERE colname LIKE '%a$%1%' ESCAPE '$'
(colnameに a%1 を含む行を抽出するSQL)
文字列の置換はこんな感じ
NSMutableString *var = [[NSMutableString alloc]initWithString:@"a%1"];
[var replaceOccurrencesOfString:@"%" withString:@"$%" options:0 range:NSMakeRange(0, [var length])];
a%1 → a$%1 になる
(戻り値は置換回数なので、いらないから指定していない。optionもいらないので0)
バインド変数にかます為には、次のように、元の文字列を加工すればいいかな(エスケープ文字に$を指定した場合)
[var replaceOccurrencesOfString:@"$" withString:@"$$" options:0 range:NSMakeRange(0, [var length])];
[var replaceOccurrencesOfString:@"%" withString:@"$%" options:0 range:NSMakeRange(0, [var length])];
[var replaceOccurrencesOfString:@"_" withString:@"$_" options:0 range:NSMakeRange(0, [var length])];
[var insertString:@"%" atIndex:0];
[var appendString:@"%"];
$→$$, %→$%, _→$_ に置換して、両端に% をつける。これで部分一致の検索用に加工完了!
SQLiteを使うアプリだが、Like句による検索をしたい。変数は?でバインドするので、
部分一致させるには、%hoge% のように%パーセントをつける必要がある。
そうすると、'%'の文字が使えなくなるので、今度はエスケープ文字を指定する必要がでてくる。
で、'%'を→'$%'のように置換したい。というのが本題。
SELECT * FROM tablename WHERE colname LIKE '%a$%1%' ESCAPE '$'
(colnameに a%1 を含む行を抽出するSQL)
文字列の置換はこんな感じ
NSMutableString *var = [[NSMutableString alloc]initWithString:@"a%1"];
[var replaceOccurrencesOfString:@"%" withString:@"$%" options:0 range:NSMakeRange(0, [var length])];
a%1 → a$%1 になる
(戻り値は置換回数なので、いらないから指定していない。optionもいらないので0)
バインド変数にかます為には、次のように、元の文字列を加工すればいいかな(エスケープ文字に$を指定した場合)
[var replaceOccurrencesOfString:@"$" withString:@"$$" options:0 range:NSMakeRange(0, [var length])];
[var replaceOccurrencesOfString:@"%" withString:@"$%" options:0 range:NSMakeRange(0, [var length])];
[var replaceOccurrencesOfString:@"_" withString:@"$_" options:0 range:NSMakeRange(0, [var length])];
[var insertString:@"%" atIndex:0];
[var appendString:@"%"];
$→$$, %→$%, _→$_ に置換して、両端に% をつける。これで部分一致の検索用に加工完了!
iPhoneプログラム中の文字列代入で、改行コードを使おうと「¥n」(円マークn)としていたらうまく行かず。。
「バックスラッシュn」が正解でした。。Windowsだと区別して使わないからな。
Macでは、optionキーを押しながら円マークでバックスラッシュになります。
「バックスラッシュn」が正解でした。。Windowsだと区別して使わないからな。
Macでは、optionキーを押しながら円マークでバックスラッシュになります。
YamaTatsuのiPhoneアプリ
iTunes Store でみる
Light Off Hot New
点いたライトを素早く消そう!
誰でも遊べるシンプルなゲームです
めいろであそぼう New
かわいいイラストのめいろ、ぬり絵もできる
子供向けの迷路あそびです。※iPad専用
運試し NEW
15連続の確率は0.0001%
操作は簡単 好きなパネルを選ぶだけ。どこまで進めるか運試し!
連打! まだまだ人気
16連射に挑戦
10秒間で何回ボタンを押せるか競うゲームです。
うちメモ ★大人気★
買い物中に 「まだあったかな?」 と思った経験 ありませんか? 「うちメモ」していれば大丈夫!!
Best Bowling
マイボウラーに大人気! ボウリングのスコアを管理するアプリです。
イメージ貯金
貯金はモチベーションが重要! 目標を設定して毎日楽しく貯金しよう!
Mine Escape
聴力は優れていますか? 音で機雷の位置を判断する新感覚のアクションゲーム!
Rank Checker
だって気になるじゃないですか、、 アプリ開発者必須! AppStoreのランキングをチェックツールです。
点いたライトを素早く消そう!
誰でも遊べるシンプルなゲームです
めいろであそぼう New
かわいいイラストのめいろ、ぬり絵もできる
子供向けの迷路あそびです。※iPad専用
運試し NEW
15連続の確率は0.0001%
操作は簡単 好きなパネルを選ぶだけ。どこまで進めるか運試し!
連打! まだまだ人気
16連射に挑戦
10秒間で何回ボタンを押せるか競うゲームです。
うちメモ ★大人気★
買い物中に 「まだあったかな?」 と思った経験 ありませんか? 「うちメモ」していれば大丈夫!!
Best Bowling
マイボウラーに大人気! ボウリングのスコアを管理するアプリです。
イメージ貯金
貯金はモチベーションが重要! 目標を設定して毎日楽しく貯金しよう!
Mine Escape
聴力は優れていますか? 音で機雷の位置を判断する新感覚のアクションゲーム!
Rank Checker
だって気になるじゃないですか、、 アプリ開発者必須! AppStoreのランキングをチェックツールです。
カレンダー
Twitter
プロフィール
最新記事
(05/22)
(04/30)
(03/16)
(03/07)
(02/08)
最新トラックバック
ブログ内検索
忍者アド
アクセス解析