2013年11月28日
cellForRowAtIndexPathでセルがつくれない
MessageListCell *Cell;
Cell = (MessageListCell *)[self.tblMain cellForRowAtIndexPath: delegateJSON.indexPath];
の様な使い方でセルを作成して後から表示させるようなときに、テーブルの表示から呼び出した処理(ここではdelegateJSONでJSONの取得)を完全に非同期にしないと、セルはさくせいされない。理由はよくわからないですが、3時間ほどはまったので、メモ
Cell = (MessageListCell *)[self.tblMain cellForRowAtIndexPath: delegateJSON.indexPath];
の様な使い方でセルを作成して後から表示させるようなときに、テーブルの表示から呼び出した処理(ここではdelegateJSONでJSONの取得)を完全に非同期にしないと、セルはさくせいされない。理由はよくわからないですが、3時間ほどはまったので、メモ

2013年09月22日
データのソート
今日は少しデータのソートで悩んでしまったので、メモです。
自分のソースを貼付けてるだけなので、他の人には参考にならないと思いますが。すいません。
- (IBAction)setSendList:(id)sender{
strSelectedIDs = nil;
NSArray *sortedArray = [[NSArray alloc]initWithArray:[friendsDatas sortedArrayUsingFunction:compareInfo context:NULL]];
for (int i=0; i<[sortedArray count]; i++) {
DataFriends *bookData = (DataFriends *)[sortedArray objectAtIndex:i];
if (bookData.intDoSend==1) {
if (strSelectedIDs != nil) {
[strSelectedIDs appendString:@","];
}
[strSelectedIDs appendString:[NSString stringWithFormat:@"%d",bookData.primaryKey]];
}
}
[self.delegate SelectFriendViewControllerDidOK:self];
}
NSInteger compareInfo(id aInfo1, id aInfo2, void *context)
{
int dpercent1 = ((DataFriends*) aInfo1).primaryKey;
int dpercent2 = ((DataFriends*) aInfo2).primaryKey;
if (dpercent1 < dpercent2)
return NSOrderedDescending;
else if (dpercent1 > dpercent2)
return NSOrderedAscending;
else
return NSOrderedSame;
}
自分のソースを貼付けてるだけなので、他の人には参考にならないと思いますが。すいません。
- (IBAction)setSendList:(id)sender{
strSelectedIDs = nil;
NSArray *sortedArray = [[NSArray alloc]initWithArray:[friendsDatas sortedArrayUsingFunction:compareInfo context:NULL]];
for (int i=0; i<[sortedArray count]; i++) {
DataFriends *bookData = (DataFriends *)[sortedArray objectAtIndex:i];
if (bookData.intDoSend==1) {
if (strSelectedIDs != nil) {
[strSelectedIDs appendString:@","];
}
[strSelectedIDs appendString:[NSString stringWithFormat:@"%d",bookData.primaryKey]];
}
}
[self.delegate SelectFriendViewControllerDidOK:self];
}
NSInteger compareInfo(id aInfo1, id aInfo2, void *context)
{
int dpercent1 = ((DataFriends*) aInfo1).primaryKey;
int dpercent2 = ((DataFriends*) aInfo2).primaryKey;
if (dpercent1 < dpercent2)
return NSOrderedDescending;
else if (dpercent1 > dpercent2)
return NSOrderedAscending;
else
return NSOrderedSame;
}

