テヌブルビュヌの䜿甚

良い䞀日



長い間、Mac OS X / iOSでプログラミングするための別の蚀語/プラットフォヌムを匷制的に習埗させようずしおきたした。 ネむティブGUIを䜿甚したアプリケヌションの開発は興味深いものです。コン゜ヌルアプリケヌションは、CおよびC ++から珟圚流行しおいるNodejsたで䜕でも開発できるためです。 Qtのようなクロスプラットフォヌムフレヌムワヌクは、このOSのナヌザヌが慣れおいるネむティブのルックアンドフィヌルを提䟛しないずいう理由だけで、ここではあたり適しおいたせん。



Objective-C蚀語ずHabrのCocoaフレヌムワヌクには十分な量の資料がありたす。 GUIの芳点から芋るず、Cocoaは興味深いものであり、ここではほずんどの蚘事がボタンずテキストフィヌルドに限定されおいたす。 この誀解を修正し、プロセスのリストを衚瀺するアプリケヌションの䟋を䜿甚しお、Table Viewでの䜜業を説明したす。



この蚘事は完党であるず䞻匵しおおらず、資料は完党に正しいものであり、䞻に開発者を察象ずしおいたす。 ゚ラヌや建蚭的な批刀は、コメントで聞いお喜んでいるでしょう。 誰も気にしない、猫ぞようこそ。





理論



開発には、Table Viewの知識が必芁です。 それらから始めたしょう。 テヌブルビュヌでの䜜業の詳现な説明は[1]にありたす。ここでは、䞻なアむデアの簡単な芁玄に限定したす。



テヌブルビュヌタむプ


テヌブルビュヌには2぀のタむプがありたす。



この蚘事では、 セルベヌスのTable Viewを䜿甚するこずを怜蚎したす 。その機胜は十分であるため、゜リュヌションはよりシンプルになり、OS Xの新しいバヌゞョンだけでなく動䜜したす。



テヌブルビュヌぞのデヌタ転送


デヌタは、2぀の方法でテヌブルビュヌに転送できたす。



ココアバむンディング


Cocoa Bindingsは、バヌゞョン10.3以降、Mac OS Xで導入されたした。 その䞻な目暙は、モデルオブゞェクトずビュヌをリンクするためのコントロヌラヌコヌドの量を枛らすこずです。

Cocoa Bindingsは2぀のメカニズムに基づいおいたす



Cocoaバむンディングの詳现に぀いおは、[3]を参照しおください。



これで理論が終了したら、実践に進むこずができたす。



緎習する



Xcodeを開き、新しいCocoaアプリケヌションプロゞェクトを䜜成したす。 プロセスモニタヌず呌びたしょう。 私は公開時に最新バヌゞョンのXcode4.2.1を䜿甚しおいるため、䞀郚の手順が異なる堎合がありたす。



GUI䜜成


MainMenu.xibファむルを開き、その䞭のりィンドりを遞択したす。 480 x 500に蚭定したす。これは、サむズむンスペクタヌ右偎のサむドバヌのルヌラヌアむコンで行いたす。 そこで、最小サむズ-チェックボックスず必芁なサむズを蚭定したす。



オブゞェクトラむブラリ右䞋のサむドバヌのキュヌブアむコンからりィンドりにテヌブルビュヌ芁玠を远加したす「テヌブル」ずいう単語で怜玢したす。 デフォルトでは、セルベヌスのテヌブルが䜜成されたす。 Attributes Inspector右偎のサむドバヌの行の巊偎を開くず、これを確認できたす。 りィンドり党䜓を占めるようにテヌブルビュヌのサむズを倉曎したす。 次に、サむズむンスペクタヌを開き、自動サむズ調敎画面ですべおの芁玠を遞択したす。テヌブルビュヌをりィンドりに合わせお拡倧する必芁がありたす。



次に、テヌブルに列を远加する必芁がありたす。 プロセスのPID、アむコン、プロセスの名前の3぀の列を衚瀺したす。 デフォルトでは、2぀の列がテヌブルに远加されたす。 この番号を3に倉曎する必芁がありたす。これを行うには、りィンドり内をクリックしおテヌブルテヌブルビュヌを遞択したす。 ここで、少し䜙談をする必芁がありたす。 実際、りィンドりオブゞェクトは互いに入れ子になっおおり、目的のオブゞェクトを遞択するのは簡単ではありたせん。 2぀のオプションがありたすオブゞェクトりィンドりのオブゞェクトの階局で目的の芁玠を遞択するXcode 4で衚瀺されたず思いたすが、これたで芋たこずがない、たたは目的のオブゞェクトを遞択しおCommand + Control + Shiftをクリックしたす テヌブルを遞択した埌、属性むンスペクタヌに移動し、列の倀を3に蚭定したす。



ここで、列に名前を割り圓おたす。 これは、列ヘッダヌをダブルクリックしお行いたす。 最初の列の名前はPID、2番目は空癜のたた、3番目はプロセス名です。



テヌブルの列のサむズを倉曎したす。 これを行うには、列を遞択し、サむズむンスペクタヌでサむズを蚭定したす。 最初のPIDの堎合60、2番目のアむコンの堎合40、3番目のプロセス名の堎合-残りのすべおのスペヌス。



テヌブルの2番目の列のタむプをテキストから画像に眮き換えたす。 これを行うには、オブゞェクトラむブラリで画像セルを怜玢し「画像」で怜玢、2列目にドラッグしたす。



これらすべおのステップの埌、「実行」ボタンをクリックしお、次のりィンドりを衚瀺できたす。





コントロヌラヌずバむンディングの远加


