[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/10 01:17 / Filesize : 223 KB / Number-of Response : 693
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Cocoaはさっぱり!!! version.8



1 名前:名称未設定 mailto:sage [2007/05/18(金) 23:24:52 ID:ZBDhxXyy0]
初心者は教えてくれる方への感謝を忘れずに。
上級者も初心者だった頃の気持ちを忘れずに。

前スレ
Cocoaはさっぱり!!! version.7
pc11.2ch.net/test/read.cgi/mac/1161486802/

2 名前:名称未設定 mailto:sage [2007/05/18(金) 23:29:22 ID:UJP3ocn+0]
乙かれーしょん

3 名前:名称未設定 mailto:sage [2007/05/19(土) 00:43:34 ID:sciB+uL40]
1000 名前: 名称未設定 Mail: sage 投稿日: 2007/05/19(土) 00:29:23 ID: uGrJMnws0
[self release];

4 名前:名称未設定 mailto:sage [2007/05/19(土) 08:47:22 ID:VgPVILTS0]
カーボンが4げっt

5 名前:名称未設定 mailto:sage [2007/05/19(土) 10:43:00 ID:ndYGZwPE0]
前スレ1000の秀逸さに感動した俺は新参?

6 名前:名称未設定 mailto:sage [2007/05/19(土) 11:43:25 ID:uJS6/6lK0]
[self release]; というのはあまり使わないような気がする。

7 名前:名称未設定 mailto:sage [2007/05/19(土) 11:57:48 ID:K8wpdP1P0]
-init内で何かミスったときとか。

8 名前:名称未設定 mailto:sage [2007/05/19(土) 13:47:34 ID:6RJB6in20]
じゃ次は [super dealloc] で。

9 名前:名称未設定 mailto:sage [2007/05/19(土) 15:01:23 ID:7fei3xwy0]
autorelease されて持ち主のいないウインドウは勝手に閉じてしまうので、自分を
retainして、閉ボタンが押されたときに [self release]; するのは邪道ですか

10 名前:名称未設定 mailto:sage [2007/05/19(土) 20:37:55 ID:jAL67W1S0]
ShiftJIS のCSVを開いて、パースするプログラムを書いているのですが、日本語が含まれているとうまく処理できません。日本語が含まれているセルの結果が、文字コードで表示されてしまいます。
1行切り出した段階のparsedStringをNSLogで表示させるとうまく日本語が表示されますが、その後の、columnArrayではうまく表示できません。
何が悪いのか、まったく見当がつきません。どなたか、教えてください。



11 名前:名称未設定 mailto:sage [2007/05/19(土) 20:38:45 ID:jAL67W1S0]
上の続きです

//Open the file
NSData *data = [[NSData alloc] initWithContentsOfFile:file];
managedCSV = [[NSString alloc] initWithData:data encoding:NSShiftJISStringEncoding];

//managedCSV = [[NSString alloc] initWithContentsOfFile:file];

rowArray = [[NSMutableArray alloc] init]; //Initialize rowArray

NSString* parsedString;
NSRange range, subrange;
int length;

length = [managedCSV length];
range = NSMakeRange(0,length);

while (range.length > 0) {
//1行切り出す
subrange = [managedCSV lineRangeForRange:NSMakeRange(range.location,0)];
parsedString = [managedCSV substringWithRange:subrange];

range.location = NSMaxRange(subrange);
range.length -= subrange.length;

NSLog(parsedString); //ここではうまくいく


12 名前:名称未設定 mailto:sage [2007/05/19(土) 20:42:04 ID:jAL67W1S0]
ほんと長くてすみませんorz


//カンマで区切って、Arrayへ
NSArray *columnArray = [parsedString componentsSeparatedByString:@","];
NSLog([columnArray description]); //ここの結果がおかしい

[rowArray addObject:columnArray];
}

長文ですみません。。。

13 名前:名称未設定 mailto:sage [2007/05/19(土) 21:19:06 ID:7fei3xwy0]
NSArray の description はプロパティリスト形式でエンコードされたものを返すから。
columnArrayの中には正しい値で格納されているはず。


14 名前:名称未設定 mailto:sage [2007/05/19(土) 23:06:23 ID:KTFjrMhL0]
要は、NSLog(@"%@", columnArray);
にしとけと、そういう事です。

15 名前:名称未設定 mailto:sage [2007/05/20(日) 01:06:30 ID:95dk2TSg0]
>>14
>要は、NSLog(@"%@", columnArray);
え、それって結局 [columnArray description] なんじゃなかったっけ?

ところで >>11 のコードだけど、
NSLog() に直接文字列を渡すのはあんまりよくないかな。些細なことだが。

16 名前:名称未設定 mailto:sage [2007/05/20(日) 03:58:14 ID:Q4ZcZ5bJ0]
文字列にメタキャラがあったら不味いわな。

17 名前:名称未設定 mailto:sage [2007/05/20(日) 08:12:37 ID:Wl6kGVzP0]
ありがとうございます。
>>13
中身に正しく格納されているのを確かめるには、どうすればいいのでしょうか。
NSLog(@"%@" , [columnArray objectAtIndex:2]);
などとして、日本語が含まれるであろうところを表示させても、何も表示されません。
>>14
%@で指定すると、そのオブジェクトのdescriptionが呼び出されるはずなので、同じ結果ですが。
>>15
NSLog()に直接文字列を渡すのはよくないってのは、どういうことですか?
NSLog([parsedString description]);
とすべきということでしょうか。
>>16
文字列にメタキャラがあるとは、どういうことでしょうか?
メタキャラと言われても、正規表現で使う記号のことしか思い浮かばないのですが。

18 名前:名称未設定 mailto:sage [2007/05/20(日) 08:45:26 ID:VLuBbFIP0]
NSLogや-descriptionはローカライズされた文字表示には使えない。
エンコーディングが指定出来ないから。
日本語文字を表示したいのなら、自前でNSLog(@"%@",hoge)に相当
するメソッドを作る。

メタキャラの話は、format string vulnerabilityでググれ。いわゆる鉄則。

19 名前:名称未設定 mailto:sage [2007/05/20(日) 10:42:46 ID:g8ihdvQq0]
writeToFile でファイルに書き出して、Property List Editor で開いてみるとか

20 名前:名称未設定 mailto:sage [2007/05/20(日) 12:11:09 ID:S8wwiPq80]
NSPopUpButton を使ったユーザーインターフェイスで、
選択する項目が1つしかないときは NSPopUpButton ではなく
同じ位置に NSTextField でその項目を表示したいのですが、
状態に応じて NSPopUpButton と NSTextField を入れ替える、
というようなことが、IB 上、あるいはコードから可能でしょうか。

見た目だけなら、それぞれの setHidden を入れ替えればできることはできますが、
IB 上で同じ位置に NSPopUpButton と NSTextField を置かなければならず
編集等がやりにくいので、NSPopUpButton と NSTextField とを入れ替える、
ということがしたいです。




21 名前:名称未設定 mailto:sage [2007/05/20(日) 12:31:47 ID:ZfxNfI7k0]
それUI設計を考え直したほうが良いんじゃ。

22 名前:名称未設定 mailto:sage [2007/05/20(日) 12:44:40 ID:G1nQj3380]
NSComboBoxじゃ駄目なの?


23 名前:名称未設定 mailto:sage [2007/05/20(日) 14:30:35 ID:EIWpzyux0]
>>17
NSArray *columnArray = [@"%@,%s" componentsSeparatedByString: @","];
NSLog(columnArray);
でいいことがあるよ!
NSLog(@"%@", [columnArray componentsJoinedByString: @" "]);

>>20
NSComboBoxが本命、またはaddSubview:/removeFromSuperviewと思うけど、IBでの編集が目的なら
NSTabViewに入れればいいんじゃね?

24 名前:20 mailto:sage [2007/05/20(日) 15:07:36 ID:S8wwiPq80]
>>22 >>23
NSComboBox は今まで使ったことがありませんでした。
ありがとうございます。調べてみます。

NSPopUpButton の selectedObject のバインディングを使ってるのですが
NSComboBox でも同じことはできるでしょうか。NSComboBox の
Bindings のところには、content、contentValues、value しかありませんが‥

NSTabView は迷ったのですが、NSPopUpButton と NSTextField とを
入れ替えたいものとそうでないものとが UI のレイアウト上散在しているので、
今回の場合ちょっと使いにくいかなと思いました。


25 名前:名称未設定 mailto:sage [2007/05/20(日) 15:29:52 ID:g8ihdvQq0]
やろうとしていることがよくわからないんだけど
選択する項目が一つしかないときに表示するNSTextFieldは編集できなくていいの?
項目が一つのときはポップアップのUIがうざいからシンプルなNSTextFieldにしたい、ということ?
それならボーダレスにすればシンプルな表示になるけど。

26 名前:20 mailto:sage [2007/05/20(日) 17:40:05 ID:S8wwiPq80]
>>25
すみません、わかりにくい書き方でした。

あるウインドウ上でデータの編集をするのですが、特定のデータを
削除したいときにも、一旦その編集ウインドウを開いて、
ユーザーがデータの内容を確認してから削除する、ということを
やろうとしています。

編集モードのときには、選択肢のあるデータは NSPopUpButton 風に表示し
(ユーザーが選択可能)、削除モードのときには、選択されているデータを
NSTextField 風に表示する(表示のみ、選択、編集は不可)という
インターフェイスにしようとしています。


27 名前:名称未設定 mailto:sage [2007/05/20(日) 17:50:19 ID:SHOl/NGE0]
NSPopUpButton 1つにして
-(void)setBordered:(BOOL)flag;
-(void)setBezelStyle:(NSBezelStyle)bezelStyle;
-(void)setEnabled:(BOOL)flag;
を組み合わせればいいんでないか?

28 名前:名称未設定 mailto:sage [2007/05/20(日) 21:06:22 ID:Wl6kGVzP0]
>>18 >>19
ありがとうございます。

format string vulnerability ってはじめて聞きました。
プログラミングの初心者がよく陥るミスなのですね・・・。

理由はよく分かりませんが、とりあえず、NSLog("STRING %@" , [columnArray objectAtIndex:2]);
とすると、日本語が含まれている文字列が表示できました。

>>23
どういうことでしょうか。
エラーになって、落ちてしまうのですが・・・。

29 名前:名称未設定 mailto:sage [2007/05/20(日) 22:15:06 ID:EIWpzyux0]
>>28
>>23の上2行
>>17,28
>文字列にメタキャラがある
NSLog(columnArray); NSLog([parsedString description]);では「%@,%s」が入力ファイル中に
あったらまずいという話。

30 名前:名称未設定 mailto:sage [2007/05/21(月) 07:41:23 ID:7LGNLKMD0]
>>29
なるほど。
メタキャラがあるとエラーで落ちてしまう例だったのですね。



31 名前:名称未設定 mailto:sage [2007/05/21(月) 23:12:19 ID:TdM0ZjG7O]
落ちるだけならいいんだけどね。vulnerabilityなんで悪用されるかも。

32 名前:名称未設定 mailto:sage [2007/05/29(火) 09:39:57 ID:Z+NxGNZg0]
Cocoaスクリプタブルなアプリケーション、モダンな
書き方のサンプルコードってどのあたりを見たらよいでしょうか。

FireWireSDKのVirtualDVHSのソースを見て驚いたのですが、
アプリの主要クラスがAppleScriptのハンドラだけになっていて、
いきなり[self delegate]に丸投げされているとか、ちょっと思い
つかなかった作り方になっています。これって効率的なんですかね?

ただ、やっぱりscriptSuite+Terminologyの古いやり方でした。
10.3.xを切り捨てるとすると、新しい記述方法が使えると思うの
ですが、お勧めなサンプルコードがあれば教えてください。


33 名前:名称未設定 mailto:sage [2007/05/29(火) 21:18:28 ID:a00qDN0E0]
Pasteboard に適切でないもの
[pb setData:@"string" forType:... ];
とかを書き込むと、全てのプロセスが停止に至ってしまうのはウチ(10.4.9)だけ?

34 名前:名称未設定 mailto:sage [2007/05/30(水) 13:27:49 ID:M44/L4u50]
自分で作成したクラス(AppControllerとか)で、NSArrayContorollerでの選択されているオブジェクトの変更を受け取るには、どうすればいいのでしょうか。
つまり、自分で作成したクラスに、NSArrayControllerから選択されているオブジェクトの変更があるたびに、アクションを送信してもらうには、どうしたらいいのでしょうか。

35 名前:名称未設定 mailto:sage [2007/05/30(水) 16:09:06 ID:E2XSp/Pe0]
>>34
NSKeyValueObservingでNSArrayContorollerのselectionを監視。
もしくはNSTableViewのnotificatioかdelegate経由。
もしくはNSNotificationで自分の好きなように。

36 名前:名称未設定 mailto:sage [2007/05/31(木) 15:44:40 ID:OPvQwZSL0]
>>32

10.5のScript Bridgeの事?

37 名前:名称未設定 mailto:sage [2007/05/31(木) 17:55:14 ID:o/25uG0z0]
>>36
いえ、sdefの話です。調べていたらそのものズバリの回答がありました。

>ttp://developer.apple.com/jp/technotes/tn2106.html

「aete をアプリケーションに追加する

・・・(また、用語説明を利用するのにアプリケーションも起動する必要が
あるため、スクリプト作成者は面倒に思います)。

したがって、アプリケーションの一部として同じような aete 用語説明を作成
するべきです。これを行う最も簡単な方法は、sdef を使用して用語説明を作
成し、それから sdp(1) を使用して 3 つのファイル(.scriptSuite、
scriptTerminology、および aete.r)をすべて生成することです。」

このいきなり起動するっていう事象、悩んでいたんですけど、ちゃんと
ドキュメントが有ったんですね。

38 名前:名称未設定 mailto:sage [2007/05/31(木) 21:25:46 ID:zK9AEhFO0]
>>35
NSKeyValueObservingで、実装することにしました。
ありがとうございます。

39 名前:名称未設定 [2007/06/02(土) 14:18:31 ID:sT94ODrc0]
Drawerって親ウィンドウのサイズに依存しますよね。
横に細長なウィンドウだと、Drawer付けられないんですが
なんかいい方法ない?

40 名前:名称未設定 mailto:sage [2007/06/02(土) 14:58:26 ID:PljomMdh0]
下に出す。



41 名前:名称未設定 mailto:sage [2007/06/03(日) 13:05:44 ID:mna10Y1g0]
えくすきゅーずみー!
CoreDataで作ったEntityを途中で変更したとき、永続化させているデータの構造を
変更する手段って用意されているのでしょうか?
よいじかんをー!

42 名前:名称未設定 mailto:sage [2007/06/03(日) 14:39:27 ID:b0tdP23k0]
Core Data FAQ ヨリ
Mapping data from one schema to another is a difficult problem to solve, and Core Data does not provide a generic solution―you must perform the transformation yourself.

43 名前:名称未設定 mailto:sage [2007/06/03(日) 15:11:20 ID:mna10Y1g0]
>>42さん ありがとう
まいせるふで解決するよー

44 名前:名称未設定 mailto:sage [2007/06/07(木) 04:12:52 ID:TxansO1r0]
QTMovieViewでDRM付きのm4vが再生できないのは
当然なんですか?

45 名前:名称未設定 mailto:sage [2007/06/07(木) 19:16:07 ID:iiSZh04z0]
あれ、できなかったっけ。

46 名前:名称未設定 mailto:sage [2007/06/08(金) 11:19:17 ID:rvM2Yx/u0]
やってみたけど、DRM 付きの m4p は聞けた。
m4v は持ってないので確認できない。


47 名前:名称未設定 mailto:sage [2007/06/08(金) 20:19:35 ID:rlaJ3J8O0]
10.3.9で試してみたけど、再生できなかった。
m4pならできたけど。

48 名前:名称未設定 [2007/06/10(日) 18:26:33 ID:hI0cu8D+0]
NSOutlineViewとNSTableViewの垂直スクロールが同期した
プログラムを書こうと思っています。
NSTableViewへの値の設定は[treeTableView setBoundOrigin:pos];
で出来ることがわかったのですが、NSOutlineViewからの垂直
スクロール値の読み出し方法がわかりません。
ご存じの方、ご教授ください。


49 名前:名称未設定 [2007/06/10(日) 18:29:08 ID:xqak4VE+0]
fffff

50 名前:名称未設定 mailto:sage [2007/06/10(日) 20:09:47 ID:s3V0Kn6M0]
NSOutlineViewってNSTableViewのサブクラスじゃなかったっけ?



51 名前:名称未設定 mailto:sage [2007/06/10(日) 20:10:05 ID:tHbw2xow0]
NSScroller の floatValue かな
値設定は setFloatValue:knobProportion: で。

52 名前:48 [2007/06/11(月) 09:37:46 ID:1ykIS/Rk0]
ダメです。InterfaceBuilderでNSScrollViewは関連づけできますが、
NSScrollerは関連づけができません。


53 名前:名称未設定 mailto:sage [2007/06/11(月) 09:56:44 ID:9X1rbhME0]
xxx.h
.
.
IBOutlet NSScrollView* scrollView;// IBで関連づける
NSScroller* hScroller; // 初期化メソッドで値を設定する

初期化メソッドかsetScrollViewで
xxx.m
.
.
hScroller = [scrollView horizontalScroller];
}
ってやるのはどうですか


54 名前:名称未設定 mailto:sage [2007/06/11(月) 09:57:09 ID:T3nP0R6O0]
InterfaceBuilder 使わなけりゃいいだろ。

55 名前:名称未設定 mailto:sage [2007/06/11(月) 10:04:04 ID:T3nP0R6O0]
NSTableView と NSOutlineView の垂直スクロールを同期させるというのが良く分からん。
表示中の行の数が同じでなければ setFloatValue: を使っても同期にならないだろうが、
NSOutlineView を使ってるということは折り畳まれた行が存在することが考えられるから
表示中の行の数が同じとも限らんし。

56 名前:48 [2007/06/11(月) 17:24:05 ID:1ykIS/Rk0]
>>51
'NSScroller'may not respond to '-floatValue:'でした。


57 名前:名称未設定 mailto:sage [2007/06/11(月) 17:32:32 ID:mbR9EhtI0]
(1) floatValue: ではなくて floatValue になっている?
(2) 警告出ても無視していいから、それで動いたの?


58 名前:48 [2007/06/11(月) 20:10:36 ID:1ykIS/Rk0]
(1)はい
(2)警告を無視したら56番のメッセージが表示されて作動しません


59 名前:名称未設定 mailto:sage [2007/06/11(月) 20:21:35 ID:mbR9EhtI0]
コードがどこかおかしいはず。
これで普通に動いたよ。

-(void)syncScroller
{
NSScroller* scroller1 = [scrollView1 verticalScroller] ;
NSScroller* scroller2 = [scrollView2 verticalScroller] ;
[scroller2 setFloatValue:[scroller1 floatValue]];
}



60 名前:48 [2007/06/12(火) 00:36:50 ID:TYIgO7qC0]
ありがとうございます。無事動きました。
しかし、これでは使い物にならないですね〜




61 名前:名称未設定 mailto:sage [2007/06/12(火) 01:12:00 ID:luus+mNL0]
具体的に何をしたいのか分からんから
使い物にならないと言われても
そーですかとしか言いようが無い

まあ、標準の部品で実現できそうにないことなら
その表現方法が本当に正しいのかを疑ってみるべきかもしれない

62 名前:名称未設定 mailto:sage [2007/06/12(火) 05:03:25 ID:LE6VV2Gm0]
自分の望んでいたことが無事にできたのに、使い物にならないっておかしくないか

63 名前:名称未設定 mailto:sage [2007/06/12(火) 09:39:58 ID:iZm9RHNQ0]
他人が親切に教えてやってるのに、使い物にならない、の一言で切り捨てる
48は以後スルーでよし。

64 名前:名称未設定 mailto:sage [2007/06/12(火) 11:44:23 ID:9fyh4C1c0]
safari for windowsでmkinoさん涙目?

65 名前:名称未設定 [2007/06/12(火) 16:22:42 ID:w6MMEnQe0]
HMDT赤本を買ってきてCocoaとかCoreDataの勉強を始めました。
CoreData の non-Document タイプのアプリを作ろうと思い、
XcodeのモデルウィンドウからIBのMainMenu.nibのウィンドウに
エンティティをドロップするだけでアプリができ感動しました。

次に別のウィンドウにTableViewを表示したくなったので
MainMenu.nibの他に新しいnibを作り、
そっちのウィンドウにエンティティをドロップしてみたんですが、
データの表示ができません。
MainMenu.nibにはAppDelegateとArrayControllerがありバインディング
していて入力も表示もできましたが、
新しいnibにはAppDelegateがなく、
ArrayControllerとFile'sOwerしかないので
何らかの方法でバインディングする必要があると思います。
とりあえずFile'sOwnerにバインドしたんですが表示されません。

AppDelegateと新しいnibのFile'sOwnerの関係やら
CoreData の部分で ArrayController と接続やら
どーしたらいいのやらさっぱりわかりません。

近いサンプルコードのありかとか、アドバイスをお願いします。

66 名前:名称未設定 mailto:sage [2007/06/12(火) 17:06:00 ID:drt+veFf0]
>>65
まず一回ちゃんと本読めよ...

67 名前:名称未設定 mailto:sage [2007/06/12(火) 17:07:42 ID:Q66+HK1K0]
>>65
tbboy.cocolog-nifty.com/tbboys_room/2006/08/itunes_935d.html
手前味噌だが。

68 名前:名称未設定 mailto:sage [2007/06/12(火) 18:26:16 ID:DylgJ4Wp0]
>>65
>AppDelegateと新しいnibのFile'sOwnerの関係やら
ヒレガス本読め

69 名前:名称未設定 [2007/06/12(火) 19:54:42 ID:rm3r2fE/0]
CocoaにHTTP のライブラリはありますか?

一体どこにライブラリの説明があるのか良く分からなくて。。。

70 名前:名称未設定 mailto:sage [2007/06/12(火) 20:31:33 ID:ZolpA+Sn0]
>>69
「HTTPのライブラリ」だけだとなんとも..
クライアント側ならNSURLRequest+NSURLConnection/NSURLDownloadで
だいたいできるんじゃないかな。delegateである程度制御できるし。

もっと細かいことがしたい、もしくはサーバ側の実装をするなら
CFHTTPなどのCFNetworkのC API(非Cocoa)だと思うよ。



71 名前:名称未設定 [2007/06/12(火) 23:36:14 ID:eoZFaP4J0]
safari for winはcocoa on win(旧open step)で実装したの?


72 名前:名称未設定 mailto:sage [2007/06/13(水) 04:42:32 ID:RFkwfKY60]
HMDT読め。

73 名前:名称未設定 [2007/06/13(水) 07:47:43 ID:tx1aMvDC0]
65です。
>>66さん
HMDT赤本を読んでみたのですが、別のnibを使うようなサンプルがなく
よくわかってません、すいません。
>>67さん
参考にしてみます。ありがとうございます。
>>68さん
本屋でヒレガス本を探してみます。

ADCのサイトを見てますが探し方が悪いのと英語なので苦労してます。
Cocoaのプログラムを作る時の、nibの持ち方はこうするべき、
リソースはこう持つべき、全体としてこう作るべきとか等の、
定石などがわかるような文献やサイトがあればいいのですが。。。

74 名前:69 [2007/06/13(水) 08:40:50 ID:jcr/KQtr0]
thx>>70

>サーバ側の実装をするなら CFHTTPなどのCFNetworkのC API(非Cocoa)だと思うよ。

CFNetworkをググってみまつ。

75 名前:名称未設定 [2007/06/13(水) 13:29:46 ID:aXtlj5LE0]
>>73
AppDelegateのインスタンスが無いっていうなら,
クラス一覧からAppDelegateをインスタンス化(Instantiate?)すればいいんじゃないの?
Core Dataほとんどやってないから合ってるかわからんけど.

76 名前:66 mailto:sage [2007/06/13(水) 16:52:12 ID:SjgSRBeA0]
>>73
(私もCoreDataは使ってないから分からないけど)ちょっと見た限り、
>>75さんのいうようにオリジナルのAppDelegateを流用すればいけるんじゃないかな。

(試してないけど)手順としては
1・オリジナルの*_AppDelegate.m(h)をコピー。
2・コピーした*.mのapplicationShouldTerminateをawakeFromNibへ変更。
3・コピーした*.m(h)をプロジェクトに追加。
4・コピーした*.hを新しいnibに読み込んでインスタンス化。
あとはオリジナルと同じ手順でできると思う。
ひょっとしたらIBでbindingとoutletの設定が必要かも。

私も(読んだ事ないけど)ヒレガス本を推薦しておきます。

77 名前:名称未設定 [2007/06/13(水) 17:02:23 ID:tx1aMvDC0]
65です。
File'sOwnerをCustomClassをAppDelegateに変更し、AppDelegateで別のNibファイルを
ロードすると、本のサンプルと同じ動作をしました。

目的として複数ウィンドウを表示させTableViewを表示したいので、
AppDelegateから別nibのウィンドウ用のWinControllerのインスタンスを生成し、
別のnibのFile'sOwnerのCustomClassにしたところウィンドウの表示はできました。

しかし、別のnibにあるCoreData用のArrayControllerからFile'sOwnerの
managedObjectContextにBindingして実行すると、Xcodeの実行ログには
this class is not key value coding-compliant for the key managedObjectContext.
と表示されて動作しないのです。

このWindowControllerでロードされた別のnibにおいて
ArrayControllerからmanagedObjectContextにBindingするには
どうしたらできるのかわかりません。
CoreDataとBindingと別のnibで表示の実装で詰ってしまいました。
それともわたしは大きな勘違いをしているのでしょうか。

>>75さん
CoreDataプロジェクト生成時に自動生成されるAppDelegateではなく、
自前でウィンドウ毎にAppDelegateを生成するって事ですよね。
AppDelegateのオブジェクトを管理するコントラーラを作らないといけないのかな。

CocoaやCoreDataって深そうですし難しいです。

78 名前:66 mailto:sage [2007/06/13(水) 17:05:43 ID:SjgSRBeA0]
日本語版は内容が古過ぎるみたいなので、やっぱりヒレガス本推薦取り消します。
そのぐらいなら日本語のサイトでも十分勉強できると思うし。
(実際、私は日本語のサイトの情報だけでやってこれましたよ)

79 名前:名称未設定 [2007/06/13(水) 17:06:39 ID:tx1aMvDC0]
65です
>>76さん
ありがとうございます。試してみます。
やはりヒレガス本ですか、探してみます。

80 名前:名称未設定 mailto:sage [2007/06/13(水) 17:09:20 ID:tx1aMvDC0]
>>78さん
あぁぁ、そうですか...もっともっとググってみます。



81 名前:66 mailto:sage [2007/06/13(水) 17:33:57 ID:SjgSRBeA0]
>>77
ログの表示はそのままの意味ですよ。
別nib の File'sOwner に設定しているカスタムクラスでmanagedObjectContextを実装しなきゃ。

>>79
コピーした*_AppDelegate.m(h)内のクラス名も適当に変えてね。
addPersistentStoreWithTypeに使うURLも変更した方がいいかも。
ま、がんばって。

82 名前:名称未設定 mailto:sage [2007/06/13(水) 18:07:38 ID:Dc2vvK7R0]
CoreData以前にバインディングとかnibファイルのオーナーシップとか全然理解してないんじゃないの?

まずCoreDataのデータはNSManagedObjectContextが管理していて、
デフォルトではHoge_AppDelegateがこいつをmanagedObjectContextとして持っている
だから別のnibファイルからCoreDataのデータにアクセスするにはHoge_AppDelegateへのアウトレットを確保しなくてはならない
AppDelegateをオーナーにしてnibを読み込めばFiles Owner.managedObjectContextとしてバインドできるけど、
MVCの観点からあまりよろしくないので、
別途コントローラオブジェクト(HogeControllerとか)を作ったほうが良い
で、MainMenu.nibでHogeControllerをインスタンス化しておいてHoge_AppDelegateへのアウトレットセットしておく
で別ウィンドウを開く際にはHogeControllerをオーナーにしてnibをロードする
でその別nibではArrayControllerにFile's Owner.hoge_AppDelegate.managedObjectContextをバインドしてやればOK
ちなみにFile's OwnerはもちろんHogeControllerのことで、
hoge_AppDelegateはHoge_AppDelegateへのアウトレットの名前な

83 名前:名称未設定 mailto:sage [2007/06/13(水) 19:46:19 ID:SjgSRBeA0]
>>82
すばらしい。

今となってはどうでもいいけど>>76で、
applicationShouldTerminateをapplicationDidFinishLaunchingと勘違いしてました...

84 名前:名称未設定 mailto:sage [2007/06/13(水) 20:51:51 ID:tx1aMvDC0]
65です。
>>82さん、アドバイスありがとうございます。

>CoreData以前にバインディングとかnibファイルのオーナーシップとか全然理解してないんじゃないの?
ご指摘の通りです、勉強不足ですいません、がんばって勉強します

>>82さんにアドバイス頂いた手順でチャレンジしてますが、
バインディングの部分がうまくいかなくて見直しています。
実行すると実行ログにこんなエラーが吐かれます
addObserver:<<NSAutounbinder: 0xa37e6494> 0x3ccee0> forKeyPath:@"appDelegate.managedObjectContext" options:0x0 context:0x3cd2f0] was sent to an object that is not KVC-compliant for the "appDelegate" property.
バインディングができてないんでしょうか...
再度プロジェクトを起こし直して確認してみます

あと手順上の話なのですが、メニューバーからFile->Newして
複数の同じウィンドウの表示をしたいのが目的なので、
MainMenu.nibでHogeControllerをインスタンス化してしまうと、
複数ウィンドウの表示ができなくなってしまうと思っています。
AppDelegateの中にFile->Newから呼ばれるActionを書いて、
WindowControllerをalloc&initして
WindowControllerのinitでNibをロードするように最初は書いていました。
こういう書き方は良くないんでしょうか

目指してるイメージは、HMDT赤本のチュートリアルにあるiTunesブラウザが、
File->Newするたびに新しいウィンドウが増えていくイメージなんですが
思うようにできないです...

ヒレガス本、近所の本屋にありませんでした...残念