2013年08月24日
xCodeで今日の0時のNSDateを取得
よく使うのですが、結構忘れるのでメモです。
NSCalendar *cal=[NSCalendar currentCalendar];
NSUInteger flags = NSYearCalendarUnit
| NSMonthCalendarUnit
| NSDayCalendarUnit;
NSDate * tmpDate =[NSDate dateWithTimeInterval:-[[NSTimeZone systemTimeZone] secondsFromGMT] sinceDate:[NSDate date]]; //->これを入れとかないと、グリニッジ標準時刻になってしまう
NSDateComponents *cmp = [cal components:flags fromDate:tmpDate];
NSDate* date_converted;
// NSDateFormatter を用意します。
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
// 変換用の書式を設定します。
[formatter setDateFormat:@"YYYY-MM-dd"];
[formatter setDateFormat:@"yyyy-MM-dd"]; //YYYYだとどうしてか、去年になってしまいます。
// NSString を NSDate に変換します。
date_converted = [formatter dateFromString:[NSString stringWithFormat:@"%04d-%02d-%02d",[cmp year],[cmp month],[cmp day]]];
// 使い終わった NSDateFormatter を解放します。
[formatter release];
NSCalendar *cal=[NSCalendar currentCalendar];
NSUInteger flags = NSYearCalendarUnit
| NSMonthCalendarUnit
| NSDayCalendarUnit;
NSDate * tmpDate =[NSDate dateWithTimeInterval:-[[NSTimeZone systemTimeZone] secondsFromGMT] sinceDate:[NSDate date]]; //->これを入れとかないと、グリニッジ標準時刻になってしまう
NSDateComponents *cmp = [cal components:flags fromDate:tmpDate];
NSDate* date_converted;
// NSDateFormatter を用意します。
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
// 変換用の書式を設定します。
[formatter setDateFormat:@"
[formatter setDateFormat:@"yyyy-MM-dd"]; //YYYYだとどうしてか、去年になってしまいます。
// NSString を NSDate に変換します。
date_converted = [formatter dateFromString:[NSString stringWithFormat:@"%04d-%02d-%02d",[cmp year],[cmp month],[cmp day]]];
// 使い終わった NSDateFormatter を解放します。
[formatter release];

2013年08月19日
画像ファイルの上書き
PictureBoxに画像を表示して、そのあとその画像を変更して、ファイルの上書きなど行おうとすると、ファイルがロックされたままになってエラーになってしまうことがあります。
このことで、いつも同じところでつまづくので、メモです。
PictureBox コントロールに画像を表示するには、Image クラスを使用します。PictureBox コントロールには、Image プロパティがありますので、これを利用します。
最も簡単な方法は、System.Drawing.Image クラスの FromFile メソッドを使用する方法です。ただし、これだとプログラムが終了するまで、ファイルがロックされたままになります。
FromFile メソッドではなく、FromStream メソッドを使用しましょう。
ということでした。
このことで、いつも同じところでつまづくので、メモです。
PictureBox コントロールに画像を表示するには、Image クラスを使用します。PictureBox コントロールには、Image プロパティがありますので、これを利用します。
最も簡単な方法は、System.Drawing.Image クラスの FromFile メソッドを使用する方法です。ただし、これだとプログラムが終了するまで、ファイルがロックされたままになります。
FromFile メソッドではなく、FromStream メソッドを使用しましょう。
ということでした。

2013年08月11日
バイクレース
今日は、以前勤めていた会社の社長が、バイクレースに出場されるので、応援と手伝いに行ってきました。
こんな山の中にある近畿スポーツランドっていうサーキットです。


早朝から説明会がありました。

出走前のバイク

早く走るバイクはなかなかタイミングが合わずに、社長がすごくちっちゃいですが
僕の役目はサインボード係で、ラップタイムを計って、ライダーに知らせます。
200週以上あったのですが、ミスは3回くらい。
ほんとはミスは無い方がいのですが、まあまあ、お役に立てたかと。
一日中炎天下での応援でしたが、楽しい一日でした。
ライダーになろうとは思いませんが。。。こればっかりは自分でやりたいとは思いません。
でも、みんな楽しいメンバーで、すごく楽しませていただきました。
ありがとうございました。
こんな山の中にある近畿スポーツランドっていうサーキットです。
早朝から説明会がありました。
出走前のバイク
早く走るバイクはなかなかタイミングが合わずに、社長がすごくちっちゃいですが
僕の役目はサインボード係で、ラップタイムを計って、ライダーに知らせます。
200週以上あったのですが、ミスは3回くらい。
ほんとはミスは無い方がいのですが、まあまあ、お役に立てたかと。
一日中炎天下での応援でしたが、楽しい一日でした。
ライダーになろうとは思いませんが。。。こればっかりは自分でやりたいとは思いません。
でも、みんな楽しいメンバーで、すごく楽しませていただきました。
ありがとうございました。

2013年07月09日
windows の64bit版でのプリンタダイアログの表示
windows7でも8でも、64bit版でプリンタダイアログを表示させたいときには
Me.PrintDialog1.UseEXDialog = True
という1文が必要らしい。
明日、お客様のところでテストしてもらいますが、多分これで大丈夫だと思います。
windowsのバグだそうですけど、こういうことも知っとくとソフトのバグって言われなくて済んで、しかも、修正代金をいただけそうですね。
Me.PrintDialog1.UseEXDialog = True
という1文が必要らしい。
明日、お客様のところでテストしてもらいますが、多分これで大丈夫だと思います。
windowsのバグだそうですけど、こういうことも知っとくとソフトのバグって言われなくて済んで、しかも、修正代金をいただけそうですね。

2013年06月15日
iPhoneアプリでviewがずれる現象
iPhone5が登場する前に作ったアプリをこれに対応さそうとして、xibファイルを色々触っても、思ったようにならないとき、
デリゲートファイルでのdidFinishLaunchingWithOptionsのところで
[_window addSubview:_viewController.view];
となっている(古いパターン)場合があります。
このときは
self.window.rootViewController = self.viewController;
と変更してやると、うまく行きました。
他の原因もありそうですが、これで解決したのでメモしておきます。
デリゲートファイルでのdidFinishLaunchingWithOptionsのところで
[_window addSubview:_viewController.view];
となっている(古いパターン)場合があります。
このときは
self.window.rootViewController = self.viewController;
と変更してやると、うまく行きました。
他の原因もありそうですが、これで解決したのでメモしておきます。

2013年05月31日
64bit版のコンパイル
今日は、お客様のところのパソコンへのソフトのインストールと設定でハマってしまって、結局、お客さんのパソコンを持って帰ってきました。
結局は、どうということも無く、ビルドの構成マネージャでx86を指定してから、コンパイルしてやると解決しました。
ただ、それまでに、エラーメッセージがうまく出てくれないので、64bit環境向けにコンパイルするときに、専用のdllを用意しなければ行けないのかと思って、予想以上にハマってしまいました。
今日の現場は居酒屋さんで、夕方5時から満席で、凄くにぎやかになったので、冷静に考えられなくなってしまった気がします。後30分だけ冷静に考えられたら、持って帰ってこずにすみました。また明日、京都まで納品ですww
同じ失敗を繰り返さないために、メモメモです。
結局は、どうということも無く、ビルドの構成マネージャでx86を指定してから、コンパイルしてやると解決しました。
ただ、それまでに、エラーメッセージがうまく出てくれないので、64bit環境向けにコンパイルするときに、専用のdllを用意しなければ行けないのかと思って、予想以上にハマってしまいました。
今日の現場は居酒屋さんで、夕方5時から満席で、凄くにぎやかになったので、冷静に考えられなくなってしまった気がします。後30分だけ冷静に考えられたら、持って帰ってこずにすみました。また明日、京都まで納品ですww
同じ失敗を繰り返さないために、メモメモです。

2013年05月31日
ALTER COLUMN
ALTER TABLEで絡むの属性を変更するときに、「列 ‘xxxxx’ に依存しています」とエラーになって、1時間ほどハマってしまいました。
眠たかったのもあったのですが、もっと早く
http://lightgauge.net/database/1505/
にたどり着いたらよかった。
SqlStr = "ALTER TABLE mst_Card DROP CONSTRAINT DF__mst_Card__手数料__0B27A5C0;"
SqlStr &= "ALTER TABLE mst_Card ALTER COLUMN 手数料 decimal(4,2) NOT NULL ;"
SqlStr &= "ALTER TABLE mst_Card ADD DEFAULT 0 FOR 手数料;"
みたいに、制約を外す必要がありました。
眠たかったのもあったのですが、もっと早く
http://lightgauge.net/database/1505/
にたどり着いたらよかった。
SqlStr = "ALTER TABLE mst_Card DROP CONSTRAINT DF__mst_Card__手数料__0B27A5C0;"
SqlStr &= "ALTER TABLE mst_Card ALTER COLUMN 手数料 decimal(4,2) NOT NULL ;"
SqlStr &= "ALTER TABLE mst_Card ADD DEFAULT 0 FOR 手数料;"
みたいに、制約を外す必要がありました。

2013年04月25日
アップルのアプリ内課金の審査
アップルのアプリの審査はどんどん、厳しくなってるような気がします。
それか、私が時々変なアプリを提出するから目を付けられてるかもしれませんww
ただ、アプリ内課金に関してはほんとに厳しくなってるようです。
今回はリストア処理を忘れて、英語で理由を返されて、意味不明な状態になったので、次回以降のためにメモっときます。
We found that while your app offers In-App Purchase(s) that can be restored, it does not include the required “Restore” feature to allow users to restore the previously purchased In-App Purchase(s), as specified in Restoring Transactions section of the In-App Purchase Programming Guide:
“…if your application supports product types that must be restorable, you must include an interface that allows users to restore these purchases. This interface allows a user to add the product to other devices or, if the original device was wiped, to restore the transaction on the original device.”
To restore previously purchased In-App Purchase products, it would be appropriate to provide a “Restore” button and initiate the restore process when the “Restore” button is tapped by the user.
For more information about restoring transactions and verifying store receipt, please refer to the In-App Purchase Programming Guide.
という文章が帰って来たのですが、一度購入したユーザーが再度購入するときのための処理を実装しなさいということらしいです。
http://maccle.com/objective-c-cocoa/rejected-in-order-to-restore-in-app-purchase/
や、参考書を参考にして、うまくいきましたが、
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
の前に
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
を行っていなかったので、処理結果が帰ってこずに、結構ハマってしまいましたので、次回から注意です。
ちなみに、このことを実装したら審査通りました。ありがとうございます!!
それか、私が時々変なアプリを提出するから目を付けられてるかもしれませんww
ただ、アプリ内課金に関してはほんとに厳しくなってるようです。
今回はリストア処理を忘れて、英語で理由を返されて、意味不明な状態になったので、次回以降のためにメモっときます。
We found that while your app offers In-App Purchase(s) that can be restored, it does not include the required “Restore” feature to allow users to restore the previously purchased In-App Purchase(s), as specified in Restoring Transactions section of the In-App Purchase Programming Guide:
“…if your application supports product types that must be restorable, you must include an interface that allows users to restore these purchases. This interface allows a user to add the product to other devices or, if the original device was wiped, to restore the transaction on the original device.”
To restore previously purchased In-App Purchase products, it would be appropriate to provide a “Restore” button and initiate the restore process when the “Restore” button is tapped by the user.
For more information about restoring transactions and verifying store receipt, please refer to the In-App Purchase Programming Guide.
という文章が帰って来たのですが、一度購入したユーザーが再度購入するときのための処理を実装しなさいということらしいです。
http://maccle.com/objective-c-cocoa/rejected-in-order-to-restore-in-app-purchase/
や、参考書を参考にして、うまくいきましたが、
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
の前に
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
を行っていなかったので、処理結果が帰ってこずに、結構ハマってしまいましたので、次回から注意です。
ちなみに、このことを実装したら審査通りました。ありがとうございます!!

2013年04月20日
コンパイル時のエラー
今回は、zbarというバーコードを読み取るsdkを実装したときのコンパイルエラーについてです。
そのままでも、iPhone5以外は動作したのですが、iPhone5でだけビルドエラーになりました。
file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/imae/Desktop/ZBarSDK/libzbar.a for architecture armv7s
というような、エラーメッセージです。
このような場合はBuildSettingでArchiteturesをStandard(armv7,armv7s)からarmv7に変更したらビルドできました。
このビルドエラーは厄介で色んなパターンがあるのですが、今回解決した方法をメモしておきます。
そのままでも、iPhone5以外は動作したのですが、iPhone5でだけビルドエラーになりました。
file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/imae/Desktop/ZBarSDK/libzbar.a for architecture armv7s
というような、エラーメッセージです。
このような場合はBuildSettingでArchiteturesをStandard(armv7,armv7s)からarmv7に変更したらビルドできました。
このビルドエラーは厄介で色んなパターンがあるのですが、今回解決した方法をメモしておきます。

2013年04月19日
手書き文字認識
今日は新しいネタを見つけましたので、そのことをメモしときます。
zinniaっていうのを使うと、アプリに手書き認識を手軽に実装できそう。
http://d.hatena.ne.jp/kaz_29/20111214/1323841470
オーダリングの端末として使うにはいいかもです。
zinniaっていうのを使うと、アプリに手書き認識を手軽に実装できそう。
http://d.hatena.ne.jp/kaz_29/20111214/1323841470
オーダリングの端末として使うにはいいかもです。

2013年04月18日
日本語入力時に自動的に仮名を
久しぶりに、自動カナ入力を実装しようとしたら、結構悩んだので、メモしときます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/875imeyomi/imeyomi.html
で説明されているとおりなのですが。。
1 ImeComposition.vb を追加する。 (過去参照プログラム→電話交換機データ変換ソフト)
2 利用したいフォームのコードで
private yomiConv As ImeComposition.ImeYomiConversion
を宣言しておく
3 フォームロードなどで
yomiConv = new ImeComposition.ImeYomiConversion( TextBox1, TextBox2)
のように、返還元と返還先のテキストボックスを指定する
4 あとは、次のようなイベントに対する処理を追加する
Private Sub TextBox1_Enter( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
yomiConv.Enabled = true
End Sub
Private Sub TextBox1_Leave( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
yomiConv.Enabled = false
End Sub
実際の処理内容はImeComposition.vbの中に全て記載されているので、勉強するにはこれをしっかり読む必要がありますが、今は時間がないのでパス
http://www.atmarkit.co.jp/fdotnet/dotnettips/875imeyomi/imeyomi.html
で説明されているとおりなのですが。。
1 ImeComposition.vb を追加する。 (過去参照プログラム→電話交換機データ変換ソフト)
2 利用したいフォームのコードで
private yomiConv As ImeComposition.ImeYomiConversion
を宣言しておく
3 フォームロードなどで
yomiConv = new ImeComposition.ImeYomiConversion( TextBox1, TextBox2)
のように、返還元と返還先のテキストボックスを指定する
4 あとは、次のようなイベントに対する処理を追加する
Private Sub TextBox1_Enter( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
yomiConv.Enabled = true
End Sub
Private Sub TextBox1_Leave( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
yomiConv.Enabled = false
End Sub
実際の処理内容はImeComposition.vbの中に全て記載されているので、勉強するにはこれをしっかり読む必要がありますが、今は時間がないのでパス

2013年04月12日
Kenの気ままな日記
情熱ブログさん、地域活性化に力を注がれていて、私も何かできないかと、せめてブログに参加してみました。たいしたことは書けそうにありませんが、仕事で役立った技術情報のメモや、日記などを書いてみようと思います。
よろしくお願いします。
よろしくお願いします。

プロフィール
けん
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
最近の記事
cellForRowAtIndexPathでセルがつくれない (11/28)
データのソート (9/22)
xCodeで今日の0時のNSDateを取得 (8/24)
画像ファイルの上書き (8/19)
バイクレース (8/11)
iPhoneアプリでviewがずれる現象 (6/15)
64bit版のコンパイル (5/31)
ALTER COLUMN (5/31)
アップルのアプリ内課金の審査 (4/25)
最近のコメント
ラクブロ編集長 / Kenの気ままな日記
お気に入り
ブログ内検索
QRコード

アクセスカウンタ
読者登録
人気の楽園ブログ