クラッシュしたスレッドがフレームワークのみの場合がある。
その場合、そのフレームワークで呼び出されるdelegate関数が一番怪しい。
2011年7月26日火曜日
2011年5月28日土曜日
FacebookにiOSプログラミングページを作成中
Objective-C編 : http://docs.com/C32O
開発環境編 : http://docs.com/C327
APP作成編(作成中) : http://docs.com/CN01
Facebookの使い方が未だよく判らないけど
iOSプログラミングというfacebookページを作って
情報をまとめ中。
開発環境編 : http://docs.com/C327
APP作成編(作成中) : http://docs.com/CN01
Facebookの使い方が未だよく判らないけど
iOSプログラミングというfacebookページを作って
情報をまとめ中。
2011年4月24日日曜日
開発プロセスを推進するほど生産性は下がる
ソフトウェア開発を工業化しようとして、様々な開発プロセスが提案されてきた。
主目的は管理者が開発をコントロールするためなのだろうが、
そもそも論として前提が間違っている気がする。
「誰でも頑張ればプログラムが作れる」
そのための冗長な作業が増大し、
生産性の高い人達がプログラミングする時間を奪っていく。
実は人材育成には有効でも生産性は相当落ちている。
その人材が生産性の高い人に育つ、という前提なのだが…
**********
積み木は三歳児でも使えるが、作るには職人技が必要である。
英文法は理解しているが英会話はできない。
・・・
主目的は管理者が開発をコントロールするためなのだろうが、
そもそも論として前提が間違っている気がする。
「誰でも頑張ればプログラムが作れる」
そのための冗長な作業が増大し、
生産性の高い人達がプログラミングする時間を奪っていく。
実は人材育成には有効でも生産性は相当落ちている。
その人材が生産性の高い人に育つ、という前提なのだが…
**********
積み木は三歳児でも使えるが、作るには職人技が必要である。
英文法は理解しているが英会話はできない。
・・・
2011年4月20日水曜日
MPMusicPlayerControllerの注意点
iPodライブラリの再生で使うMPMusicPlayerControllerにはバグっぽい注意点がある。
停止させた時のステータスが、
iPhoneではMPMusicPlaybackStateInterrupted
iPadではMPMusicPlaybackStatePaused
と異なっている。
いずれもiOS4.3だけど、iPadの方が正しい気がする。
停止させた時のステータスが、
iPhoneではMPMusicPlaybackStateInterrupted
iPadではMPMusicPlaybackStatePaused
と異なっている。
いずれもiOS4.3だけど、iPadの方が正しい気がする。
2011年3月17日木曜日
iOSでの印刷
大雑把に次の2つの手順となる。
1.UIPrintInteractionControllerを起動する。
2.UIPrintPageRenderer のサブクラスで印刷処理をする。
【1.について】
イベント発生時(通常はメニュー選択)に呼び出される関数を作成する。
- (IBAction)printPage:(id)sender
{
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(!completed && error){
NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
}
};
// UIPrintInfo の作成
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = [NSString stringWithFormat: @"job title"];
printInfo.duplex = UIPrintInfoDuplexLongEdge;// 両面印刷
printInfo.orientation = m2pView.frame.size.width < m2pView.frame.size.height ?
UIPrintInfoOrientationPortrait : UIPrintInfoOrientationLandscape;// 用紙方向を画面の方向と同じする
controller.printInfo = printInfo;
controller.showsPageRange = YES;// 複数ページ
// UIPrintPageRendererのサブクラスを作成
MyPrintPageRenderer *myRenderer = [[MyPrintPageRenderer alloc] init];
myRenderer.jobTitle = printInfo.jobName;
myRenderer.m2pView = m2pView;//描画用のコントロールを渡しておく
controller.delegate = myRenderer;//印刷時のdelegate関数はMyPrintPageRendererに記述
// ビューフォーマッターとやらの定義も必要らしい
UIViewPrintFormatter *viewFormatter;
viewFormatter = [self.m2pView viewPrintFormatter];
[myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
controller.printPageRenderer = myRenderer;
[myRenderer release];
// 印刷ダイアログ表示(印刷ボタンを押せばMyPrintPageRendererのdelegate関数が呼ばれる)
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[controller presentFromBarButtonItem:bbiPrint animated:YES completionHandler:completionHandler]; // iPad
else
[controller presentAnimated:YES completionHandler:completionHandler]; // iPhone
}
【2.について】
Appleが提供するサンプルコードのMyPrintPageRenderer.mがほぼ流用できる。
印刷領域は、ヘッダー・コンテンツ・フッターの上中下3分割となっている。
以下をページ単位に描画すればOK.
- (void)drawHeaderForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)headerRect;
- (void)drawContentForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)contentRect;
- (void)drawFooterForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)footerRect;
1.UIPrintInteractionControllerを起動する。
2.UIPrintPageRenderer のサブクラスで印刷処理をする。
【1.について】
イベント発生時(通常はメニュー選択)に呼び出される関数を作成する。
- (IBAction)printPage:(id)sender
{
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(!completed && error){
NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
}
};
// UIPrintInfo の作成
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = [NSString stringWithFormat: @"job title"];
printInfo.duplex = UIPrintInfoDuplexLongEdge;// 両面印刷
printInfo.orientation = m2pView.frame.size.width < m2pView.frame.size.height ?
UIPrintInfoOrientationPortrait : UIPrintInfoOrientationLandscape;// 用紙方向を画面の方向と同じする
controller.printInfo = printInfo;
controller.showsPageRange = YES;// 複数ページ
// UIPrintPageRendererのサブクラスを作成
MyPrintPageRenderer *myRenderer = [[MyPrintPageRenderer alloc] init];
myRenderer.jobTitle = printInfo.jobName;
myRenderer.m2pView = m2pView;//描画用のコントロールを渡しておく
controller.delegate = myRenderer;//印刷時のdelegate関数はMyPrintPageRendererに記述
// ビューフォーマッターとやらの定義も必要らしい
UIViewPrintFormatter *viewFormatter;
viewFormatter = [self.m2pView viewPrintFormatter];
[myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
controller.printPageRenderer = myRenderer;
[myRenderer release];
// 印刷ダイアログ表示(印刷ボタンを押せばMyPrintPageRendererのdelegate関数が呼ばれる)
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[controller presentFromBarButtonItem:bbiPrint animated:YES completionHandler:completionHandler]; // iPad
else
[controller presentAnimated:YES completionHandler:completionHandler]; // iPhone
}
【2.について】
Appleが提供するサンプルコードのMyPrintPageRenderer.mがほぼ流用できる。
印刷領域は、ヘッダー・コンテンツ・フッターの上中下3分割となっている。
以下をページ単位に描画すればOK.
- (void)drawHeaderForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)headerRect;
- (void)drawContentForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)contentRect;
- (void)drawFooterForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)footerRect;
2011年3月6日日曜日
人月という単位はそれを理解出来ない人に対して使われる
一人で一ヶ月かかる作業は10人ですれば3日でできる。
ベテラン1人月と素人1人月は同じ作業量である。
論理的に反論出来ない人を押さえ付けるには便利な言葉である。
(追記)
プログラマーの場合、1人月の個人差が大きく、給与の比では収まらない。
数学の試験で直ぐに解答してしまう人もいれば、
一生かかっても解けない人がいるのと同じである。
ベテラン1人月と素人1人月は同じ作業量である。
論理的に反論出来ない人を押さえ付けるには便利な言葉である。
(追記)
プログラマーの場合、1人月の個人差が大きく、給与の比では収まらない。
数学の試験で直ぐに解答してしまう人もいれば、
一生かかっても解けない人がいるのと同じである。
登録:
投稿 (Atom)