85 名前:名称未設定 mailto:sage [2007/06/13(水) 21:43:36 ID:jSrM7oaF0]
>84
>メニューバーからFile->Newして複数の同じウィンドウの表示をしたい

んならNewProjectでCore Data Document-based Applicationえらべ。
Introduction to NSPersistentDocument Core Data Tutorialよむといい。英語だが。

86 名前:名称未設定 mailto:sage [2007/06/13(水) 22:28:01 ID:tx1aMvDC0]
65です。
>>85さん
そうなんですがDocument-basedにすると、開いたウィンドウ毎に
CoreDataのファイルが作られてしまうのでダメなんです。
CoreDataのファイルは常に一つにしたいのでnon-Documentの
プロジェクトで作っています。

87 名前:名称未設定 mailto:sage [2007/06/13(水) 23:23:11 ID:Yueo7NwZ0]
>>86
single-model multi-windowにするには、
NSDocumentのmakeNewWindowControllerかwindowControllerClassをオーバーライドする。
と、俺様メモに書いてある。

自分で書いたメモなのに意味不明ですが、お役に立つでしょうか?


88 名前:名称未設定 mailto:sage [2007/06/13(水) 23:25:54 ID:jSrM7oaF0]
>86
>ファイルは常に一つにしたい

MyDocumentのinitで「常に一つ」を読み込むように実装したら駄目か。


89 名前:名称未設定 mailto:sage [2007/06/14(木) 01:30:25 ID:Cj65MRJ40]
>>84
まずエラーの内容は理解してる?
バインドした対象(File's Ownerの何かだと思うけど)がappDelegateというプロパティを持っていないということ
File's Ownerに設定したオブジェクトがappDelegateというアウトレットを持っているかどうかを確認、
持っているならFile's Ownerが正しくそのオブジェクトになっているかを確認する

>AppDelegateの中にFile->Newから呼ばれるActionを書いて、
>WindowControllerをalloc&initして
>WindowControllerのinitでNibをロードするように最初は書いていました。
>こういう書き方は良くないんでしょうか
それでたぶんあってる
詳しくはヒレガス本読め
で、WindowControllerをinitしたら
[windowController setValue:(managedObjectContextを持っているオブジェクト) forKey:@"appDelegate"];
で、セットしてやれば良い
つうかmanagedObjectContextを直接渡しても良いかな

>>87
それは一つのNSDocumentに対して複数のウィンドウを開くときじゃない?
developer.apple.com/jp/documentation/cocoa/Conceptual/Documents/Tasks/FAQ.html#//apple_ref/doc/uid/20000954

>>88
そうすると複数のウィンドウで同時に編集した場合、データの矛盾が起きると思う。
データストアは一つにしておいてそいつに対してバインドすれば
あるウィンドウでの変更は即座に他のウィンドウに反映されるので問題は起きないはず

90 名前:名称未設定 mailto:sage [2007/06/14(木) 02:57:57 ID:NSgFd5Po0]
>>84
ちょっと甘えすぎかも。

>MainMenu.nibでHogeControllerをインスタンス化してしまうと、
>複数ウィンドウの表示ができなくなってしまうと思っています。
HogeControllerはHoge_AppDelegate(単一のmanagedObjectContext)へのアクセスを提供しているだけなので問題なし。

>WindowControllerのinitでNibをロードするように最初は書いていました。
initってinitWithWindowNibName:owner:だよね。だったら問題なし。

>目指してるイメージは、HMDT赤本のチュートリアルにあるiTunesブラウザが、
>File->Newするたびに新しいウィンドウが増えていくイメージなんですが
>思うようにできないです...
>>82さんの書かれた方法で可能だと思うよ。

>ヒレガス本、近所の本屋にありませんでした...残念
CoreData、CocoaBinding、その他基本的なものはADCに翻訳されたドキュメントあるよ。
なんだかんだいってある程度分かってるようなので、それらをちゃんと読むのがいいんじゃない?



91 名前:名称未設定 mailto:sage [2007/06/14(木) 17:59:54 ID:xP8dIeTp0]
65です。
>>89さんのsetValue:forKey:をしたらできるようになりました。
わたしのバインディングに関する勉強不足でした

>>87さん、>>88さん
すいません。勉強不足でアドバイスの内容に追い付けません。。。

>>89さん
ご指摘の通りappDelegateにオブジェクトが設定がありませんでした。
>[windowController setValue:(managedObjectContextを持っているオブジェクト) forKey:@"appDelegate"];
をしたらエラーもなく表示できるようになりました。

>>90さん
>initってinitWithWindowNibName:owner:だよね。だったら問題なし。
[NSBundle loadNibNamed:@"Window" owner: self];
と書いてますがloadNibNamed:owner:はよくないのでしょうか

ADCの翻訳ドキュメントをもっと読んでみます。

92 名前:名称未設定 mailto:sage [2007/06/14(木) 18:06:48 ID:xP8dIeTp0]
65です。
参考にならないと思いますが、うまくいったコードです。
MainMenu.nib の hoge_AooDelegate のコード

##### hoge_AppDelegate.h
#import "WindowController.h"
@interface hoge_AppDelegate : NSObject
{
WindowController *windowController;
…この下に自動生成されたコードがあります…
}
- (IBAction)newWindow:sender;
…この下に自動生成されたコードがあります…
@end

##### hoge_AppDelegate.m
@implementation hoge_AppDelegate
- (IBAction)newWindow:(id)sender
{
windowController = [[WindowController alloc] init];
[windowController setValue:self forKey:@"hoge_AppDelegate"];
[windowController showWindow:self];
}
…この下に自動生成されたコードがあります…
@end

93 名前:名称未設定 mailto:sage [2007/06/14(木) 18:08:07 ID:xP8dIeTp0]
65です。
つづきです。

コントローラです。

#####WindowController.h
@interface WindowController : NSWindowController {
IBOutlet id window;
id hoge_AppDelegate;
}
@end

#####WindowController.m
@implementation WindowController
- (id) init{
[NSBundle loadNibNamed:@"Window" owner: self];
return self;
}
- (void) windowWillClose:(NSNotification *)aNotification
{
[self release];
}
@end

94 名前:名称未設定 mailto:sage [2007/06/14(木) 20:33:46 ID:cQfpjLW60]
>>93
最初はこんなもんかな。最後にアドバイスしとくね。

loadNibNamed:owner:は機能としては問題ないと思うけど、
NSWindowControllerを継承してるんだったら素直にinitWithWindowNibName:owner:使おうよ。
windowアウトレットはNSWindowControllerに最初からついてるし。
そうするとWindowControllerのinitとwindowWillCloseは不要になって、
- (IBAction)newWindow:(id)sender
{
windowController = [[NSWindowController alloc] initWithWindowNibName:@"Window" owner:nil];
[windowController setValue:self forKey:@"hoge_AppDelegate"];
[windowController showWindow:self];
}
こんな風にシンプルにできるよ。

ついでにinitWithWindowNibName:owner:のownerに適切なオブジェクトをセットすると、
[windowController setValue:self forKey:@"hoge_AppDelegate"];
も不要にできるけど説明がめんどい。

ま、がんばって。

95 名前:94 mailto:sage [2007/06/14(木) 20:46:30 ID:cQfpjLW60]
訂正。
- (IBAction)newWindow:(id)sender
{
windowController = [[WindowController alloc] initWithWindowNibName:@"Window" owner:nil];
[windowController setValue:self forKey:@"hoge_AppDelegate"];
[windowController showWindow:self];
}
つい「別にWindowControllerいらねーじゃん」の思いが出てしまいました。

96 名前:94 mailto:sage [2007/06/14(木) 21:08:57 ID:cQfpjLW60]
また訂正。スレ汚しごめん。
- (IBAction)newWindow:(id)sender
{
windowController = [[WindowController alloc] initWithWindowNibName:@"Window"];
[windowController setValue:self forKey:@"hoge_AppDelegate"];
[windowController showWindow:self];
}
owner:nilじゃ動かないよね。
限界だわ、もう寝る。

97 名前:名称未設定 mailto:sage [2007/06/14(木) 22:26:11 ID:2hMmY5410]
>>91
横から失礼します。
AppDelegateは[NSApp delegate]で参照できます。
ですから、わざわざvalueを渡す必要はないでしょう。
たとえばWindowControllerに
- (NSManagedObjectContext *) managedObjectContext {
return [[NSApp delegate] managedObjectContext];
}
とすれば、後はIBで設定するだけです。

動作確認できたらリファクタリングして、MainMenu.nibはmenuとAppDelegateのみにして、
残りはDocument.nib(?)に移行すると後々楽になると思います。

入手困難かもしれませんが、ヒレガス本をお薦めします。
長年NextStepのbootCampをしてきた人だけに、ツボを押さえた構成になっています。
bindingやcoredataはのっていませんが、notification等が不要になったわけではありません。
第3版が秋以降に予定されているらしいので、それの訳本が出るとよいのですが、、




98 名前:名称未設定 [2007/06/14(木) 23:15:33 ID:EPxV4jRU0]
すみません。
教えていただけますか?
NSScrollViewをscrollしたとき、ScrollViewにセットされているviewを再描画したいのですが、
どうすればよいですが?
よろしくおねがいします。

99 名前:89 mailto:sage [2007/06/15(金) 00:55:46 ID:Z8G4DJVj0]
>>97
>AppDelegateは[NSApp delegate]で参照できます。
そっか、CoreData使ったソフトは実際には作ったこと無かったのでそれは思いつかなかった。
>>82でちょっと回りくどいことを書いてすまんかった。
ただまあ>>65はCoreData以前のいろいろをちゃんと理解した方が良いな
WindowControllerの使い方にしても>>94のやり方が正解だし。
ということでヒレガス本をちゃんと読みなさい。
Try&Errorも時には必要だけど、わけわからないままむやみにあれこれいじっても効率悪いだけだから。

100 名前:名称未設定 mailto:sage [2007/06/15(金) 02:50:11 ID:bwuLJcag0]
>>98
NSViewBoundsDidChangeNotificationはどう?



101 名前:名称未設定 [2007/06/15(金) 14:58:04 ID:ylLFz9lv0]
>>100
ばっちり出来ました!!
ありがとうございます。

102 名前:名称未設定 mailto:sage [2007/06/15(金) 17:31:25 ID:sL1ajDrz0]
65です。
>>94さん
具体的なコードでのアドバイスありがとうございます。

>>97さん
NSAppというグローバル変数があるのですね、知りませんでした。勉強になります。
>- (NSManagedObjectContext *) managedObjectContext {
> return [[NSApp delegate] managedObjectContext];
>}
をWindowCOntrollerに書いてIBでバインドし直したら動作しました。
アドバイスありがとうございました。

>>89さん
バインディングについて指摘して頂きありがとうございました。
もっと勉強します。

みなさんからヒレガス本を読んだほうがよいというご指摘が多いので、
この週末に大きな本屋に行って探してみます。
なかったらアマゾンから注文してみようと思います。

みなさんからのアドバイスで一歩前進できました。
ありがとうございます。

103 名前:97 mailto:sage [2007/06/15(金) 21:57:45 ID:/Xj5L+Cq0]
>>102
何はともあれ動いて良かったですね。

ただ、これだけではundoが無効になります。
WindowControllerがwindowのdelegateになっているのを確認した上で、
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
return [[self managedObjectContext] undoManager];
}
をWindowControllerに追加しないといけません。

>NSAppというグローバル変数があるのですね、知りませんでした。勉強になります。
[NSApp currentEvent]を覚えておくと、いろいろ役に立つと思います。

それと、ご存じかもしれませんが、
Xcodeのソースで、メソッドやクラス等を
オプション+ダブルクリック、コマンド+ダブルクリックすると
役に立ちますよ。
例えば、NSAppをオプション+ダブルクリックしてみてください。

104 名前:名称未設定 mailto:sage [2007/06/15(金) 23:34:53 ID:cvg4tVdc0]
おお、横やりだがオプション+ダブルクリックは知らなかった。
これも便利だな。

105 名前:名称未設定 mailto:sage [2007/06/16(土) 07:38:36 ID:rwxtbdkR0]
65です
>>103さん
>- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
> return [[self managedObjectContext] undoManager];
>}
>をWindowControllerに追加しないといけません。
メニューの編集->取り消し、やり直しがディスエーブルされていましたが、
このコードを加えたらイネーブルになりました。
なんでこうなったのか仕組みがわかってないので調べてみます。

>Xcodeのソースで、メソッドやクラス等を
>オプション+ダブルクリック、コマンド+ダブルクリックすると
>役に立ちますよ。
わたしの場合は、メソッド、クラス名を選択して、
コントロール+クリックで表示されるコンテキストメニューから選んでいました。
ダブルクリックのほうが楽ちんですね。

アドバイスありがとうございます。

106 名前:名称未設定 mailto:sage [2007/06/17(日) 16:35:07 ID:xFWdidLR0]
他のアプリから作成したXMLファイルを自分のテーブルにインポートしたいのですが、
なにをどうすればよいのかさっぱりです。
どこか良いサイト、本などがありましたらお願いします。

107 名前:名称未設定 mailto:sage [2007/06/17(日) 18:17:50 ID:9BssyYOD0]
そのXMLファイルってのはplist形式なの?
だとしたら,NSDictionaryのdictionaryWithContentsOfFile:で読み込んでいじくればいいんじゃない?

というか,テーブルが何をさすのかがわからない.

108 名前:名称未設定 mailto:sage [2007/06/17(日) 18:51:44 ID:MIixfL/i0]
mkinoたんの本にXMLの説明あったよ

109 名前:名称未設定 mailto:sage [2007/06/17(日) 19:37:46 ID:WyfXqzgv0]
つNSXMLDTD

110 名前:名称未設定 mailto:sage [2007/06/18(月) 12:49:40 ID:FnK6EgKv0]
配列の要素値を参照する方法がわかりません。
他の言語みたいにarray[i]ではないのですか?
ネットでどこにも引っ掛からないのが不思議です。

あと配列の内容をテーブルビューに表示させるまでの方法も
さっぱりです。



111 名前:名称未設定 mailto:sage [2007/06/18(月) 12:55:48 ID:bgV1qYg60]
初学者向けの本を最初から最後まで読め。

112 名前:名称未設定 mailto:sage [2007/06/18(月) 13:06:28 ID:XFI7IqHh0]
>>110
配列の要素値を参照は普通にarray[i]でできない?
ひょっとして配列ってNSArrayの事じゃないよね。

テーブルビューについてはNSTableViewで検索してみなよ。
ま、DataSourceかNSArrayControllerを使えってことだよ。

113 名前:名称未設定 mailto:sage [2007/06/18(月) 22:16:32 ID:f97Z48MF0]
>>110
俺は、お前さんがどうやって配列を宣言できたのかの方がさっぱりわかりません。

114 名前:名称未設定 mailto:sage [2007/06/19(火) 00:44:29 ID:dgDst+1p0]
>>111-113
レスありがとうございます。配列は解決しました。
非常に単純なミスで要素値をログに吐く時に%dでフォーマットしてたので
変な数字しか出てこず、おかしいなあと悩んでいました。

>>112
NSTableView、DataSource、NSArrayControllerはなんとなくわかって定義しているのですが、
何をどうつなげていいのやら勉強中です。

115 名前:名称未設定 mailto:sage [2007/06/19(火) 23:11:33 ID:8mzcE2x00]
>>114
Bindingとか考えずに、基本的なやり方。

・IBで、TableViewのデータソースとなるオブジェクトを指定する。
 Controlキーを押しながらテーブルからインスタンスに向かってドラッグ
 インスペンタパネルの「Delegate」でDataSourceを指定する。

・そのままRun。すると「データソースとして振る舞うべきインスタンスに、
 以下のメソッドが定義されてないから、このテーブルは使えん」的な
 エラーがログに吐き出される。そこに挙げられたメソッドを自分で記述する。
 TableViewなら最低2つ。OutlineViewなら4つかな。

116 名前:名称未設定 mailto:sage [2007/06/19(火) 23:26:15 ID:44NwgBsm0]
一応定番サイトを貼っておく
hmdt.jp/cocoaProg/AppKit/NSTableView/NSTableView.html#section00

117 名前:名称未設定 mailto:sage [2007/06/19(火) 23:45:48 ID:5FjzRd/E0]
確かにバインディングって便利だけど、どんどん機能拡張していくと
途中から余計に面倒になって思考が停止していく...orz

118 名前:名称未設定 mailto:sage [2007/06/20(水) 00:15:31 ID:8LhrRklA0]
バインディング対応と非対応の差が激しくて、バインディング対応ばっかりで作るとどこかで見たアプリばっかりに成る罠。
変わったことをやろうとすると、バインディングで動くようにするのはかなり面倒。

119 名前:名称未設定 mailto:sage [2007/06/20(水) 00:31:22 ID:Fh609W9/0]
だからIBで完結するような処理なんかそんなもんだろ。
なんかコード書かなくてもアプリができるみたいな幻想にとらわれてない?

120 名前:名称未設定 mailto:sage [2007/06/20(水) 13:51:36 ID:NBL8VQHj0]
>>119
ない



121 名前:名称未設定 mailto:sage [2007/06/20(水) 13:58:11 ID:zIQZO1vl0]
今のIBは Binding が目で確認できないのが痛いです。
情報表示して Binding タブを選んでさらに各グループを開いて、、、
遠すぎだよ。

122 名前:名称未設定 mailto:sage [2007/06/20(水) 14:03:15 ID:qldLJWyJ0]
>>119
思い切りとらわれてた。
あっちとこっちを繋げてハイ出来上がり!って。
でも、結局はIBで簡単にUI作って細かい事はコードでってことになる。


123 名前:名称未設定 mailto:sage [2007/06/20(水) 21:59:07 ID:Dj3TYUsU0]
>>121
instancesタブのツリー表示のほうで、アウトレットの接続と同じように見えるよ。
見やすいかっていうと微妙だが。

124 名前:121 mailto:sage [2007/06/20(水) 22:14:45 ID:P4Zq1w7a0]
>>123
ほんまや!
微妙やけど無いよりましやな。
おおきに!

125 名前:名称未設定 mailto:sage [2007/06/20(水) 22:39:01 ID:tciIHlVd0]
バインディングやCoreDataって微妙な仕様が多いよねー
KVCを多用させるのも、いつまでたってもプロトタイプって感じがしてなんだかなー

126 名前:名称未設定 mailto:sage [2007/06/21(木) 00:31:41 ID:1kp6zXNr0]
KVCとプロトタイピングって関係ない。

127 名前:名称未設定 mailto:sage [2007/06/21(木) 01:05:19 ID:+f5dJFAD0]
>>115 >>116
ありがとうございます。なんとかできました。
csvファイルからインポートしてテーブルビューに表示させることができたのですが、
インポートするたびにエンティティにレコードが追加されていってしまいます。

インポート前にdeleteObjectでエンティティのレコードを全件削除をすれば解決するのですが、
なんだかちょっと手間がかかるというか、もっと簡単にエンティティをクリアする方法は
ないのでしょうか?

ご存知でしたらお願いします。

128 名前:名称未設定 mailto:sage [2007/06/21(木) 12:25:54 ID:tIJB3hhC0]
>>127
一件づつ deleteObject で削除するのでなく、一度に全件削除したいということ?
なら removeAllObjects で一気に削除できるけど。
NSArrayController 使ってるなら [[_arrayController content] removeAllObjects] で消えたはず。


129 名前:名称未設定 mailto:sage [2007/06/22(金) 19:40:14 ID:M8f2QNll0]
すいません、くだらない質問ですいません。
Quartz Composer.webplugin
って、コレ、標準で組込まれているんですか?
標準で組込まれているとしたら、
どのバージョンから入っているんですか?

130 名前:名称未設定 mailto:sage [2007/06/23(土) 17:43:44 ID:ANfoSVtM0]
スボットライト検索欄で、例えばスペース区切りでOR検索が
出来るようにするのは難しいんですかね?



131 名前:名称未設定 mailto:sage [2007/06/23(土) 17:48:27 ID:KW8qTWkE0]
>>130
Jobs|Gates : Jobs または Gates
Jobs(!Gates) : JobsかつGates以外
Jobs(Gates|Linus) : JobsかつGates、またはJobsかつLinus

132 名前:名称未設定 mailto:sage [2007/06/23(土) 21:06:01 ID:QUWKqEkv0]
すみません。テーブルビューののカラム表示でSQLの外部結合みたく、
別エンティティから同一キー(1対1の関係)のカラムを表示させるには、
テーブルカラムのバインディング設定だけでは難しいのでしょうか?

133 名前:名称未設定 mailto:sage [2007/06/23(土) 21:11:04 ID:JrUKG2eE0]
日本語でおk

134 名前:名称未設定 mailto:sage [2007/06/24(日) 15:08:55 ID:7icx36z80]
>>128
ありがとうございます。出来ました。

>>130
スボットライトではなくてNSSearchFieldのことでした。すみません。

例えばテーブルビューで「名前が"鈴木"かつ、年齢が"30"」といった
アンド検索が出来るようにしたいのですが、NSSearchFieldに
「鈴木 30」といったように入力して検索出来ればなあと。


135 名前:名称未設定 mailto:sage [2007/06/24(日) 16:35:48 ID:sW58ZoIj0]
そういうことが出来るようにするのがプログラミングじゃないのか。

136 名前:名称未設定 mailto:sage [2007/06/24(日) 21:23:09 ID:oj7fKo9L0]
>>134
NSSearchField自体は検索機能を持ってないから,
結局その部分を自分で実装すればいいだけの話.

137 名前:名称未設定 mailto:sage [2007/07/01(日) 00:21:27 ID:5L+q9KzS0]
そうそう、バインディング使わずに、基本的なウィンドウだけIBで作ってあとはコントローラ側から弄った方が速いしいろいろ出来る。

実用的なものを作ろうとすると、自分で実装しないと使えないのが多いよな。
マクが好きって幻想だけでがんばるのは辛い。orz
人海戦術も出来て儲けも桁違いに稼げるウィンドウズの方が全然魅力的だったり。orz

138 名前:名称未設定 mailto:sage [2007/07/01(日) 00:50:57 ID:EwoNhQlG0]
C++勉強するのが面倒だからObjective-Cが好きな俺は趣味PG

139 名前:名称未設定 mailto:sage [2007/07/01(日) 21:33:09 ID:xbcqJltA0]
テーブルビューなどでマウスホイールやクリックなどのイベントを拾うには
どうすれば良いのでしょうか?

検索すると- (void)mouseDown:(NSEvent*)theEvent;などが出てくるのですが、
これをどうやって使うのかがわかりません。
(NSResponderをどこで設定してどこに繋げたりするのかさっぱり)

非常に厨というか根本的な質問ですみません。


140 名前:名称未設定 mailto:sage [2007/07/01(日) 21:43:18 ID:U0TJz2SZ0]
>>139

・InterfaceBuilderで、NSTableViewのサブクラスMyTableViewを作る。
・自分の用意しているインタフェース上のViewを、NSTableViewからMyTableViewに変更する。
・MyTableViewのファイルを書き出して、その@implementation内で
 - (void)mouseDown:(NSEvent*)eventなんかを上書きする。



141 名前:名称未設定 mailto:sage [2007/07/02(月) 01:31:45 ID:/cUmymHP0]
>>140
ありがとうございます。なんとなくわかってやってみたのですが、

>・自分の用意しているインタフェース上のViewを、NSTableViewからMyTableViewに変更する。
IBOutlet NSTableView *fooTableView;

IBOutlet MyTableView *fooTableView;
に変更して、

MyTableView.mで、
- (void)mouseDown:(NSEvent*)theEvent
{
NSLog(@"hello");
}

とやってマウスをクリックしてみたのですが、ログが出力されません。

なにか足りない記述があるのでしょうか?






142 名前:名称未設定 mailto:sage [2007/07/02(月) 01:47:44 ID:qDAYMWUG0]
>>141
>>・自分の用意しているインタフェース上のViewを、NSTableViewからMyTableViewに変更する。
>IBOutlet NSTableView *fooTableView;
>↓
>IBOutlet MyTableView *fooTableView;
>に変更して、
ソースコードの方だけじゃなくて、Nibファイルも変更しないとインスタンスは変わらないよ

1) InterfaceBuilder上で、MyTableViewにしたいNSTableViewのインスタンスを選択する。
2) Inspectorウインドウの上の方に付いているポップアップメニューから"Custum Class"を選ぶ
3) Class 一覧からMyTableViewを選ぶ

MyTableViewがClass一覧から選べない時は、IBのメインウインドウにヘッダーファイルを突っ込む。


143 名前:名称未設定 mailto:sage [2007/07/02(月) 12:13:39 ID:qJAV3pLe0]
最近、テーブルビューがらみの厨な質問を乱発してるのって、同じ人?

144 名前:名称未設定 mailto:sage [2007/07/02(月) 13:17:36 ID:5wPz1kBF0]
そうです。
すみません。

145 名前:名称未設定 mailto:sage [2007/07/02(月) 16:11:36 ID:Ne8YEXNf0]
ヒレガス本くらい読んどけよ。

146 名前:名称未設定 mailto:sage [2007/07/07(土) 19:07:56 ID:odX4zdaf0]
NSMutableDictionary があって、中身のキーを一つずつチェックして、キーがある条件を
満たしたら対応するオブジェクトを処理する、ということをしたいのですが、

これ、 -keyEnumerator を使ってやるのはよくないみたいですね。
(enumerate している間に dictionary の構造が変わるとまずいからでしょうが)
でもバリューのオブジェクトの値を変更するぐらいは許してほしいような。
どうやるのが正解(?)なんでしょう。

147 名前:97 mailto:sage [2007/07/07(土) 20:46:14 ID:hFhQDWhy0]
>>146
Collections Programming Topics for Cocoa
より引用
Enumerators: Traversing a Collection’s Elements

It is not safe to remove, replace, or add to a mutable collection’s elements while enumerating through it.
If you need to modify a collection during enumeration,
you can either: make a copy of the collection and enumerate using the copy;
or, collect the information you require during the enumeration and apply the changes afterwards.
The second pattern is illustrated in the following example.