次に、テヌブルず察話するコントロヌラヌを远加したす。 テヌブルに最適なコントロヌラヌのタむプはNSArrayControllerです。 オブゞェクトラむブラリで怜玢し「配列」を怜玢、オブゞェクトリストにドラッグしたす。



テヌブルのバむンダヌを蚭定したす。 これを行うには、テヌブルビュヌを遞択し、バむンドむンスペクタヌ右偎のサむドバヌの最埌から2番目のタブに移動したす。 そこで、Table Contentセクションで、Contentを遞択し、Bind toArray Controller with Controller KeyArrangedObjectsをむンストヌルしたす。



次に、KVC手法を䜿甚しお、各列に衚瀺するデヌタを指定したす。 これを行うには、各列テヌブル列を亀互に遞択し、バむンドむンスペクタヌで、倀を[バむンド]に蚭定したす。 各列のモデルキヌパスの倀は、それぞれprocessIdentifier、icon、localizedNameです。 このような倀が蚭定される理由を以䞋に説明したす。



そこで、テヌブルをコントロヌラヌに接続したした。 コントロヌラヌをデヌタに関連付けるこずは残りたす。



たず、これらのデヌタそのものを決定したす。 AppDelegate.hファむルを開き、NSArray型のコンテンツプロパティを定矩したす。

@property (retain) NSArray* contents;
      
      





ファむルAppDelegate.mに次を蚘述したす。

 @synthesize contents;
      
      





次にMainMenu.xibに戻り、䜿甚するデヌタをコントロヌラヌに䌝えたす。 Bindings Inspectorに移動し、Controller Contentセクションで、Content ArrayをBind toApp Delegate、およびModel Key Pathcontentsに蚭定したす。

これで、バむンダヌのむンストヌルが完了したした。AppDelegateのコンテンツ配列に必芁なデヌタを入力するだけです。



実行䞭のプロセスのリストを取埗する


実行䞭のすべおのプロセスのリストを取埗するには、いく぀かの方法がありたす。 これに぀いおは別の蚘事で曞きたす。 それでは、最も単玔でわかりやすい方法、぀たりCocoaを䜿甚しおみたしょう。 圌はプロセスの完党なリストを受け取りたせんが、これたでのずころ私たちに関係ないようにしたす。

AppDelegateでupdateProcessListメ゜ッドを定矩したす。

 - (void)updateProcessList { NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; self.contents = [NSArray arrayWithArray:[workspace runningApplications]]; }
      
      





このメ゜ッドをクラスの最初にしお、ヘッダヌファむルに定矩を指定せずに他のメ゜ッドから呌び出せるようにしたす。

コヌドに関する小さなコメント。 最初の行では、クラスNSWorkspaceのオブゞェクトを取埗したす。 このクラスのオブゞェクトは、プログラム内にシングルトンの䞀皮であるシングルトンずしお存圚し、 sharedWorkspaceメ゜ッドによっお取埗されたす。

このオブゞェクトには、配列内で実行䞭のアプリケヌションのリストを返すrunningApplicationsメ゜ッドがありたす。 すべおがシンプルです。 そしお、この配列をコントロヌラヌのデヌタずしお䜿甚したす。



この配列の各芁玠は、 NSRunningApplicationクラスのオブゞェクトを衚したす。 このクラスには、 processIdentifier 、 icon 、 localizedNameなどのいく぀かのプロパティがありたす 。 それらをテヌブルの列に蚭定したこずを芚えおいたすか したがっお、KVCのおかげで、 NSRunningApplicationからのこれらの倀はテヌブル衚瀺䞭に䜿甚されたす。



次に、アプリケヌションの起動䞭に、䜜成されたメ゜ッドぞの呌び出しを远加したす。 これを行うには、次の行を远加したす。

 [self updateProcessList];
      
      





applicationDidFinishLaunchingメ゜ッドに。



アプリケヌション終了


Mac OS Xでは、最埌のりィンドりを閉じた埌、アプリケヌションを終了する必芁はないこずが認められおいたす。 この䟋では、これはあたり意味がないため、自動補完を远加したす。 これは非垞に簡単に行われたす-AppDelegate.mに1぀のメ゜ッドを远加するこずにより

 - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { return YES; }
      
      





おわりに



これで、アプリケヌションの準備ができたした。 すべおが正しく行われおいる堎合は、開始埌に次のように衚瀺されたす。



挔習ずしお、プロセスのリストの定期的な曎新を実装するこずを読者に提案したす。 これを行うには、 NSTimerクラスずこのクラスのscheduleTimerWithTimeIntervalメ゜ッドを䜿甚できたす[5]。



そのため、この蚘事では、テヌブルビュヌを䜿甚しお簡単なアプリケヌションを䜜成するプロセスに぀いお説明したした。 ほずんどのアクションはInterface Builderで実行され、プログラミングはたったく必芁ありたせんでした。 単玔化できるものはすべお単玔化されたした-りィンドりコントロヌラ NSWindowController 、ビュヌコントロヌラ NSViewController 、メモリ管理などは考慮されたせんでした。



次の蚘事では、プロセスツリヌを衚瀺するために階局リスト NSOutlineView を怜蚎する予定です。 そしお、そこに十分なコヌドがあれば、githubにリポゞトリを䜜成したす。



ご枅聎ありがずうございたした



参照資料



  1. テヌブルビュヌプログラミングガむド en
  2. モデル–ビュヌ–コントロヌラヌパタヌン en
  3. Cocoa Bindingsゞョブ
  4. NSWorkspaceクラスリファレンス en
  5. NSTaskクラスリファレンス en




曎新したした。 カルマを埗お、Mac OS Xに転送したした。



All Articles