ページ

2010年1月3日日曜日

今週のCocoa情報(1/3) - 今週気になった Cocoaプログラミング情報の紹介

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

BWToolkit - Interface Builder Plugin for Cocoa on Mac OS X

ブログコメントで教えてもらった情報。




Interface Builder 用のプラグインが用意されているので、GUIでレイアウトや設定が行える。デザインも綺麗でこれは使ってみたい。

作者のブログ
Brandon Walkin

デザインに関する考察があったりしてなかなか面白い。




How do I ask for the default temporary directory on Mac OS X? - Stack Overflow

Mac OS X でテンポラリディレクトリを使う方法について。/tmp は使わずに NSTemporaryDirectory( ) を使う。tempnam(), tmpnam() はセキュアでない、など。



How can I determine the "caller" of my method in Objective-C? - Stack Overflow


メソッドの呼び出し元 を知る方法について。



Why does the value of only one of my text fields change? - Stack Overflow

IBOutlet 指定して IBで接続したアウトレットに setterメソッドを用意するとそのインスタンスが nil になってしまう問題(KVC 問題と呼ばれている?)。

以下問題のコードを転載。

@interface AXWindowController : NSWindowController {
IBOutlet NSTextField *text;
IBOutlet NSTextField *otherText;
}

- (void) setText: (NSString *)input;
- (void) setOtherText;

@end

@implementation AXWindowController

- (void) setText: (NSString *)input
{
    [text setStringValue:input];
}

これを IB でつないで実行すると。

1. [controller showWindow:nil];
2. [controller setText:@"lol"];
(gdb) p text
$1 = (NSTextField *) 0x0

解決策は、set変数名を別名にする。
setText: を別名 setTextValue: にすると治った、とのこと。



NSOperation and NSNotificationCenter on the main thread - Stack Overflow

NSOperation での処理終了をメインスレッドで知るには?という話題。

performSelectorOnMainThread:withObject:waitUntilDone: を使う方法が紹介されていた。

Mac Dev Center: NSObject Class Reference - performSelectorOnMainThread:withObject:waitUntilDone:

例では、これを子スレッドで呼び出し、そこから呼ばれたメソッドで NSNotification による通知を行っている。


Mac OS X v10.6 だと Block が使えるとのこと。
Mac Dev Center: NSOperation Class Reference - setCompletionBlock:

関連して紹介されていた GCD の話題。
http://www.mikeash.com/?page=pyblog/friday-qa-2009-08-28-intro-to-grand-central-dispatch-part-i-basics-and-dispatch-queues.html



NSOperation and the Autorelease pool - Stack Overflow

NSOperation を作る時は専用の autorelease pool を作りましょう、という話題。



How do I find information on other applications running on the computer on Mac/Cocoa/Obj-C? - Stack Overflow

稼働中のアプリケーション情報を得る方法。

-[NSWorkspace activeApplication] を使うとアクティブなアプリケーションについての情報が得られる。
Mac Dev Center: NSWorkspace Class Reference - activeApplication

得られる情報は次の通り(key)。
@"NSApplicationPath"
@"NSApplicationName"
@"NSApplicationBundleIdentifier"
@"NSApplicationProcessIdentifier"
@"NSApplicationProcessSerialNumberHigh"
@"NSApplicationProcessSerialNumberHigh

Mac OS X v10.6 では NSRunningApplication という新しいクラスの使用を推奨している。
※以下リファレンスの転載
It is strongly suggested that you use the NSRunningApplication methods currentApplicationor active to retrieve this information in post Mac OS X v10.6 targeted applications.

Mac Dev Center: NSRunningApplication Class Reference

自分のアプリケーションのみ扱えるようだ。以下、メソッド一覧を抜粋。





他アプリのウィンドウに関する情報を得る方法。NSRunningApplication には制限があるので使えない、Accessibility framework などが紹介されていた。




Get Ivar value from object in Objective-C - Stack Overflow

あるオブジェクトからインスタンス変数を取得する方法について。KVC を使う方法の他、object_getInstanceVariable( ) を使う方法が紹介されていた。