NSMutableDictionary *myMutableDictionary = ... ;
NSMutableArray *keysToDeleteArray =
[NSMutableArray arrayWithCapacity:[myMutableDictionary count]];
NSString *aKey;
NSEnumerator *keyEnumerator = [myMutableDictionary keyEnumerator];
while (aKey = [keyEnumerator nextObject]) {
if( /* test criteria for key or value */ ) {
[keysToDeleteArray addObject:aKey];
}
[myMutableDictionary removeObjectsForKeys:keysToDeleteArray];

148 名前:名称未設定 mailto:sage [2007/07/08(日) 00:08:08 ID:RHnYtpKj0]
>>146
削除だけなら>>147でよさそうだけど、値の変更もしたいならallKeys の
NSArray でループするのが楽かな。
If you intend to modify the entries, use the allKeys method
to create a "snapshot" of the dictionary's keys. Then use this
snapshot to traverse the entries, modifying them along the way.

149 名前:名称未設定 mailto:sage [2007/07/09(月) 00:06:39 ID:MKmnIjZg0]
長時間費やしたのですが解決しなかったので質問させてもらいます。
ウィンドウ上に置いたボタンはsetKeyEquivalentで設定したキーで動作できるのですが、
ボタン上にaddSubviewして置いたボタンはsetKeyEquivalentをしてもキーで動作しません。
レスポンダチェイン周りを調べて自分なりに試行錯誤してみましたが解決しませんでした。
どうすれば動作するでしょうか?よろしくお願いします。

150 名前:149 mailto:sage [2007/07/09(月) 06:57:44 ID:MKmnIjZg0]
NSResponderを継承しているviewたちをウィンドウに配置してキーを押せば
performKeyEquivalentに入って来ます。上書きしてNSLogで確かめてみました。
しかしNSButtonにaddSubviewしたviewだと反応しないです。
acceptFirstResponderをYESで上書きしたりmakeFirstResponderを試しましたがダメでした。
けどなぜかNSSliderにaddSubviewした場合は反応しました。
まだ謎が解けません、、、お力添えをお願いします。



151 名前:名称未設定 mailto:sage [2007/07/09(月) 12:24:49 ID:MtZ2kM7T0]
NSButton が performKeyEquivalent を拾っているから、subview にはいかないということではなくて?


152 名前:149 mailto:sage [2007/07/09(月) 15:51:27 ID:6JIdbr8F0]
キーを押すと警告音がなるのでNSButtonはperformKeyEquivalentを拾っていないようです。
ためしにボタンのサブクラスでperformKeyEquivalentをreturn NOで上書きしてみましたが、
ボタン上のviewに処理が回ってこないという状態です。

153 名前:名称未設定 [2007/07/09(月) 17:37:28 ID:uzTm6K720]
>>152
試してみたけどsubviewのperformKeyEquivalentは呼ばれないみたいね。
対症療法だけどNSButtonのサブクラスを作ってperformKeyEquivalentを書くのはどう?

@implementation MyButton

- (BOOL)performKeyEquivalent:(NSEvent *)anEvent {
NSEnumerator* enumerator = [[self subviews] objectEnumerator];
id subview;

BOOL result = NO;
while ( ( subview = [enumerator nextObject] ) && !result )
result = [subview performKeyEquivalent:anEvent];

if ( !result )
result = [super performKeyEquivalent:anEvent];

return result;
}

@end

154 名前:名称未設定 mailto:sage [2007/07/09(月) 17:41:11 ID:2FPmw6nT0]
そもそも、ボタンの中にボタンを配置するって
おかしいと思わんのか

155 名前:名称未設定 mailto:sage [2007/07/09(月) 17:57:18 ID:MZpOL97p0]
>>154
みんな分かってるけど、それに突っ込むとどうなるかも知ってるからじゃね?

156 名前:名称未設定 [2007/07/09(月) 18:03:05 ID:uzTm6K720]
>>154
いや、それはそれで面白いインターフェースかもと思って試してた

157 名前:146 mailto:sage [2007/07/09(月) 18:25:05 ID:LonmC7zt0]
>>147 >>148
どうもありがとうございます。ちゃんとドキュメントを探すべきでした。
自分の場合値を変更するので >>148 のやり方になるんでしょうね。

158 名前:149 mailto:sage [2007/07/09(月) 21:47:15 ID:HHAS6qp/0]
NSButtonの上にボタンを、と例を挙げましたが実際にはボタンやビューということでした。
www.pinkapple.tv/uploads/general20070709213058.jpg
左は通常時で右がdrawRectを上書きしたビューをボタン上に配置したものです。
この状態でボタンもビューも独自にperformKeyEquivalentを動作させたかったのです。
(ビューにテキストを表示したり、ビューが他の色、他の機能のものに置き換わったりするので
ボタンの見かけを変えるだけではダメなのです)
ウィンドウ上でなくてボタン上に配置したかったのは、ボタンとビューとでいろいろとデータのやり取りをするのでsuperViewとsubViewの関係にした方が処理が楽だったからです。
ということで>>153さんの方法を試してみます。ありがとうございます。

159 名前:149 mailto:sage [2007/07/10(火) 05:34:16 ID:TgqP272E0]
>>153さんの方法でできました。
いろいろ調べるとperformKeyEquivalentメソッドはNSResponder、NSView、NSButtonで記述、上書きされていて、NSViewのperformKeyEquivalentは自分のsubviewに処理を送る機能があるようです。
なおかつsubviewへのperformKeyEquivalentが誰も反応しなければNOが返ってきてview自身の処理を行います。
>>153さんのはまさにそれらの機能をコードで記述したものになってます。ありがとうございました。

160 名前:名称未設定 mailto:sage [2007/07/11(水) 02:27:35 ID:q/pS70mE0]
いつもお世話になってます。

困っているので助けてください。

NSDrawerを作成し、ウィンドウにくっつけてtggleで動かしています。
ドロワーを開いたまま、ドロワーが画面外になるまでウィンドウを右に動かした後で
ウィンドウを左に持ってくるとドロワーが消えてしまいます。

myDrawer = [[NSDrawer alloc] initWithContentSize:NSMakeSize(300,300)preferredEdge:NSMaxXEdge];
[myDrawer setParentWindow:myWindow];
[myDrawer setContentView:myView];

としているだけなのですが、どなたか原因をご存知でしたら教えてください。



161 名前:名称未設定 mailto:sage [2007/07/11(水) 05:48:22 ID:4RHpXxKf0]
上のコードをコピペしてやってみましたが、おっしゃる現象は起きませんでした。
何かmyViewかmyDrawerに追加してる機能が邪魔してるのではないでしょうかね。

162 名前:160 mailto:sage [2007/07/12(木) 01:10:46 ID:Mzn5q1ga0]
>>161

ひとつだけ気になることがありました。ドロワーを開いた際にその下のウィンドウを
触らせたくないので、
-(void) drawerDidOpen:(NSNotification *)notification
{
 [NSApp runModalForWindow:myWndow];
}

-(void) drawerDidClose:(NSNotification *)notification
{
 [NSApp stopModal];
}

としています。これがいけないのでしょうか?

163 名前:名称未設定 mailto:sage [2007/07/12(木) 04:01:55 ID:DjNHr2pC0]
>>162
問題の切り分けくらい自分でやりなよ。
そこまで面倒みきれない。

164 名前:名称未設定 mailto:sage [2007/07/12(木) 04:02:28 ID:byx4vDAn0]
>>162
ちょっとやってみましたがnotificationがうまくとれなかったので;確認できませんでした。
申し訳ない。

165 名前:名称未設定 mailto:sage [2007/07/12(木) 09:45:28 ID:0PLO2dIL0]
>>162
これがいけないのでしょうかってそこをコメントアウトすれば、いけないかどうかくらいすぐわかるだろうが
他人にいちいち確認のコードを書かせる気か?

166 名前:164 mailto:sage [2007/07/12(木) 22:05:35 ID:pjCoXtAi0]
興味本位でやってみたんだけど、間違った行動だったと反省してます。
まぁ答え出てないから意味ないけど。

167 名前:名称未設定 mailto:sage [2007/07/12(木) 23:06:17 ID:N2Qo+TtK0]
Cocoa Bindingで質問です。
テキストフィールドの更新がBindingで行われるように組んだときに、
モデルの属性がごく短時間に何度も更新された場合、アプリがしばらく
固まってしまうのですけれども、これを解決するのに皆さんならどの
ような手法をとりますか?

>ttp://blog.so-net.ne.jp/MyCometG3/2007-07-12-1

168 名前:名称未設定 mailto:sage [2007/07/15(日) 03:38:01 ID:bqGSj8YO0]
>>141
IB上でNSTableViewをダブルクリックして、
InspectorウィンドウのCustom Classde
MyTableViewに設定する。
シングルクリックだとNSScrollViewがフォーカスされるので注意。

169 名前:名称未設定 mailto:sage [2007/07/15(日) 03:38:59 ID:bqGSj8YO0]
すげー亀レスorz

170 名前:名称未設定 mailto:sage [2007/07/15(日) 15:09:30 ID:iC/f5XUF0]
NSPredicateで文字列「book」でフェッチしたあとに
「bookmark」など前回の文字列に付加した形の文字列で
フェッチするとひっかかりません。

毎回nilでクリアするしなかいのでしょうか?



171 名前:名称未設定 mailto:sage [2007/07/16(月) 07:20:46 ID:qlrw2Rv40]
やっぱり凝った事をやろうとすると手間だよな。orz
まあマクだからって簡単にプログラム作れる訳は無いのだが。

172 名前:名称未設定 mailto:sage [2007/07/18(水) 01:22:09 ID:BRL0N5ZO0]
すみません。基本の基本なのかもしれないのですが…

Objc01.m
Objc02.m
と、二つのクラスファイルがあったとします。

objec01.m
のinitメソッドの中で、例えば
MyObj* varInObjec01;
varInObjec01 = [ [MyObj* alloc] init ];
[varInObjec01 setVar:1];
などと、MyObj をvarInObjec01としてインスタンス化して
インスタンス変数を定義しました。
この時点で、objec01はvarInObjec01を持っていて、その中のVarには
1がセットされています。このVarは、objec01の別のメソッドで参照されたり
加工されたりします。

Objc02.mの別のメソッドの中で、objec01.m でインスタンス化した
varInObjec01にアクセスし、インスタンス変数 Var を取り出すには
どのようにすれば良いのでしょうか?
Objc02の中でobjec01をインスタンス化しても、別のインスタンスなので
同じインスタンス変数を持っていない状態になります。

どなたかお教えください。よろしくお願いします。

173 名前:名称未設定 mailto:sage [2007/07/18(水) 02:11:57 ID:/hOqb68d0]
>>172
どっか別のところでインスタンス化した object01 を
object02 から参照できる変数に保持しておけば済む話だろう。
object02 のインスタンス変数として保持するか
あるいはグローバル変数として保持するか
その方法は時々によって違うだろうが。

174 名前:名称未設定 mailto:sage [2007/07/18(水) 02:45:39 ID:3sY2PtI30]
便乗して質問しますが、
.hファイルの中で
@interface MyButton : NSButton
{
NSString *myParameter;
}
と宣言するのと、.mファイルの中で
@implementation MyButton
NSString *myParameter;
と宣言するのはどう変わってくるのでしょう?

175 名前:名称未設定 mailto:sage [2007/07/18(水) 03:58:40 ID:ubS40ed30]
前者はMyButtonのインスタンス変数で、後者は単なるグローバル変数

176 名前:名称未設定 mailto:sage [2007/07/18(水) 04:45:10 ID:3sY2PtI30]
どちらの場合も
-(NSString *)getString{
return myParameter;
}
みたいな感じで外部から取得したり、考えずに使えているので使い分けが分からないんです。
インスタンス変数とグローバル変数ググってきます。

177 名前:名称未設定 mailto:sage [2007/07/18(水) 10:03:54 ID:8GU8wJyL0]
>>176
ごく簡単に説明するとインスタンス変数は使っていいけどグローバル変数は使っちゃダメ

178 名前:名称未設定 mailto:sage [2007/07/18(水) 10:06:43 ID:3sY2PtI30]
>>177
分かりました。
そのインスタンスに持たせたいパラメータはちゃんと.hファイルに記述してインスタンス変数にします。
ありがとうございます。

179 名前:名称未設定 mailto:sage [2007/07/18(水) 11:17:24 ID:Avgak43d0]
「何のために」共通のインスタンスが必要なのかがわかれば、助言の一つも出せるのだが。

180 名前:名称未設定 mailto:sage [2007/07/18(水) 14:01:53 ID:3sY2PtI30]
>>179
例えば、.mファイルの中で

BOOL bool; //グローバル変数を宣言
- (void)method{
if(bool){} //処理1
else{} //処理2
}
- (void)changeBool:(BOOL)flag{
bool = flag;
}

という感じだとどうでしょう?
例えなのでmethod自体がBOOLをとるように書き直すというのは無しで。
普段パラメータは.hファイルの中に書いてるんですが、上の方で質問させていただいたように
使い分け、というかグローバル変数が好ましくない理由、状況がまだ今ひとつ掴めてません。。



181 名前:名称未設定 mailto:sage [2007/07/18(水) 14:26:05 ID:Avgak43d0]
根本的な部分が分かってないのか。
とりあえず、
BOOL bool;
は原則禁止!
static BOOL bool;
で。(もちろん例外はあるが今は考えなくていい)

で、 >180 は
あるインスタンスの動作を変更すればその属するクラスおよびサブクラスのすべてのインスタンスの動作が変更される
ことを意図しているのであれば正解。
但しその場合は意図を明確にするためインスタンスメソッドではなくクラスメソッドによって動作を変更するようにする。
- (void)changeBool:(BOOL)flag じゃなくて
+ (void)changeBool:(BOOL)flag

そうではなくて、インスタンスごとに別々の動作を持つようにするのであれば、間違い。


通常クラス定義ファイルに宣言定義された静的大域変数はクラス変数と呼ばれる。
クラス変数はすべてのインスタンスに共有されるため、その変更はすべてのインスタンスに影響を与える。
インスタンス変数はインスタンスごとに別のものとなるため、変更はインスタンスの中にとどまり他のインスタンスに影響を与えない。


182 名前:名称未設定 mailto:sage [2007/07/18(水) 20:19:29 ID:3sY2PtI30]
なるほど、凄く分かりました!試しにNSButtonのサブクラスの.mを以下のように記述し、ウィンドウに複数配置してみました。

static int parameter1;
- (BOOL)sendAction:(SEL)theAction to:(id)theTarget{
NSLog(@"parm1 %d", parameter1);
parameter1++;
return [super sendAction:theAction to:theTarget];
}

別々のインスタンスでもこのパラメータが共有されてることが分かりました。これがクラス変数なんですね。
今回元のメソッドの上書きで試しましたが、+のクラスメソッドで書く意味もよく分かりました。
これを知らないために今までボタンの全パラメータを変更する時に、ボタンの配列すべてに同じメソッドを送っていましたorz

183 名前:名称未設定 mailto:sage [2007/07/18(水) 21:03:40 ID:3sY2PtI30]
↑全ボタンのパラメータ、の間違いでした。
staticはよそから干渉されないように局所的な変数にする、staticをつけないと外部変数と理解しました。
試しに上記のコードからのstaticを外し、まったく同じコードの別のNSButtonのサブクラスを作ってみたら
ちゃんとパラメータが共有されました。凄く勉強になりました。ありがとうございました。

184 名前:名称未設定 mailto:sage [2007/07/19(木) 02:06:33 ID:a3+jGlIB0]
ちなみに,そのstaticを付けた変数を「クラス変数」という.

185 名前:名称未設定 mailto:sage [2007/07/19(木) 03:06:04 ID:U9xJQ7gH0]
Objective-C にはクラス変数なんてありません。

186 名前:名称未設定 mailto:sage [2007/07/19(木) 10:05:30 ID:gCGzQvIn0]
クラスオブジェクトが持つ変数はクラス変数じゃないのか?

187 名前:名称未設定 mailto:sage [2007/07/19(木) 10:16:57 ID:A6zlNdun0]
どんな教科書(資料)で勉強したの?

developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_4.html#TPXREF118

しかし、クラスオブジェクトの変数を指定することはできません。つまり、インスタンス変数に対応する「クラス変数」はありません。...

... 一部のクラスは、静的な変数を宣言し、それらを管理するクラスメソッドを提供します
(クラス定義と同じファイルで static 変数を宣言すると、その有効範囲は当該クラスのみ、厳密には当該ファイルに実装されたクラスの部分に限定されます。
インスタンス変数と異なり、サブクラスは静的な変数を継承できません)。

188 名前:名称未設定 mailto:sage [2007/07/22(日) 10:56:58 ID:rhiDTEck0]
BOOL isNibLoaded = [NSBundle loadNibNamed: nibFileName owner: self];

という一行がうまく動かず困っています。
デバッガで追うと、この行に達すると、次の行以降のブレークポイントで
止まらなくなるので、ここで処理を抜けてしまっている感じです。

nibFileName には、正しく値が設定されているのですが、
nib が読み込まれていれば、表示されるはずのウインドウが
表示されません。

[NSBundle loadNibNamed: nibFileName owner: self]
が失敗するのは、どういうケースが考えられるでしょうか。

189 名前:名称未設定 mailto:sage [2007/07/22(日) 11:14:20 ID:/m9PDaPq0]
>>188
>nibFileName には、正しく値が設定されているのですが、
>nib が読み込まれていれば、表示されるはずのウインドウが
>表示されません。

本当に正しく値が設定されているという自信はあるのか?

190 名前:188 mailto:sage [2007/07/22(日) 11:45:38 ID:rhiDTEck0]
>>189
あります。

ちなみに nibFileName のところに、@"test" など、いい加減な string を入れると、
isNibLoaded には NO が帰ってきて、普通に次の行以降のブレークポイントへ
進みます。

上記を試してみて思ったのですが、nibFileName に指定している nib 内の
バインディングの設定に間違いがある、とか、そういうのかも知れません。

でもそれを確かめる方法や、nib(特にバインディングの設定)の良い
デバッグ方法がわかりません。




191 名前:名称未設定 mailto:sage [2007/07/22(日) 16:02:33 ID:aRES5gfc0]
awakeFromNib が loadNibNamed:owner: 呼び出し中に呼ばれるから、何か実装してるなら
それを一度コメントアウトしてみる。

nibファイルを一度、新規作成して何も変更してないものと置き換えてみる。

とかやってみるのはどうでしょう。

192 名前:名称未設定 mailto:sage [2007/07/22(日) 17:11:47 ID:1Do/ZYGN0]
その前にデバッガコンソールの存在に気づいているかが気になる。

193 名前:名称未設定 mailto:sage [2007/07/22(日) 17:24:50 ID:rLqo+Xbu0]
nib によって読み込まれるインスタンスの awakeFromNib 内に loadNibNamed: あると
無限ループになる

194 名前:188 mailto:sage [2007/07/22(日) 17:58:58 ID:rhiDTEck0]
>>191-193
ありがとうございます。

nib のバインディングの設定を一つ一つはずしていって、
バグの場所を発見できました。

nib のバインディングのデバッグにはいつも苦労するのですが、
何かもっと良いやり方はあるでしょうか。


>>191
awakeFromNib が呼ばれるのは、loadNibNamed:owner: が
「YES を返した後」ではないでしょうか。

今回のバグの場合、awakeFromNib の1行目に置いた
ブレークポイントにも到達しませんでした。

195 名前:名称未設定 mailto:sage [2007/07/22(日) 18:33:07 ID:VUxjnHCb0]
>>194
>バインディングのデバッグ
バインディングはあんまりやってないけど、consoleメッセージとexceptionはいているなら
gdb> break -[NSException raise]
でなんとかなってる。

196 名前:名称未設定 mailto:sage [2007/07/22(日) 22:26:11 ID:gT1REgB20]
CoreData の Document-based について質問です。

新しいデータが挿入されたときに初期値として、現在そのエンティティに
入っているデータの数を設定すると言う処理を考えています。

Document-basedの場合は、データのやり取りは、NSPersistentDocument
(MyDocument.mとします)の ManagedObjectContext を使う、と言う解
釈では間違えていますでしょうか?

まず、CoreDataモデルからサブクラスを作りました。(MyManagedObject.mとします)
この中の
- (void)awakeFromInsert
に、同処理を実装しようと思います。

MyDocument.m
MyManagedObject.m
二つの実装ファイルがある状態です。

awakeFromInsert の中で、MyDocument に実装した
- (void) setMyManagedObject:(NSManagedObject* )MyManagedObject
を、引数にself(MyManagedObject自身)を指定して呼び出します。

197 名前:つづき mailto:sage [2007/07/22(日) 22:27:21 ID:gT1REgB20]
- (void) setMyManagedObject:(NSManagedObject* )MyManagedObject
内では、[self managedObjectContext]で取得したmanagedObjectContextで
総数を数えるときと、[MyManagedObject managedObjectContext]で取得した
もので数えるときでは結果が違います。

後者[MyManagedObject managedObjectContext]で処理したものであれば正確な
数が出ますが、前者[self managedObjectContext]で取得したものでは間違えた数字が
出ます。(0になります)

[MyManagedObject managedObjectContext]を使って処理した場合、
managedObjectContextが二つになってしまうせいなのか、nibファイル内でFile's Ownerに
指定したMyDocumentとBindingしているNSArrayController のアクション add: を使うと、
Tableviewには同じデータが二つ表示されてしまいます(表示だけ)

そもそも、サブクラスとして作ったMyManagedObjectは、MyDocument の
ManagedObjectContext を使わずに別の(独自の?) ManagedObjectContext を持つのでしょうか?
流儀として、どちらの ManagedObjectContext を使うべきなのでしょうか?

わかりやすく書こうと思って書いたのですが、伝わりますでしょうか…

198 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 09:08:45 ID:++cxbJD10]
NSSliderからのアクションを
- (IBAction)myAction:(id)sender{
NSLog(@"action");
}
と受けると、スライダーのmouseDown、mouseDrag、mouseUpのタイミングでアクションが送られてくるようなのですが、
これを、この受け手側のmyAction内で分類できないでしょうか?
スライダーのサブクラスを作らなくてもこれらが分類できればいいなと思いまして。
御教授願います。

199 名前:198 mailto:sage [2007/07/29(日) 11:23:33 ID:++cxbJD10]
自己解決
- (IBAction)myAction:(id)sender{
NSEvent *event = [[NSApplication sharedApplication] currentEvent];
if ([event type] == NSLeftMouseDown) {}
if ([event type] == NSLeftMouseUp) {}
}
のようにすればマウスの動作を分類できました。
しかしこの方法だとなぜか、重いQuickTimeMovieを動かしている時に
mouseUpの方を取りこぼしてしまうので、やっぱりスライダーのサブクラスを書いてみようと思います。

200 名前:名称未設定 mailto:sage [2007/08/02(木) 07:44:39 ID:coNJlctT0]
う〜
NSMailDelivery でケータイに日本語メール送ると文字化けしちゃう。

deliverMessage:subject:to:
で送ったメールのヘッダを見ると、
Content-Type: text/plain; charset=US-ASCII; format=flowed
Content-Transfer-Encoding: base64
ケータイがデコードできないんでしょうね。

Cocoaはやっぱり!の
ttp://www1.big.or.jp/~crane/cocoa/0800_internet/messageSend.html
を見ると、日本語メールは
Content-Type: text/plain; format=flowed; charset=iso-2022-jp
で勝手にエンコードされますよ、と書いてありますが、
Messageフレームワークの仕様が変わったのでしょうか?

deliverMessage:headers:format:protocol:
ならどうかと、ヘッダをセットして送信してみましたが、
Content-Type: は置き換わらないようです。



201 名前:名称未設定 mailto:sage [2007/08/03(金) 03:55:22 ID:LeRHiyYZ0]
>>200
関係ないかもしれないけど、Mail.app は言語環境を英語にして起動すると UTF-8 で送信される

202 名前:200 mailto:sage [2007/08/03(金) 06:14:19 ID:9xPJ2l+O0]
>>201
はい、言語環境が関係ありそうですが、日本語なんですよねえ。

しょうがないのでAppleScriptでMail.appつついて送信したら、
ISO-2022-JP で送れましたので、とりあえずこれで良しとします。

203 名前:名称未設定 mailto:sage [2007/08/03(金) 10:34:05 ID:mJ4qs93D0]
>>202

言語設定以外に、そのアプリが日本語にローカライズされててもダメ?

204 名前:200 mailto:sage [2007/08/03(金) 17:13:45 ID:9xPJ2l+O0]
>>203
はい、ローカライズしてます。
Localizable.strings(Japanese) から文字取れてますし、
Info.plist の CFBundleDevelopmentRegion を Japanese にしても一緒でした。
他に触るとこなかったかな?

205 名前:名称未設定 mailto:sage [2007/08/03(金) 18:39:40 ID:RMVio4XF0]
mail.appの文字コード自動判定がEudoraに比べて手厳しく
機種依存文字が含まれていると、
Content-Type: text/plain; charset=US-ASCII; format=flowed
Content-Transfer-Encoding: base64
になり、相当苦しみました。

素人なんで文字コードまでお勉強できてないのですが。。。

206 名前:名称未設定 mailto:sage [2007/08/03(金) 22:49:36 ID:zBWSwrqo0]
しかし NSMailDelivery ってどのぐらい Mail.app と連携してるんだろ。
なんとなく、単独で使えるようにはあまりメンテされてない感が...

しかし、今日び複数アカウントがあり、それぞれメールの送受信法が違うし、
メールの中身もいろんなものがあり、たかがメールを送るのも大変だよな。

207 名前:名称未設定 mailto:sage [2007/08/04(土) 00:06:43 ID:N6Lu9KO20]
NSMailDeliveryはAPIを見る限り、
貧弱すぎてMail.appでバリバリ使っているとは思えないよね。
NSMailDeliveryってヘッダ見ると1997のままだけど10年放置なの?
JavaMailレベルとは行かないまでも、もっと拡張してほしい。

208 名前:名称未設定 mailto:sage [2007/08/04(土) 09:56:01 ID:zNZwO1rZ0]
Cocoa Bindings で NSTextField に文字を表示させてるのですが、
表示させる文字を setValue: forKey: で更新すると、それまで表示していた文字と、
新しい文字とが重なって表示されてしまいます。

例えば今まで「十」の文字を表示していたところに、「口」の文字をセットすると
その2つが重なり合って、「田」みたいになってしまうのです。

バインディングの設定のせいなのか、コードに誤りがあるのかもわかっていません。
上書きされたはずの文字「十」は、誰が保持しているのでしょうか。


209 名前:名称未設定 mailto:sage [2007/08/04(土) 11:30:03 ID:I4XWeUY/0]
>>208
>新しい文字とが重なって表示
ウインドウリサイズ等して再描写しても?
Application delegateにKVを持たせ、NSButton>appDelegate action内でsetValue:forKey:してみたけど意図通りになった。

210 名前:208 mailto:sage [2007/08/04(土) 12:00:03 ID:zNZwO1rZ0]
>>209
ありがとうございます、再描画したらきちんと表示されました。
再描画せずにきちんと表示するには、何が足りないでしょうか。



211 名前:208 mailto:sage [2007/08/04(土) 12:01:03 ID:zNZwO1rZ0]
>>再描画せずに

すみません。
リサイズなどをしなくても再描画するには、何が足りないでしょうか。

212 名前:名称未設定 mailto:sage [2007/08/04(土) 12:51:34 ID:I4XWeUY/0]
>>211
setter(内で値の加工をしている?内で他のオブジェクトにsetしている?)やKVOを見直したほうが
いいと思うけど、再描写は
[nsview setNeedsDisplay: (BOOL)]
か(他のスレッドからなら)
[nsview display] または、[[nsview superview] display]

213 名前:208 mailto:sage [2007/08/04(土) 14:16:03 ID:zNZwO1rZ0]
>>212
setter は、

- (void) setName:(NSString *) aString {
[aString retain];
[name release];
name = aString;
}

となっています。
view に対して再描画させるとなると、
バインディングを使っている意味が薄れるので、
自分としても KVC/KVO で対処したいのですが‥。


214 名前:名称未設定 mailto:sage [2007/08/04(土) 15:32:11 ID:I4XWeUY/0]
NSValueTransformerサブクラスで(NSString*)valueを100回リピートする。"十"→"十十十…"
action内、setValue:forKey: を呼び出す所を1000回実行ってやってみたけど、重くなるだけで乱れは起きない。
負荷と思ったんだけど違ったか。(G4 single)
ttp://www.vipper.org/vip576764.png.html

>>213
>[name release]; // ここで[obj name]が呼び出されたら?
>name = aString;

- (void) setName:(NSString *) aString {
  id tmp = name;

  name = [aString retain];
  [tmp release];
}


+ (BOOL)accessInstanceVariablesDirectly を使っている?いない?

215 名前:名称未設定 mailto:sage [2007/08/09(木) 20:05:40 ID:rPPfUlyN0]
NSViewの上にNSImageを並べて表示させたいのですが、さっぱりです。


216 名前:名称未設定 [2007/08/09(木) 21:10:54 ID:tas9QJXw0]
Cocoa使ってるとよくCarbonのAPIを呼び出さなければならないことがありますけど、
いっそ入門Carbonとか読んでみた方がいいですかね

217 名前:名称未設定 mailto:sage [2007/08/09(木) 22:55:25 ID:msAuLRcc0]
>>214
ってゆうかそれだって例えば他のスレッドが [obj setName:]をほぼ同時に呼んだら
アウトだろ。

218 名前:名称未設定 mailto:sage [2007/08/09(木) 23:31:14 ID:nEMt5Ylz0]
>>214
NSMatrixでNSImageCellを使うのが手っ取り早い.

219 名前:名称未設定 mailto:sage [2007/08/10(金) 00:10:34 ID:NXu0UGJP0]
ループ内で座標にイメージのサイズを足せばいいだけじゃん

220 名前:名称未設定 mailto:sage [2007/08/10(金) 21:20:23 ID:B2bpt6bp0]
>>218 >>219
ありがとうございます。
NSMatrixで行列表示ができました。
でもなぜか、セルがウィンドウの上に切れて表示されるのと
putCell:atRow:column:でNSImageCellで画像をセットしても
同じ画像ばっかり表示されるんです。

もう少し勉強してみます。



221 名前:名称未設定 mailto:sage [2007/08/10(金) 23:22:04 ID:NXu0UGJP0]
>>220
NSMatrixにaddRow/addColumnして、[self cellAtRow:y column:x]に対してイメージをセットしたらどうかな

222 名前:名称未設定 mailto:sage [2007/08/10(金) 23:23:05 ID:NXu0UGJP0]
selfはNSMatrixね

223 名前:214 mailto:sage [2007/08/11(土) 01:19:20 ID:4MGmk/Il0]
なんかちぐはぐなレスになった>>214はあぼーんで。スレ汚しスマソ
>>217 指摘thx.

224 名前:名称未設定 mailto:sage [2007/08/11(土) 01:27:56 ID:uNrauIzq0]
220です。
自己解決できました。
NSScrollView内にNSMatrix作ったら左上から右下に向かって綺麗に並びました。
重複画像は単純にNSImageのalloc/releaseの記述ミスでした。

NXu0UGJP0さん、ありがとうございます。

