ページ

2009年11月8日日曜日

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

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

Stack Overflow より

プロセス間で Core Data を共有するには?
Is there a way of sharing a Core Data store between processes? - Stack Overflow

Managed Object はスレッドセーフではないと明記されているので、ましてやプロセス間の共有は大変そうだ。
SQLite のロックを使うアイディアなどが出ていた。
Mac Dev Center: Core Data Programming Guide: Multi-Threading with Core Data


変数名のネーミング規約
Member variable naming conventions in Cocoa - Stack Overflow

頭に my をつける、後ろに _ を付ける、引数の頭には a を付ける、setter/getter を考慮する、など。


暗号化アルゴリズム Blowfish をObjective-cで使いたい
Blowfish objective-c implementation - Stack Overflow

Cのライブラリがあるのでそれを使え、とのこと。 
このあたりか。
Blowfish Source Code


NSApplicationWillTerminateNotification が受け取れない
NSApplicationWillTerminateNotification not received - Stack Overflow
・GCを使っていてオブザーバーが collected and finalized されているのでは?
・アプリがクラッシュしている、もしくは exit()を呼んでいるのでは?
・ユーザが強制終了した場合は受取はあてにできない

など

Snow Leopard(10.6) では 'sudden termnitaion' feature が追加されたとのこと。これは後日調べてみる。NSProcessInfo に Sudden Termination の説明がある。
Mac Dev Center: NSProcessInfo Class Reference


直前にアクティブだったアプリを知りたい
Cocoa: Return to previous active application? - Stack Overflow

NSWorkspaceDidDeactivateApplicationNotification が使えるとのこと。
Mac Dev Center: NSWorkspace Class Reference

Snow Leopard(10.6)から追加された通知のようだ。

他にも下記が追加されている。
NSWorkspaceActiveSpaceDidChangeNotification
NSWorkspaceDidChangeFileLabelsNotification
NSWorkspaceDidHideApplicationNotification
NSWorkspaceDidUnhideApplicationNotification
NSWorkspaceDidActivateApplicationNotification
NSWorkspaceDidRenameVolumeNotification
NSWorkspaceScreensDidSleepNotification
NSWorkspaceScreensDidWakeNotification

Spaces 変更 やスリープに入った時の通知も受け取れるようになったのか。


Core Data での Enums の使い方
Best way to implement Enums with Core Data - Stack Overflow

目的のプロパティをオーバーライドするのではなく、別名で getter/setterを定義し、KVO向けに +keyPathsForValuesAffecting<Key> を実装し連携させる。面白い。
以下、ソースコードの引用。


typedef enum {
    kPaymentFrequencyOneOff = 0,
    kPaymentFrequencyYearly = 1,
    kPaymentFrequencyMonthly = 2,
    kPaymentFrequencyWeekly = 3
} PaymentFrequency;


-(PaymentFrequency)itemTypeRaw {
    return (PaymentFrequency)[[self itemType] intValue];
}

-(void)setItemTypeRaw:(PaymentFrequency)type {
    [self setItemType:[NSNumber numberWithInt:type]];
}


+(NSSet *)keyPathsForValuesAffectingItemTypeRaw {
    return [NSSet setWithObject:@"itemType"];
}

 +keyPathsForValuesAffecting<Key> は監視用途で使える。
Mac Dev Center: NSKeyValueObserving Protocol Reference