リセット云々の原因はどうも無線LANと繋がりづらくなることのようだ。iPad2そのものが固まってしまうわけではなさそう。
iMacでもスリープ解除後、無線ルータを探し出せず毎度毎度30秒くらい待たされるので、その辺りが原因かと。
無線ルータはbuffaloのWHR-HP-G300N、けっこう新しいブツなんだけど・・・。要調査、ということで。
2011年5月18日水曜日
Cocoa FileManager NSOutlineView調査中
OutlineViewのselectedRowは、選択行がない場合(たとえばディレクトリを閉じた場合は選択行なくなる)は-1を返す。
このチェックをしていなかったのがまず昨日のエラーの第一の原因。nibファイルのSelection項目から「Empty」のチェックをはずせば、「閉じたディレクトリ」が自動的に選択行になるためこれで対処してもいい。(1つ問題が残るけど)
問題というのはなぜか起動時にrootまで選択されてしまうこと。これはまあなんとかなりそうな予感はする。
それよりもなによりも、「/」を閉じようとすると相変わらずアプリが落ちる。これについてはまだ追跡中。OutlineViewのitemになるクラスに問題がある、みたい。
なかなかbugの原因がわからずいらついてしまう。さらに深く追求するぞ。意外とアホみたいな原因だったりするかなあ。
このチェックをしていなかったのがまず昨日のエラーの第一の原因。nibファイルのSelection項目から「Empty」のチェックをはずせば、「閉じたディレクトリ」が自動的に選択行になるためこれで対処してもいい。(1つ問題が残るけど)
問題というのはなぜか起動時にrootまで選択されてしまうこと。これはまあなんとかなりそうな予感はする。
それよりもなによりも、「/」を閉じようとすると相変わらずアプリが落ちる。これについてはまだ追跡中。OutlineViewのitemになるクラスに問題がある、みたい。
なかなかbugの原因がわからずいらついてしまう。さらに深く追求するぞ。意外とアホみたいな原因だったりするかなあ。
2011年5月17日火曜日
iPad2 けっこう頻繁にリセットする
今のところはっきりした原因はわからないものの、動作が不安定になることがけっこうある。
例えばネットがらみのアプリが新しいウィンドウ(ページ?)を開こうとして、いきなり落ちる。
MUJIのカレンダーが更新に失敗する。
天気予報アプリが更新できない。
こういった症状の時はリセットしないといけないようだ。
また、たくさんのアプリを起動しておくと、強制リセットがかかることもあるみたい。
こういう面ではiPhoneのほうが安定していると今のところ感じているが、私はiPhoneのヘビーユーザではないので、iOSに共通の症状なのかもしれない。
異常に快適な時と異常に不安定な時の症状の切り分けができないのがちょっと残念。とりあえずアプリはこまめに終了したほうがいいようだ。
例えばネットがらみのアプリが新しいウィンドウ(ページ?)を開こうとして、いきなり落ちる。
MUJIのカレンダーが更新に失敗する。
天気予報アプリが更新できない。
こういった症状の時はリセットしないといけないようだ。
また、たくさんのアプリを起動しておくと、強制リセットがかかることもあるみたい。
こういう面ではiPhoneのほうが安定していると今のところ感じているが、私はiPhoneのヘビーユーザではないので、iOSに共通の症状なのかもしれない。
異常に快適な時と異常に不安定な時の症状の切り分けができないのがちょっと残念。とりあえずアプリはこまめに終了したほうがいいようだ。
Cocoa FileManager NSOutlineViewをさらに調べる
前回起動時の「Tabに表示していたディレクトリ」を、次回起動時に復元する、という作業をしている。
最後に表示していたTabの数は簡単に保存できるし復元もできる。Tabのタイトルから表示ディレクトリを復元するところであたふたしている。
私の場合は、ファイルマネージャなら前回終了した時と同じ状態で使い始めたい。この辺も好みだろうから、UserDefaultsで設定できるようにするべきだろうな。
とりあえずUserDefaultsから前回表示していたディレクトリ名を取得して、そのディレクトリをOutlineViewで選択状態にしたい。
NSOutlineViewは素人にとってはけっこう難物で、たとえば「/」だけを表示しているときは行番号0しか受け付けてくれない。「/」を展開した状態にしないと、例えば「/Applications」の行番号を取得しようとしても「-1」しか返してこない。現在表示している行数を常に意識しないといけないようだ。
そんなんで本日も短い時間ながらあれこれやって表示ディレクトの復元に挑戦中。
一応はできたのだけれど、
こういう状態から「/」を折りたたもうとするとエラーになって落ちてしまう。まだまだ研究しないといけないようだ。
最後に表示していたTabの数は簡単に保存できるし復元もできる。Tabのタイトルから表示ディレクトリを復元するところであたふたしている。
私の場合は、ファイルマネージャなら前回終了した時と同じ状態で使い始めたい。この辺も好みだろうから、UserDefaultsで設定できるようにするべきだろうな。
とりあえずUserDefaultsから前回表示していたディレクトリ名を取得して、そのディレクトリをOutlineViewで選択状態にしたい。
NSOutlineViewは素人にとってはけっこう難物で、たとえば「/」だけを表示しているときは行番号0しか受け付けてくれない。「/」を展開した状態にしないと、例えば「/Applications」の行番号を取得しようとしても「-1」しか返してこない。現在表示している行数を常に意識しないといけないようだ。
そんなんで本日も短い時間ながらあれこれやって表示ディレクトの復元に挑戦中。
一応はできたのだけれど、
こういう状態から「/」を折りたたもうとするとエラーになって落ちてしまう。まだまだ研究しないといけないようだ。
2011年5月16日月曜日
iPad2 家族で共有する
リビング用ネット閲覧デバイスであるから、家族全員でiPad2を使い始めた。
要は、お母ちゃんがあまりにもパソコンとかネットとかに弱いので、少しは興味と関心と技能を持たせて、時代に取り残されないようにしよう、というねらい。娘たちはiPhoneユーザでもあるのでiPad2への抵抗感は全く無く、「液晶が大きくて使いやすい」と大喜びをしている。
実際、iPad2の大きい液晶、てきぱきとした動作を経験すると、初代iPhoneであれこれするのがアホらしくなりますわな。(私はあれこれしてないけど(^^;))
ただ、家族全員で使うとなると、twitterやらFaceBookはどうするか、とか、いろいろ問題も出てくる。safari以外のブラウザをいくつか入れて、自分専用のブラウザを決めちゃおうか、とか、twitterクライアントを切り分けようか、とか。
自分用に1台、家族用に1台、なんて話をよく見かけるけど、こういうことなのね。
私の場合はXcodeを使うという大目的があるのでiMacを使わなくなるということはありえないけど、iPad2があったらパソコンを起動している時間が短くなるというのもうなずける楽しさが、たしかにある。
要は、お母ちゃんがあまりにもパソコンとかネットとかに弱いので、少しは興味と関心と技能を持たせて、時代に取り残されないようにしよう、というねらい。娘たちはiPhoneユーザでもあるのでiPad2への抵抗感は全く無く、「液晶が大きくて使いやすい」と大喜びをしている。
実際、iPad2の大きい液晶、てきぱきとした動作を経験すると、初代iPhoneであれこれするのがアホらしくなりますわな。(私はあれこれしてないけど(^^;))
ただ、家族全員で使うとなると、twitterやらFaceBookはどうするか、とか、いろいろ問題も出てくる。safari以外のブラウザをいくつか入れて、自分専用のブラウザを決めちゃおうか、とか、twitterクライアントを切り分けようか、とか。
自分用に1台、家族用に1台、なんて話をよく見かけるけど、こういうことなのね。
私の場合はXcodeを使うという大目的があるのでiMacを使わなくなるということはありえないけど、iPad2があったらパソコンを起動している時間が短くなるというのもうなずける楽しさが、たしかにある。
Cocoa FileManager UserDefaultsを調べ始める
かなり順序が逆転しているような気もするが、「Tabで表示中のディレクトリをUserDefaultsに保存する」、「次回起動時にそれを復元してtabを開く」という機能を考える。
とりあえずtabは「rootディレクトリ」で開いておけばいいや、と気軽にやっていたので、ここにきて苦労している。
たいした機能もないくせに、いたずらにViewとかControllerとかをたくさん使っているため、OutlineViewで選択されたディレクトリをTabのタイトルとして表示したり、TabのタイトルからOutlineViewの選択行を復元したり、としようとした時、どのControllerにどんなオブジェクトを渡していくか、常に困っている気がする。
今のところのClass構成はこんな感じ。
ネーミングのセンスないなあ、とがっくりくるけれど仕方がない。各クラスの機能を持たせ方とか、やっぱり自分でコード書いたり、人のコード読んだりしていく中でバランス感覚を学ぶしかないのだろう。
本日は「現在表示中のTabの、ディレクトリ名をUserDefaultsに保存する」ことだけやってみた。
これだけかい?という。(^^;)
tabsTitleはNSArrayで各Tabのタイトル(の元になっているディレクトリ名のフルパス)を返すメソッド。こんな感じ。
NSArrayを保存するのは初めてなのでうまくいってちょっとうれしかった。
現在はNSStringをaddObjectしているが、これを様々な情報をつめこんだNSDictionaryにしていく、と。このあたり、ちゃんとやったことないのでなかなか勉強が進まない。荻原本を読んでいる時間が長くなっている。
UserDefaultsって、環境設定でしかいじったことなかったからなあ。
とりあえずtabは「rootディレクトリ」で開いておけばいいや、と気軽にやっていたので、ここにきて苦労している。
たいした機能もないくせに、いたずらにViewとかControllerとかをたくさん使っているため、OutlineViewで選択されたディレクトリをTabのタイトルとして表示したり、TabのタイトルからOutlineViewの選択行を復元したり、としようとした時、どのControllerにどんなオブジェクトを渡していくか、常に困っている気がする。
今のところのClass構成はこんな感じ。
ネーミングのセンスないなあ、とがっくりくるけれど仕方がない。各クラスの機能を持たせ方とか、やっぱり自分でコード書いたり、人のコード読んだりしていく中でバランス感覚を学ぶしかないのだろう。
本日は「現在表示中のTabの、ディレクトリ名をUserDefaultsに保存する」ことだけやってみた。
[[NSUserDefaults standardUserDefaults] setInteger:[tabBar tabsCount] forKey:@"TabsCount"]; [[NSUserDefaults standardUserDefaults] setObject:[tabBar tabsTitle] forKey:@"TabsTitle"];
これだけかい?という。(^^;)
tabsTitleはNSArrayで各Tabのタイトル(の元になっているディレクトリ名のフルパス)を返すメソッド。こんな感じ。
-(NSArray*)tabsTitle{
NSMutableArray *titleArray=[NSMutableArray array];
NSArray* tabs=[self subviews];
for (NSInteger i=0; i<[tabs count]; i++) {
Tab* tab=[tabs objectAtIndex:i];
[titleArray addObject:[tab title]];
}
return [[[NSArray alloc]initWithArray:titleArray]autorelease];
}
NSArrayを保存するのは初めてなのでうまくいってちょっとうれしかった。
現在はNSStringをaddObjectしているが、これを様々な情報をつめこんだNSDictionaryにしていく、と。このあたり、ちゃんとやったことないのでなかなか勉強が進まない。荻原本を読んでいる時間が長くなっている。
UserDefaultsって、環境設定でしかいじったことなかったからなあ。
2011年5月15日日曜日
Cocoa FileManager Tabのタイトル文字列変更
iPad2が到着しても、Cocoaプログラミングは全く飽きていない。おもしろいなあ、とつくづく思う。
Tabのタイトル文字列をやっと変更できるようにした。現在選択しているディレクトリをタイトルとして表示できるのが当たり前だが、それをどうやってやるか1日あれこれ試していた。その成果。
これに手をつけていなかったのは、「OutlineViewでディレクトリを選択」→「TableViewにそのディレクトリの中身を表示」、「TableViewでディレクトリをダブルクリック」→「OutlineViewでそのディレクトリをアクティブなRowにする」という動作ができたら、と思っていたから。独自Viewで一度やっていたけれど、Tabに手を付ける前に独自Viewの描画の遅いことに気づいた、と。
そんなんでやっとTabのタイトルが表示できたので、それをUserDefaultで記録する方法を考えている。
保存したいのは、Tabごとに
1,選択ディレクトリ名
2,tabのindex・・・これはいらないかも
3,OutlineViewのRect
4,OutlineViewの展開状態(・・・いらない?)
5,SplitViewのスプリッタの位置(3があればいらないか?)
6,TableViewの各コラムの幅
7,TableViewの選択行
左側のペインは今後「お気に入り」を格納したOutlineViewを増やすかもしれず、右側のペインにはCollectionViewを増やすかもしれず、当然それらの選択状態も保存したい。
Tabがなければあまり悩まないところだが・・・。もう少し勉強が必要。ドキュメントベースアプリケーションだとWindow毎に保存しているのかなあ。
Tabのタイトル文字列をやっと変更できるようにした。現在選択しているディレクトリをタイトルとして表示できるのが当たり前だが、それをどうやってやるか1日あれこれ試していた。その成果。
これに手をつけていなかったのは、「OutlineViewでディレクトリを選択」→「TableViewにそのディレクトリの中身を表示」、「TableViewでディレクトリをダブルクリック」→「OutlineViewでそのディレクトリをアクティブなRowにする」という動作ができたら、と思っていたから。独自Viewで一度やっていたけれど、Tabに手を付ける前に独自Viewの描画の遅いことに気づいた、と。
そんなんでやっとTabのタイトルが表示できたので、それをUserDefaultで記録する方法を考えている。
保存したいのは、Tabごとに
1,選択ディレクトリ名
2,tabのindex・・・これはいらないかも
3,OutlineViewのRect
4,OutlineViewの展開状態(・・・いらない?)
5,SplitViewのスプリッタの位置(3があればいらないか?)
6,TableViewの各コラムの幅
7,TableViewの選択行
左側のペインは今後「お気に入り」を格納したOutlineViewを増やすかもしれず、右側のペインにはCollectionViewを増やすかもしれず、当然それらの選択状態も保存したい。
Tabがなければあまり悩まないところだが・・・。もう少し勉強が必要。ドキュメントベースアプリケーションだとWindow毎に保存しているのかなあ。
memo:iPad2に早速インストールしたapp
リビング用ネット閲覧デバイス、としてiPad2を購入した。
本日の午前中、ネットのあちこちでよさそうなアプリを探してみて、とりあえずインストールしたのは次の4つ。
EverNoteにはネットでみかけてよさそうなレシピとかたくさんいれているので。
新聞の天気予報より速報性が高くて便利そうなのでいれてみた。
iPad2はiTunesでアプリ入れるより、iPad2上でそのままインストールしたほうがいいみたい。だから(失礼ながら)このアプリ、予想していたよりずっと便利だということが、少し使ってみたわかった。
ネットで探しだしたレシピを確認するのにいちいちiMac起動していた。しかしこのアプリのおかげでレシピ関係はOKみたい。
あとは本体を起動してネットにつないで、AppStoreを起動したらiBookいる?と素直にインストールした。
買ったのは16G版。音楽やムービーは同期しないつもりなので、アプリだけなら容量は大丈夫かなあ。
ちょっとずつ使っていこう。
ざっと使った感じでは、
1,非常にサクサク動く(本当に気持よく動く)
2,きれいな液晶
3,テーブルに置いたり、カバーをスタンド替わりにして使っても見やすい
ただ、初回起動時から何度かリセットがかかっている。「ゲームセンター」はタップしたら必ずリセット。なんなんでしょ。
本日の午前中、ネットのあちこちでよさそうなアプリを探してみて、とりあえずインストールしたのは次の4つ。
EverNoteにはネットでみかけてよさそうなレシピとかたくさんいれているので。
新聞の天気予報より速報性が高くて便利そうなのでいれてみた。
iPad2はiTunesでアプリ入れるより、iPad2上でそのままインストールしたほうがいいみたい。だから(失礼ながら)このアプリ、予想していたよりずっと便利だということが、少し使ってみたわかった。
ネットで探しだしたレシピを確認するのにいちいちiMac起動していた。しかしこのアプリのおかげでレシピ関係はOKみたい。
あとは本体を起動してネットにつないで、AppStoreを起動したらiBookいる?と素直にインストールした。
買ったのは16G版。音楽やムービーは同期しないつもりなので、アプリだけなら容量は大丈夫かなあ。
ちょっとずつ使っていこう。
ざっと使った感じでは、
1,非常にサクサク動く(本当に気持よく動く)
2,きれいな液晶
3,テーブルに置いたり、カバーをスタンド替わりにして使っても見やすい
ただ、初回起動時から何度かリセットがかかっている。「ゲームセンター」はタップしたら必ずリセット。なんなんでしょ。
iPad2 届く
本日昼前に届いた。
2週間ちょい、かかったことになるが、人気商品ということなので仕方ないとしよう。
13日の夕方、東京を出発したiPad2は、2日後の15日早朝には私の住む街の営業所に届いていたみたい。震災の影響はもうないようだ。
営業所は自宅のすぐそばなので、昼休み直前に配送されたようだ。(^^;)
2週間ちょい、かかったことになるが、人気商品ということなので仕方ないとしよう。
13日の夕方、東京を出発したiPad2は、2日後の15日早朝には私の住む街の営業所に届いていたみたい。震災の影響はもうないようだ。
営業所は自宅のすぐそばなので、昼休み直前に配送されたようだ。(^^;)
2011年5月14日土曜日
iPad2 東京に着いてそれから
14日夜の段階で、配送状況はこうなってますな。
昨日の午後6時近くに東京を出て、今はどこにあるのかな。
北海道なんで、これはひょっとすると月曜日になるかも。できれば明日だと時間の余裕があってありがたいんだけど。
昨日の午後6時近くに東京を出て、今はどこにあるのかな。
北海道なんで、これはひょっとすると月曜日になるかも。できれば明日だと時間の余裕があってありがたいんだけど。
FileManager NSTableViewのダブルクリック
ファイル表示をNSTableViwに切り替えた。今まで作っていた実験用プロジェクトがごちゃごちゃになってきたので、新たに実験用プロジェクトを作った・・・わけだが、今までつくってきたクラスを流用するのに「プロジェクトにファイルを追加」した時、今回に限って「ファイルをコピーする」チェックボックスにチェックを入れるのを忘れたため、元ファイルがそのままプロジェクトに追加されてしまった。
それを気づかずにあれこれいじって、変更したくないはずのファイルにまで変更を加えてしまった。で、さらに新しいプロジェクトを作ったりして余計な時間がかかってしまった。ま、お休みだからいいけど。
そんなんで現在の状態。
cocoa bindingは楽でいいなあ。本日初めて知ったのだが、propaty宣言はメソッドでも全然OKだった。こんなことも知らなかったなんて・・・。自分でがっかり。
後日の自分のために書いておくと、
-(NSString*)name
というメソッドは
@propaty NSString* name
と宣言できる、と。メンバ変数しかpropatyにできないのは不便だよなあ、と思って
荻原本を読み返したらちゃんと書いてあった。がっくり。
本日はこの状態から、TableViewのダブルクリックを拾うところまで。デベロッパドキュメントを読むと
[tableView setDoubleAction:@selector(mouseDoubleClicked:)];
でいいみたいなんだけど、全然ダブルクリックが拾えず首をかしげるばかり。bindingのDouble click Targetをいじったら拾えるようになったけど、[tableView clickedRow]でクリックされた行が渡ってこない。
うーん、と腕組みしながらあちこちググったところ、
[tableView setTarget:self];
が必要だった。orzこれまたがっくり。基本的なことがまだまだわかっていないので苦労する。
そんなんで本日は「ファイルなら実行」まではなんとか実装できた。明日はディレクトリの時の処理をやってしまおう。
それから今まで腰が引けて避けてきたUserDefaultでのTabの状態の保存と復帰、という予定。どこまでできるかなあ。
それを気づかずにあれこれいじって、変更したくないはずのファイルにまで変更を加えてしまった。で、さらに新しいプロジェクトを作ったりして余計な時間がかかってしまった。ま、お休みだからいいけど。
そんなんで現在の状態。
cocoa bindingは楽でいいなあ。本日初めて知ったのだが、propaty宣言はメソッドでも全然OKだった。こんなことも知らなかったなんて・・・。自分でがっかり。
後日の自分のために書いておくと、
-(NSString*)name
というメソッドは
@propaty NSString* name
と宣言できる、と。メンバ変数しかpropatyにできないのは不便だよなあ、と思って
詳解 Objective-C 2.0 改訂版
posted with amazlet at 11.05.14
荻原 剛志
ソフトバンククリエイティブ
売り上げランキング: 5721
ソフトバンククリエイティブ
売り上げランキング: 5721
本日はこの状態から、TableViewのダブルクリックを拾うところまで。デベロッパドキュメントを読むと
[tableView setDoubleAction:@selector(mouseDoubleClicked:)];
でいいみたいなんだけど、全然ダブルクリックが拾えず首をかしげるばかり。bindingのDouble click Targetをいじったら拾えるようになったけど、[tableView clickedRow]でクリックされた行が渡ってこない。
うーん、と腕組みしながらあちこちググったところ、
[tableView setTarget:self];
が必要だった。orzこれまたがっくり。基本的なことがまだまだわかっていないので苦労する。
そんなんで本日は「ファイルなら実行」まではなんとか実装できた。明日はディレクトリの時の処理をやってしまおう。
それから今まで腰が引けて避けてきたUserDefaultでのTabの状態の保存と復帰、という予定。どこまでできるかなあ。
2011年5月12日木曜日
Cocoa Controls
本日は夜にPTAの会議のため長らく学校にいた。夕方、仕事が一段落したのでCocoa関係をいろいろググってみる。(もちろん勤務時間はとっくに終わった後であります)
で、とあるblogで教えてもらったのが
Cocoa Controls
検索してもiOSの方が情報多いですが、カスタムコントロールもiOS優勢なようで。数は少ないながら、OSX用のカスタムコントロールやカスタムUIが紹介されている貴重なサイト。
ここで
SFTabView
というカスタムTabをみつけてしまった。Layer使っているようだ。うーん、勉強になりそう。
他にも自分で作るよりずっと便利で使いやすそうなViewがいくつかあって、こんどのお休みに集中していじってみようかなあ、と思う次第。
本日は結局9時近くに帰宅して、Xcodeもサンプルプロジェクトを走らせるのが精一杯というところ。ま、こんな日もあるさ。
で、とあるblogで教えてもらったのが
Cocoa Controls
検索してもiOSの方が情報多いですが、カスタムコントロールもiOS優勢なようで。数は少ないながら、OSX用のカスタムコントロールやカスタムUIが紹介されている貴重なサイト。
ここで
SFTabView
というカスタムTabをみつけてしまった。Layer使っているようだ。うーん、勉強になりそう。
他にも自分で作るよりずっと便利で使いやすそうなViewがいくつかあって、こんどのお休みに集中していじってみようかなあ、と思う次第。
本日は結局9時近くに帰宅して、Xcodeもサンプルプロジェクトを走らせるのが精一杯というところ。ま、こんな日もあるさ。
BCCollectionView
BCCollectionViewのサンプルプロジェクトをGitHubで公開してくれている親切な人がいた。
ざっとコードを眺めてからビルドしてみたところ、たしかに軽快に動く。
コードはほぼこれだけ。
Icon表示はこのViewのお世話になる可能性が高いな。
aaronbrethorst / BCCollectionView
ざっとコードを眺めてからビルドしてみたところ、たしかに軽快に動く。
コードはほぼこれだけ。
- (NSSize)cellSizeForCollectionView:(BCCollectionView *)collectionView
{
return NSMakeSize(64, 64);
}
//Return an empty ViewController, this might not be visible to the user immediately
- (NSViewController *)reusableViewControllerForCollectionView:(BCCollectionView *)collectionView
{
return [[[CellViewController alloc] init] autorelease];
}
//The CollectionView is about to display the ViewController. Use this method to populate the ViewController with data
- (void)collectionView:(BCCollectionView *)collectionView willShowViewController:(NSViewController *)viewController forItem:(id)anItem
{
CellViewController *cell = (CellViewController*)viewController;
[cell.imageView setImage:anItem];
}
デリゲートが3つ、その他に表示のようImageを収納するArrayを生成しているくらい。これだけで動くんだからいじってみる価値はありとみた。Icon表示はこのViewのお世話になる可能性が高いな。
2011年5月11日水曜日
FileManager 独自Viewはおあずけ
以前、OutlineViewの勉強のために作ったプロジェクトは、右側のペインにNSTableViewとNSCollectionViewを表示できるようにしてあったので、本日改めていじってみた。
どちらのViewも/usr/bin以下の1000ファイルを楽々と表示する。やはりあらかじめ用意されているGUIの方がいいか。
GitHubでObjCでプロジェクトを検索してみたところ、
ということで、こちらも使いこなせるか試してみようと思う。
ざっとソースを眺めたら、やっぱりこの手のViewを独自に作るのはまだまだ私には荷が重い、と判断せざるをえない。知らないことが多すぎる。
ただ、あきらめたらそこで試合終了なので、あくまでも独自Viewによるファイル表示は挑戦し続けるつもり。サイコーに楽しい頭の体操なので。
これでふんぎりがついたので、明日からまずNSTableViewを試していこう。もうbinding忘れてるし。(^^;)
それやこれやを調べているうちに、本日も終了。1日が短い。明日は夜にPTAの会議があるから、もっと勤務時間の長い1日になるなあ。
どちらのViewも/usr/bin以下の1000ファイルを楽々と表示する。やはりあらかじめ用意されているGUIの方がいいか。
GitHubでObjCでプロジェクトを検索してみたところ、
BCCollectionViewというプロジェクトを見つけた。ReadMeによると
BCCollectionView is intended as a replacement for NSCollectionView (and possibly IKImageBrowserView). It is designed to work with a lot of items and only loads the views that it actually needs.
Unlike NSCollectionView, BCCollectionView smoothly displays 300.000+ items.
Every 'cell' in an BCCollectionView is an NSViewController. At the moment these are only uniform; every cell is supposed to be the same NSViewController subclass.
ということで、こちらも使いこなせるか試してみようと思う。
ざっとソースを眺めたら、やっぱりこの手のViewを独自に作るのはまだまだ私には荷が重い、と判断せざるをえない。知らないことが多すぎる。
ただ、あきらめたらそこで試合終了なので、あくまでも独自Viewによるファイル表示は挑戦し続けるつもり。サイコーに楽しい頭の体操なので。
これでふんぎりがついたので、明日からまずNSTableViewを試していこう。もうbinding忘れてるし。(^^;)
それやこれやを調べているうちに、本日も終了。1日が短い。明日は夜にPTAの会議があるから、もっと勤務時間の長い1日になるなあ。
2011年5月10日火曜日
iPad2発送
iPad2、午後9時過ぎに発送のメールが届いていた。注文は4月29日なので、11日後の発送ですな。当初1〜2週間、という予定で、実際の注文受付メールでの発送予定は5月19日。ま、まあまあの早さということか。
ただ荷物到着予定が18日なんだな。(^^;)あまりにも時間がかかりすぎるようなので「配送状況の確認」のリンクをたどったところ、本日、ヤマトは中国は深センで「海外荷物受付」をしたらしい。
ほうほう、これがいつ、どのような経路で我が家まで着くのか興味津々でありますな。国内での受付なら順当にいって13日金曜日あたりで届くはずだけど、中国から来るならもう何日か余分にかかりそう。
いずれにしても楽しみだ。
ただ荷物到着予定が18日なんだな。(^^;)あまりにも時間がかかりすぎるようなので「配送状況の確認」のリンクをたどったところ、本日、ヤマトは中国は深センで「海外荷物受付」をしたらしい。
ほうほう、これがいつ、どのような経路で我が家まで着くのか興味津々でありますな。国内での受付なら順当にいって13日金曜日あたりで届くはずだけど、中国から来るならもう何日か余分にかかりそう。
いずれにしても楽しみだ。
FileManager 非アクティブ時の表示
Xcode4なら、アプリがアクティブな時はこういう表示になる。
これがフォーカスを失うと、こう表示される。
ToolBarやらTabやら、全部白っぽくなって「私は非アクティブ」とわかるようになっている。
自分でUI部品を作るとこの挙動も自分でコーディングしないといけない。でもまだ手を抜いているので、現在のプロジェクトだと非アクティブ時はこうなってしまう。
Tabと、その下の(これからつくろうとしている)NavigateViewがアクティブ時と同じ色でなので非常にカッコ悪い。
NavigateViewは「ディレクトリを1つ上に移動」とか「戻る」とか「進む」とかのボタンを表示しようとしている「簡易ToolBar」もどき。
このViewをつくり始めて、非アクティブ時の表示についてちょっと作業してみた。
NSAppが非アクティブになる時にNSApplicationWillResignActiveNotification、アクティブになる時にはNSApplicationWillBecomeActiveNotificationというNotificationを通知するので、それをObserveして表示を切り替えてみた。
@selector内で[NSApp isActive]をチェックしてみたけれどうまく判定できないようなので、appIsActiveみたいなインチキメンバを作っておき、それをdrawRectでチェックするようにしてみたらうまくいった。
うまくいったんだけど、これってNSAppのデリゲートになればいいだけの話ですな。UI部品になるクラスは、みんなアプリケーションのデリゲートになっているのかなあ。
というわけで、まだ手をつけていないTabの「非アクティブ時の表示」はNSAppのデリゲートになってやってみる予定。こうやってちょっとずつフレームワークの知識が増えていくのが、プログラミングの面白さでしょうか。
これがフォーカスを失うと、こう表示される。
ToolBarやらTabやら、全部白っぽくなって「私は非アクティブ」とわかるようになっている。
自分でUI部品を作るとこの挙動も自分でコーディングしないといけない。でもまだ手を抜いているので、現在のプロジェクトだと非アクティブ時はこうなってしまう。
Tabと、その下の(これからつくろうとしている)NavigateViewがアクティブ時と同じ色でなので非常にカッコ悪い。
NavigateViewは「ディレクトリを1つ上に移動」とか「戻る」とか「進む」とかのボタンを表示しようとしている「簡易ToolBar」もどき。
このViewをつくり始めて、非アクティブ時の表示についてちょっと作業してみた。
NSAppが非アクティブになる時にNSApplicationWillResignActiveNotification、アクティブになる時にはNSApplicationWillBecomeActiveNotificationというNotificationを通知するので、それをObserveして表示を切り替えてみた。
@selector内で[NSApp isActive]をチェックしてみたけれどうまく判定できないようなので、appIsActiveみたいなインチキメンバを作っておき、それをdrawRectでチェックするようにしてみたらうまくいった。
うまくいったんだけど、これってNSAppのデリゲートになればいいだけの話ですな。UI部品になるクラスは、みんなアプリケーションのデリゲートになっているのかなあ。
というわけで、まだ手をつけていないTabの「非アクティブ時の表示」はNSAppのデリゲートになってやってみる予定。こうやってちょっとずつフレームワークの知識が増えていくのが、プログラミングの面白さでしょうか。
FileManager 画面描画が遅い
ファイルのダブルクリックについて調べているうち、/usr/bin以下を表示させると動作がおかしくなることを発見。
このディレクトリには1000くらいのファイルが置かれているせいらしい。1000くらいのオーダーでだめになるなら、とてもファイルマネージャとは呼べない。
現在のFileCellのdrawRectはこうなっている。(恥を忍んで公開、ということで)
これで1000個のファイルがあると、縦に20行表示できるとしたら横の桁は単純に計算して50桁。Viewのframeは350×50で17500ピクセルの横幅(^^;)。
drawRectが呼ばれるたびにこれだけの大きさのViewを描画していたら、そりゃおそくもなるわな。
- (void)drawRect:(NSRect)dirtyRectのdirtyRectだけを描画するようにするか、clipViewの大きさで表示できるだけのCellを描画するようにするか、表示を「ページ」単位にして(もちろんページの大きさの計算は自分でやらないといけない)してしまうか。
Viewの表示の高速化はGUIプログラミングの肝だから、たくさんのサンプルがあちこちころがっている気もするが・・・。当面、「描画の高速化」を研究することになりそうだ。
NSTableViewを使うことにすればこういう問題からは解放されるんだろうなあ、と耳許で囁く声もきこえるぞ。(^^;)
このディレクトリには1000くらいのファイルが置かれているせいらしい。1000くらいのオーダーでだめになるなら、とてもファイルマネージャとは呼べない。
現在のFileCellのdrawRectはこうなっている。(恥を忍んで公開、ということで)
NSRect rect=[self bounds];
NSPoint point;
point=NSMakePoint(CONTENT_CELL_LEFT_MARGINE, rect.size.height-CONTENT_CELL_HEIGHT);
for (NSInteger i=0; i<[contentFileArray count]; i++) {
FileCell* cell=[contentFileArray objectAtIndex:i];
NSRect cellFrameRect=NSMakeRect(point.x, point.y,maxCellSize.width,maxCellSize.height);
[cell drawWithFrame:cellFrameRect inView:self];
point.y-=maxCellSize.height;
if (point.y<0) {
point.y=rect.size.height-maxCellSize.height;
point.x+=maxCellSize.width+CONTENT_CELL_CENTER_MARGINE+CONTENT_CELL_LEFT_MARGINE;
}
}
非常にシンプルというか簡単すぎるというか。ファイル(を収めたCell)がいくらあっても、単純に「縦に最大行数まで表示したら、あらかじめ設定してあるCellの幅+マージン分、CellのFrameのorigin.xをずらす」とやっているだけ。現在Cellの幅は決め打ちで350ピクセル。これで1000個のファイルがあると、縦に20行表示できるとしたら横の桁は単純に計算して50桁。Viewのframeは350×50で17500ピクセルの横幅(^^;)。
drawRectが呼ばれるたびにこれだけの大きさのViewを描画していたら、そりゃおそくもなるわな。
- (void)drawRect:(NSRect)dirtyRectのdirtyRectだけを描画するようにするか、clipViewの大きさで表示できるだけのCellを描画するようにするか、表示を「ページ」単位にして(もちろんページの大きさの計算は自分でやらないといけない)してしまうか。
Viewの表示の高速化はGUIプログラミングの肝だから、たくさんのサンプルがあちこちころがっている気もするが・・・。当面、「描画の高速化」を研究することになりそうだ。
NSTableViewを使うことにすればこういう問題からは解放されるんだろうなあ、と耳許で囁く声もきこえるぞ。(^^;)
2011年5月9日月曜日
Cocoa FileManager Cellのダブルクリック・ファイルの場合
bloggerのエディタを旧版にしたら無事編集できた。よかったよかった。
さて、ディレクトリではなくてファイルをダブルクリックした場合。
これはもう
[NSWorkspace sharedWorkspace]openURL:
または
[NSWorkspace sharedWorkspace]openFile:
でOK、と。
ただしいくつか問題点があって、一つ目は.appの扱い。もともと.appディレクトリのリソースを手軽にのぞくために作っているToolだから、ディレクトリとして扱っていいわけだが、アプリの起動ができないのではやはり片手落ちだろう。
OutlineViewはディレクトリ表示用のViewなので、ここからの起動は一切しない。FileCellView上でアプリを起動するとしたら・・・右クリックか。あるいは左クリック長押しとか。この辺はもう少し検討することにしよう。
同様にいわゆる「コマンドライン実行ファイル」をどうするか。当然ターミナルを開いて実行するのがベストなんだろうけど。現在もダブルクリックするとターミナルを開いて実行するけど、すぐにターミナルが消えるか、終了した状態で止まっているか、Xcode4のdebugターミナルにエラーが表示されるか、いずれかの状態で実用にならない。コマンドラインで実行するなら当然のように引数を与えられるようにしなければいけないだろう。そのUIとかをどうするか。
コマンドラインの扱いは自分としてはかなり優先順位が低いなー。
さて、ディレクトリではなくてファイルをダブルクリックした場合。
これはもう
[NSWorkspace sharedWorkspace]openURL:
または
[NSWorkspace sharedWorkspace]openFile:
でOK、と。
ただしいくつか問題点があって、一つ目は.appの扱い。もともと.appディレクトリのリソースを手軽にのぞくために作っているToolだから、ディレクトリとして扱っていいわけだが、アプリの起動ができないのではやはり片手落ちだろう。
OutlineViewはディレクトリ表示用のViewなので、ここからの起動は一切しない。FileCellView上でアプリを起動するとしたら・・・右クリックか。あるいは左クリック長押しとか。この辺はもう少し検討することにしよう。
同様にいわゆる「コマンドライン実行ファイル」をどうするか。当然ターミナルを開いて実行するのがベストなんだろうけど。現在もダブルクリックするとターミナルを開いて実行するけど、すぐにターミナルが消えるか、終了した状態で止まっているか、Xcode4のdebugターミナルにエラーが表示されるか、いずれかの状態で実用にならない。コマンドラインで実行するなら当然のように引数を与えられるようにしなければいけないだろう。そのUIとかをどうするか。
コマンドラインの扱いは自分としてはかなり優先順位が低いなー。
2011年5月8日日曜日
Cocoa FileManager Tab調整
もう少ししたらToolBarをつける予定。そこで現在の状態でどんな見た目になるか試してみる。
うむー、がんばって下から生えてくるTabにしたかったんだけど、こりゃかなり見た目が悪い。Tabの下の部分にセパレータ入れたのが余計な作業だったかも。
ここはがんばって、今の段階で修正したほうがいいだろう、ということで、今日の夕方からTabの描き直しをしてみた。
2時間ほどの作業の結果がこれ。
すこしすっきりしたかな。
ちなみにXcode4のTabはこうなってます。
影の付け方とか、色の感じとか、やっぱ素人とは違いますわな。LionでこのTabコントロールがAPI公開されたらうれしいんだけど。
うむー、がんばって下から生えてくるTabにしたかったんだけど、こりゃかなり見た目が悪い。Tabの下の部分にセパレータ入れたのが余計な作業だったかも。
ここはがんばって、今の段階で修正したほうがいいだろう、ということで、今日の夕方からTabの描き直しをしてみた。
2時間ほどの作業の結果がこれ。
すこしすっきりしたかな。
ちなみにXcode4のTabはこうなってます。
影の付け方とか、色の感じとか、やっぱ素人とは違いますわな。LionでこのTabコントロールがAPI公開されたらうれしいんだけど。
登録:
投稿 (Atom)




