次は画像の影付けにチャレンジ。
これまた難易度が高そうです(^^;
NSImageにaddShadowとかあったら楽なのになあ。


225 名前:名称未設定 mailto:sage [2007/08/13(月) 19:32:35 ID:HjQoWJR20]
NSSegmentedControlをクリックした時、デフォルトだとマウスアップ時に選択が移行するのですが、
これをマウスダウン時のタイミングで選択を変えるにはどうしたらいいでしょう?
sendActionOn: メソッドを使ってみたのですがうまくいかず
今はマウスダウンの中を書き換えようとしてるのですが、
NSTabViewのtabViewItemAtPoint メソッドのようなものがNSSegmentedControlにはなくどうしてよいものか分かりません。
御教授よろしくお願いします。

226 名前:名称未設定 mailto:sage [2007/08/15(水) 00:34:56 ID:eYK2hRJc0]
サブクラスで

- (void)mouseDown:(NSEvent *)theEvent
{
[super mouseUp:theEvent];
}

- (void)mouseUp:(NSEvent *)theEvent
{

}
としてみるとか.

227 名前:名称未設定 mailto:sage [2007/08/15(水) 04:21:23 ID:FI0rPcR60]
NSSliderなんかと同じでNSSegmentedControlにはmouseUpが実装されてないので
例えばサブクラスで
- (void)mouseUp:(NSEvent *)theEvent{
NSLog(@"MouseUp");
[super mouseUp:theEvent];
}
としてもここに処理が回ってこないんです。
なので>>226のコードだと何も処理されないんです。。
正確にはNSSegmentedControlにmouseDownは継承されてるけど
オーバーライドされて機能しないようになってるってことだと思いますけど。

228 名前:名称未設定 mailto:sage [2007/08/15(水) 06:42:46 ID:xHhBTOGd0]
NSSegmentedCell (NSCell)の
sendActionOn あたりを変更してみるとか?

229 名前:名称未設定 mailto:sage [2007/08/15(水) 06:43:45 ID:xHhBTOGd0]
既出だったかスマン

230 名前:名称未設定 mailto:sage [2007/08/15(水) 10:34:54 ID:g4ql7t+80]
普通にこの辺じゃないの?
-[NSCell trackMouse:inRect:ofView:untilMouseUp:]
-[NSCell startTrackingAt:inView:]
-[NSCell continueTracking:at:inView:]
-[NSCell stopTracking:at:inView:mouseIsUp:]

かなり面倒くさいけど。



231 名前:225,227 mailto:sage [2007/08/15(水) 15:37:59 ID:PbdqCUHT0]
ありがとうございます、とりあえず現状
-(void)mouseDown:(NSEvent*)theEvent{
NSPoint point = [theEvent locationInWindow];
point = [self convertPoint:point fromView:nil];

int i, w = 0;

for (i=0; i < [self segmentCount] && w < point.x ; i++) {
w += [self widthForSegment:i];
}
[self setSelectedSegment:i-1];
}
でやってます。
セグメントのサイズをIB上でAutoSizeにしてるとwidthForSegmentが0を返すので不完全です。
もっとスマートな方法があれば是非。

232 名前:名称未設定 mailto:sage [2007/08/16(木) 17:16:23 ID:cDPUZH1x0]
oomori.comってどうなったんだ?

233 名前:名称未設定 mailto:sage [2007/08/16(木) 17:23:26 ID:D7uzhTeg0]
先日つながらなくなって、一時復活したようだけど
それからまたつながらなくなったみたい
どうしちゃったんだろうね

234 名前:名称未設定 mailto:sage [2007/08/16(木) 17:57:18 ID:5J/T/ZnQ0]
愛想を尽かしたんじゃないかな。

235 名前:名称未設定 mailto:sage [2007/08/18(土) 19:33:59 ID:b9e4iKE/0]
ttp://www.haloscan.com/comments/mkino/20070810/

236 名前:名称未設定 mailto:sage [2007/08/18(土) 19:39:50 ID:qe4k9HGL0]
cocoaで飯食ってけますか?

237 名前:名称未設定 mailto:sage [2007/08/18(土) 20:25:28 ID:xDpeu2aa0]
Cocoaは嗜好品であって主食にはなりません。

238 名前:名称未設定 mailto:sage [2007/08/19(日) 00:50:40 ID:wXs7PQ2p0]
>>235
面白いけど、MyCOMの記事への指摘を何故日記のコメントにするのか分からんな。

239 名前:名称未設定 mailto:sage [2007/08/19(日) 01:52:34 ID:wwtSg7AR0]
mkimoさん?

240 名前:名称未設定 mailto:sage [2007/08/19(日) 06:35:14 ID:b5TCkvsd0]
mkinoってエムキノって読むの?



241 名前:名称未設定 mailto:sage [2007/08/19(日) 08:21:45 ID:x6297PUr0]
>>238
俺も思た。
しかもコメント先はツールバーアイコンに関するエントリで、
マイコミは何にも関係ないんだもんな。
メールでもなんでもすりゃいいものを、ちょっとマナー悪いように思う。

242 名前:名称未設定 mailto:sage [2007/08/19(日) 09:13:46 ID:fHLqYkOZ0]
ダイナミックObjective-Cへの突っ込みにHMDTの最新エントリのコメント欄使う奴はけっこうよく見るだろ。

243 名前:名称未設定 mailto:sage [2007/08/19(日) 09:34:24 ID:x6297PUr0]
>>242
そーいうもんなのかな? 俺が自分のサイトでやられたらあんまり良い気分じゃないけど。
あまりにも主題と関係のないこと書かれたら、後からそこ探すの大変だし。
ま、時々見かけるmkinoマンセー連中もウザいし、どうでもいいんだけど。

244 名前:名称未設定 mailto:sage [2007/08/19(日) 09:44:23 ID:etpi/Mpi0]
>>239
わろた。
実物見たことないが、キモいのかw

245 名前:名称未設定 mailto:sage [2007/08/19(日) 11:40:02 ID:ocPOSWi+0]
コメント欄で主題と異なることを書き込むのは俺もマナー違反だと思うよ。

でも、Macでプログラム系の掲示板がどこかほしいな。検索機能付きのやつ。
HMDTにあった掲示板もスパムでやられて閉鎖されちゃったし、やっぱり
運営難しいのかな。こんな感じのがあればいいのに。
>ttp://www.atmarkit.co.jp/bbs/phpBB/index.php

246 名前:名称未設定 mailto:sage [2007/08/19(日) 12:35:59 ID:fZdGSCkT0]
質問です。
10.4以降ではstringWithContentsOfURL:ではなく、
stringWithContentsOfURL:encoding:error: または
stringWithContentsOfURL:usedEncoding:error:
を使えと書いてあるのですが、うまくいきません(nullが返ってくる)。

*strConnURLは入力されたURL
NSURL *connURL = [NSURL URLWithString:strConnURL];

NSString *retString = [NSString stringWithContentsOfURL: connURL];
-> retStringにHTMLが返ってくる。
NSString *retString = [NSString stringWithContentsOfURL: connURL encoding:NSUTF8StringEncoding error:nil];
-> retStringにnullが返ってくる。

当方10.4.10 Xcode 2.4.1です。

どこが悪いのかさっぱりです。

247 名前:名称未設定 mailto:sage [2007/08/19(日) 13:24:40 ID:L1niG0WF0]
エンコードがUTF-8じゃないんですか?

エンコードが分からないときは
+[ NSString stringWithContentsOfURL:usedEncoding:error:]
を使ってください。

聞く前に NSError を返してもらって調べるくらいしましょうね。

248 名前:名称未設定 mailto:sage [2007/08/19(日) 17:56:55 ID:fZdGSCkT0]
>>247
できました。ありがとうございます。

NSShiftJISStringEncodingと入れて、
いろいろとサイトのURLを入れて試してみたのですが、
取れるサイトと取れないサイトがあるようですね。
自分のサイトのCGIと連携させるので決め打ちでも問題ないのですが。

精進します。

249 名前:名称未設定 mailto:sage [2007/08/19(日) 22:17:57 ID:GJetEexT0]
>>248
NSURLRequestとかも試してみたら?

250 名前:名称未設定 mailto:sage [2007/08/20(月) 00:06:56 ID:sNRA//U50]
>>245
PukiWikiなら設置してある。
放置気味だけど。
ttp://cocoawiki.aerial.st



251 名前:名称未設定 mailto:sage [2007/08/20(月) 03:27:37 ID:VX9jayCX0]
NSOpenGLViewが複数あるとき,一個のViewの方でpickしたら
もう一個のViewが描画されなくなるんだけどなんでだろう。
glRenderMode(GL_SELECT);

gluPickMatrix
を実行しないと問題無い。

その後は
glRenderMode(GL_RENDER);
にちゃんと戻している。



252 名前:名称未設定 mailto:sage [2007/08/20(月) 09:02:13 ID:XvOlYfuG0]
>243
実際あの指摘は正しいんだろか?
初心者の漏れにはサパーリわからんのだけど。

253 名前:名称未設定 mailto:sage [2007/08/20(月) 22:17:07 ID:t64RIRSP0]
>>252
サパーリな奴が、指摘が正しいかどうかだけ知って何の役に立つ?


見たところ、デザインパターン自体からは多少逸脱して、
ObjC/Cocoaでの類似の機能やその実現の説明に入りかけているように見える。
これはこれで見えてくるものがあるはずなので今後の展開に期待。
ご本人もあえてそういう感じの意識で連載をしているようだ。

Commandに関しては最初の方でNSDocumentを例に使っているので、
今後もその流れでいくのかな。

最終的に「Cocoaパターン」とでも呼べるものが出来上がったら面白いなあと思う。
し、もしかするとそんな将来の著作も狙ってたりして。

254 名前:名称未設定 mailto:sage [2007/08/20(月) 22:23:05 ID:t64RIRSP0]
なんだ、ADCサイトに既に元ネタちっくなものがあるじゃないか...
あとはそれをどこまで膨らませて(いい意味で)書けるかだなあ。

255 名前:名称未設定 mailto:sage [2007/08/20(月) 22:27:39 ID:t64RIRSP0]
連投すまん。>>254のことはデザパタ関連の連載の最初にすでに断ってあった。
だから本人もそれを単純に踏襲したものにならないように書いてる筈だと期待。

256 名前:名称未設定 mailto:sage [2007/08/20(月) 22:30:46 ID:XG0wpyE80]
え?
期待してんの?


257 名前:名称未設定 mailto:sage [2007/08/20(月) 22:31:52 ID:m/MJ9Do70]
アクセス数の多いサイトの、本来は何の関係もないページトップのエントリに対して、
わざわざ自分のサイトへのリンクを記載してコメントするのはちょっと気が引けるな。俺は。
なんか宣伝みたいになっちゃうじゃん? 「こんな鋭いツッコミする俺ってどう?」みたいな。
ある程度気心の知れた常連さんみたいだし、そういう意図はないんだろうけど。
といいつつ、話の展開は気になる。

258 名前:名称未設定 mailto:sage [2007/08/21(火) 07:51:32 ID:6qziaugl0]
>253
>サパーリな奴が、指摘が正しいかどうかだけ知って何の役に立つ?

フツーに野次馬なだけです

259 名前:名称未設定 [2007/08/21(火) 20:44:58 ID:68zc4QPq0]
QTKit についての質問です。サンプルコードの'QTKitCreateMovie' の通りに
CreateMovieStorage を使ってNSImage からQTMovieを作ったのですが、
画面左上にQTMovieが予期せず表示されます。
Technical Note TN2138 をみると、同じ事例なのかどうかは分かりませんが、
FAQとして似たようなものが載っていましたので、gworld を作成し、
CreateMovieStorage の直前に入れました。
が、相変わらずQTMovieの最後のフレーム?が表示されます。
Expose などで画面の再描画が行われると消えるのですが、気持ちが悪いので、
解決策をお教えください。
Movie qtMovie = NULL;
GWorldPtr gworld = NULL;
Rect rect = {0, 0, 1, 1};
NewGWorld(&gworld, 32, &rect, NULL, NULL, 0);
SetMovieGWorld(qtMovie, gworld, NULL);
CreateMovieStorage(…
とやってます。
ttp://developer.apple.com/jp/technotes/tn2004/tn2138.html#TNTAG15


260 名前:名称未設定 mailto:sage [2007/08/22(水) 11:48:33 ID:09zetXWR0]
>>259
SetMovieGWorld は CreateMovieStrage の後なんじゃね?
qtMovie が NULL の状態で SetMovieGWorld しても意味ない気がする。

Movie 作っても表示はされなくて、インスタンス化してから表示されるんじゃないか?




261 名前:名称未設定 mailto:259 [2007/08/22(水) 13:46:57 ID:JadCL/7H0]
>>260
ありがとうございます。仰る通りにCreateMovieStrage(…) の後に SetMovieGworld(…) を
やってみましたが、同じ結果でした。
で、関係する関数を調べてみたんですが、NewGWorld(…) が OSX10.4 で廃止されていました。
コンパイルエラーも実行時エラーも出てなかったので通っているものとばかり…
代わりの関数って何になるんでしょうか?
もちろん自分でも調べてみますが、ご存知でしたらお教えください。

262 名前:名称未設定 mailto:sage [2007/08/22(水) 14:11:21 ID:fw6+crbU0]
廃止?廃止予告じゃないの?

263 名前:名称未設定 mailto:sage [2007/08/22(水) 21:59:05 ID:dvhT81p60]
>>261
というか、関数のエラーチェックをしてないのでは?
どこで引っかかっているかはきちんと確認したか?

そのケースは普通GWorldがきちんと出来ていないか
Setではねられているかどちらかでは。

264 名前:259 mailto:sage [2007/08/23(木) 00:56:08 ID:xQ3xY0pg0]
>>262
廃止予告なんですか、知りませんでした。最近始めたばかりなんで良く分かってないんです。
勉強になりました、ありがとうございます。

>>263
ありがとうございます。
GWorldは出来ている…とおもいます。NewGWorld() の後で値を持っているので。
SetMovieGWorld の直後に GetMovieGWorld をやってみたのですが、返って来た GWorldPtrが
gworld と違っています。Set出来てないって事なんでしょうね。ということは、gworldがちゃんと
出来てないって事なんでしょうか??うぅ…Cocoaの勉強しかしてないので全く分からない…
GWorldPtr gworld = NULL;
GWorldPtr ggwrld = NULL;
Rect rect = {0, 0, 1, 1};
NewGWorld(&gworld, 32, &rect, NULL, NULL, 0);
SetMovieGWorld(qtMovie, gworld, NULL);
GetMovieGWorld(qtMovie, &ggwrld, NULL);

お手数をおかけしました。
作った QTmovie 自体はちゃんと書き出せているのでちょっと我慢して、もう少しQuickTime、
QuickDraw(これからはQuartz2Dの方が良いのかな?)を調べてからもう一度チャレンジしたいと
思います。アドバイスして下さった方々、ありがとうございます。

265 名前:名称未設定 mailto:sage [2007/08/23(木) 08:39:50 ID:MFvh7UHN0]
既に解決していたらよけいなお世話だが、
ちょっと最初のソース>>259を見ていて気になったんで、、、
SetMovieGWorldで設定しているqtMovieは実際描画を行っているQTMovie
(こっちはQTKitの方ね)を指している?

CreateMovieStrageはQTKitの関数ではなくTraditionalなQuickTime
の関数なので、どこかでこのStorageをQTKitのQTMovieに変換する
ためにmovieWithQuickTimeMovieとかを呼んで実際に描画をしている
QTMovieを作っているはずなんだけど、このパラメータとして使って
いるMovieに対してSetMovieGWorldをやらないと意味ないよ。

実際の所CreateMovieStrageに対応するQTKitの関数が無いのが問題
なんだけどね、いまQuickTimeに手を出すのはカオスに手を出すよう
なものだから必要に迫られていないのならばQTKitがもう少し充実す
るまで待った方が良いような気がする。


266 名前:名称未設定 mailto:sage [2007/08/23(木) 09:28:42 ID:b2guyxFU0]

QTKitは試していないけど

lists.apple.com/archives/QuickTime-API/2006/Feb/msg00239.html



267 名前:名称未設定 mailto:sage [2007/08/23(木) 09:58:55 ID:7IM/N5ND0]
>>265
それだね。QTKitCreateMovieのサンプルソース見ると
quicktimeMovieFromTempFileでストレージを作る際に
新規Movie構造体を一緒に作って、かえってきたMovieを
使ってQTMovieインスタンスを生成してる。

別のMovie構造体にセットしてもそりゃだめだな。

268 名前:259 mailto:sage [2007/08/23(木) 11:59:41 ID:xQ3xY0pg0]
>>265, 266, 267
おおおぉ、ありがとうございます!解決致しました。
quicktimeMovieFromTempFileから返って来たMovieについて、SetMovieGWorldをかけ
QTMovieを作ったら見事に消えました。厚くお礼を申し上げます。

>いまQuickTimeに手を出すのはカオスに手を出すようなものだから
確かに、そんな気分になりました…こういうのが carbon の世界なんでしょうか?

何はともあれ、つきあって下さった皆様本当にありがとうございます。

269 名前:名称未設定 mailto:sage [2007/08/23(木) 13:14:35 ID:MFvh7UHN0]
>>268
Carbonの世界はCarbonの世界で悪くないよ。Appleは終息方向に向かいたいみたい
ですけどね。

単にQTKitが未完成でTraditionalな関数を呼ばないと実現できない事が多すぎて、
何をやるにもちょこちょこCarbonが顔を出すので、CocoaからQuickTimeにアプロー
チするのが「カオス」。

Carbonだけで閉じた世界で使う分には「今の所」QuickTimeは普通に使える。将来
は逆にCocoaに手を出さないと機能が使い切れなくなると宣言されてるけどね。

まあ、Carbonはここではすれ違いだ。失礼しました。


270 名前:名称未設定 mailto:sage [2007/08/23(木) 16:40:07 ID:tUB6r9Qr0]
てことでObjective-C2.0のQTKitに期待なわけですね。



271 名前:259 mailto:sage [2007/08/23(木) 18:29:02 ID:xQ3xY0pg0]
>>269, 270
なるほど、Carbon からは QuickTime が使い易いんですね。
Leopard の QTKit が使い勝手よくなっていることに期待します。
後2〜3ヶ月か。うーん早く出して欲しいなぁ。

272 名前:名称未設定 mailto:sage [2007/08/24(金) 13:00:09 ID:plQI0uRV0]
>>269

判ってると思うけど、QuickTimeはCarbonじゃ無いよ。
GWorldとは手を切って、OpenGL Contextに移行しよう。

273 名前:259 mailto:sage [2007/08/24(金) 17:12:35 ID:9ylc1pF50]
>>272
これは私宛(>259)、ですよね。この辺り分かっていないんで、間違っていたら教えて頂けますか。
周囲に聞ける人がいないので、Appleの文献とネットしか(ヒレガス本と荻原本はよんでます)
情報が無いんです。教えて君状態で申し訳ないのですが、よろしくお願いします。
1.SetGWorldはQuickDrawのメソッドで廃止予定。Quartz2Dが代わりになる。
2.Quartz2D (CoreGrahicsの一部?), CoreImage, CoreVideo, CoreGraphicsの下にOpenGLがいる。
3.QuickTimeは3つの上にあって、描画対象や処理に応じて3つのAPIを使っている?
4.3つのframeworkはそれぞれOpenGLの一部の機能を提供?OpenGL非依存の処理も可能?
5.CocoaからはQuartz2D CocoaAPIを介してOpenGL Contextが作れる?(一番分かってないです)
という風に理解しているのですが、合っていますか?

274 名前:名称未設定 mailto:sage [2007/08/24(金) 18:05:34 ID:plQI0uRV0]
Creating a Visual Context
developer.apple.com/documentation/QuickTime/RM/MovieBasics/MTOpenPlayMovies/3openplaymovies_output/chapter_1000_section_2.html

QTNewGWorld => QTPixelBufferContextCreate or QTOpenGLTextureContextCreate
Visual Contextは、普通のメモリーか、OpenGLのテクスチャ。

SetMovieGWorld => SetMovieVisualContext

CIVideoDemoGL
developer.apple.com/samplecode/CIVideoDemoGL/index.html


以下僕も曖昧ですが。
Quartz2D: PDFベースの描画命令。QuickDrawの後継。2D ExtreamならGPU使う。
CoreImage: GPU使った画像処理フィルター。テクスチャに施す。
CoreVideo: 複数のテクスチャをバッファプールに使ってムービーの表示タイミングをモニタのリフレッシュに合わせる仕組み(Display Link)。

要はみんなテクスチャなんでGPUの中だけで相互にいじれると。

275 名前:名称未設定 mailto:sage [2007/08/24(金) 20:07:50 ID:jUBSvJSS0]
CoreVideoPixelBufferってGLテクスチャだけでなく、
GWorldのラッパも兼ねてると思ってた。

RGBでないDecompressor/CompressorComponentは2vuyを
デフォルトでつかうから、結局一発目のCoreVideoPixelBufferは
GWorldベースになっちゃうはず

QuickTimeのyuvデフォルトはChunky yuv=2vuy(422)で、PlanerYUVじゃ
ないからPixelBuffer間の変換処理がぼこぼこ起きると遅くなると思う

Sharkで見ると、いったんChunky yuv422ー>Planer yuv444ー>RGBとか
やってるっぽい
CoreVideoが、DisplayLinkの途中でGLテクスチャに変換してるん
だろうと思うんだけど、すごく無駄が多く感じるんだよね



276 名前:名称未設定 mailto:sage [2007/08/25(土) 01:30:41 ID:VopUGkEZ0]
>>275
MyCometG3氏と見た。

277 名前:259 mailto:sage [2007/08/25(土) 19:15:58 ID:NJSbpzvW0]
>>274,275
うーん、覚えないといけない事がいっぱいですね…一つずつ学びたいと思います。
ありがとうございました。

278 名前:名称未設定 mailto:sage [2007/08/28(火) 07:04:19 ID:zHr/kI630]
初歩的質問で申し訳ないのですが、NSString文字列の
制御文を書きたいのですが、どのようにすればいいのでしょうか。

NSString* hoge;
hoge=@"あいうえお";

if (hoge =@"あいうえお") {
//もしhogeの内容が あいうえお ならここのコードを動作させたい
}

のように書いたのですが、if の行でエラーが出てしまいます。


279 名前:名称未設定 mailto:sage [2007/08/28(火) 07:09:19 ID:Xv9pLU0Y0]
>>278

if (hoge isEqualToString:@"あいうえお") {

280 名前:名称未設定 mailto:sage [2007/08/28(火) 07:11:51 ID:lNlMIRDY0]
朝からcocoa
いいね素晴らしいね



281 名前:名称未設定 mailto:sage [2007/08/28(火) 07:16:01 ID:zHr/kI630]
>>279
分かりました。勉強不足でした。

ありがとうございます。

282 名前:名称未設定 mailto:sage [2007/08/28(火) 12:58:25 ID:y/omrr0P0]
>>279
@""の中に日本語はまずくないですか?

あえてソースの中に日本語書くのならエンコードをutf8にしておいて、

if ( [hoge isEqualToString:[NSString stringWithUTF8String:"あいうえお"]] ) {

}

くらいでは。

283 名前:名称未設定 mailto:sage [2007/08/28(火) 13:13:32 ID:rN2eIabO0]
>>278
この例だと、>>278が意図したようには動かないが、エラーも出ないのでは。

284 名前:名称未設定 mailto:sage [2007/08/28(火) 13:28:47 ID:qboyE3Nc0]
オブジェクト定数に日本語使ったからエラー出たんじゃね?

285 名前:名称未設定 mailto:sage [2007/08/28(火) 13:54:14 ID:p7clQF4e0]
その前に条件式内での代入は不問なの?

>のように書いたのですが、if の行でエラーが出てしまいます。
どんなエラーかも分からないし。

286 名前:名称未設定 mailto:sage [2007/08/28(火) 15:04:49 ID:y5W8OHwo0]
パールや簡易系スクリプト上がりだと苦労するよ。オブジェC。


287 名前:名称未設定 mailto:sage [2007/08/28(火) 15:42:39 ID:KiMzdaU00]
CocoaDevCentralあたりにPHPからの移行チュートリアルみたいなのあった気がする。
英語だが。

288 名前:名称未設定 mailto:sage [2007/08/28(火) 15:57:17 ID:qboyE3Nc0]
うそん
俺AppleScript上がりだけどすんなり理解できたよ、ObjC

289 名前:名称未設定 [2007/08/29(水) 03:40:32 ID:QhQnuPQW0]
Cocoa初心者です。
ヒレガス本(日本語版)は、済ませました。
次にやると良い入門書があれば、ご紹介ください。


290 名前:名称未設定 mailto:sage [2007/08/29(水) 13:43:03 ID:6vtaxeAX0]
>>289
何を作りたいの?



291 名前:名称未設定 mailto:sage [2007/08/29(水) 19:40:33 ID:mCpcDP8p0]
テーブルビューでコアデータにバインドしないカラムのソート方法がさっぱりです。

ソート用にそのカラムの配列を作ってソートディスクリプタをかますのですか?

292 名前:名称未設定 mailto:sage [2007/08/29(水) 19:50:19 ID:sxJk1+Ic0]
NSTableView の - (NSArray *)sortDescriptors;
NSMutableArray の - (void)sortUsingDescriptors:(NSArray *)sortDescriptors;
がヒントというか殆ど答え。

293 名前:名称未設定 mailto:sage [2007/08/29(水) 20:15:26 ID:FVUVQ2w00]
NSTextFieldについて質問させてください

Interface Builderの設定でLayoutがWrapsの場合(Viewの幅で自動改行)に、
横幅を変えずに高さだけ変えてテキストがちょうど収まっているように
プログラムでリサイズさせるにはどうしたらいいでしょうか?

[NSControl sizeToFit]だと横幅が変わってしまいます

294 名前:名称未設定 mailto:sage [2007/08/30(木) 01:39:01 ID:8W/XnYIW0]
>>291
ttp://blog.so-net.ne.jp/finky/2005-04-04

295 名前:名称未設定 mailto:sage [2007/08/30(木) 01:47:09 ID:8W/XnYIW0]
>>293
IBのインスペクタのサイズで,
NSTextFieldのサイズを上下にリサイズするように設定してみては.
上下にはバネ,左右は直線の表示に.

296 名前:名称未設定 mailto:sage [2007/08/30(木) 02:23:58 ID:zfQNQU460]
>>294
そこに書いてあることは間違ってるとは言わんが
すごく誤解を招きそうな感じの書きっぷりになってるな

297 名前:293 mailto:sage [2007/08/31(金) 00:21:20 ID:coa9p3Qi0]
>>295
ダメでした。IBの「Size to Fit」メニューではAutosizing設定に
合わせてくれるんですが、プログラムでは

[textField setStringValue:@"とても長〜〜〜〜い1行"];
[textField sizeToFit];

としても横に長く伸びてしまいます

298 名前:名称未設定 mailto:sage [2007/08/31(金) 03:54:43 ID:k2mfVNs40]
>>297
NSTextFieldのsetLineBreakMode:でラップするよう設定してみては?
詳しくはリファレンス参照.

299 名前:293 mailto:sage [2007/08/31(金) 23:09:17 ID:coa9p3Qi0]
自己解決しました。これでできそうです。

NSRect fr = [textField frame];
fr.size = [[textField cell] cellSizeForBounds:[_textField bounds]];
[textField setFrame:fr];

300 名前:名称未設定 mailto:sage [2007/09/01(土) 17:23:27 ID:V20HLbnL0]
>>292 >>294
回答ありがとうございます。
チャレンジしてみます。



301 名前:名称未設定 mailto:sage [2007/09/02(日) 16:01:51 ID:1W/RX5JH0]
NSTableView(NSArrayController)で最後にソートしたカラムとソート順をアプリの終了時に保持して、
次回起動時に前回の状態でソートするにはどうすればよいのでしょうか?

[[[NSArrayController sortDescriptors] objectAtIndex:0] description]

をNSStringに代入してプロパティリストに保存できたのですが、
なんか無理矢理なやり方かなと。

良い知恵がありましたらお願いします。

302 名前:名称未設定 mailto:sage [2007/09/02(日) 17:36:24 ID:QfZEBWjg0]
自分で変数もってそれをプロパティリストに保存して起動時にソートしなおすとかは?
とNSTableView使ったことないけど言ってみる

303 名前:名称未設定 mailto:sage [2007/09/02(日) 23:43:35 ID:BsNs+MD5P]
descriptionで保存するんじゃなくて、sortDescriptorsにNSArchiver使った方がいいんじゃない?
で次回起動時にはNSUnarchiverを使って復元したものをsetSortDescriptors:して再ソート

304 名前:名称未設定 [2007/09/03(月) 01:24:15 ID:d9shAoB60]
ass乞食がcocoaのhtmlレンダーマンを掘り当てたらしいね

305 名前:名称未設定 [2007/09/03(月) 01:34:14 ID:J1vhJrBi0]
中国人は赤ん坊も食べる
www21.tok2.com/home/saigoutakamori/Chinese_culture_that_eats_baby1.htm


306 名前:名称未設定 mailto:sage [2007/09/07(金) 21:36:25 ID:EENbuIBN0]
ああ、さっぱりわからないよ兄さん。

307 名前:名称未設定 mailto:sage [2007/09/11(火) 23:43:45 ID:8nKQQObl0]
NSPredicateで" カラム=='値' "というのはできるのですが、
" 関数の返り値=='1' "みたいなことは出来るのでしょうか?
よろしくお願いします。


308 名前:名称未設定 mailto:sage [2007/09/12(水) 20:54:55 ID:0PGJU/k/0]
またHMDT恒例の、エントリ無関係ツッコミが始まりましたな。

309 名前:名称未設定 mailto:sage [2007/09/12(水) 21:50:19 ID:f0yZ2CXF0]
>>307


オブジェクトobj の関数(メソッド)func が数字を返すとき、

BOOL result = [[NSPredicate predicateWithFormat:@" func == 1"] evaluateWithObject:obj];

みたいなこと?そのまんまだけど



310 名前:名称未設定 mailto:sage [2007/09/13(木) 09:13:13 ID:tYOZKWhg0]
Core Dataを使って、非常に簡単なアプリを作ろうとしています。
単語帳みたいな感じのものなんですが、
Cardエンティティ:
- 属性word (String)
- 属性meaning (String)
というデータを持っています。
例えば、(word, meaning) = ("hello", "こんにちわ")みたいに格納します。

さて、wordの表示は左側にNSTableColumnでリスト表示させ、
その右側にNSScrolViewでselectされた単語の意味を表示させます。
このとき、NSScrolViewから意味を編集したいのですが、
この中身を日本語のプレインテキストにしたと思っています。
属性meaningのタイプはStringのままでいいのでしょうか。
Stringにすると、実行時に右側のNSScrolViewを編集することができなくなります。

そこでタイプをバイナリデータにしてみたんですが、
当然、作成されたXMLの中身がバイナリになって可読性が悪くなります。
タイプをStringのままで、NSScrolViewを編集できるようにするにはどうしたらいいでしょうか。



311 名前:名称未設定 mailto:sage [2007/09/13(木) 10:03:32 ID:tYOZKWhg0]
すいません。
ごにょごにょやってたら出来ました。
何をやったのかは分かりませんorz

312 名前:名称未設定 mailto:sage [2007/09/14(金) 03:22:19 ID:vPRPlLH90]
まず、NSScrollViewから編集したつもりになってるようだけど、
実際はNSScrollViewの内部にあるNSTableViewから操作している。
NSScrollViewはスクロールを可能にするだけの縁取り的なものに過ぎない。
だからもしリファレンス等で調べるなら、
NSScrollViewではなくNSTableViewを参照すること。

次に、保存方法と編集可能云々は別問題なハズ。
Interface BuilderでNSTableViewのインスペクタのEditableとか
いろいろいじったんじゃない?

313 名前:名称未設定 mailto:sage [2007/09/14(金) 11:37:14 ID:gUdBg/zp0]
今回発売されたLogic 8は1000p以上の翻訳済みマニュアル付いてるそうな
世界同時発売で

で、Cocoaリファレンスの翻訳はまだですか?

314 名前:名称未設定 mailto:sage [2007/09/14(金) 13:29:15 ID:sFJVO0iJ0]
>>313

Cocoa Break

315 名前:名称未設定 mailto:sage [2007/09/14(金) 18:33:16 ID:ZI20taVc0]
cocoa breakは神

316 名前:310 mailto:sage [2007/09/14(金) 20:03:38 ID:5NLP9ylV0]
>>312
NSScrollViewは勘違いでした。
どこを弄ったのか良く分からなかったので、
何度か新規でプロジェクトを作り直したりしたら動いています。
今は何と何をバインディングさせたか理解してるんで、
ちゃんと正しいことをやってるくせぃ。

317 名前:名称未設定 mailto:sage [2007/09/14(金) 23:10:21 ID:+9nlJNpQ0]
俺をAppleで働かせてくれるなら死ぬ程翻訳しまくってやってもいい
とほざく求職中の俺

318 名前:名称未設定 mailto:sage [2007/09/17(月) 21:49:27 ID:5CFLrUlr0]
日本語入力 フ 英語入力 をアプリの中から切り替えるには、どうすれば
よいでしょうか。

URL を入力するテキストフィールドがあって、そこが入力状態になったときに
自動的に英語入力に切り替わるようにしたいと思っています。


319 名前:名称未設定 mailto:sage [2007/09/17(月) 22:47:37 ID:vp+tEm1m0]
たぶんそういうのはCarbonの中の古いAPIを使うんじゃないかな

320 名前:名称未設定 mailto:sage [2007/09/19(水) 12:44:09 ID:QAAMlS8c0]
Core Dataで名前と住所があるとして、NSTableViewで表示させるとします。
で、カラムは名前と住所を表示させるんだけども、
住所が未入力の人は名前を赤で表示させたい。
これってどうやればいいんでしょうか。



321 名前:名称未設定 mailto:sage [2007/09/19(水) 16:00:49 ID:7OHnYPwj0]
>>320
●NSTableView に delegate を設定して tableView:willDisplayCell:forTableColumn:row: の中で、
住所の中身を調べて名前のセルに setTextColor する。

●もしくは、下記の2つのファイルを作り、プログラムのどこか最初の方で(applicationDidFinishLaunching等の
メッセージを受けて)、以下のように

MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];

独自の値変換を登録しておく。Interface Builder では、名前カラムのbindins -> textColor -> Value Transformer に設定しておく。

322 名前:名称未設定 mailto:sage [2007/09/19(水) 16:01:37 ID:7OHnYPwj0]
長過ぎて怒られたので分割。

//---------- MyValueTransformer.h ----------
#import <Cocoa/Cocoa.h>

@interface MyValueTransformer : NSValueTransformer {

}
+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;
- (id)transformedValue:(id)value;

@end

323 名前:名称未設定 mailto:sage [2007/09/19(水) 16:02:40 ID:7OHnYPwj0]
//---------- MyValueTransformer.m ----------
#import "MyValueTransformer.h"

@implementation MyValueTransformer

+ (Class)transformedValueClass {
return [NSColor class];
}

+ (BOOL)allowsReverseTransformation {
return NO;
}

- (id)transformedValue:(id)value {
if ( value != nil && [value respondsToSelector:@selector(length)] && [value length] > 0 )
return [NSColor blackColor];
else
return [NSColor redColor];
}

@end

324 名前:名称未設定 mailto:sage [2007/09/19(水) 16:09:53 ID:7OHnYPwj0]
念のため名前カラムの Bindings の中ね。

Bind to: NSArrayController
Controller Key: arrangedObjects
Model Key Path: (住所の入っているプロパティ名)
Value Transformer: MyValueTransformer

325 名前:320 mailto:sage [2007/09/19(水) 20:31:54 ID:QAAMlS8c0]
>>321
まんま使わせてもらいました。
ありがとうございます。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
をHoge_AppDelegate.hに足して、
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
WordColorTransformer* transformer = [[[WordColorTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"WordColorTransformer"];
}
をHoge_AppDelegate.mに足しました。

初めてD&D以外の作業をXcodeでやったわw
C/C++しか触ったことないんだけど、Cocoaの思想みたいなもんが見えてきた。
これは便利そうだ。

326 名前:320 mailto:sage [2007/09/19(水) 20:36:30 ID:QAAMlS8c0]
すいませんが、もう1つ。

名前カラムに新規登録する度に、
headerを押さないでも自動でソートさせるのは、
どうすればいいんでしょうか。

327 名前:名称未設定 mailto:sage [2007/09/20(木) 01:30:49 ID:r/uaSxxr0]
>タップ……指で軽く叩く操作。マウスのクリックに相当
>ダブルタップ……2回叩く操作。ダブルクリックに相当
>ドラッグ……写真を移動する時に指をずらす操作
>フリック……リストをスクロールする時に指で軽くはらう操作
>ピンチ……2本指でのつまむ操作の総称
>ピンチアウト/ピンチオープン……2本指の間を広げて拡大する時の操作
>ピンチイン/ピンチクローズ……2本指の間を縮めて縮小する時の操作
k-tai.impress.co.jp/cda/article/news_toppage/36312.html?ref=rss

- (void)touchFlicked:(NSEvent *)theEvent;
とかになるのかな?

328 名前:名称未設定 mailto:sage [2007/09/20(木) 11:06:40 ID:CMoMWviD0]
>>326
とりあえず思いつくのは notification を使うことかな。

IB で Hoge_AppDelegate に Outlet を2つ追加して接続。ここでは仮に arrayController(NSArrayController に接続)と
tableView(NSTableView に接続)としておく。

Hoge_AppDelegate.h に追加。

IBOutlet NSTableView *tableView;
IBOutlet NSArrayController *arrayController;

Hoge_AppDelegate.m を修正。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectChanged:) name:NSManagedObjectContextObjectsDidChangeNotification object:nil];

NSArray* sortDescriptors = [NSArray arrayWithObjects:
[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease],
[[[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES] autorelease],
nil
];
[tableView setSortDescriptors:sortDescriptors];
}

- (void)objectChanged:(NSNotification*)notification {
[arrayController rearrangeObjects];
}

329 名前:名称未設定 mailto:sage [2007/09/20(木) 11:12:40 ID:CMoMWviD0]
>>326
dealloc の中で後始末もしておいて。一応、マナーとして。

[[NSNotificationCenter defaultCenter] removeObserver:self];

330 名前:名称未設定 mailto:sage [2007/09/20(木) 22:29:15 ID:A01fsnmG0]
iPhone、iPod に OS X を内蔵したおかげで、Cocoaプログラマがすごい増えてるね



331 名前:名称未設定 mailto:sage [2007/09/20(木) 23:33:41 ID:Xhf7l+HF0]
>>330


332 名前:名称未設定 mailto:sage [2007/09/21(金) 00:21:45 ID:Qi2gwohZ0]
>>326

NSArrayControllerのsortDescriptorsを設定してあれば、自動的にソートされます。

あと、NSValueTransformerの登録はNib fileのロード前にする必要がありますから
Value Transformer Programming Guide Registering a Value Transformerでは
application’s delegateでinitialize: class messageで行うことが推奨されています。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
ではタイミングが遅いように思います。
問題なく動いているようなので、結果オーライかもしれませんが。



333 名前:320 mailto:sage [2007/09/21(金) 08:33:51 ID:lSzwq6kK0]
>>328
ははあ。なるほど。ありがとうございます。

>>332
IBからinspectorで、NSArrayControllerのsortDescriptorsを選ぶんですよね。
ここで、Model Key Pathにnameを設定して、
Validates Immediatelyにチェックを入れるんでいいのでしょうか。

そうすると、

[Session started at 2007-09-20 13:22:40 -1000.]
2007-09-20 13:22:42.993 Hoge[2611] An uncaught exception was raised
2007-09-20 13:22:43.002 Hoge[2611] [<Hoge_AppDelegate 0x38eda0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.
2007-09-20 13:22:43.009 Hoge[2611] *** Uncaught exception: <NSUnknownKeyException> [<Hoge_AppDelegate 0x38eda0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.

Hoge はシグナル 5(SIGTRAP)により終了しました。

となります。これって、"name"というkeyが存在しないって意味だと思うんですが、
どうやったら"name"を見つけてくれるんでしょうか。

334 名前:320 mailto:sage [2007/09/21(金) 08:38:01 ID:bDIzEEDW0]
また、Hoge_AppDelegate.mの中で、
+ (void)initialize {
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];
}
というのを実装すればいいってことですか?
initializeが1度しか呼ばれない関数なのか理解していないんですが、
static BOOL initialized = NO;
とか用意して、
if(initialized){
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];
initialized = YES;
}
とするべきですか?

長々とすみません。

335 名前:名称未設定 mailto:sage [2007/09/21(金) 12:09:17 ID:T5koP5+L0]
>>334
developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_4.html
の「クラスオブジェクトの初期化」のところを見ると、

クラスは自身が使用される前に、ランタイム環境を準備する機会を与えられます。
initialize は継承されるため、サブクラスのために何度も呼び出される可能性があります。

とのこと。

336 名前:名称未設定 mailto:教えてくん参上 [2007/09/21(金) 21:44:20 ID:sPcrBli00]
NSView(のサブクラス)にテキスト(日本語)を描画したいのですが、
どうすれば良いでしょうか?
(日本語のテキストを持ったNSStringインスタンスの内容を描画することを想定)
ネット上もあるドキュメント、サンプルコードなどご教示いただければありがたいです。

337 名前:名称未設定 mailto:sage [2007/09/21(金) 22:05:02 ID:tcpbBsLq0]
教えようと思ったけどメル欄がうざいからやめた

338 名前:名称未設定 mailto:教えてくん参上(336) [2007/09/21(金) 22:12:28 ID:sPcrBli00]
>>337
お騒がせしました。
自己解決しました。

hmdtに置いてありました。

339 名前:332 mailto:sage [2007/09/21(金) 22:35:44 ID:Qi2gwohZ0]
>>333

>NSArrayControllerのsortDescriptorsを設定してあれば、自動的にソートされます。
と書きましたが、これではダメでした。
Core Recipes Appを参考にして作ったiTunesもどきのメモソフトで自動的にソート
ができていたので、そう書いたのですが、簡単な検証プロジェクトを作って実験したところ
ソートされませんでした。
自作のメモソフトでなぜうまくいっているのか検討してみます。
しかし違いといえば、contentSetにバインドしているくらいで、ほとんどコードを書いていない
部分なので、困惑しています。

>ここで、Model Key Pathにnameを設定して、
NSSortDescriptorを要素に持つNSArrayを指定します。

initializeについては、ヒレガス本P138で
+ (void)initialize
{
//自身はPersonクラスか?
if (self == [Person class]){
[self setVersion:2];
}
}

例が載っています。
2nd Editionでは索引や、他の章で引用されているのに、この項が載っていません。



340 名前:名称未設定 [2007/09/22(土) 01:50:16 ID:x63UH/2b0]
>>339
どこかで「自動的にソートされる」ってのを見てやってみてだめだったので、
いろいろ試した結果が >>328 なんですよ。

もし、バインドだけでいけるなら私も知りたいです。



341 名前:320 mailto:sage [2007/09/22(土) 08:53:57 ID:Npi1C4cP0]
>>328
書いて頂いたコードを写させて頂きました。ありがとうございます。
ただ、新規項目を追加するとそいつはカラムの最下部に表示されてしまいます。

IBから常にソートできそうな気もするんですが。

>>335
参考にさせて頂き、↓のように変更しました。
+ (void)initialize
{
static BOOL initialized = NO;
if(initialized){
return;
} // if

initialized = YES;
WordColorTransformer* transformer = [[[WordColorTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"WordColorTransformer"];
}

342 名前:名称未設定 mailto:sage [2007/09/22(土) 09:31:10 ID:Jwo4xXMJ0]
削除したのに残るplistは「板データを修復」で消えるんだけど。

343 名前:名称未設定 mailto:sage [2007/09/22(土) 09:32:02 ID:Jwo4xXMJ0]
ごめん誤爆

344 名前:名称未設定 mailto:sage [2007/09/22(土) 18:08:59 ID:e0U06nBz0]
アレイコントラーのインスペクタにそれらしいチェックがあったような。
つーかインサートするたびにソートしたらうざくね?

345 名前:名称未設定 mailto:sage [2007/09/22(土) 21:52:36 ID:YtaGMbG00]
HMDTでiPhone開発の話をしてるけど
touch用の開発環境って出てきてるのかな?
iPhone用のアプリはtouchでは動かないみたいだけど

346 名前:名称未設定 mailto:sage [2007/09/22(土) 22:04:54 ID:V8IHJ6+c0]
もうiPod touchがてにはいるようになったの?

347 名前:名称未設定 mailto:sage [2007/09/22(土) 22:59:32 ID:YtaGMbG00]
今日出荷案内が来たよ

348 名前:名称未設定 mailto:sage [2007/09/23(日) 11:15:15 ID:74QYrWGQ0]
Core Data アプリで、data を NSArrayController のバインディングで
テーブルビューに表示させているのですが、IB で NSArrayController に
設定した predicate が働いてくれません。

hoge という属性を持つ Core Data のエンティティがあり、
NSArrayController の IB の Inspector の Attributes で
hoge != "hogehoge" として Set Predicate したのですが、
テーブルビューの中に hoge == "hogehoge" のデータも含め
全データが表示されてしまいます。

ちなみに、hoge == "orz" などいい加減な predicate を設定しても
動作は変わらず、すべてのデータが表示されます。

バインディングの設定の方は、何度も確かめたので正しいと思います。

どこで使い方を間違えているでしょうか。

349 名前:名称未設定 mailto:sage [2007/09/23(日) 15:30:27 ID:zABjWK1w0]
たぶん根本的に間違ってるよ。
そこに条件式を書いただけでは動かない。

350 名前:348 mailto:sage [2007/09/23(日) 16:27:42 ID:74QYrWGQ0]
>>349
下記ページの一番下の図にある通りのやり方なのですが、
根本的に間違っているのはどの辺でしょうか。
journal.mycom.co.jp/special/2005/cocoamvc/011.html

条件式以外には何が必要ですか?
お教え願います。



351 名前:名称未設定 mailto:sage [2007/09/23(日) 19:40:13 ID:shGaGM9l0]
>>350

== ではなくて、likeとかcontains[cd]を使いましょう



352 名前:351 mailto:sage [2007/09/24(月) 20:34:56 ID:s/hLGoL70]
>>350

Set Predicate ボタンはちゃんとクリックしているのでしょうね?



353 名前:348 mailto:sage [2007/09/24(月) 20:58:16 ID:o5Y8mmRh0]
>>352
クリックしています。わかりにくい書き方でしたが、>>348
「Set Predicate した」というのはボタンを押したという意味です。

>>351 で predicate の書式についてお教えいただきましたが、
== を使わない方が良い理由は何でしょうか?

== と書いた predicate を NSArrayController にバインディングで
設定した場合にはきちんと動作しており、書式は問題ないと思うのですが。

>>349 は別の方でしょうか?「根本的な間違い」というのが何なのか、
まったくわからないままなのですが‥。

354 名前:351 mailto:sage [2007/09/24(月) 22:12:01 ID:s/hLGoL70]
>>353
>== を使わない方が良い理由は何でしょうか?

こちらの勘違いでした。
Predicate Programming Guideの例で
>Simple comparisons, such as grade == 7 or firstName like 'Mark'
というのがあがっていて、文字列の比較には==が使えないと思い込んでいました。
昨日試したら==でもOKでした。

predicateの設定なんて、predicateを書いてボタンをクリックするだけで他にすることはないはずです。

例えば、NSTreeControllerで parent == nilと設定すれば、第一階層のアイテムだけが
表示されます。

お役に立てず、すいません。

355 名前:名称未設定 mailto:sage [2007/09/24(月) 22:45:14 ID:s/hLGoL70]
ここ数日のうちにCocoabuilderやCocoa Bindings Examples and Hintsで
NSIndexSetのメソッドcountOfIndexesInRange:
を使ったコードが出ていますが、Tigerにはこんなメソッドはありません。

Leopardで導入されるものでしょうか?
NSTableViewのdrag & dropのコードで、似たようなメソッドを作ったものですから、
Appleが正式にサポートするとうれしいです。

Leopardの発売が更に楽しみになりました。

356 名前:名称未設定 [2007/09/25(火) 20:42:20 ID:DPSBhINH0]
ついでに、WebObjects を、Objective-C にしてほしいよなーー

357 名前:名称未設定 mailto:sage [2007/09/26(水) 07:47:06 ID:KqKT5P0s0]
WOはもうディスコンまっしぐらじゃない?
あれ?オープンソースになったんだっけ?

358 名前:名称未設定 mailto:sage [2007/09/26(水) 14:05:35 ID:cVuwNs9i0]
Quartz 2D Extream もどうなったのやら。やっぱディスコンまっしぐらかなぁ。

359 名前:名称未設定 mailto:sage [2007/09/26(水) 18:52:49 ID://OJRjK+0]
QuartzGLになりました。

360 名前:名称未設定 mailto:sage [2007/09/26(水) 22:58:38 ID:KOSgLSOH0]
質問です。

大量のボタンに対して、同時に同じメッセージを投げたいんですが、
1つのアウトレットは1つのオブジェクトしか指定できません。
大量のボタンの数だけアウトレットを用意するのもスマートではないと
思いますが、何か良い方法ありますか?
よろしくお願いします。






361 名前:名称未設定 mailto:sage [2007/09/26(水) 23:16:06 ID:GjSqGsk10]
>>360
必要なだけNSArrayに入れてmakeObjectsPerformSelectorとか、後はNSNotificationとかかな。

362 名前:名称未設定 mailto:sage [2007/09/27(木) 00:01:26 ID:PDbAKstz0]
NSViewでまとめてsubViewsで取り出す

363 名前:名称未設定 mailto:sage [2007/09/27(木) 00:43:29 ID:8K+2oe1e0]
過去に同じようにな質問なかったか

364 名前:名称未設定 mailto:sage [2007/09/27(木) 00:47:46 ID:jyqt4+rC0]
>>359
thx.

365 名前:名称未設定 [2007/09/27(木) 04:55:55 ID:1zrfBisP0]
空白またはタブで項目が区切られているレコードからトークン
を切り出すのに、 chSetを whitespaceAndNewlineCharacterSet として

aScanner = [NSScanner scannerWithString:parsedString];
while(![aScannerisAtEnd]){
if([aScanner scanUpToCharactersFromSet:chSet intoString:&token])
NSLog(token);
[scanner scanCharactersFromSet:chSet intoString:nil];   }

としていますが、
アスキー文字だと期待通りに動くのですが、レコード中のどれか一つの項目を
日本語にするとその部分がスキップされて(空白だと思われて)しまいます。

どうしたらいいでしょうか。OSは10.3.9です。

366 名前:名称未設定 mailto:sage [2007/09/27(木) 05:24:39 ID:CM0/B6Sl0]
>>365
NSLog(token); → NSLog(@"%@¥n", token);
でどうかな?

367 名前:名称未設定 mailto:sage [2007/09/27(木) 06:07:29 ID:1zrfBisP0]
NSLog(@"%@¥n", token);  にすると、
日本語フィールドも表示されるようになりました。
が、最後に余計な「A¥n」が出ます。(本当はAの上に変な記号のついた文字。これをいれると
Cocomonarが落ちるので書けない
)よくわからないのですが、エスケープされてる、
ということなのでしょうか。

NSLog(@"%@", token); にするといままで通りです。
が、
NSLog(@"%@ ", token); と、後ろに空白文字を置くとキチンと
表示されます。

文字コードが悪さをしているのは見当つくのですが、具体的にどこが
悪いのかはさっぱりです。ファイルを読み込むときも、NSDataに落としてから
エンコーディングを変えながらいろいろ試してみたのですが。


368 名前:名称未設定 mailto:sage [2007/09/27(木) 06:23:48 ID:CM0/B6Sl0]
>>367
ごめん、¥はバックスラッシュのつもりだった。
とにかくNSLogの日本語表示だけの問題だから気にしなくていいよ。

369 名前:名称未設定 mailto:sage [2007/09/27(木) 11:57:33 ID:1zrfBisP0]
本当だ、¥の代わりにバックスラッシュにしたら期待道通りの結果がでました。
ありがとうございました!!

370 名前:名称未設定 mailto:sage [2007/09/27(木) 14:30:21 ID:8h5IL6rA0]
巨大なテキストファイルから改行コードで区切って1行ずつ読み込んで処理したいのですが、
テキストファイルをすべて読み込んでから改行コードで区切って配列に入れるとメモリを膨大に消費してしまいます。

perlっぽくファイルハンドルを取得してwhile文でeofまで回すような
ストリーミングっぽく処理したいのですがどうすればよいのでしょうか?





371 名前:名称未設定 mailto:sage [2007/09/27(木) 15:02:54 ID:DoK9wEPc0]
一番簡単なのはCのfgets()を使う方法。改行がLFでないと使えないけどな。

後は先読みバッファを作って、特定のサイズ分ファイルを読み込んで、そこから
改行までを取り出して、残った部分をムーブして空いた分だけファイルから
読み込み、これを繰り返す。

372 名前:名称未設定 mailto:sage [2007/09/27(木) 16:12:29 ID:8h5IL6rA0]
>>371
ご教授ありがとうございます。
Cのfgets()関数を使ってうまくいきました。
objective-cで出来るか探してみましたがなさそうですね。



373 名前:名称未設定 mailto:sage [2007/09/29(土) 10:12:39 ID:zZqJ0dcb0]
NSWindow 上に NSTableView がいくつか置いてあるのですが、
その TableView 間でファーストレスポンダが変わったことを
検出するには、どういった方法があるでしょうか。


374 名前:名称未設定 mailto:sage [2007/09/29(土) 15:34:01 ID:8IGuMuZ60]
文字列を正規表現で置換したいのですが、標準機能ではないのでしょうか?

>>373
テーブルビューの選択が変わったなら通知するのがあったような。

375 名前:名称未設定 mailto:sage [2007/09/29(土) 15:40:36 ID:x13OGOM+0]
Cocoaで正規表現ならOgreKitが定番かな。

ttp://www8.ocn.ne.jp/~sonoisa/OgreKit/

376 名前:名称未設定 mailto:sage [2007/09/29(土) 15:45:51 ID:pwcm/+Ub0]
>>373
acceptsFirstResponderとかその辺でどうかな。

377 名前:名称未設定 mailto:sage [2007/09/29(土) 15:57:41 ID:E1JHDeBB0]
regex.h

378 名前:373 mailto:sage [2007/09/29(土) 16:17:02 ID:zZqJ0dcb0]
>>374
どのような通知でしょうか。
調べてみてはいるのですが、見つかりません。

>>376
すみません、acceptsFirstResponder をどのように使うのでしょうか。


379 名前:名称未設定 mailto:sage [2007/09/29(土) 16:27:27 ID:pwcm/+Ub0]
>>378
ググってみて。HMDTさんのサイトがお勧め。

380 名前:名称未設定 mailto:sage [2007/09/29(土) 18:34:35 ID:EN0/o6QM0]
通知ってnotificationのことでしょ
NSTableViewのヘルプにあるよ



381 名前:373 mailto:sage [2007/09/29(土) 22:19:34 ID:zZqJ0dcb0]
>>380
具体的にどの notification のことをおっしゃられていますでしょうか。
検出したいのはTableView間の移行の話なので、TableView の notification
ではないのではないかと思うのですが。

ちなみに現在は暫定策として、NSWindowDidUpdateNotification を
使っていますが、これだと必要のないときにも notification が出るので、
パフォーマンス改善のためにもっと良い方法を探しています。

382 名前:名称未設定 mailto:sage [2007/09/29(土) 22:57:21 ID:3B7qOXdqP]
NSResponderで定義されてるbecome〜などのファーストレスポンダ関連の適当なメソッドを上書きして適当な通知を送るようにすればいいんじゃない?

383 名前:380 mailto:sage [2007/09/29(土) 22:59:45 ID:EP9ETOnN0]
>>373
ごめんね、NSResponderのnotificationだったわ

384 名前:名称未設定 mailto:sage [2007/09/30(日) 08:23:16 ID:1+3bPOa/0]
>>361
遅レス申し訳ありません。

InterfaceBuilderで置いたボタンをNSArrayに入れる方法が分かりません。
すみませんが、よろしくお願いします。

385 名前:名称未設定 mailto:sage [2007/09/30(日) 11:59:03 ID:f54IiRS90]
>>384
そのボタン群用にNSButtonのサブクラスを用意して、
awakeFromNibで適当なNSArrayに格納するとかかな。
NSNotiricationを使う場合も同様に。

任意のタイミングで格納する場合は、subviewsを使うしかないと思います。

386 名前:名称未設定 [2007/09/30(日) 16:30:45 ID:KRhNhdGX0]
プログラム最後の
[pool release]; で実行エラーが発生します。

allocとreleaseの数は合わせてあるのですが、メモリ管理でほかに
注意すべき点はなんでしょか。

387 名前:名称未設定 mailto:sage [2007/09/30(日) 16:33:17 ID:2MyNhREa0]
その直前でretain count調べてみれば?

388 名前:名称未設定 mailto:sage [2007/09/30(日) 16:36:42 ID:ZGxp/2ZH0]
エスパーがいらっしゃるまでしばらくお待ちください

389 名前:名称未設定 mailto:sage [2007/09/30(日) 16:46:22 ID:FHx4HOJm0]
retain count なんて調べてるやつはバカです

390 名前:名称未設定 mailto:sage [2007/09/30(日) 18:25:25 ID:9ybOP3SL0]
alloc+copy==release+autorelease



391 名前:名称未設定 mailto:sage [2007/09/30(日) 18:37:41 ID:1+3bPOa/0]
>>385
やってみます。
ありがとうございました。

392 名前:名称未設定 mailto:sage [2007/09/30(日) 18:50:03 ID:hHTRsSyH0]
LeopardでRIUIを採用するのかしないのか
QuartzGLも採用するのかしないのか
雰囲気的にはTigerが出る前と全く変わらないな...

393 名前:名称未設定 mailto:sage [2007/09/30(日) 18:54:51 ID:hHTRsSyH0]
誤爆に見えないかもしれないけど誤爆したみたい...orz

394 名前:名称未設定 mailto:sage [2007/09/30(日) 20:53:05 ID:KRhNhdGX0]
>>390
copy は明示的には使っていないので、数は合っている筈なのですが、
もう少し勉強してみます。

395 名前:名称未設定 mailto:sage [2007/09/30(日) 20:59:28 ID:RmZQ6wEv0]
クラスメソッドの中で一時的に作成した配列や辞書は、
メソッドの最後でまめにリリースしたほうが良いのでしょうか?
それとも勝手にリリースしてくれるのでしょうか?

アプリケーションの使用メモリが増えてきてどうすれば良いのかご教授下さい。

396 名前:名称未設定 mailto:sage [2007/09/30(日) 21:19:06 ID:J3lW9Bur0]
どう作成したかによる。そのルールはクラスメソッドかどうかは関係ない

NSArray* array = [[NSArray alloc] initなんたら]
で作成したのならスコープを抜けるまでに
[array release] または [array auto] する義務がある

NSArray* array = [NSArray arrayWithなんたら]
で作成したのなら
[array release] または [array auto] してはいけない

NSArray* array = [NSArray arrayWithなんたら]
で作成した場合でも、その後
[array retain]
したのなら
[array release] または [array auto] する義務がある


397 名前:名称未設定 mailto:sage [2007/09/30(日) 21:24:04 ID:J3lW9Bur0]
auto の部分は autorelease の誤りです

398 名前:名称未設定 mailto:sage [2007/09/30(日) 21:38:11 ID:KRhNhdGX0]
copyを使ってなければ、allocの数とrelease 又はautoreleaseの
数を一致させればいいのですよね。
でもpool releaseでコケる。う〜む。

399 名前:名称未設定 mailto:sage [2007/09/30(日) 21:44:01 ID:J3lW9Bur0]
暇なんで >>396-397 にさらに解説しておくと


alloc と initなんたら によるインスタンス作成は、インスタンスの所有が呼び出し側に発生する。
つまり(releaseまたはautoreleaseで)所有を放棄する義務があり、またそうしないといつまでもメモリ解放されない。

arrayWith なんたら によるインスタンス作成は、インスタンスの所有は呼び出し側にない。
よってreleaseまたはautoreleaseしてしまうと、他の所有を勝手に放棄してしまうことになり、過解放となる
(クラッシュなどを引き起こす)。

releaseとautoreleaseの違いは、
releaseは、呼ぶとすぐに自分の所有を破棄する。他も所有していなければメモリ解放される。
autoreleaseは、後で(ランタイムが適当なタイミングで)所有が破棄される。
大まかに言うと、メソッドがreturnしたらreleaseが呼ばれる(この場合がほとんど)。

つまり、arrayWith なんたら によるインスタンス作成は、
alloc と initなんたら によるインスタンス作成 に加え、autoreleaseが既に一度呼ばれた上で渡されている
というだけの違い。

所有のないインスタンスに自分の所有を加えるには、retainを呼ぶ。これにより所有が呼び出し側に発生し、
いずれ所有を放棄しなくてはいけない義務が発生する。

400 名前:名称未設定 mailto:sage [2007/09/30(日) 23:13:19 ID:J3lW9Bur0]
とりあえずretainCountの仕組みを

・そのpool releaseをコメントアウトするとコケなくなるのか?



401 名前:名称未設定 [2007/09/30(日) 23:14:22 ID:/8gv9Izg0]
>>399
GCが導入されると、違いは無くなるのですかね?。

402 名前:名称未設定 mailto:sage [2007/09/30(日) 23:14:34 ID:J3lW9Bur0]
>>400は無視して下さい

>>399で述べたような、autoreleaseによるreleaseの予約を管理しているのがNSAutoreleasePool。
以下の場合、arrayは[pool release]が呼ばれたタイミングでreleaseされる。

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSArray* array = [[NSArray alloc] init];
[array autorelease];
[pool release];

通常、何らかのインスタンス(上の例だとarray)にautoreleaseを呼ぶと、
一番最後に作成されたNSAutoreleasePoolのインスタンス(上の例だとpool)に、
その何らかのインスタンス(上の例だとarray)が登録される。そのNSAutoreleasePoolのインスタンス(上の例だとpool)
が破棄された時に、登録された何らかのインスタンス(上の例だとarray)にreleaseが呼ばれる。

Cocoaアプリのメインスレッドでは、NSApplicationがNSAutoreleasePoolの作成と破棄を繰り返している。
なので通常、自分でNSAutoreleasePoolのインスタンスを作成しなくてもautoreleaseの呼び出しが可能。

サブスレッドでは、NSAutoreleasePoolのインスタンスを自分で作成する必要がある。
また、メインスレッドでも、forやwhile文などのループ内でautoreleaseを何度も呼び出す場合は、
release予約の(つまりメモリ解放されない)インスタンスが増えるので、ループ内で
NSAutoreleasePoolの作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。

403 名前:名称未設定 mailto:sage [2007/09/30(日) 23:17:41 ID:J3lW9Bur0]
>>401
さあ。GCの仕組みをどう実装してるかによるんでしょうね。

404 名前:名称未設定 mailto:sage [2007/09/30(日) 23:23:15 ID:KRhNhdGX0]
>>402
>また、メインスレッドでも、forやwhile文などのループ内でautoreleaseを何度も呼び出す場合は、
>release予約の(つまりメモリ解放されない)インスタンスが増えるので、ループ内で
>NSAutoreleasePoolの作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。
>

どうもこの辺が怪しい気がしてきました。

405 名前:名称未設定 mailto:sage [2007/10/01(月) 02:12:00 ID:jb1YsKc80]
Am I missing something? I have the need to be able to send a simple
email from my application and NSMailDelivery's
+deliverMessage:subject:to: looked perfect but I can't get it to work.
I assume this is because I have not configured an SMTP server but I
don't see any way under Panther to do so. I vaguely recall there being
System Preferences control panel for this in earlier versions of OS X
but don't have an old version that I can check. Does NSMailDelivery
still work under Panther? And if not, is there a simple way of sending
an email without having to go through a mail client using NSWorkspace?

に対し、

406 名前:名称未設定 mailto:sage [2007/10/01(月) 02:12:36 ID:jb1YsKc80]
You can use NSMailDelivery without using a mail CLIENT, but you do need
a mail server... probably the same one that your mail client is using.
If this is an application that will be used by different people at
different locations, you will probably need to have them set a
preference telling the location of their mail server. You can also pull
the address from their internet preferences, assuming the user has set
them up.

407 名前:名称未設定 [2007/10/01(月) 02:16:53 ID:jb1YsKc80]
という回答なんですが、ローカルでメールサーバーを立ち上げてないとダメ、
ということですよね。
で、postfix startしてみたのですが、[NSMailDelivery hasDeliveryClassBeenConfigured]
はNOのまま。

どの設定をいじればYESが帰ってくるのでしょうか。

408 名前:名称未設定 mailto:sage [2007/10/01(月) 03:20:31 ID:4GJ4e1sj0]
Mail.appの設定じゃないかな。
smtp serverがローカルで動いている必要はないはず。

409 名前:名称未設定 mailto:sage [2007/10/01(月) 11:50:57 ID:oEXnpz/k0]
オーナーシップデバッグ。
これ基本。
developer.apple.com/jp/technotes/tn2124.html
NSZombieEnabled='YES'
環境変数なので、 「実行可能ファイル環境」で設定のこと。

410 名前:名称未設定 mailto:sage [2007/10/01(月) 13:18:53 ID:jb1YsKc80]
>>408
はじめはそう思ってMail.appの環境設定の項目を調べてみたのですが、
どうもそれらしいものが見当たりません。システム環境設定も同様でした。




411 名前:名称未設定 mailto:sage [2007/10/01(月) 13:20:27 ID:jb1YsKc80]
>>409
参考にさせていただきます。
ありがとうございます。

412 名前:名称未設定 mailto:sage [2007/10/01(月) 15:30:29 ID:v2NRyQLs0]
>>410
[NSMailDelivery hasDeliveryClassBeenConfigured] は、
「Mail.appでメールが出せる設定が出来ているかどうか」の意味っぽいけど?
できてる?
たぶんMail.appのアカウント設定の情報を参照してSMTPサーバにメールを
自前で投げるんだと思う。

413 名前:名称未設定 mailto:sage [2007/10/01(月) 23:44:37 ID:jb1YsKc80]
>>412
>「Mail.appでメールが出せる設定が出来ているかどうか」の意味っぽいけど?
>できてる?

Mail.appは毎日のように使っているので、そういう意味では問題筈です。
でも、「設定」の意味がよくわからないんですよね、海外のサイトを見ても。

414 名前:名称未設定 mailto:sage [2007/10/02(火) 07:18:33 ID:4wWs2Gwh0]
スクリーンショットを撮るアプリケーションを作っています。

スクリーンショットを撮るためにそのアプリを起動すると、
そのアプリがアクティブになってしまい、メニューバーにも
名前が表示されてしまうので、どうしても元のままの状態で
スクリーンショットを撮ることができません。

何か解決策があれば、教えていただけるとありがたいです。
よろしくお願いします。

415 名前:名称未設定 mailto:sage [2007/10/02(火) 07:43:14 ID:HqqJ+v970]
>>414
例えば純正である
/アプリケーション/ユーティリティ/グラブ.app
の場合はタイマー機能で任意のアプリのスクリーンショットを取ることを可能にしている。

416 名前:HK mailto:sage [2007/10/02(火) 19:13:50 ID:zksrfeR70]
>>414
developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/index.html
のNSUIElementやLSBackgroundOnlyその他を参照。
日本語訳はポッチンルームにあります。
自作日本語入力メソッドを作りましたが、
サーバーアプリケーションはこのへんを設定して裏にまわります。
裏から変換候補ウインドウを他アプリが前面のまま表示できます。

417 名前:名称未設定 mailto:sage [2007/10/02(火) 19:51:17 ID:t7c+rGGO0]
>>415,416
的確に教えていただき感謝です。ありがとうございました。

418 名前:名称未設定 mailto:sage [2007/10/05(金) 19:46:57 ID:gAtx49120]
例えば引数のメッセージやアイコンからメッセージダイアログを出すクラスを作って
いろんなクラスからそれを利用したい場合、

・各クラスでインスタンスを作成するのか、
・I.B上でインスタンスをひとつ作成して他のインスタンスと繋げるのか、

どちらの方法が良いのでしょうか。

419 名前:名称未設定 mailto:sage [2007/10/05(金) 20:46:57 ID:qqy/rlKl0]
>>418
NSAlertをお勧めします。
自作する場合もそれに準じるのが良いと思います。

420 名前:名称未設定 mailto:sage [2007/10/05(金) 21:20:03 ID:uw5Y856q0]
>>419
最初は各クラスで必要な箇所でNSAlertをだしていたんですが、
かなり頻繁にいろんな箇所で使うのでまとめたいなあと。
メッセージ、表示ボタンもケースによってバラバラですし。

なので、共通で引数で処理するようまとめてみたんですが。



421 名前:名称未設定 mailto:sage [2007/10/05(金) 23:35:57 ID:qqy/rlKl0]
>>420
素直にNSAlertのカスタムクラスかカテゴリはどうですか?

422 名前:名称未設定 mailto:sage [2007/10/07(日) 22:01:11 ID:3CacK9uM0]
homepage.mac.com/mkino2/

423 名前:名称未設定 mailto:sage [2007/10/07(日) 23:36:08 ID:jl2bDT9K0]
無料のときからずっと使っているとこの十月で更新になるからな

424 名前:名称未設定 mailto:sage [2007/10/08(月) 15:05:10 ID:pbJo8Zn/0]
>>421
アドバイスありがとうございます。
カテゴリなんてのもあるんですね。勉強してみます。

425 名前:名称未設定 mailto:sage [2007/10/11(木) 09:29:49 ID:nscIn2lg0]
CIImageのオブジェクトなんですけど、
ビットマップの上と下に余白部分を作りたいんですよね。
バックグラウンドになるビットマップを作って、
そこにCIFilterのCompositing Filtersで合成しようと思い立ったんですけれど、
CIFilterが最初から持ってるエフェクトで座標を指定して合成するのって見当たらないんです。
で、なにかいい方法があればお教え願いたいんですが。。

426 名前:名称未設定 mailto:sage [2007/10/11(木) 15:53:07 ID:+RNbQCmY0]
CIAffineTransform

427 名前:425 mailto:sage [2007/10/11(木) 16:12:36 ID:nscIn2lg0]
>>426さん
■■■■■余白
□□□□□もともとのビットマップ
□□□□□
■■■■■余白
こうしたいのですが、アフィン変換でそんなことできるんですか?


428 名前:名称未設定 mailto:sage [2007/10/11(木) 16:33:26 ID:ToYfcU0y0]
>>427
ググればすぐ分かる事を...
ヒント貰ったんだから、あとは自分で調べなよ。

429 名前:425 mailto:sage [2007/10/11(木) 17:17:47 ID:nscIn2lg0]
CIFIterのCIAffineTransformのところはドキュメントを読んでたんですけれど、
いまいちピンと来ないんですよね・・・。
Google検索してもこれと言って情報も無いし。
拡大してoutputImageしてからもう一回inputImageして縮小するってことかな。
もうちょっと調べてみます。

430 名前:名称未設定 mailto:sage [2007/10/11(木) 18:21:54 ID:Q0Oj/uoh0]
原点...



431 名前:名称未設定 mailto:sage [2007/10/11(木) 19:05:53 ID:ToYfcU0y0]
>>429
アップルのサイトに全てありますよ。
座標移動の NSAffineTransform は、
[[NSAffineTransform transform] translateXBy:0 yBy:10];
みたいな感じで作れるよ。
あとはこれを inputTransform に設定するだけじゃないですか。

432 名前:429 mailto:sage [2007/10/11(木) 19:11:36 ID:ToYfcU0y0]
あれ、これって変換した新しいCIImageを作るだけですね。
ごめんなさい。

433 名前:432 mailto:sage [2007/10/11(木) 19:59:57 ID:ToYfcU0y0]
名前欄間違えました。
ちょっと調べてみたけどCIFilterでは無理っぽい。
面倒だけど自前でやるしかないですね。

434 名前:名称未設定 mailto:sage [2007/10/11(木) 20:05:06 ID:RqBWEm1l0]
WindowかViewをフェードアウトして消えてくように
したいんですが、どのようにやるといいでしょうか。
自力で透明度いじるしかありませんか?
OSX10.4です。

435 名前:名称未設定 mailto:sage [2007/10/11(木) 20:21:29 ID:ukinxETG0]
黒で塗りつぶした上にCIImageの座標を適当にずらして描画すればんじゃないのか?

436 名前:425 mailto:sage [2007/10/12(金) 09:29:16 ID:XnHNJR3q0]
>>433
そうなんですよね。CIFilterが最初から持ってるエフェクトだと、
合成時に座標を指定する事が出来ないんですよね。
NSOpenGLView側で描画位置を変えるって言う手もあるんでしょうけれど、
それだと背景色を指定できないし。
>>435
NSGraphicsContextとNSBezierPathでビットマップを作って、そこに貼付けるってやり方でやってるんですが、
カスタムのCIFilterを作るしか無いのかなと思って来てます。

437 名前:名称未設定 mailto:sage [2007/10/12(金) 09:29:45 ID:CM/NoWBY0]
>>434
標準的なUIにはない挙動だから(多分)、自分で何かするしかないのでは。
10.4ならNSViewAnimationを使うのが一般的&楽かな。
より原始的(?)に、タイマーで透明度を徐々に変化させていってもできる。

438 名前:425 mailto:sage [2007/10/12(金) 09:30:20 ID:XnHNJR3q0]
あれ?ひょっとしてアフィン変換した元画像をビットマップに合成すればいいのかな?
ちょっとやってみます。

439 名前:425 mailto:sage [2007/10/12(金) 16:49:48 ID:XnHNJR3q0]
やってみたところうまくいってるみたいです。
ありがとうございました。

440 名前:名称未設定 mailto:sage [2007/10/12(金) 16:53:45 ID:HFBiEdQm0]
なんという回り道・・・



441 名前:名称未設定 mailto:sage [2007/10/13(土) 09:03:43 ID:hg0jttDu0]
各種ファイルをNSFileWrapperを使ってシリアライズ・比較・更新等するような
ソフトを作ろうと思って少し試しているんですが、

ファイルの内容の比較のため、とりあえずシリアライズされたデータを比較
してみたんですが、どうやら元ファイルの内容が同じでもシリアライズされた
データは異なるようです。NSFileWrapperのバグなのか、シリアライズ化
というもの自体の特性なのか、よくわかりませんが...

なお、ここでの同一性とは、元のファイルに diff をかけたのと同じ結果、を
期待しています。

こういう場合、データのシリアライズ化とファイル内容の同一性って、どうやって
両立したらいいでしょうか... もし同一性もチェックできるシリアライズ化
なんてものが存在するとうれしいのですが。

442 名前:名称未設定 [2007/10/13(土) 11:02:54 ID:XvtdC7UH0]
hmdt.jp/archives/2006_07.html#sec2006071301

こんなアプリが増えていますけど、みんな似たような事してるんですかね?。
最近の増え方を見ていると、もっと楽な方法がありそうな気がするのですが。

443 名前:名称未設定 mailto:sage [2007/10/13(土) 21:38:57 ID:eZww9H1A0]
Vistaが「遅い」と感じませんか?
itpro.nikkeibp.co.jp/article/OPINION/20071001/283256/

 2007年1月30日にWindows Vistaが店頭で発売されてから約8カ月が過ぎた。
この記者の眼でも,4月24日に「Vistaってどうよ?」というややポジティブな見解が掲載された。
これはこれで納得できる。「『売り上げは期待を下回るが私は強気』,
マイクロソフトWindows本部長」というコメントもほぼ同時に報じられた。

 その後もマイクロソフトは,「Windows XPのPCメーカーへの出荷,来年1月で終了へ」と突っ張っていた。
それが最近では「『Windows XPの販売を5カ月延長』,米マイクロソフトが方針転換」と来た。
低価格パソコン向けに新興国で販売している「Windows XP Starter Edition」については,
2010年6月30日まで販売を延長するという。Vistaはどうもハッピーな状況ではない。

 Vistaが好感を持たれない理由は,(1)価格が高い,(2)マイクロソフトの訴求するセールスポイントが
ユーザーの感覚とかけ離れている,(3)2001年にWindows XPが出て約6年が経過する間に
ハードウエア,ソフトウエア,使いこなしノウハウの資産が各所に大量に蓄積されて
移行コストが上がった,などが考えられる。ただ,最大の理由は,Vistaが「遅い」ことではないだろうか。
Vista搭載パソコンを新規に導入した人なら,おおむね性能に不満はないだろう。
でも,新しいパソコンをポンと買える人がどのくらいいるだろうか?


444 名前:名称未設定 mailto:sage [2007/10/15(月) 08:47:51 ID:RJEHHK9w0]
うーん、ApplicationDidFinishLaunchingノティフィケーションを実装しても
何故か呼び出してくれない。サンプルのsketchを見るとセンターに登録せずに
使えてるようなんだが・・・

445 名前:名称未設定 mailto:sage [2007/10/15(月) 08:57:43 ID:w9VArlJf0]
delegate にする

446 名前:名称未設定 mailto:sage [2007/10/15(月) 09:23:49 ID:RJEHHK9w0]
>>445
Notificationじゃなかったのか。ありがとう。
おかげで起動時にパレットを表示できるようになったよ。

447 名前:名称未設定 [2007/10/16(火) 01:50:24 ID:RhpguY+z0]
age

448 名前:名称未設定 mailto:sage [2007/10/16(火) 23:56:51 ID:UHgbhQAb0]
Leopardは26日発売か。早くADCのサイトでLeopardのドキュメントが読めるよ
うになってくれないかなぁ。Obj-C 2.0とCore Animationの詳細が知りたくてた
まらん。


449 名前:名称未設定 mailto:sage [2007/10/17(水) 13:10:54 ID:vy+i57Fb0]
$500で1年前から読めるけど。

450 名前:名称未設定 mailto:sage [2007/10/17(水) 15:12:35 ID:9JlNZqhL0]
趣味で読むには高過ぎる値段だ。




451 名前:名称未設定 mailto:sage [2007/10/17(水) 15:34:38 ID:bw4gG9tu0]
でもLeopard買わずに済むよ。MacProを買うんなら元取れるし。

452 名前:名称未設定 mailto:sage [2007/10/17(水) 20:37:50 ID:1AjA4OVd0]
俺の用途から言って趣味でMacProなんて宝の持ち腐れも良いとこだし。

まあ26日には読めるんだからそれまで辛抱だろうな。

453 名前:名称未設定 [2007/10/17(水) 21:22:18 ID:UrqKimq/0]
でもま、趣味で買うやつもいるんだろうなw

とりあえずはこれでガマンかー。早くこいこい
www.apple.com/jp/macosx/developer/
developer.apple.com/jp/leopard/overview/
developer.apple.com/leopard/overview/tools.html
developer.apple.com/leopard/overview/apptech.html

454 名前:名称未設定 mailto:sage [2007/10/18(木) 01:06:04 ID:mkmoS9NR0]
XcodeのSCM機能は貧弱と聞いたのだけれども、3.0で改善されているのかな
ttp://doni-dog.blogspot.com/2007/06/xcode.html

455 名前:名称未設定 mailto:sage [2007/10/18(木) 01:17:10 ID:slHsJ97C0]
>>454
そのリンクの奴、ちゃんと使えてるとは思えんな。
SCMが特許対策というのも意味わからん。

456 名前:名称未設定 mailto:sage [2007/10/18(木) 02:23:44 ID:Mr8A9HPs0]
svnadminなんてXCodeに必要な機能じゃないし、TimeMachineなんてありえないわ。

457 名前:名称未設定 mailto:sage [2007/10/18(木) 06:35:32 ID:tLRRr8tY0]
きっと、単に変更履歴を追いかけることが出来るから、後で
特許関連で訴えられたときに証拠として採用するように訴える
ことが出来るだろ、てことじゃないのかな。

採用されるかどうかは分からないが。

458 名前:名称未設定 mailto:sage [2007/10/18(木) 09:02:33 ID:fqG2TSy+0]
オープンソース等で公開されているものなら証拠にはなるかもしれないけど
そうでないなら信頼性はまったくないな。

459 名前:名称未設定 mailto:sage [2007/10/18(木) 10:54:31 ID:Y0mjkOTf0]
まぁ俺は、リビジョン管理システムがないのはやはり欠点と思う。

開発ツールなんだしさ。定期的にスナップショットを保持出来る
ような仕組みがあるだけでも大分違うし。

460 名前:名称未設定 mailto:sage [2007/10/18(木) 20:27:18 ID:6hta7bjM0]
www.apple.com/jp/macosx/features/300.html#xcode3

Xcode 3.0

# プロジェクトのスナップショット

失敗を恐れず、心ゆくまでテストしましょう。プロジェクトのすべてのファイルを、いつでも好きな時に記録しておけます。万一の時もこれで安心。プロジェクトをいつでも元の状態に戻せるので、自信を持ってテストできます。




461 名前:名称未設定 mailto:sage [2007/10/18(木) 22:15:13 ID:lA7sYrRH0]
Xcode3.0楽しみだね。早くこいこいGC。

462 名前:名称未設定 mailto:sage [2007/10/19(金) 12:34:51 ID:VK3fEPzF0]
>>460
それってsvnベース?
変更点を見比べることができるようなインターフェースが欲しい。

463 名前:名称未設定 mailto:sage [2007/10/19(金) 13:02:13 ID:GQjRZD8/0]
今でもあるけど。

464 名前:名称未設定 mailto:sage [2007/10/19(金) 13:06:34 ID:z7q4y0U10]
>>463
shift-jis 以外の日本語で落ちなければ、今のままでいい。
変換すればdiffは見れるけど、マージできないし。

465 名前:名称未設定 mailto:sage [2007/10/19(金) 13:51:02 ID:uOW40gYR0]
Core Data Document Based Applicationで
ファイルがloadされたときに勝手にNSArrayControllerに
objectが追加されるけど,その追加された直後に何かやりたいときは
どうしたらいいですかね。
notificationでも飛んでくるといいのだが。



466 名前:名称未設定 [2007/10/19(金) 14:51:45 ID:XaYlxLt20]
>>465
NSManagedObjectの
- (void) awakeFromInsert;


467 名前:465 mailto:sage [2007/10/19(金) 17:04:47 ID:uOW40gYR0]
>466
ありがとう
awakeFromFetchでできました

468 名前:名称未設定 mailto:sage [2007/10/19(金) 19:17:19 ID:m+Row12Z0]
>>462
普通に考えるとTime Machineじゃね?

469 名前:名称未設定 mailto:sage [2007/10/19(金) 20:09:43 ID:k7hQT15w0]
現在使用しているシステムの言語を取得するには
どうすればいいのでしょうか?


470 名前:名称未設定 mailto:sage [2007/10/19(金) 21:06:05 ID:XaYlxLt20]
echo $LANG
defaults read NSGlobalDomain AppleLanguages





471 名前:469 mailto:sage [2007/10/19(金) 22:49:11 ID:k7hQT15w0]
>>470
どうもです、以下の方法でいけました。

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];

potting.syuriken.jp/potting_conv/BPInternational_J/chapter6.html

472 名前:名称未設定 [2007/10/20(土) 00:26:47 ID:nttpT0GF0]
NSCalendarDate で、例えばNSLogなどで%@が指定されている場合、
descriptionWithLocale:が送信されるとドキュメントにはあります。

NSLog(@"The current date and time is %@", [NSCalendarDate date]);
だと、
this statement invokes descriptionWithLocale:
だとあります。

しかし、descriptionWithLocale:は引数として(NSDictionary *)localeをとるのに、
その引数はどこからやってくるのでしょうか。

というか、デフォルトのロケールを(いちいちlocaleを指定しないでも)日本語にしたい
のですが、できるんでしょうか(環境変数なんかで)。
デフォルトロケールをセットするメソッドが見当たらないので、
カテゴリとかで対応するしかないのならそうしますが、そんなことしなくても
済むのならと思いまして。

473 名前:名称未設定 mailto:sage [2007/10/20(土) 02:55:24 ID:nttpT0GF0]
環境変数LANGが日本語に設定されていれば、NSCalendarDateの出力も日本語
になると思っていたのですが、そうではないですよね?

ターミナルからdateコマンドを実行すると、LANGの設定の有無で表示が切り替わる
のが確認できるのですが、自前プログラムでNSCalendarDateを使って表示させると、
日本語がでてくれません。もちろん、localeディクショナリを自前で用意してやると
ちゃんと出るのですが、Cocoaにおいて(具体的にはNSCalendarDateなど)カレン
トロケールの設定はどうしたらいいのでしょうか。

/usr/share/localeのjpフォルダには、LC_TIMEがあって、月、火、水、とか
設定されているのですが、どうもこいつが利用されていないのですよね、NSCalendarDate
では。
OS は 10.3.9です。

474 名前:名称未設定 mailto:sage [2007/10/20(土) 03:17:55 ID:nttpT0GF0]
Appleのドキュメントや荻原本(p306)にあるように、

NSCalendarDate *calendarDate =
[[NSCalendarDate alloc] initWithTimeIntervalSinceReferenceDate:uploadedTime];
[calendarDate descriptionWithLocale:
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];

こんな感じでもやってみましたが、ユーザデフォルトから作った辞書のなかに、
NSShortWeekDayNameArrayやNSWeekDayNameArrayといったキーがないので、
やはり日本語が出てくれません。

475 名前:名称未設定 mailto:sage [2007/10/20(土) 05:52:17 ID:pIwCUrUa0]
LANGじゃ機能不足だから。

476 名前:名称未設定 mailto:sage [2007/10/20(土) 09:31:19 ID:chy8q2CK0]
developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/Articles/ChoosingLocalizations.html

Important: Although you can get the user's preferred settings from the defaults database,
it is recommended you use the CFBundle functions or NSBundle class instead.
The associated functions and methods of those objects return the preferred
language or locale that is also supported by your application. (Bear in mind that the
returned values may not correspond directly with the user's exact preferences.)

あまり参考にはならないかも・・・

477 名前:名称未設定 mailto:sage [2007/10/20(土) 10:08:04 ID:A3g+yh3Z0]
見るべきはこの辺じゃないの?
developer.apple.com/documentation/CoreFoundation/Conceptual/CFLocales/index.html
developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/Reference/Reference.html

CocoaはLANG なんて使ってないし。
プログラム内で自分でNSLocaleの初期化時に使えばいいんでないかな?

どうせ聞いてくるから先に。
getenv(3)

478 名前:名称未設定 mailto:sage [2007/10/20(土) 12:22:05 ID:nttpT0GF0]
みなさんありがとうございます。これから仕事なので、
あとでもっとしっかり読みますが、いま、ざっと読んだかぎりでは、

環境変数で挙動を変えるのではなく、コード内でユーザの設定を読み取る必要があるという
ことですね。
すると、やはり、その読み取ったロケールに従って、locale dictinary
を作り(あるいはこれも取得できるのかもしれませんが)、それを引数に指定して
withLocale系のメソッドを呼ぶ、ということになりそうです、いまの理解では。
少なくても10.3においては。


479 名前:名称未設定 mailto:sage [2007/10/20(土) 18:38:34 ID:A3g+yh3Z0]
これがおかしいのか。 >474
職場なので cf.sourceforge.jp で試したけどちゃんとできるよ。
10.4 だけど。

int main( char *argv[], int argc )
{
id pool = [[NSAutoreleasePool alloc] init];

id d = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];

NSLog(@"%@", d);

id s = [NSCalendarDate dateWithTimeIntervalSinceNow:0.0];
id ss = [s descriptionWithCalendarFormat:@"%c" locale:d];

NSLog(@"%@",ss);

[pool release];
}

で日本語で出た。
もちろんLANGなんて設定してないよ。

480 名前:名称未設定 mailto:sage [2007/10/20(土) 19:56:16 ID:b1ZhonRi0]
cocoaを勉強しはじめて2ヶ月の者です。
基本的なことですが、分からない事があるので質問させてください。
あるクラス全体で使いたい変数を宣言するには、

@implementation クラス名

のあと(メソッドを記述する前の部分)に static という宣言をして
変数を宣言すればよい、と知りました。

そこで、
static NSArray *myArray;
のように宣言し、そのクラスの中に

-(NSArray *)ReturnMyArray{
//NSLog( @"NSArray *myArray =%@",[myArray componentsJoinedByString:@" and "]);
return myArray;
}


という宣言した配列を返すメソッドを作りました。

これを実行すると、このメソッドが呼ばれた時点でフリーズして
しまいます。何が問題なのか分からないので、教えていただけると
ありがたいです。よろしくお願いします。




481 名前:名称未設定 mailto:sage [2007/10/20(土) 20:44:18 ID:C5KB0rGs0]
初期化してやらないといけないのでは

482 名前:名称未設定 mailto:sage [2007/10/20(土) 20:45:04 ID:MXAR1ZE10]
NSLogの行はコメントってことでいいの?
そうであれば、とりあえず呼ばれた時点でフリーズすることは無いんでは。

NSLogの行が有効で、myArrayが何も指していない状態で呼び出すと、クラッシュすると思うけど。

483 名前:名称未設定 [2007/10/20(土) 21:01:19 ID:ephnEzFr0]
多分、基本的な所でつまずいていますので、どなたか教えて下さい。

本体をプラグインにて拡張できるアプリケーションがあるとします。
このとき、本体とプラグインで、
別のバージョンの同じフレームワークを使用する事は出来ますか。

例えば、以下のような構成です。

本体(フレームワーク v1.0)
プラグインA(フレームワーク v2.0)
プラグインB(フレームワーク v3.0)

どうも、先に読み込まれた(本体の)フレームワークを後に読み込んだプラグインでも使用しているようなのです。
バンドルが違っても、同じクラス名はダメなんでしょうか?

よろしくお願いします。


484 名前:名称未設定 mailto:sage [2007/10/20(土) 23:55:06 ID:i5VOuciv0]
ウィンドウの外観をmail.appみたくスッキリした明るいツルペタにしたいのですが、
どこかリソースを配布しているところはありませんでしょうか?

それらしいアプリのリソースフォルダを漁ってもなかなか見つからなくて。

485 名前:名称未設定 mailto:sage [2007/10/21(日) 00:20:37 ID:AuZVtDw10]
NSUnifiedTitleAndToolbarWindowMask

486 名前:名称未設定 mailto:sage [2007/10/21(日) 12:37:24 ID:2g9tmK/v0]
LeopardのObjectiveCのランタイムってオープンソースだよね?
Tigerにも入れられないのかなぁ

ところで、/System/Library/Frameworksの中身って、
アプリケーションバンドルに入れて配布していいの?
配布できるのなら、Tigerでも動くGCアプリが組めるかもしれないね

487 名前:名称未設定 mailto:sage [2007/10/21(日) 23:54:28 ID:uO+uiivY0]
>>479
此方でも確認できました。

>>474で駄目だったのは、一言で云えば勘違いです。
デフォルトフォーマットだと曜日が出力されないため、漢字が表れなかっただけでした。
失礼しました。

皆さんのご教示にヒントを得て試した限りでは、
>>478の内容で間違いなさそうです。

つまり、コード内でロケールを取得し、それに従った辞書を使う、ということですね。
そして、辞書はユーザデフォルトが使えます。これはAppleのドキュメントや荻原本や
>>479のとおりです。

ここまでで当面の障害はクリアできました。しかし、いまだに>>472が謎です。
%@がdescriptionWithLocale:を呼ぶとあるのですが、その場合引数はどこからくるのかな、
と思うわけです。nilだとしたら単なるdescriptionを呼ぶのと差が出ないし。
プログラミングを進めていくうえでこの謎が障害ではないのですが、もし解決するとスッキリ
するので書いてみました。

レスいただいた皆さん、ありがとうございました。




488 名前:名称未設定 mailto:sage [2007/10/22(月) 15:12:29 ID:Gv93rxrK0]
>>487
>%@がdescriptionWithLocale:を呼ぶとあるのですが、その場合引数はどこからくるのかな、
>と思うわけです。nilだとしたら単なるdescriptionを呼ぶのと差が出ないし。

NSLog() では locale 部分は常に nil が指定されているっぽい(挙動より推定)。
何らかの方法で別の locale を指定できるかは不明。ただ NSCalendarDate 側で
setDateFormat: 等により日付の書式を変更することは可能。

NSString の format を扱うメソッドでは locale を指定できる。

489 名前:名称未設定 mailto:sage [2007/10/23(火) 11:09:44 ID:xEB3AVEJ0]
復活した
ttp://homepage.mac.com/mkino2/

490 名前:名称未設定 mailto:sage [2007/10/23(火) 12:43:14 ID:hf1e1yJr0]
pc11.2ch.net/test/read.cgi/mac/1161656142/899
調べたらいろいろあるなぁ




491 名前:名称未設定 mailto:sage [2007/10/24(水) 19:31:02 ID:7aPURO+G0]
ややこしい質問ですみません。

メニューアイテムのサブクラスを作り、アイテムを動的に変化させるサブメニューを追加ました。

メニューアイテムを選択した時にサブメニューの内容を再表示させるために
・親メニューのデリゲートをメニューアイテムにセット。
・メニューアイテムのサブクラスでmenuNeedsUpdateを記述し、サブメニューを再作成する処理を記述。

この場合、親メニューに同じような動的に変化するメニューアイテムを複数追加すると、
どれかひとつだけしかサブメニューが展開されません。

原因は親メニューのデリゲートを個々のメニューアイテムのサブクラスで取り合ってるからだと思いますが、
うまく全てのサブメニューを動かす方法はありませんでしょうか。

492 名前:名称未設定 mailto:sage [2007/10/24(水) 20:03:08 ID:sR3ireTF0]
単にvalidateMenuItem:で変化させるのじゃダメなの?

493 名前:名称未設定 mailto:sage [2007/10/24(水) 23:05:29 ID:stlIlKGC0]
>>492
ご指摘ありがとうございます。なんとか自己解決しました。
サブクラスのインスタンス変数にNSMenu *aMenuを作って、最初に[aMenu setDelegate: self ]で
サブクラスに記述したmenuNeedsUpdateが効くようになりました。
あとは毎回aMenuのアイテムを作り替えれば出来ました。


494 名前:名称未設定 mailto:sage [2007/10/27(土) 10:17:12 ID:3Nec+9va0]
ウインドウにボタンとラベルだけを配置した画面を
Leopardのテクスチャウインドウにしたら......カッコ悪るすぎる!!

495 名前:名称未設定 [2007/10/27(土) 11:52:47 ID:jEECVdr70]
age

496 名前:名称未設定 mailto:sage [2007/10/27(土) 14:15:46 ID:3Nec+9va0]
Recessed Buttonのフォーカスリングがバグっぽいんだけど俺だけ?


497 名前:名称未設定 mailto:sage [2007/10/27(土) 17:07:06 ID:iaL/K9DY0]
メタル指定のnibウィンドウ、Leopardで起動すると
もっと暗いソリッドな灰色になっちゃう
激しく見づらいです・・・

498 名前:名称未設定 mailto:sage [2007/10/27(土) 18:36:18 ID:C2JoQvU90]
>>497
だよねー。テキストの色を白くするか黒くするか迷うくらいに微妙な色使いだよ

499 名前:名称未設定 mailto:sage [2007/10/27(土) 21:08:55 ID:Og+Fksq40]
まだタイガーなんですけどメタルウインドウは
Leopardではツルペタになるんですか?

500 名前:名称未設定 [2007/10/27(土) 22:08:37 ID:Bh3IlNe10]
メタルなウィンドウにテキストを書く場合は、
テキストに下方向に白色のドロップシャドウを落とす
(そうすると彫り込んであるように見える)のが筋だね。

Leopardのソフトはほとんどそうなってる。



501 名前:名称未設定 mailto:sage [2007/10/27(土) 22:08:41 ID:C2JoQvU90]
なるんですよorz
それがかっこわるいんですよorz

502 名前:名称未設定 mailto:sage [2007/10/27(土) 22:57:58 ID:kLyG3aM00]
タイガーで問題なかった俺のコード
レパドンでは動かねぇ‥ orz


503 名前:名称未設定 mailto:sage [2007/10/27(土) 23:10:42 ID:ucyY83x00]
俺のは全部動いたお \(^o^)/

504 名前:名称未設定 mailto:sage [2007/10/28(日) 00:31:30 ID:74uJkHwy0]
NSMenu のサブクラスを作り、
numberOfItems の中で [self setDelegate:hoge] を(問答無用に)実行してた
Tiger では問題なかったけど、Leopard では setDelegate が numberOfItems を呼ぶので
無限ループになってしまった。

505 名前:名称未設定 mailto:sage [2007/10/28(日) 07:29:38 ID:TbbSGqL60]
NSString lineRangeForRange:
について質問です。これは、改行コードを種別に関わらず含まない
NSRangeを返すと考えてよいのでしょうか?
例えば、CRLF、LF、CRのいずれも取り除いた(改行コードをふく
まない)1行の範囲を取り出してくれるということでしょうか?

ずっと自前で実装してたので・・・orz。

506 名前:名称未設定 mailto:sage [2007/10/28(日) 11:06:35 ID:+sZmZGVM0]
>>505
getLineStart:end:contentsEnd:forRange: の説明によると行とは以下のいずれかで
区切られたものであると書いてある:

U+000D (¥r or CR)
U+2028 (Unicode line separator)
U+000A (¥n or LF)
U+2029 (Unicode paragraph separator)
¥r¥n, in that order (also known as CRLF)

これは lineRangeForRange: でも同じはず。

507 名前:名称未設定 [2007/10/28(日) 16:51:41 ID:r6e7RucM0]
新InterfeceBuilder だけど、クオーツコンポザーみたいに
GUIだけでアニメーション付きGUIを設計できると期待してたんだけど、
やり方がよく分からん。
多少なりともコードは必要なんですかね。

508 名前:名称未設定 mailto:sage [2007/10/28(日) 17:56:23 ID:VmKk9DlI0]
ですね。
特に新IBは、自分のクラスをインスタンスする方法が解らなくてイライラしたw

509 名前:名称未設定 mailto:sage [2007/10/28(日) 20:18:21 ID:XloRMi6L0]
>>506
レスさんきゅです。

結局安直な手法で逃げました。
[NSString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];

これだとマルチラインには対応できないですけど、とりあえず
は使えそうなので・・・

510 名前:名称未設定 mailto:sage [2007/10/29(月) 00:56:39 ID:24BH5rD00]
>>509
安直と言うか、よくわからんがやりたいのはそれなのか。
ちなみにwhitespace(空白)もトリムされるがいいのかな。



511 名前:名称未設定 mailto:sage [2007/10/29(月) 22:30:49 ID:ZYf1cvjU0]
GCすげえ!!
俺のアプリのメモリ消費量が半分になったorz

512 名前:名称未設定 mailto:sage [2007/10/29(月) 22:40:21 ID:WF5b1sUq0]
それはGCが凄いと言うか・・・

513 名前:名称未設定 mailto:sage [2007/10/29(月) 22:58:14 ID:3xNL/5J/0]
……まあ、orz付けてるのに免じて
少なくともAppleは>>511に福音を齎したと言う事でひとつ。

514 名前:名称未設定 mailto:sage [2007/10/29(月) 23:33:13 ID:UlbYCa240]
Apple製アプリも>>511と大して変わらんよ。
leaks動かすと相当酷いってことが判る。
API自体leakしてるのもあるし。

515 名前:名称未設定 [2007/10/30(火) 01:46:40 ID:UEjozDia0]
それはGCが凄いというか>>511がダメだ

っていうんだったらGCの恩恵を最大限に受けてるってことで、
結果的にはオーライだったと言えるな。
俺のコードもメモリ消費量の低下が半端じゃないw

516 名前:434 mailto:sage [2007/10/30(火) 07:10:03 ID:kfmeCiZ40]
>>437
ずいぶん経ちましたが、NSViewAnimationでいけました。

517 名前:名称未設定 mailto:sage [2007/10/30(火) 10:38:54 ID:IZLIO/QN0]
1.0で書かれたコードでGC有効にするのって、特に何もしなくても良いの?

518 名前:名称未設定 mailto:sage [2007/10/30(火) 10:53:40 ID:uwVxnpmO0]
deallocの内容によるんでねえの。

519 名前:名称未設定 mailto:sage [2007/10/31(水) 02:16:17 ID:SyaOS2Kn0]
萩原本の検証と結論が済んだLeopard対応版を待ってしまう俺はヘタレ

520 名前:名称未設定 mailto:sage [2007/10/31(水) 19:24:36 ID:AmyfOyxk0]
mattgemmell.com/2007/10/28/get-rid-of-your-code-with-leopard



521 名前:名称未設定 mailto:sage [2007/10/31(水) 23:15:48 ID:73MMG/Dl0]
今HMDTを見て知ったんだけどWooden shipsの人が亡くなったんだね。
昔自作のソフトを載っけてもらったことがあるんだよなあ
49歳なんてまだ若いのに残念

522 名前:名称未設定 mailto:sage [2007/11/01(木) 00:33:29 ID:25EKZp+g0]
OS X使いとしてはitojun氏が無くなったのもかなり残念。37歳、若過ぎる…。

523 名前:名称未設定 mailto:sage [2007/11/01(木) 04:38:51 ID:m0Ek7Tcl0]
[NSFont description]の結果
NSFont = "HiraKakuPro-W3 100.00 pt. P [] (0x00373d50) fobj=0x00372930, spc=33.30";

のspc=33.30が何なのか(たぶん下の余白だと思う)
変更可能ならどうやればいいのか
知ってる人教えて

524 名前:名称未設定 mailto:sage [2007/11/01(木) 11:29:01 ID:XHMm/9gV0]
Fontの属性を変更するのでは無くて、2行目の位置を自前で計算してだせば良いのでは?

525 名前:名称未設定 mailto:sage [2007/11/01(木) 15:07:06 ID:m0Ek7Tcl0]
>>524
Fontはほぼgetterしか無いからそうするしかないのかな
33がline spacingっぽからset 0とできればスマートなのだけど

526 名前:名称未設定 mailto:sage [2007/11/01(木) 19:21:45 ID:XHMm/9gV0]
Fontが編集出来たら原理的に駄目だろう。俺んちのosakaフォントとお前のうちのosakaフォントの
見た目が違ったら駄目じゃん。
うまい方法hじゃ

527 名前:名称未設定 mailto:sage [2007/11/01(木) 19:22:40 ID:XHMm/9gV0]
ごめん、さっき解決方法を思いついたけど忘れたonz


528 名前:名称未設定 [2007/11/02(金) 04:29:29 ID:gwCUIALD0]
NSAlertの

- (void)setShowsSuppressionButton:(BOOL)showButton

でチェックした場合、
また、アラートを表示したい場合はどうすれば良いのでしょうか。
設定の保存場所を教えていただけないでしょうか。

529 名前:名称未設定 mailto:sage [2007/11/02(金) 18:12:22 ID:B5h15Yrn0]
Leopard で動かない報告が多く出ているのを考えると、拡張性が高い Objective-C
が裏目に出ているのかな。つうか、発売が延期になったくせに対応できてない商用ソフト多数
ってところに、Mac の力の弱さを感じる。


530 名前:名称未設定 mailto:sage [2007/11/02(金) 20:41:01 ID:0Xa0RRTf0]
そもそも動かなくなるってのはなんで?
クラスやメソッド自体がなくなるとか?




531 名前:名称未設定 mailto:sage [2007/11/02(金) 20:52:31 ID:tSiOpZEw0]
Tigerの時に廃止を予告されたものは数多くあるが、互換性はまだあるだろ。
Carbonの古いAPIですらまだ動くぞ。

532 名前:名称未設定 mailto:sage [2007/11/02(金) 20:53:11 ID:PjiJdx3J0]
>>529
だって発売日まで最終版が手に入らなかったわけだから仕方ないでしょう
バグなのか仕様なのかはっきりしない部分も沢山あった

>>530
メソッドがなくなるのもあるし、10.5から非推奨関数になったものは正常に動かない場合もある

533 名前:名称未設定 mailto:sage [2007/11/02(金) 21:14:18 ID:/uepB7fw0]
>>532
非推奨の古いAPIの方が変にいじらない分ちゃんと動くよ。
出来たばかりのAPIとか内部構造を改良した(つもり)のAPIの方が
動作が変わったり、バグが出たり消えたりして動かないw

534 名前:名称未設定 mailto:sage [2007/11/02(金) 21:58:02 ID:EINr1KLa0]
ていうかObjCランタイム総入れ替えしてるわけだから
何があってもおかしくないでしょ。

535 名前:名称未設定 mailto:sage [2007/11/03(土) 16:19:10 ID:fenLA4fy0]
Xcode2.5が出ていますが、これはタイガー用ということでしょうか?
現在2.4.2なのですが2.5にあげるメリットはありますでしょうか?
(Leopardでも動くようになるとか)

536 名前:名称未設定 mailto:sage [2007/11/03(土) 16:50:48 ID:x0ahP+Zd0]
・Xcode 2.4.2って存在してたっけ?

せめてこのページくらいは読んでからにしてくれ。
developer.apple.com/tools/download/

537 名前:名称未設定 mailto:sage [2007/11/03(土) 23:27:00 ID:NGuLosbV0]
ありがとうございます。
Xcodeは2.4.1でした、うろ覚えだったもんで。

英語にちょっと弱いんですが、2.5にするとLeopardでも動く
ということでしょうか。

538 名前:480 mailto:sage [2007/11/04(日) 00:25:35 ID:RpfIewzZ0]
亀レスで恐縮です。
>>480についてなんですが、

@implementation クラス名 のあとにstaticで静的変数を宣言しました。
そして、その変数に値を代入するメソッドを実行したのち、
そのクラスの別のメソッドから戻り値としてその変数の値を
返す、ということをやってみました。

ところが、NSLogでログ出力してみると、変数に値を代入する
メソッドにおいて、値を代入した直後に出力したログには、正しく
代入した値が表示されるのですが、別のメソッドでNSLogで
ログ出力してみると、nill がかえってきてしまいました。

デッバガで見ても、やはり静的変数の値が、値を代入したメソッドを
抜けると、保持されていないみたいです。

静的変数は、宣言したクラス内では値が保持され、どのメソッドから
でも値を入れたり、呼び出したり出来るものと認識しているのですが、
何からおかしい部分はあるでしょうか?
よろしくお願いします。

539 名前:名称未設定 mailto:sage [2007/11/04(日) 01:21:37 ID:wjfj7/Ph0]
その現象が再現する最低限のソースくらい出してくれ。

540 名前:480 mailto:sage [2007/11/04(日) 01:29:22 ID:RpfIewzZ0]
すみません。

@implementation myClass

static NSArray *arrayA;

+(void)ReplaceArrayA:(id)array{

arrayA = array;
NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"&"]);

}


+(NSArray *)getarrayA{

NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"-"]);
return arrayA;

}




