é·ãéãMac OS X / iOSã§ããã°ã©ãã³ã°ããããã®å¥ã®èšèª/ãã©ãããã©ãŒã ã匷å¶çã«ç¿åŸãããããšããŠããŸããã ãã€ãã£ãGUIã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®éçºã¯èå³æ·±ããã®ã§ããã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã¯ãCããã³C ++ããçŸåšæµè¡ããŠããNodejsãŸã§äœã§ãéçºã§ããããã§ãã Qtã®ãããªã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ã¯ããã®OSã®ãŠãŒã¶ãŒãæ £ããŠãããã€ãã£ãã®ã«ãã¯ã¢ã³ããã£ãŒã«ãæäŸããªããšããçç±ã ãã§ãããã§ã¯ããŸãé©ããŠããŸããã
Objective-CèšèªãšHabrã®Cocoaãã¬ãŒã ã¯ãŒã¯ã«ã¯ååãªéã®è³æããããŸãã GUIã®èŠ³ç¹ããèŠããšãCocoaã¯èå³æ·±ããã®ã§ãããããã§ã¯ã»ãšãã©ã®èšäºããã¿ã³ãšããã¹ããã£ãŒã«ãã«éå®ãããŠããŸãã ãã®èª€è§£ãä¿®æ£ããããã»ã¹ã®ãªã¹ãã衚瀺ããã¢ããªã±ãŒã·ã§ã³ã®äŸã䜿çšããŠãTable Viewã§ã®äœæ¥ã説æããŸãã
ãã®èšäºã¯å®å šã§ãããšäž»åŒµããŠããããè³æã¯å®å šã«æ£ãããã®ã§ãããäž»ã«éçºè ã察象ãšããŠããŸãã ãšã©ãŒã建èšçãªæ¹å€ã¯ãã³ã¡ã³ãã§èããŠåãã§ããã§ãããã 誰ãæ°ã«ããªããç«ãžããããã
çè«
éçºã«ã¯ãTable Viewã®ç¥èãå¿ èŠã§ãã ãããããå§ããŸãããã ããŒãã«ãã¥ãŒã§ã®äœæ¥ã®è©³çŽ°ãªèª¬æã¯[1]ã«ãããŸããããã§ã¯ãäž»ãªã¢ã€ãã¢ã®ç°¡åãªèŠçŽã«éå®ããŸãã
ããŒãã«ãã¥ãŒã¿ã€ã
ããŒãã«ãã¥ãŒã«ã¯2ã€ã®ã¿ã€ãããããŸãã
- ã»ã«ããŒã¹ -åããŒãã«ã»ã«ã¯NSCellã®ãµãã¯ã©ã¹ã§è¡šãããŸãã ã»ãšãã©ã®å Žåãããã§ååã§ãããè€éãªã»ã«ãæã€ããŒãã«ãéçºããéã«å°é£ãçããŸãã NSCellã®ãµãã¯ã©ã¹åãå¿ èŠã§ã ã Mac OS XããŒãžã§ã³10.6以åã§ã¯ããã®ã¿ã€ãã®ããŒãã«ã®ã¿ãååšããŠããŸããã
- ãã¥ãŒããŒã¹ -åã»ã«ã¯åå¥ã®ãã¥ãŒã§ãã ããã«ãããã¢ãã¡ãŒã·ã§ã³ããµããŒãããŠããŠããããã»ã©å°é£ãªãè€éãªããŒãã«ãæ§ç¯ã§ããŸãã ãã®ã¿ã€ãã®ããŒãã«ã¯ãMac OS X 10.7ã§ã®ã¿ç»å ŽããŸããã
ãã®èšäºã§ã¯ã ã»ã«ããŒã¹ã®Table Viewã䜿çšããããšãæ€èšããŸã ããã®æ©èœã¯ååã§ããããããœãªã¥ãŒã·ã§ã³ã¯ããã·ã³ãã«ã«ãªããOS Xã®æ°ããããŒãžã§ã³ã ãã§ãªãåäœããŸãã
ããŒãã«ãã¥ãŒãžã®ããŒã¿è»¢é
ããŒã¿ã¯ã2ã€ã®æ¹æ³ã§ããŒãã«ãã¥ãŒã«è»¢éã§ããŸãã
- ãããã³ã«ïŒã€ã³ã¿ãŒãã§ã€ã¹ïŒ NSTableViewDelegate ã NSTableViewDataSourceã®å®è£
ã䜿çšããInterface Builderãä»ããŠãããã®ãããã³ã«ãå®è£
ããã¯ã©ã¹ã«ããŒãã«ãã¥ãŒãé¢é£ä»ããŸãã Outlets dataSourceãšdelegateããã€ã³ãããå¿
èŠããããŸãã ãããŠããã®ã¯ã©ã¹ã§ã¯ãæãåçŽãªå Žåã2ã€ã®ã¡ãœãããå®è£
ããå¿
èŠããããŸãã
- numberOfRowsInTableViewïŒ -ããŒãã«å ã®è¡ã®ç·æ°ãè¿ããŸã
- tableViewïŒobjectValueForTableColumnïŒrowïŒ-rowåŒæ°ã§æž¡ãããè¡ã®èŠçŽ ãè¿ããŸãã ãã®å Žåã®åçªå·ã¯ã objectValueForTableColumnã® 2çªç®ã®åŒæ°ã䜿çšããŠããŸããŸãªæ¹æ³ã§æ±ºå®ãããŸãã
- ã³ã³ãããŒã©ãŒãšãã€ã³ãã£ã³ã°ã®äœ¿çšïŒãã€ã³ãã£ã³ã°ïŒã ãã®ææ³ã¯ãModel-View-ControllerïŒMVCïŒãã¿ãŒã³[2]ããã³Cocoa Bindingsãã¯ãããžãŒã«åºã¥ããŠããŸãã MVCã«ã€ããŠè©±ãããšã¯ããããæå³ããããŸããã誰ããMVCã«ã€ããŠèããããšãããã®ã§ãèããããšããªã人ã¯èª°ã§ãWikiã§ãªã³ã¯ãèŠã€ããããšãã§ããŸãã Cocoa Bindingsã¯ããã«è©³ãã説æããŸãã
ã³ã³ã¢ãã€ã³ãã£ã³ã°
Cocoa Bindingsã¯ãããŒãžã§ã³10.3以éãMac OS Xã§å°å ¥ãããŸããã ãã®äž»ãªç®æšã¯ãã¢ãã«ãªããžã§ã¯ããšãã¥ãŒããªã³ã¯ããããã®ã³ã³ãããŒã©ãŒã³ãŒãã®éãæžããããšã§ãã
Cocoa Bindingsã¯2ã€ã®ã¡ã«ããºã ã«åºã¥ããŠããŸãïŒ
- ããŒå€ã³ãŒãã£ã³ã°ïŒKVCïŒ -ãããã®ãã£ãŒã«ãã®ååã«ãã£ãŠãªããžã§ã¯ãã®ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããã®ã¡ã«ããºã ã
- Key-Value ObservingïŒKVOïŒ-1ã€ã®ãªããžã§ã¯ããä»ã®ãªããžã§ã¯ãã®å€æŽãç£èŠã§ããããã«ããã¡ã«ããºã ã
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ã«ãªããžããªãäœæããŸãã
ãæž èŽããããšãããããŸããïŒ
åç §è³æ
- ããŒãã«ãã¥ãŒããã°ã©ãã³ã°ã¬ã€ã ïŒenïŒ
- ã¢ãã«âãã¥ãŒâã³ã³ãããŒã©ãŒãã¿ãŒã³ ïŒenïŒ
- Cocoa Bindingsãžã§ã
- NSWorkspaceã¯ã©ã¹ãªãã¡ã¬ã³ã¹ ïŒenïŒ
- NSTaskã¯ã©ã¹ãªãã¡ã¬ã³ã¹ ïŒenïŒ
æŽæ°ããŸããã ã«ã«ããåŸãŠãMac OS Xã«è»¢éããŸããã