まず、ReplaceArrayA に配列を引数として送り、次にgetarrayAからarrayAを戻り値として
ほかのクラスに値を渡します。



541 名前:名称未設定 mailto:sage [2007/11/04(日) 01:38:59 ID:lq5eJ6su0]
// 「値が保持され」るのはあくまでもアドレスだけということは理解してる?
// 指摘箇所2点

@implementation myClass

static NSArray *arrayA = nil; // (1)何も入っていない場合のためにnilを入れておくべし

+(void)ReplaceArrayA:(id)array{

arrayA = [array retain]; //(2)渡されたarrayが他でreleaseされてもいいようにretainしておくべし
NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"&"]);

}


+(NSArray *)getarrayA{

NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"-"]);
return arrayA;

}


542 名前:名称未設定 mailto:sage [2007/11/04(日) 02:04:34 ID:wjfj7/Ph0]
>>541

それじゃ leak するべ。

+(void)ReplaceArrayA:(id)array
{
[arrayA autorelease];
arrayA = [array retain];
NSLog(@...);
}


ついでにスタイルの問題を指摘しておくと、

* class 名は大文字で始める (myClass → MyClass)
* method 名は小文字で始める (ReplaceArrayA → replaceArrayA)
* getter method は変数名そのまま。get で始めない (getarrayA → arrayA)
* setter method は set で始める (ReplaceArrayA → setArrayA)

543 名前:名称未設定 mailto:sage [2007/11/04(日) 02:27:45 ID:hRwgY5Fp0]
setter と getter はスタイルだけの問題じゃなくて、
Cocoa binding につかえるかとかにかかわってくるので、
しきたりに従っておいたほうがいいですよ

544 名前:名称未設定 mailto:sage [2007/11/04(日) 02:43:43 ID:lq5eJ6su0]
>>542
>それじゃ leak するべ。
そうだ、スマン・・・

545 名前:名称未設定 [2007/11/04(日) 07:20:36 ID:0qI6n8f/0]
 [ NSThread detachNewThreadSelector: @selector( myThread ) toTarget: selfwithObject: nil ];
という感じで立てたスレッド内で、ファイルをダウンロードする為に
NSURLDownload *mydl = [ [ NSURLDownload alloc ] initWithRequest: req delegate: self ];
してみたのですが、delegateが呼出されなくなりました。
スレッドを立てずNSURLDownloadを使う分には、上手く行くのですが...スレッド内では使えないってクラスという事なのでしょうか?


546 名前:名称未設定 mailto:sage [2007/11/04(日) 07:53:48 ID:EtU+Y3fk0]
>>545
>Note that these delegate methods will be called on the thread that started
> the asynchronous load operation for the associated NSURLDownload
> object.

とリファレンスにある訳だけど、それは大丈夫なの?

547 名前:名称未設定 mailto:sage [2007/11/04(日) 08:02:48 ID:IbdV1wlP0]
IKImageBrowserって便利そうだな〜と思ってたら
Bindingじゃ表示できないので、DataSoruceを作ってやらないと
いけないのね。昔のTableViewを使うみたいに。めんどい。

548 名前:名称未設定 [2007/11/04(日) 08:10:45 ID:0qI6n8f/0]
>>546
正直、なにを気をつけろと言っているのか、さっぱりw
まだ、Cocoaの勉強し始めであまり詳しくないんです。

やりたかったのは、
これ
ttp://www.big.or.jp/~crane/cocoa/1000_webKit/index.html
とこれ
ttp://www013.upp.so-net.ne.jp/tanken/Tanken/no9_MultiThread/no9_MultiThread.html
を組み合わせて、ボタンをクリックしたら、一定周期で画像をダウンロードするアプリを手習いがてら作ってみようとしたんですけど、すっかり嵌ってしまいました。


549 名前:名称未設定 mailto:sage [2007/11/04(日) 08:33:21 ID:TZN/ptPy0]
>>544
あとで自分でreleaseすれば問題ないじゃんとか思ったのはオレだけでいい

550 名前:名称未設定 mailto:sage [2007/11/04(日) 09:00:12 ID:EtU+Y3fk0]
>>548
あなたが立てたスレッドAの中で mydl を生成したのなら、
そのスレッドAに対して delegate のメッセージが送られますよ、と。

だから、メインスレッドで delegate メソッドを受け取ろうとしてもダメ。

勉強し始めで NSThread と格闘する必要はあまりないような気がします。
やりたかったことは、NSThread で別スレッド立てなくても十分
出来ると思います。NSTimer で一定間隔で NSURLDownload を作って
やればいいと思う。



551 名前:名称未設定 mailto:sage [2007/11/04(日) 09:08:28 ID:mdbrqZtH0]
>>549
甘い。渡された array が arrayA とたまたま同じだった場合に
retain count が増えてしまって開放されなくなる。

まあ static object 一個ぐらいいい気もしますが。

552 名前:540 mailto:sage [2007/11/04(日) 09:09:37 ID:hK/+lBWK0]
>>541-543
ご指摘ありがとうございました。
release や retain に全く気を配ってなかったので、
そのへんを勉強し直したいと思います。

コーディングスタイルについても、アップルのドキュメントが
あったので、参考にしたいと思います。

また何かありましたらよろしくお願いします。

553 名前:名称未設定 mailto:sage [2007/11/04(日) 09:35:10 ID:mdbrqZtH0]
まあ Leopard で ガーベジコレクタがついたので、
retain/release はあんまり気にしなくてもいいんではないかと思うけど。

554 名前:名称未設定 mailto:sage [2007/11/04(日) 09:47:24 ID:HL69eV8Y0]
「あんまり気にしない」んじゃなくて、gc使うなら自分で参照カウントを「管理しない」のが正解じゃないの。gcとretain/releaseって共存できるの?

555 名前:名称未設定 [2007/11/04(日) 09:52:10 ID:0qI6n8f/0]
>>550
丁寧な説明ありがとうございます。
ご指摘の通り、スレッドはこっちへ置いておいて、NSTimerを調べてみます。


556 名前:名称未設定 mailto:sage [2007/11/04(日) 10:03:53 ID:mdbrqZtH0]
>>554
「あまり」気にしない、というのはたんに婉曲語法で使っただけでした、失礼

それとはべつに、retain/release と gc はある意味共存できるらしいですよ。
たとえば、retain/release つかって書いたライブラリを gc つかったプログラムから呼び出すとか。その場合は gc が retain/relase を乗っ取ってそっちが管理してしまうらしいですが。

557 名前:名称未設定 [2007/11/04(日) 10:38:34 ID:0qI6n8f/0]
NSTimerを使って、無事に思った事が出来ました。
ありがとうございました。


558 名前:名称未設定 mailto:sage [2007/11/04(日) 14:41:54 ID:LrVqL1O30]
>>554
ぱっとドキュメント流しただけでまだ勉強中なんだが、GCにするとRelease/Retain
で書いたコードは既出の通りRelease/Retainが無視されるようになる。ただし
-deallocも呼び出されなくなるようなので、dealloc内で解放以外の処理(ノー
ティフィケーションの登録削除とか)してると修正いるんじゃない?

559 名前:名称未設定 mailto:sage [2007/11/04(日) 15:22:32 ID:AqAwLsu+0]
Objective-C ランタイム内でガベージコレクタの書き込み禁止割り当てプリミティブを使用するようにコードをコンパイルします。
コードには、GC 対応であることを示すマークが付きます。GC 対応のマークが付いたアプリケーションは、ランタイムからガベージコレクションを有効にして起動されます。
このアプリケーションでリンクまたは読み込まれるすべての Objective-C コードも GC 対応でなければなりません。GC“必須”としてコンパイルされたコードは、
従来の Cocoa retain/release メソッドを使用しないものと見なされるため、ガベージコレクションを有効にして実行していないアプリケーションには読み込めません。
GC“サポートあり”としてコンパイルされたコードは、従来の retain/release メソッドのロジックも含まれていると見なされるので、どのアプリケーションにも読み込めます。
ガベージコレクションは、Mac OS X 10.5 以降でのみサポートされます。[GCC_ENABLE_OBJC_GC, -fobjc-gc | -fobjc-gc-only]

560 名前:名称未設定 [2007/11/04(日) 19:01:40 ID:m+9mmSo10]
>>528

どなたか、これ分かりませんか。



561 名前:名称未設定 mailto:sage [2007/11/04(日) 19:31:56 ID:F4mUKxhG0]
>>560
ググると参考になりそうなソースが見つかるよ。

562 名前:名称未設定 [2007/11/04(日) 21:27:53 ID:m+9mmSo10]
>>561
ググっても、ゲイツに聞いても見つけられませんでした。
教えていただけないでしょうか。

スポットライトで更新されたファイルをみてもそれらしいのは、見つけられませんでした。

563 名前:名称未設定 mailto:sage [2007/11/04(日) 21:56:20 ID:eMpGE3Ul0]
質問です。
IB で作った GUI のボタンのクリックによって呼び出される
メソッドは、IB でアクションとして登録したメソッドでなければ
いけないのでしょうか。

GUI のボタンクリックから直接クラスメソッドなどを呼び出せれば、
便利だと思うのですが...

よろしくお願いします。

564 名前:名称未設定 mailto:sage [2007/11/04(日) 21:57:36 ID:g1odPZrS0]
>>560
リファレンスのListing 2見る限りそのメソッドは、チェックボックスの表示と
チェック結果の取得ができるだけで、チェック結果は自分でuser defaultsなどに
保存する必要があるように読めます。
その保存結果を消せばよいのではないでしょうか。

565 名前:名称未設定 mailto:sage [2007/11/04(日) 22:11:04 ID:7bDqXoXS0]
なんでこんなところにVB厨が?

566 名前:名称未設定 mailto:sage [2007/11/04(日) 23:07:40 ID:hkBkZacr0]
>>563
便利感がわかりません。

567 名前:名称未設定 mailto:sage [2007/11/04(日) 23:16:31 ID:+MPnTuBD0]
>>563
Visual Studioでオナニーしてきてください。

568 名前:名称未設定 [2007/11/04(日) 23:21:01 ID:m+9mmSo10]
>>564
ありがとうございます。
小さいプロジェクトでやってみましたら、たしかに保存されません。

しかし、保存されている(と言うかチェック後アラートが出なくなった)プロジェクトもあります。
ユーザデフォルトは使っていますが、自分で保存はしてません...、何か別の要因ですかね。

569 名前:名称未設定 mailto:sage [2007/11/05(月) 00:03:37 ID:cWmVqLLf0]
>>563
引数はどうするんだい?

570 名前:563 mailto:sage [2007/11/05(月) 00:44:49 ID:vL57EKa+0]
自分はVisualStudio など使った事がないので、どうして
そのように言われるのか全く分からないのですが...

たとえば、ボタンをクリックすると引数のいらないシンプルな
メソッドhogeを実行させたい場合、ボタンから受け付ける
IBAction のメソッドは、単にhogeにメッセージを投げるという
メソッドを実装するということになります。そうであれば、ワンクッション
おかずに直接一般的なメソッドをボタンから呼べれば便利かと
思ったのですが。

>>566 の便利感が分からないというのは、このようなことで面倒
臭がってる感覚がおかしいということでしょうか?

>>567のレスは、このような考え方が Cocoa の考え方から逸脱
しているという意味ですか?



571 名前:名称未設定 mailto:sage [2007/11/05(月) 00:53:26 ID:cxjLp4Oj0]
>>570
>>>567のレスは、このような考え方が Cocoa の考え方から逸脱
>しているという意味ですか?
MVCの考え方からするとあまりよろしくないんじゃないかな

572 名前:名称未設定 mailto:sage [2007/11/05(月) 01:17:22 ID:eRl6Ul/x0]
>>570
それができたとしても、結局ボタンが押されたときに
どのクラスの
どのクラスメソッドを
動かすか指定しないといけないよね、
それと、アクションをctrl-クリックでつなぐのと
面倒くささは似たり寄ったりだとおもうんだけど?

573 名前:名称未設定 mailto:sage [2007/11/05(月) 02:46:33 ID:Jwl3DmWu0]
>>570
わざわざ引数無しのメソッドに投げる意味が分かりません。
引数を無視するほうがシンプルでしょうが。

574 名前:名称未設定 mailto:sage [2007/11/05(月) 03:23:50 ID:eRl6Ul/x0]
<チラシの裏>
ああ、573 のレスでやっと意味がわかった。
570 は
-(void) hoge
{
いろいろ
}
-(IBAction) action:(id)sender
{
[self hoge];
}
というのが面倒ということで、573 は単に
-(IBAction) action:(id)sender
{
いろいろ
}
と書いてしまえばいいといってるわけね。
</チラシの裏>

575 名前:名称未設定 mailto:sage [2007/11/05(月) 08:01:47 ID:hf81cxz/0]
○○ができた方が便利、なんて言い出したらキリないよ

だから、最低限アクションの発生もとがわかる様に
senderを引数とするメソッドを呼ぶ様にしているだけ



576 名前:名称未設定 mailto:sage [2007/11/05(月) 09:55:21 ID:8hT6idG50]

送り元を特定する処理を書かなくてすむので楽。

 senderがViewの場合、Viewに対して問い合わせが容易。
 senderがControllerの場合、Controllerに対して問い合わせが容易。

結局senderがある理由って、MVC/KVCを実装するのに便利っていう感じ?


577 名前:名称未設定 mailto:sage [2007/11/05(月) 17:00:38 ID:IpQGnVb20]
KVCは関係ないわな。
あと、.NETでもアクションに対してsender(とevent)は送られる。

578 名前:名称未設定 mailto:sage [2007/11/05(月) 23:20:43 ID:bq62hcmK0]
ネットからデータをダウンロードするたぐいのアプリを作ろうとしてるのですが、
マシンがネットにつながっているかどうかを調べるには、どうすれば良いでしょうか。

579 名前:名称未設定 mailto:sage [2007/11/06(火) 00:01:37 ID:dDZ7LoMrO]
人間の貴方ならどうやって確認しますか?

ブラウザで繋いでみる
ピンで応答を見る
ルーターにグローバルアドレスが振られているか確認する



580 名前:570 mailto:sage [2007/11/06(火) 00:43:54 ID:EfkD9Hx20]
>>574
まさに、そう考えていたわけです。

確かに、MVCの観点ではあまりよくないという事で、納得しました。
レスしてくださった皆さん、ありがとうございました。



581 名前:名称未設定 mailto:sage [2007/11/06(火) 01:03:46 ID:yXSDPyUU0]
64ビットでコンパイルしたらメモリ使用量が2倍になったorz

582 名前:名称未設定 mailto:sage [2007/11/06(火) 01:06:25 ID:82XP8MSU0]
>>578
まずは本当に「ネットにつながっているかどうか」を調べる必要があるのか考えるべき

583 名前:名称未設定 mailto:sage [2007/11/06(火) 01:27:07 ID:0tRgvZRF0]
>>581
そりゃポインタが 64bit になるんだから、id だらけの Cocoa プログラムなら目盛使用量が2倍になるベ

そんなにすごい仕事してるの?GUI で64bit って余程のプロでないと使わない気がする ...

584 名前:581 mailto:sage [2007/11/06(火) 19:07:34 ID:EYJtqLlN0]
>>583
特に64ビットは必要ないんだけどソースコードの品質を上げるために試してみた
現時点ではバイナリサイズもメモリ消費量もでかくなるのでメリットはないかも
でもねアクティビティモニタに唯一64ビットと出るので、優越感は味わえる...人も...

585 名前:名称未設定 mailto:sage [2007/11/07(水) 23:34:09 ID:simMyFDM0]
CoreAnimation に関する和訳資料が、木下さんの
journal.mycom.co.jp/special/2007/leopard/002.html

これぐらいしかないんだねー。
CocoaBreak! さんとかががんばってるのに、アップルジャパンは
仕事しないねー。

586 名前:名称未設定 mailto:sage [2007/11/08(木) 00:30:07 ID:QRMuL5KH0]
CoreAnimationってWindows(.NET)のWPFよりショボクない?
というより、CoreAnimationの活用場所が限られ過ぎorz

587 名前:名称未設定 mailto:sage [2007/11/08(木) 00:41:08 ID:oaqtntGw0]
確かに、簡単だからといって乱用は禁物ですよね。
でも、テーブルの並び替えや移動とか、アニメーションすることに
よってユーザビリティが上がる事もあるから、使い方次第ですかね。

588 名前:名称未設定 mailto:sage [2007/11/08(木) 00:50:21 ID:rO6zyLL/0]
とりあえず [[view animator] setFrame: ...] とかでアニメーションになるのはいいことだとおもう

589 名前:名称未設定 mailto:sage [2007/11/08(木) 09:08:40 ID:7GRUAd0i0]
setFrameとかを使う機会がないかも...
タブを切り替えるときにいちいちウインドウサイズなんて変更しないし

それよりもiPod touchのような感覚的に解りやすくなるUIを期待していたのにな
スクロール移動に慣性を持たせたりね

590 名前:名称未設定 mailto:sage [2007/11/08(木) 17:24:26 ID:zEdsiKUW0]
ていうかアニメーションのあるUIってなんかイヤだ



591 名前:名称未設定 mailto:sage [2007/11/08(木) 17:33:37 ID:mw5+Wv5j0]
IB3.0のライブラリパネルが軽くフェードインアウトするような
ちょっとした効果は、まあ多少心地いいんだけど

設定でアニメ切れるようにして欲しいとも思ふ

592 名前:名称未設定 mailto:sage [2007/11/08(木) 20:59:50 ID:8YBf9K2+0]
インターフェイスがぐにゃりと曲がって笑ったw
パフォーマンスを気にするソフトでは使えないなぁ

593 名前:名称未設定 mailto:sage [2007/11/08(木) 21:24:26 ID:InO3sJ7M0]
NSFileManagerで例えば大量のbmpを移動させると、
メモリ使用量が増えまくるけど何故?

594 名前:名称未設定 mailto:sage [2007/11/10(土) 11:24:03 ID:yoCzO0Lu0]
バグじゃない?
というかCocoaのメモリリークはGCに頼るしかないかもorz

595 名前:名称未設定 mailto:sage [2007/11/10(土) 15:52:41 ID:x13Isy6l0]
何でもライブラリのバグのせいにする奴がいるが、大抵は自分のコードが原因。

596 名前:名称未設定 mailto:sage [2007/11/10(土) 16:32:44 ID:5JNbGREU0]
Core Data で、関連の設定がうまくいかず困っています。
コード内で NSMutableSet を setValue: forKey: でエンティティの
関連に設定してるのですが、一度セーブして再びそのファイルを開くと、
設定したはずの関連が無くなってしまっています。

関連は「一時」ではありません。
アプリは、document based では無い方です。
どの段階で関連が切れてしまっているのか、さっぱりです。

597 名前:名称未設定 mailto:sage [2007/11/10(土) 22:21:46 ID:ns71lhvZ0]
CoreAnimation を使うためには、どのヘッダファイルを
インクルードすればいいんですか?
Apple の CoreAnimationプログラミングガイドにも、記述が
ありませんでした。
とりあえずQuartzCore.flamework はプロジェクトに取り込みましたが
ダメでした。

598 名前:名称未設定 [2007/11/10(土) 22:29:06 ID:jaO8AJbf0]
ヒレガスの本に書いてあるNSTableViewのサンプルが動かないんだが、仕様でしょうか。
要素を追加してもテーブルに反映されないです。
参考までにXCode、2.5 tiger。

599 名前:名称未設定 mailto:sage [2007/11/10(土) 22:32:02 ID:uoStVjcs0]
>>597
つ /Developer/Examples/Quartz/Core Animation

600 名前:名称未設定 mailto:sage [2007/11/11(日) 12:09:17 ID:/h9pnLX90]
Cocoaで開発しているとつい構造体の存在を忘れてしまうけど、
データ構造を解りやすく表現する手段として重要だよね。
(KVCやDictionaryだと規模が大きくなると大変)
そんな時にpropertyの登場。うれしいけど下位互換性を保てなかったものか....




601 名前:名称未設定 mailto:sage [2007/11/11(日) 23:54:16 ID:3xiFJV1b0]
構造体使ってると、PPC/Intelで整合性がとれなくなるよ...

602 名前:名称未設定 mailto:sage [2007/11/12(月) 00:02:37 ID:6pJx53410]
CPUに依存するコードを書くから。

603 名前:名称未設定 mailto:sage [2007/11/12(月) 00:16:22 ID:6YN+nfcu0]
エンディアンですか

604 名前:名称未設定 mailto:sage [2007/11/12(月) 00:18:23 ID:jJlBa7Hw0]
べつに構造体つかってもいいんじゃない?ちゃんとディスク/ネットワークに書くときに気をつければ。

605 名前:名称未設定 mailto:sage [2007/11/12(月) 00:41:11 ID:bRgWt6KB0]
>>601
そろそろ答えをお願いします。

606 名前:名称未設定 mailto:sage [2007/11/12(月) 01:52:24 ID:6qKNkZiA0]
オブジェクト指向はどこへ消えた




607 名前:名称未設定 [2007/11/12(月) 06:44:56 ID:t+THQgiE0]
質問します。たとえばQuickSilverみたいに、どんなアプリが動いていても
起動してくれるショートカットキーの設定って、どうやるのでしょうか?
システム全体のキーボードイベントをフックして実装するのかと想像してるのですが
そういうイベントを受け取る方法を見つけられませんでした。

キーボードとかマウスとかフォーカスとかのシステムイベントをフックする
方法ってあるんでしょうか?


608 名前:名称未設定 mailto:sage [2007/11/12(月) 06:55:13 ID:inGQ9CFd0]
QuickSilverってのは知らんけど、自分のアプリが手前になくても、特定のキーイベントを受け付ける方法としては
Carbon EventにHotKeyというのがある。
RegisterEventHotKey、kEventHotKeyPressed、kEventHotKeyReleased辺りを使う。

609 名前:名称未設定 [2007/11/12(月) 07:02:27 ID:t+THQgiE0]
>>608
ありがとう。さっそく試してみます。


610 名前:名称未設定 mailto:sage [2007/11/12(月) 09:06:28 ID:1OnUOF+c0]
エンディアン変換はAppleが用意してるのでそれ使えばいいだけだ。
注意しなければならないのは浮動小数点を中間コードに変換することくらいだな。
ディスクに書き込むのなら、構造体ではなくてXML使うようにしてるけどな。



611 名前:名称未設定 mailto:sage [2007/11/14(水) 11:18:15 ID:n4OM99880]
Cocoaにはデフォで複数行表示で左揃えなタブコントロールはないのか・・・

612 名前:名称未設定 mailto:sage [2007/11/14(水) 11:19:38 ID:6xRVuEo90]
そんな気持ちの悪いUIはいらん。

613 名前:名称未設定 mailto:sage [2007/11/14(水) 11:58:54 ID:n4OM99880]
まあ複数行表示なんてどうでもいいが
Safariのタブはなぜ標準提供されないのだろうか

614 名前:名称未設定 mailto:sage [2007/11/14(水) 21:09:56 ID:+yEMUk1e0]
AppleアプリのUIは継ぎはぎだらけなので真似するのが大変orz
だからRIUIを難しくしているような気がするけどな

615 名前:名称未設定 mailto:sage [2007/11/14(水) 22:16:14 ID:KqpvVDcT0]
3になってカバーフローとか簡単に出来るんかいな。

616 名前:名称未設定 mailto:sage [2007/11/14(水) 22:35:49 ID:XnqPDGec0]
Windows の Office の環境設定一度でも使った事ある人なら、
複数行タブの馬鹿らしさが分かる

617 名前:名称未設定 [2007/11/14(水) 22:46:16 ID:iClwHio80]
CGSGetOnScreenWindowListで取得したウィンドウに対して
CGSSetWindowLevelによりウィンドウレベルを設定しようとしています。
自アプリのウィンドウは変更されるのですが、
他アプリのウィンドウはエラーが返ります。
同じくTransitoinWindowでウィンドウを操作しようとしますが、
他アプリのウィンドウは操作出来ません。
どなたか他アプリのウィンドウを操作する方法をご存知ないでしょうか?

618 名前:名称未設定 mailto:sage [2007/11/14(水) 23:09:12 ID:jAWzhafe0]
他アプリのウィンドウの参照をどうやって取ったの?

619 名前:名称未設定 mailto:sage [2007/11/14(水) 23:12:58 ID:jAWzhafe0]
あああ、上のレスは忘れて

620 名前:名称未設定 mailto:sage [2007/11/14(水) 23:23:01 ID:Xis7E2030]
>>615
ソースが公開されているが読んでもよくわからん



621 名前:名称未設定 mailto:sage [2007/11/15(木) 00:45:47 ID:GB5EBmPl0]
>>609
QuickSilver オープンソースになったよ
blacktree-alchemy でぐぐれ

622 名前:名称未設定 mailto:sage [2007/11/15(木) 12:46:30 ID:Mwb686F+0]
時々Getterコードで
-(Foo*) foo
{
return [[foo retain] autolerease];
}
というコードを見るんだけど、何か意味があるの?

623 名前:名称未設定 mailto:sage [2007/11/15(木) 13:06:16 ID:7a7zfmZx0]
AutoReleasePoolが解放されるまでの間保持させるってことだろ。

624 名前:名称未設定 mailto:sage [2007/11/15(木) 13:08:13 ID:woMNQIGU0]
呼び出した後に元のクラスを解放することを想定してんじゃね?

625 名前:名称未設定 mailto:sage [2007/11/15(木) 13:29:39 ID:9q45mP2D0]
しかしCocoaのポリシーとしては、そういう場合はgetterを呼び出した側が(必要なら)retain-autoreleaseしなさいと言っているように見える。
developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html#//apple_ref/doc/uid/20001425-107866

626 名前:名称未設定 mailto:sage [2007/11/15(木) 13:48:25 ID:o0uKsE520]
Leopardで刷新されたMac OS X対応開発言語「Objective-C 2.0」の真価を探る
journal.mycom.co.jp/special/2007/objectivec/index.html

627 名前:名称未設定 mailto:sage [2007/11/15(木) 14:16:50 ID:7a7zfmZx0]
propertyのとこ、おかしくないか?
インスタンス変数がNSString * _name;だとエラーになるんじゃね?

628 名前:名称未設定 mailto:sage [2007/11/15(木) 18:06:34 ID:yJVNynki0]
プロパティとかブロック構文みたいのとか便利だと思うけどLeopard専用じゃあすぐには手を出しにくいなあ
記事にもあるけどせめて10.4くらいから動いてくれないと

629 名前:名称未設定 mailto:sage [2007/11/15(木) 19:42:11 ID:7a7zfmZx0]
Objective-C 2.0にするとTigerをサポート出来なくなるからな。後、2年くらいは
Tigerをサポートしたいし。

10.4.11でObjective-C 2.0のランタイムをサポートしてくれれば良かったのに。

630 名前:名称未設定 mailto:sage [2007/11/15(木) 22:27:57 ID:OxRPElrt0]
Xcode3ではなんと!!!!!!!!
@"あいうえお" が使える!!!!!!!
うれしい!!!!!!!



631 名前:名称未設定 [2007/11/16(金) 00:48:51 ID:qefaGqef0]
>>630
>@"あいうえお"

なにおきてもしらんど


632 名前:名称未設定 mailto:sage [2007/11/16(金) 08:32:57 ID:oGZ+fjo20]
>>625
>>622 と同じ例もあったりするけどね。

developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/chapter_4_section_5.html#//apple_ref/doc/uid/TP40002974-CH5-SW5

どうなんだろうなあ。とりあえずコード的にはこっちの方がすっきりするが...
中がどうなってるか分からない getter から返ってきたオブジェクトはは常に retain
しなきゃいけないとすると、めんどくさいなあ。

633 名前:名称未設定 mailto:sage [2007/11/16(金) 11:47:44 ID:N3h5kz0i0]
>>632
信頼できないライブラリなら retain ではなく copy するべきかもね。
返された NSString が実は NSMutableString で、知らないうちに内容
が書き変わっていたりするかもしれんしw

634 名前:名称未設定 mailto:sage [2007/11/16(金) 12:09:30 ID:cNV2hLUV0]
>>632
GC 無し Cocoa では、init.... もしくは copy... 以外のメソッドから
返ってきた id を保持する場合は retain すべしという決まりになっていた
気がするんですが。

635 名前:名称未設定 mailto:sage [2007/11/16(金) 12:19:47 ID:CbzyFQzY0]
>>631
うそーん。なんで?

636 名前:名称未設定 mailto:sage [2007/11/16(金) 20:39:40 ID:CUEn9uCm0]
>>626>>622と似たようなコードの例が載ってて、それはマルチスレッドに対応するためらしい。
似てると言っても結構違うけど。

637 名前:名称未設定 mailto:sage [2007/11/16(金) 21:36:04 ID:tvhXsAYJ0]
>>632
getter/setterの組み合わせで、ひとつのautorelease poolの中でdeallocされないようにする
ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。
3-6のgetterと3-7のsetterの組み合わせで書いてしまったりすると、getした直後にsetされるとアウト。

retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。
インスタンス変数に保持するとか、別スレッドから参照するとか。

>>636
マルチスレッドもautorelease poolに関してのことだから同じ話だと思いますよ。


638 名前:名称未設定 mailto:sage [2007/11/16(金) 23:23:35 ID:hGnpQD7r0]
>>626とかみて今まで不思議だったんだけど、nilのオブジェクトに
メッセージ送っても安全なんですかね?
retainやreleaseはnilチェック無しでもOKなんですか?

639 名前:名称未設定 mailto:sage [2007/11/16(金) 23:44:09 ID:U4RUIbsl0]
>>638
問題ない。

ついでにいえば ヒレガス本 p44にそのまんま書いてある。


640 名前:名称未設定 mailto:sage [2007/11/16(金) 23:47:58 ID:WI/houEB0]
>>638
先越されたが、メッセージ送信自体は安全らしい。
developer.apple.com/jp/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_22.html

ところで>>626のリンク先にnilにメッセージ送ってるコードある?



641 名前:名称未設定 mailto:sage [2007/11/16(金) 23:52:36 ID:OhjYmzCB0]
ぬるぽ!

642 名前:638 mailto:sage [2007/11/17(土) 03:22:18 ID:kGkshqIg0]
>>639-640
ありがと。いままでnilチェックしてたわ。他の言語なら
余裕で落ちると思ったけど。結構アバウトに動くのね。

>>626は_nameの初期値がnilだろうから・・・いいのかな?って感じに。

643 名前:622 mailto:sage [2007/11/17(土) 09:00:15 ID:aQOoTe4X0]
>>623
>>624
ありがとう!。でもそういう使い方を,,,,,,するかも(ゾッ)
プログラムを見直してみよ

644 名前:名称未設定 mailto:sage [2007/11/18(日) 12:38:23 ID:YFIOeH3f0]
>>637
>ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。

そういうことを疑問に思っているんじゃなくて。

>retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。

上の文は、「サイクルの外で」で切れるんだろうなあ。最初「外で取得した」と読めた。

ともかく、getter の中で何をやっているのかわからないときがあって(ソースのないクラスとか)、
そうするとオブジェクトが autorelease pool に登録されてるかよくわからないだろ。

645 名前:名称未設定 mailto:sage [2007/11/18(日) 13:27:12 ID:xb1Ii9wH0]
「よくわからない」、じゃなくて、
getter から返ってきたのをインスタンス変数等に
保持したい場合はretain しないといけない、
保持しないで今の関数で使い捨てのときはなにもしなくていい、
というのが「きまり」じゃないの?

getter はそう使われて問題ないように組みなさいということのはずでしょ。
すくなくとも Cocoa の API は全部そうなっているんでは。

ネットに落ちてるフリーのライブラリもそれに準拠してると思ってたけども。

developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_5.html

646 名前:名称未設定 mailto:sage [2007/11/18(日) 14:17:29 ID:6Cn1RaWD0]
>「よくわからない」、じゃなくて、
>getter から返ってきたのをインスタンス変数等に
>保持したい場合はretain しないといけない、
>保持しないで今の関数で使い捨てのときはなにもしなくていい、
>というのが「きまり」じゃないの?

そんな基本的なレベルの話じゃなくて、「今の関数で使い捨て」しようとしたときでも、
getterの直後に別スレッドでsetterが呼ばれて、(getterによって返された)古いオブジェクトが解放された
とか、
getterの直後に別スレッドが(そのgetterメソッドを持っている)オブジェクトを解放した
とかいうケースの話をしてるんじゃないの?
こんな場合にも対応するには、getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

647 名前:名称未設定 mailto:sage [2007/11/18(日) 14:49:43 ID:xb1Ii9wH0]
なるほど、それは失礼しました。
Cocoa のマルチスレッドは全く判っていないので、勉強します ...

648 名前:名称未設定 mailto:sage [2007/11/18(日) 15:17:43 ID:6Cn1RaWD0]
>getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
>それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

で、getterを呼び出した側でretainしようにも、その前に別スレッドで解放されたら終わりなので、結局getter自身でretain-autoreleaseするしかないと。
てことは、thread-safeを謳っているライブラリについては、getter側でretain-autoreleaseしていることを想定していいのかなぁ?

649 名前:名称未設定 mailto:sage [2007/11/18(日) 21:52:08 ID:MNuVJVruO]
Cocoaは難しい

650 名前:名称未設定 mailto:sage [2007/11/18(日) 22:23:41 ID:DA9RCPIX0]
確かに安定したソフトを作るのは難しいかも
まあ、リソースを確保したままで終わるような簡単なソフトは簡単だけどね



651 名前:名称未設定 mailto:sage [2007/11/19(月) 15:27:16 ID:02ojrBP20]
Cocoaってそんなに難しいのか? 比較対象がToolboxしか知らんからわかんね。

652 名前:名称未設定 mailto:sage [2007/11/19(月) 15:38:10 ID:LV7+iq+v0]
Toolboxに較べたら簡単だろう。Toolboxみたいに冗長で神秘の呪文を何度も
唱える必要がないだけでもありがたいくらいだ。部品も結構揃ってるので
本来やるべき仕事の部分に集中出来る。

653 名前:名称未設定 mailto:sage [2007/11/19(月) 16:40:12 ID:LvFFLwZ10]
フレームワークの充実度で圧勝。

654 名前:名称未設定 mailto:sage [2007/11/19(月) 17:00:29 ID:PeaucL070]
Toolboxに比べる事自体Cocoaに失礼

655 名前:名称未設定 mailto:sage [2007/11/19(月) 17:44:27 ID:In4q82oq0]
Interface builder にでてくる File's Owner, 1st Responder というのを理解するまではわけわからんかったが、その後は楽勝だった

656 名前:名称未設定 mailto:sage [2007/11/19(月) 17:52:00 ID:9E3IVsAz0]
このスレ住人のXcode 3.0への移行具合はどうよ

XcodeでClassを書く(Interface BuilderでClassが作れない)
Interface BuilderでのAnimationが設定できる
などなど変更点山盛りで覚えること多数で苦戦してんだけど

657 名前:名称未設定 mailto:sage [2007/11/19(月) 17:55:48 ID:In4q82oq0]
確かに instantiate class... というメニューが
IB になかったからどうしようかしばらく困った。
でもこれまでからなぜか Xcode でクラス作ってたのでそんなに変わってないです。

あと自分用の小さなソフトしか作ってないので、
GC on にして手抜きしまくりです。

Animation のつかいかたは判ってないです ...

658 名前:名称未設定 mailto:sage [2007/11/19(月) 18:13:08 ID:LV7+iq+v0]
IBからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
さすがにXcode3.0には戸惑ったが、まぁ何とかなりそうだ。

659 名前:名称未設定 mailto:sage [2007/11/19(月) 19:00:01 ID:PeaucL070]
>>658
> Bからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
> 大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
俺も同じw

660 名前:名称未設定 mailto:sage [2007/11/19(月) 19:55:30 ID:dZtoqNKV0]
InterfaceBuilder3.0では、
Main.nibの中にFile'sOwnerとApplicationっていうインスタンスが入っているけど、
これって同じもん?っていうか前はFile'sOwnerがIB上からのApplication
インスタンスへの入り口ってつもりだったんだが。。。



661 名前:名称未設定 [2007/11/19(月) 21:10:34 ID:uwOj8SG90]
MainMenu.nibの場合は、同じ。

662 名前:660 mailto:sage [2007/11/19(月) 21:51:45 ID:9Yj++wrA0]
>>661
ありがと。ってことはMainMenu.nib以外では、違うってことだろうか。
ちょっくら試してみます。

 あと、IB3.0のライブラリには、いろいろ便利そうな新規クラスが
 入っているみたいだけど、これらの使い方をどこかのスーパー
 プログラマーがさっくりと分かりやすい日本語チュートリアル
 作って公開してくんないかなー。(他力本願)

663 名前:名称未設定 mailto:sage [2007/11/19(月) 21:56:31 ID:PeaucL070]
journal.mycom.co.jp/special/2007/objectivec/001.html
に、
- (NSString*)name
{
@synchronized(self) {
return [[_name retain] autorelase];
}
}
ってコードがあるけど、ここの@synchronizedの対象って_nameじゃダメなの?

664 名前:名称未設定 mailto:sage [2007/11/19(月) 22:01:37 ID:MSo6PDwW0]
それにしても独特な開発環境だよね
洞察力の訓練には最適かもw

665 名前:名称未設定 mailto:sage [2007/11/19(月) 22:34:43 ID:KUTYWe1G0]
>>663
setName:をどう書くか悩むからだめ。

666 名前:名称未設定 mailto:sage [2007/11/19(月) 23:08:49 ID:+8DQ+G5D0]
そういえばnilへのsynchronizeの挙動って定義されてたっけ?

667 名前:名称未設定 mailto:sage [2007/11/20(火) 12:18:19 ID:xK/rJZ3Z0]
>>662
File's Owner はその NIB を開いた際にプログラム側から nib's owner として登録されたオブジェクトになる。
MainMenu.nib は自動的に NSApp が開いて、File's Owner は NSApp。
ドキュメント型ソフトのばあいは、NSDocument が nib を開くので、
File's Owner は自分でつくった NSDocument のサブクラスになる。

それ以外に nib をつくって、自分でプログラムからあからさまに開く際は
File's Owner を自分で設定する。

668 名前:662 mailto:sage [2007/11/20(火) 19:03:19 ID:vX1nP8Nx0]
>>667
なるほど!っていうか初めてFile's Ownerの
役割が分かりますた。
簡潔且つ的確なご説明ありがとうございます。

669 名前:名称未設定 mailto:sage [2007/11/21(水) 20:17:19 ID:G817xlPC0]
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
の中でmenuItemに対してsetState:とかtagを呼ぶと
'tag' not found in protocol(s)
とか言われてしまうんだけどなんでだろう?

670 名前:名称未設定 mailto:sage [2007/11/21(水) 22:56:41 ID:sg+XtEJO0]
知らんけど、NSMenuItemがプロトコルだからじゃね?
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;//引数menuItemはNSMenuItemプロトコル
- (BOOL)validateMenuItem:(NSMenuItem*)menuItem;//引数menuItemはNSMenuItemクラス
って事かなー。






671 名前:名称未設定 mailto:sage [2007/11/21(水) 23:17:07 ID:hTxVVTev0]
>>669
まずヘッダを確認してみてはいかがでしょう。
ウチのxCode2.4ではdeprecatedだけど一応使えるみたい。

672 名前:名称未設定 mailto:sage [2007/11/22(木) 00:53:05 ID:NI+W3MNs0]
ありゃ、プロトコル自体がdeprecatedだったのか
警告が「プロトコルの中にないよ」って書いてあるもんだから、
NSMenuItemプロトコルの中を見てちゃんとあるのに変だな〜と混乱してた
失礼しました

結局>>670みたいに書き直しなさいということね

673 名前:名称未設定 mailto:sage [2007/11/22(木) 11:59:27 ID:Krn36QQ60]
質問です。

まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
ここでMyWindowにinitWithContentRect:をオーバライドして、
中で[super initWithContentRect:...]と典型的な初期化をしているのですが
この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。

IBでAutosizingを設定しても聞いてくれなくて。

674 名前:名称未設定 [2007/11/22(木) 17:12:56 ID:kaRw/iTz0]
行を選択するたびにそのイベンオをとらえて処理をしたいと考えてます。

- (IBAction)tableViewSelected:(id)sender
{
    row = [sender selectedRow];
    NSLog(@"the user just clicked on row %d", row);
}
そこで,上記では行を選択すると選択した行番号を得られるのですが,
行番号ではなくオブジェクトを得られる方法はありますか?

IBAction はCore Dataで作ったTableViewとAppDelegateでつないであります。
なので、クリックされた行のNSManagedObjectが得られるといいのですが,
直接的な方法はないものかと。


675 名前:名称未設定 mailto:sage [2007/11/22(木) 21:10:09 ID:a/peNeZj0]
NSArrayController 使って bind させればいいんじゃないの?

676 名前:名称未設定 [2007/11/22(木) 22:03:28 ID:GA2XBdAS0]
> まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
> ここでMyWindowにinitWithContentRect:をオーバライドして、
> 中で[super initWithContentRect:...]と典型的な初期化をしているのですが
> この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。

状況がいまいちよく分からないが、
MyWindowの上にMyViewが乗ってるっていうのは、IBで乗せてるの?
ならば、nibファイルからMyWindowが生成されるので、初期化にはinitWithCoder:が使われるはず。
initWithContentRect:でMyWindowを生成しているなら、手動でMyViewを乗せることになるはず、
IBでAutosizingを設定っていうのも、ちょっと変な気が。

677 名前:名称未設定 mailto:sage [2007/11/22(木) 22:22:26 ID:Krn36QQ60]
>>676
IBでMyWindowにMyViewを乗せています。
@implementation MyWindow
- (id) initWithContentRect: ...
{ NSWindow* w = [super initWithContentRect: ...]; return w; }
@end
のような記述をしていて、このときMyViewは手動で乗せなくても表示されています。

また、Autosizingでウィンドウに合うようにMyViewを―〜〜―な状態にしておけば、
ユーザがGUI上でリサイズをしてもMyViewのサイズが変わっています。

表示した後マウスでリサイズする分には問題が無いわけですが、
上記initWithContentRect:の中で任意のrectを指示した時に
初期のMyViewのサイズがIBで指示したサイズになってしまうのです。
これは手動でMyViewを生成するべきなのでしょうか?


678 名前:名称未設定 mailto:sage [2007/11/22(木) 23:50:05 ID:T7a7mhhK0]
>>677
awakeFromNibで設定するのが簡単だと思う。

679 名前:名称未設定 mailto:sage [2007/11/23(金) 00:34:54 ID:1Oijf2vw0]
>>677
IBでインスタンス化したオブジェクトはアーカイブされてnibファイルに格納されて
プログラムで読み込むときはアンアーカイブして取り出すので
初期化メソッドはプログラム中では呼ばれない

はず
nib上のオブジェクトを初期化するにはawakeFromNibを使いましょう

680 名前:674 [2007/11/23(金) 10:22:00 ID:GeUHqHT60]
>>675
どうも
NSArrayControllerを使ってBindするというのは、
具体的にはどうすればいいのですか?

NSArrayControllerのインスペクタのBindをみても
NSTableViewのクリック関する項目はないのですが。



681 名前:名称未設定 mailto:sage [2007/11/23(金) 10:49:36 ID:hcJ8Hx2n0]
NSTableView の binding のところで、中身を
NSArrayController の content とかに設定して、
NSArrayController のほうを CoreData につないでください。
ADC のどっかにチュートリアルがあったはず。

682 名前:675 mailto:sage [2007/11/23(金) 12:06:28 ID:gHJ1tYgX0]
>>680
行の選択が変化したかどうかは KVO で見る

NSArrayController の例えば selectionIndex とかを addObserver で登録して、
observeValueForKeyPath の中で、そのときに NSArrayController に
選択されている NSManagedObject を取り出す


683 名前:674 [2007/11/23(金) 12:37:53 ID:GeUHqHT60]
>>682
>>681
素早い応答ありがとうございました。

ADCのチュートリアルを教えてください。
Core Data Programming Guideをみたり
table view bind で検索しましたが,
それらしいものが見つからなくって。

まだまだ初心者なので,インスペクタの設定や
サンプルコードがないとピンとこなくて。
すいません。

もしサンプルプロジェクトをダウンロードできるサイトがあったら
教えてください。

684 名前:名称未設定 mailto:sage [2007/11/23(金) 12:51:39 ID:hcJ8Hx2n0]
英語だけど、apple のこれ
developer.apple.com/cocoa/coredatatutorial/index.html
はビデオ付き。まさに tableview につないでるから。
あと、Scott Stevenson の
cocoadevcentral.com/articles/000085.php
もわかりやすい。
というかそこの記事はどれもこれもわかりやすいので、おすすめ。

あと、mkino さんのところにも解説ありそうだけど、どうでしょう?
すくなくとも本の第三版にはのってるらしいけど、持ってないのでわからん。


685 名前:名称未設定 mailto:sage [2007/11/23(金) 13:02:19 ID:iA/8JIe10]
binding ってバカを量産する仕組みなんだろうか

686 名前:675 mailto:sage [2007/11/23(金) 13:08:18 ID:gHJ1tYgX0]
>>683
table view の bind じゃないです

MVC のパターンにして
M: Core Data
V: NSTableView
C: NSArrayController
で、それらの間を binding で結んで、table の変化を見るのではなくて
NSArrayController の selection の変化を見る、ということ
で、NSArrayController の selection の変化は key value observing で見る

アプリケーション本体の方には NSTableView ではなく
NSArrayController の方をつないで、そこに選択されている
NSManagedObject を取り出せば、それが NSTableView で
選択されている NSManagedObject と同じものになります

サンプルコードはわからないけど、ドキュメントなら、
Core Data Programming Guide 以外なら
Cocoa Bindings
developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/

Key Value Observing
developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/

とか


687 名前:名称未設定 mailto:sage [2007/11/23(金) 15:23:08 ID:NQ+7IO3Q0]
>>685
自分の頭の中のCocoaはbindingが導入される前で止まってるw
未だに使った事が無い恐がりの俺

688 名前:名称未設定 mailto:sage [2007/11/23(金) 15:40:43 ID:vBC4oFan0]
bindingとpropertyは職業プログラマ用だろ。
garbage collectionは量産しそうだけど、いいんでない?

689 名前:名称未設定 mailto:sage [2007/11/23(金) 16:07:53 ID:hcJ8Hx2n0]
>>687
binding は Panther で追加された頃は IB での扱いがひどかったけど、
(設定しても反映されない等、)最近は随分安定している気がする。

690 名前:名称未設定 mailto:sage [2007/11/23(金) 16:08:47 ID:40+P0Y410]
>>688
いや、Bindingだけは素人でもきちんと使えるようにすべき
MVC、KVCできちんと書けるようになるからな




691 名前:名称未設定 mailto:sage [2007/11/23(金) 17:45:45 ID:/aNuome90]
メモリ管理をあまり理解しないまま、KVCを使っていると知らない間に
大量のメモリリークを生みだしそうな気がする
まあ、GC前提なら問題ないけどね

692 名前:名称未設定 mailto:sage [2007/11/23(金) 19:05:51 ID:gj7dOudc0]
>>689
俺未だにPanther使ってるけど、そんなことないぞ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<223KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef