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

このエントリーをはてなブックマークに追加
1名称未設定
初心者は教えてくれる方への感謝を忘れずに。
上級者も初心者だった頃の気持ちを忘れずに。

前スレ
Cocoaはさっぱり!!! version.7
http://pc11.2ch.net/test/read.cgi/mac/1161486802/
2名称未設定:2007/05/18(金) 23:29:22 ID:UJP3ocn+0
乙かれーしょん
3名称未設定:2007/05/19(土) 00:43:34 ID:sciB+uL40
1000 名前: 名称未設定 Mail: sage 投稿日: 2007/05/19(土) 00:29:23 ID: uGrJMnws0
[self release];
4名称未設定:2007/05/19(土) 08:47:22 ID:VgPVILTS0
カーボンが4げっt
5名称未設定:2007/05/19(土) 10:43:00 ID:ndYGZwPE0
前スレ1000の秀逸さに感動した俺は新参?
6名称未設定:2007/05/19(土) 11:43:25 ID:uJS6/6lK0
[self release]; というのはあまり使わないような気がする。
7名称未設定:2007/05/19(土) 11:57:48 ID:K8wpdP1P0
-init内で何かミスったときとか。
8名称未設定:2007/05/19(土) 13:47:34 ID:6RJB6in20
じゃ次は [super dealloc] で。
9名称未設定:2007/05/19(土) 15:01:23 ID:7fei3xwy0
autorelease されて持ち主のいないウインドウは勝手に閉じてしまうので、自分を
retainして、閉ボタンが押されたときに [self release]; するのは邪道ですか
10名称未設定:2007/05/19(土) 20:37:55 ID:jAL67W1S0
ShiftJIS のCSVを開いて、パースするプログラムを書いているのですが、日本語が含まれているとうまく処理できません。日本語が含まれているセルの結果が、文字コードで表示されてしまいます。
1行切り出した段階のparsedStringをNSLogで表示させるとうまく日本語が表示されますが、その後の、columnArrayではうまく表示できません。
何が悪いのか、まったく見当がつきません。どなたか、教えてください。
11名称未設定: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名称未設定:2007/05/19(土) 20:42:04 ID:jAL67W1S0
ほんと長くてすみませんorz


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

[rowArray addObject:columnArray];
}

長文ですみません。。。
13名称未設定:2007/05/19(土) 21:19:06 ID:7fei3xwy0
NSArray の description はプロパティリスト形式でエンコードされたものを返すから。
columnArrayの中には正しい値で格納されているはず。
14名称未設定:2007/05/19(土) 23:06:23 ID:KTFjrMhL0
要は、NSLog(@"%@", columnArray);
にしとけと、そういう事です。
15名称未設定:2007/05/20(日) 01:06:30 ID:95dk2TSg0
>>14
>要は、NSLog(@"%@", columnArray);
え、それって結局 [columnArray description] なんじゃなかったっけ?

ところで >>11 のコードだけど、
NSLog() に直接文字列を渡すのはあんまりよくないかな。些細なことだが。
16名称未設定:2007/05/20(日) 03:58:14 ID:Q4ZcZ5bJ0
文字列にメタキャラがあったら不味いわな。
17名称未設定:2007/05/20(日) 08:12:37 ID:Wl6kGVzP0
ありがとうございます。
>>13
中身に正しく格納されているのを確かめるには、どうすればいいのでしょうか。
NSLog(@"%@" , [columnArray objectAtIndex:2]);
などとして、日本語が含まれるであろうところを表示させても、何も表示されません。
>>14
%@で指定すると、そのオブジェクトのdescriptionが呼び出されるはずなので、同じ結果ですが。
>>15
NSLog()に直接文字列を渡すのはよくないってのは、どういうことですか?
NSLog([parsedString description]);
とすべきということでしょうか。
>>16
文字列にメタキャラがあるとは、どういうことでしょうか?
メタキャラと言われても、正規表現で使う記号のことしか思い浮かばないのですが。
18名称未設定:2007/05/20(日) 08:45:26 ID:VLuBbFIP0
NSLogや-descriptionはローカライズされた文字表示には使えない。
エンコーディングが指定出来ないから。
日本語文字を表示したいのなら、自前でNSLog(@"%@",hoge)に相当
するメソッドを作る。

メタキャラの話は、format string vulnerabilityでググれ。いわゆる鉄則。
19名称未設定:2007/05/20(日) 10:42:46 ID:g8ihdvQq0
writeToFile でファイルに書き出して、Property List Editor で開いてみるとか
20名称未設定:2007/05/20(日) 12:11:09 ID:S8wwiPq80
NSPopUpButton を使ったユーザーインターフェイスで、
選択する項目が1つしかないときは NSPopUpButton ではなく
同じ位置に NSTextField でその項目を表示したいのですが、
状態に応じて NSPopUpButton と NSTextField を入れ替える、
というようなことが、IB 上、あるいはコードから可能でしょうか。

見た目だけなら、それぞれの setHidden を入れ替えればできることはできますが、
IB 上で同じ位置に NSPopUpButton と NSTextField を置かなければならず
編集等がやりにくいので、NSPopUpButton と NSTextField とを入れ替える、
ということがしたいです。
21名称未設定:2007/05/20(日) 12:31:47 ID:ZfxNfI7k0
それUI設計を考え直したほうが良いんじゃ。
22名称未設定:2007/05/20(日) 12:44:40 ID:G1nQj3380
NSComboBoxじゃ駄目なの?
23名称未設定:2007/05/20(日) 14:30:35 ID:EIWpzyux0
>>17
NSArray *columnArray = [@"%@,%s" componentsSeparatedByString: @","];
NSLog(columnArray);
でいいことがあるよ!
NSLog(@"%@", [columnArray componentsJoinedByString: @" "]);

>>20
NSComboBoxが本命、またはaddSubview:/removeFromSuperviewと思うけど、IBでの編集が目的なら
NSTabViewに入れればいいんじゃね?
2420:2007/05/20(日) 15:07:36 ID:S8wwiPq80
>>22 >>23
NSComboBox は今まで使ったことがありませんでした。
ありがとうございます。調べてみます。

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

NSTabView は迷ったのですが、NSPopUpButton と NSTextField とを
入れ替えたいものとそうでないものとが UI のレイアウト上散在しているので、
今回の場合ちょっと使いにくいかなと思いました。
25名称未設定:2007/05/20(日) 15:29:52 ID:g8ihdvQq0
やろうとしていることがよくわからないんだけど
選択する項目が一つしかないときに表示するNSTextFieldは編集できなくていいの?
項目が一つのときはポップアップのUIがうざいからシンプルなNSTextFieldにしたい、ということ?
それならボーダレスにすればシンプルな表示になるけど。
2620:2007/05/20(日) 17:40:05 ID:S8wwiPq80
>>25
すみません、わかりにくい書き方でした。

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

編集モードのときには、選択肢のあるデータは NSPopUpButton 風に表示し
(ユーザーが選択可能)、削除モードのときには、選択されているデータを
NSTextField 風に表示する(表示のみ、選択、編集は不可)という
インターフェイスにしようとしています。
27名称未設定:2007/05/20(日) 17:50:19 ID:SHOl/NGE0
NSPopUpButton 1つにして
-(void)setBordered:(BOOL)flag;
-(void)setBezelStyle:(NSBezelStyle)bezelStyle;
-(void)setEnabled:(BOOL)flag;
を組み合わせればいいんでないか?
28名称未設定:2007/05/20(日) 21:06:22 ID:Wl6kGVzP0
>>18 >>19
ありがとうございます。

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

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

>>23
どういうことでしょうか。
エラーになって、落ちてしまうのですが・・・。
29名称未設定:2007/05/20(日) 22:15:06 ID:EIWpzyux0
>>28
>>23の上2行
>>17,28
>文字列にメタキャラがある
NSLog(columnArray); NSLog([parsedString description]);では「%@,%s」が入力ファイル中に
あったらまずいという話。
30名称未設定:2007/05/21(月) 07:41:23 ID:7LGNLKMD0
>>29
なるほど。
メタキャラがあるとエラーで落ちてしまう例だったのですね。
31名称未設定:2007/05/21(月) 23:12:19 ID:TdM0ZjG7O
落ちるだけならいいんだけどね。vulnerabilityなんで悪用されるかも。
32名称未設定:2007/05/29(火) 09:39:57 ID:Z+NxGNZg0
Cocoaスクリプタブルなアプリケーション、モダンな
書き方のサンプルコードってどのあたりを見たらよいでしょうか。

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

ただ、やっぱりscriptSuite+Terminologyの古いやり方でした。
10.3.xを切り捨てるとすると、新しい記述方法が使えると思うの
ですが、お勧めなサンプルコードがあれば教えてください。
33名称未設定:2007/05/29(火) 21:18:28 ID:a00qDN0E0
Pasteboard に適切でないもの
[pb setData:@"string" forType:... ];
とかを書き込むと、全てのプロセスが停止に至ってしまうのはウチ(10.4.9)だけ?
34名称未設定:2007/05/30(水) 13:27:49 ID:M44/L4u50
自分で作成したクラス(AppControllerとか)で、NSArrayContorollerでの選択されているオブジェクトの変更を受け取るには、どうすればいいのでしょうか。
つまり、自分で作成したクラスに、NSArrayControllerから選択されているオブジェクトの変更があるたびに、アクションを送信してもらうには、どうしたらいいのでしょうか。
35名称未設定:2007/05/30(水) 16:09:06 ID:E2XSp/Pe0
>>34
NSKeyValueObservingでNSArrayContorollerのselectionを監視。
もしくはNSTableViewのnotificatioかdelegate経由。
もしくはNSNotificationで自分の好きなように。
36名称未設定:2007/05/31(木) 15:44:40 ID:OPvQwZSL0
>>32

10.5のScript Bridgeの事?
37名称未設定: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名称未設定:2007/05/31(木) 21:25:46 ID:zK9AEhFO0
>>35
NSKeyValueObservingで、実装することにしました。
ありがとうございます。
39名称未設定:2007/06/02(土) 14:18:31 ID:sT94ODrc0
Drawerって親ウィンドウのサイズに依存しますよね。
横に細長なウィンドウだと、Drawer付けられないんですが
なんかいい方法ない?
40名称未設定:2007/06/02(土) 14:58:26 ID:PljomMdh0
下に出す。
41名称未設定:2007/06/03(日) 13:05:44 ID:mna10Y1g0
えくすきゅーずみー!
CoreDataで作ったEntityを途中で変更したとき、永続化させているデータの構造を
変更する手段って用意されているのでしょうか?
よいじかんをー!
42名称未設定: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名称未設定:2007/06/03(日) 15:11:20 ID:mna10Y1g0
>>42さん ありがとう
まいせるふで解決するよー
44名称未設定:2007/06/07(木) 04:12:52 ID:TxansO1r0
QTMovieViewでDRM付きのm4vが再生できないのは
当然なんですか?
45名称未設定:2007/06/07(木) 19:16:07 ID:iiSZh04z0
あれ、できなかったっけ。
46名称未設定:2007/06/08(金) 11:19:17 ID:rvM2Yx/u0
やってみたけど、DRM 付きの m4p は聞けた。
m4v は持ってないので確認できない。
47名称未設定: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名称未設定:2007/06/10(日) 20:09:47 ID:s3V0Kn6M0
NSOutlineViewってNSTableViewのサブクラスじゃなかったっけ?
51名称未設定:2007/06/10(日) 20:10:05 ID:tHbw2xow0
NSScroller の floatValue かな
値設定は setFloatValue:knobProportion: で。
5248:2007/06/11(月) 09:37:46 ID:1ykIS/Rk0
ダメです。InterfaceBuilderでNSScrollViewは関連づけできますが、
NSScrollerは関連づけができません。
53名称未設定:2007/06/11(月) 09:56:44 ID:9X1rbhME0
xxx.h
.
.
IBOutlet NSScrollView* scrollView;// IBで関連づける
NSScroller* hScroller; // 初期化メソッドで値を設定する

初期化メソッドかsetScrollViewで
xxx.m
.
.
hScroller = [scrollView horizontalScroller];
}
ってやるのはどうですか
54名称未設定:2007/06/11(月) 09:57:09 ID:T3nP0R6O0
InterfaceBuilder 使わなけりゃいいだろ。
55名称未設定:2007/06/11(月) 10:04:04 ID:T3nP0R6O0
NSTableView と NSOutlineView の垂直スクロールを同期させるというのが良く分からん。
表示中の行の数が同じでなければ setFloatValue: を使っても同期にならないだろうが、
NSOutlineView を使ってるということは折り畳まれた行が存在することが考えられるから
表示中の行の数が同じとも限らんし。
5648:2007/06/11(月) 17:24:05 ID:1ykIS/Rk0
>>51
'NSScroller'may not respond to '-floatValue:'でした。
57名称未設定:2007/06/11(月) 17:32:32 ID:mbR9EhtI0
(1) floatValue: ではなくて floatValue になっている?
(2) 警告出ても無視していいから、それで動いたの?
5848:2007/06/11(月) 20:10:36 ID:1ykIS/Rk0
(1)はい
(2)警告を無視したら56番のメッセージが表示されて作動しません
59名称未設定:2007/06/11(月) 20:21:35 ID:mbR9EhtI0
コードがどこかおかしいはず。
これで普通に動いたよ。

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

6048:2007/06/12(火) 00:36:50 ID:TYIgO7qC0
ありがとうございます。無事動きました。
しかし、これでは使い物にならないですね〜
61名称未設定:2007/06/12(火) 01:12:00 ID:luus+mNL0
具体的に何をしたいのか分からんから
使い物にならないと言われても
そーですかとしか言いようが無い

まあ、標準の部品で実現できそうにないことなら
その表現方法が本当に正しいのかを疑ってみるべきかもしれない
62名称未設定:2007/06/12(火) 05:03:25 ID:LE6VV2Gm0
自分の望んでいたことが無事にできたのに、使い物にならないっておかしくないか
63名称未設定:2007/06/12(火) 09:39:58 ID:iZm9RHNQ0
他人が親切に教えてやってるのに、使い物にならない、の一言で切り捨てる
48は以後スルーでよし。
64名称未設定: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名称未設定:2007/06/12(火) 17:06:00 ID:drt+veFf0
>>65
まず一回ちゃんと本読めよ...
67名称未設定:2007/06/12(火) 17:07:42 ID:Q66+HK1K0
68名称未設定: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名称未設定: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名称未設定: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の持ち方はこうするべき、
リソースはこう持つべき、全体としてこう作るべきとか等の、
定石などがわかるような文献やサイトがあればいいのですが。。。
7469: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ほとんどやってないから合ってるかわからんけど.
7666: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って深そうですし難しいです。
7866:2007/06/13(水) 17:05:43 ID:SjgSRBeA0
日本語版は内容が古過ぎるみたいなので、やっぱりヒレガス本推薦取り消します。
そのぐらいなら日本語のサイトでも十分勉強できると思うし。
(実際、私は日本語のサイトの情報だけでやってこれましたよ)
79名称未設定:2007/06/13(水) 17:06:39 ID:tx1aMvDC0
65です
>>76さん
ありがとうございます。試してみます。
やはりヒレガス本ですか、探してみます。
80名称未設定:2007/06/13(水) 17:09:20 ID:tx1aMvDC0
>>78さん
あぁぁ、そうですか...もっともっとググってみます。
8166:2007/06/13(水) 17:33:57 ID:SjgSRBeA0
>>77
ログの表示はそのままの意味ですよ。
別nib の File'sOwner に設定しているカスタムクラスでmanagedObjectContextを実装しなきゃ。

>>79
コピーした*_AppDelegate.m(h)内のクラス名も適当に変えてね。
addPersistentStoreWithTypeに使うURLも変更した方がいいかも。
ま、がんばって。
82名称未設定: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名称未設定:2007/06/13(水) 19:46:19 ID:SjgSRBeA0
>>82
すばらしい。

今となってはどうでもいいけど>>76で、
applicationShouldTerminateをapplicationDidFinishLaunchingと勘違いしてました...
84名称未設定: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名称未設定:2007/06/13(水) 21:43:36 ID:jSrM7oaF0
>84
>メニューバーからFile->Newして複数の同じウィンドウの表示をしたい

んならNewProjectでCore Data Document-based Applicationえらべ。
Introduction to NSPersistentDocument Core Data Tutorialよむといい。英語だが。
86名称未設定:2007/06/13(水) 22:28:01 ID:tx1aMvDC0
65です。
>>85さん
そうなんですがDocument-basedにすると、開いたウィンドウ毎に
CoreDataのファイルが作られてしまうのでダメなんです。
CoreDataのファイルは常に一つにしたいのでnon-Documentの
プロジェクトで作っています。
87名称未設定:2007/06/13(水) 23:23:11 ID:Yueo7NwZ0
>>86
single-model multi-windowにするには、
NSDocumentのmakeNewWindowControllerかwindowControllerClassをオーバーライドする。
と、俺様メモに書いてある。

自分で書いたメモなのに意味不明ですが、お役に立つでしょうか?
88名称未設定:2007/06/13(水) 23:25:54 ID:jSrM7oaF0
>86
>ファイルは常に一つにしたい

MyDocumentのinitで「常に一つ」を読み込むように実装したら駄目か。
89名称未設定: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に対して複数のウィンドウを開くときじゃない?
http://developer.apple.com/jp/documentation/cocoa/Conceptual/Documents/Tasks/FAQ.html#//apple_ref/doc/uid/20000954

>>88
そうすると複数のウィンドウで同時に編集した場合、データの矛盾が起きると思う。
データストアは一つにしておいてそいつに対してバインドすれば
あるウィンドウでの変更は即座に他のウィンドウに反映されるので問題は起きないはず
90名称未設定: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名称未設定: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名称未設定: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名称未設定: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名称未設定: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"];
も不要にできるけど説明がめんどい。

ま、がんばって。
9594: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いらねーじゃん」の思いが出てしまいました。
9694: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名称未設定: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を再描画したいのですが、
どうすればよいですが?
よろしくおねがいします。
9989:2007/06/15(金) 00:55:46 ID:Z8G4DJVj0
>>97
>AppDelegateは[NSApp delegate]で参照できます。
そっか、CoreData使ったソフトは実際には作ったこと無かったのでそれは思いつかなかった。
>>82でちょっと回りくどいことを書いてすまんかった。
ただまあ>>65はCoreData以前のいろいろをちゃんと理解した方が良いな
WindowControllerの使い方にしても>>94のやり方が正解だし。
ということでヒレガス本をちゃんと読みなさい。
Try&Errorも時には必要だけど、わけわからないままむやみにあれこれいじっても効率悪いだけだから。
100名称未設定:2007/06/15(金) 02:50:11 ID:bwuLJcag0
>>98
NSViewBoundsDidChangeNotificationはどう?
101名称未設定:2007/06/15(金) 14:58:04 ID:ylLFz9lv0
>>100
ばっちり出来ました!!
ありがとうございます。
102名称未設定:2007/06/15(金) 17:31:25 ID:sL1ajDrz0
65です。
>>94さん
具体的なコードでのアドバイスありがとうございます。

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

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

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

みなさんからのアドバイスで一歩前進できました。
ありがとうございます。
10397: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名称未設定:2007/06/15(金) 23:34:53 ID:cvg4tVdc0
おお、横やりだがオプション+ダブルクリックは知らなかった。
これも便利だな。
105名称未設定:2007/06/16(土) 07:38:36 ID:rwxtbdkR0
65です
>>103さん
>- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
> return [[self managedObjectContext] undoManager];
>}
>をWindowControllerに追加しないといけません。
メニューの編集->取り消し、やり直しがディスエーブルされていましたが、
このコードを加えたらイネーブルになりました。
なんでこうなったのか仕組みがわかってないので調べてみます。

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

アドバイスありがとうございます。
106名称未設定:2007/06/17(日) 16:35:07 ID:xFWdidLR0
他のアプリから作成したXMLファイルを自分のテーブルにインポートしたいのですが、
なにをどうすればよいのかさっぱりです。
どこか良いサイト、本などがありましたらお願いします。
107名称未設定:2007/06/17(日) 18:17:50 ID:9BssyYOD0
そのXMLファイルってのはplist形式なの?
だとしたら,NSDictionaryのdictionaryWithContentsOfFile:で読み込んでいじくればいいんじゃない?

というか,テーブルが何をさすのかがわからない.
108名称未設定:2007/06/17(日) 18:51:44 ID:MIixfL/i0
mkinoたんの本にXMLの説明あったよ
109名称未設定:2007/06/17(日) 19:37:46 ID:WyfXqzgv0
つNSXMLDTD
110名称未設定:2007/06/18(月) 12:49:40 ID:FnK6EgKv0
配列の要素値を参照する方法がわかりません。
他の言語みたいにarray[i]ではないのですか?
ネットでどこにも引っ掛からないのが不思議です。

あと配列の内容をテーブルビューに表示させるまでの方法も
さっぱりです。
111名称未設定:2007/06/18(月) 12:55:48 ID:bgV1qYg60
初学者向けの本を最初から最後まで読め。
112名称未設定:2007/06/18(月) 13:06:28 ID:XFI7IqHh0
>>110
配列の要素値を参照は普通にarray[i]でできない?
ひょっとして配列ってNSArrayの事じゃないよね。

テーブルビューについてはNSTableViewで検索してみなよ。
ま、DataSourceかNSArrayControllerを使えってことだよ。
113名称未設定:2007/06/18(月) 22:16:32 ID:f97Z48MF0
>>110
俺は、お前さんがどうやって配列を宣言できたのかの方がさっぱりわかりません。
114名称未設定:2007/06/19(火) 00:44:29 ID:dgDst+1p0
>>111-113
レスありがとうございます。配列は解決しました。
非常に単純なミスで要素値をログに吐く時に%dでフォーマットしてたので
変な数字しか出てこず、おかしいなあと悩んでいました。

>>112
NSTableView、DataSource、NSArrayControllerはなんとなくわかって定義しているのですが、
何をどうつなげていいのやら勉強中です。
115名称未設定:2007/06/19(火) 23:11:33 ID:8mzcE2x00
>>114
Bindingとか考えずに、基本的なやり方。

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

・そのままRun。すると「データソースとして振る舞うべきインスタンスに、
 以下のメソッドが定義されてないから、このテーブルは使えん」的な
 エラーがログに吐き出される。そこに挙げられたメソッドを自分で記述する。
 TableViewなら最低2つ。OutlineViewなら4つかな。
116名称未設定:2007/06/19(火) 23:26:15 ID:44NwgBsm0
117名称未設定:2007/06/19(火) 23:45:48 ID:5FjzRd/E0
確かにバインディングって便利だけど、どんどん機能拡張していくと
途中から余計に面倒になって思考が停止していく...orz
118名称未設定:2007/06/20(水) 00:15:31 ID:8LhrRklA0
バインディング対応と非対応の差が激しくて、バインディング対応ばっかりで作るとどこかで見たアプリばっかりに成る罠。
変わったことをやろうとすると、バインディングで動くようにするのはかなり面倒。
119名称未設定:2007/06/20(水) 00:31:22 ID:Fh609W9/0
だからIBで完結するような処理なんかそんなもんだろ。
なんかコード書かなくてもアプリができるみたいな幻想にとらわれてない?
120名称未設定:2007/06/20(水) 13:51:36 ID:NBL8VQHj0
>>119
ない
121名称未設定:2007/06/20(水) 13:58:11 ID:zIQZO1vl0
今のIBは Binding が目で確認できないのが痛いです。
情報表示して Binding タブを選んでさらに各グループを開いて、、、
遠すぎだよ。
122名称未設定:2007/06/20(水) 14:03:15 ID:qldLJWyJ0
>>119
思い切りとらわれてた。
あっちとこっちを繋げてハイ出来上がり!って。
でも、結局はIBで簡単にUI作って細かい事はコードでってことになる。
123名称未設定:2007/06/20(水) 21:59:07 ID:Dj3TYUsU0
>>121
instancesタブのツリー表示のほうで、アウトレットの接続と同じように見えるよ。
見やすいかっていうと微妙だが。
124121:2007/06/20(水) 22:14:45 ID:P4Zq1w7a0
>>123
ほんまや!
微妙やけど無いよりましやな。
おおきに!
125名称未設定:2007/06/20(水) 22:39:01 ID:tciIHlVd0
バインディングやCoreDataって微妙な仕様が多いよねー
KVCを多用させるのも、いつまでたってもプロトタイプって感じがしてなんだかなー
126名称未設定:2007/06/21(木) 00:31:41 ID:1kp6zXNr0
KVCとプロトタイピングって関係ない。
127名称未設定:2007/06/21(木) 01:05:19 ID:+f5dJFAD0
>>115 >>116
ありがとうございます。なんとかできました。
csvファイルからインポートしてテーブルビューに表示させることができたのですが、
インポートするたびにエンティティにレコードが追加されていってしまいます。

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

ご存知でしたらお願いします。
128名称未設定:2007/06/21(木) 12:25:54 ID:tIJB3hhC0
>>127
一件づつ deleteObject で削除するのでなく、一度に全件削除したいということ?
なら removeAllObjects で一気に削除できるけど。
NSArrayController 使ってるなら [[_arrayController content] removeAllObjects] で消えたはず。
129名称未設定:2007/06/22(金) 19:40:14 ID:M8f2QNll0
すいません、くだらない質問ですいません。
Quartz Composer.webplugin
って、コレ、標準で組込まれているんですか?
標準で組込まれているとしたら、
どのバージョンから入っているんですか?
130名称未設定:2007/06/23(土) 17:43:44 ID:ANfoSVtM0
スボットライト検索欄で、例えばスペース区切りでOR検索が
出来るようにするのは難しいんですかね?
131名称未設定: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名称未設定:2007/06/23(土) 21:06:01 ID:QUWKqEkv0
すみません。テーブルビューののカラム表示でSQLの外部結合みたく、
別エンティティから同一キー(1対1の関係)のカラムを表示させるには、
テーブルカラムのバインディング設定だけでは難しいのでしょうか?
133名称未設定:2007/06/23(土) 21:11:04 ID:JrUKG2eE0
日本語でおk
134名称未設定:2007/06/24(日) 15:08:55 ID:7icx36z80
>>128
ありがとうございます。出来ました。

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

例えばテーブルビューで「名前が"鈴木"かつ、年齢が"30"」といった
アンド検索が出来るようにしたいのですが、NSSearchFieldに
「鈴木 30」といったように入力して検索出来ればなあと。
135名称未設定:2007/06/24(日) 16:35:48 ID:sW58ZoIj0
そういうことが出来るようにするのがプログラミングじゃないのか。
136名称未設定:2007/06/24(日) 21:23:09 ID:oj7fKo9L0
>>134
NSSearchField自体は検索機能を持ってないから,
結局その部分を自分で実装すればいいだけの話.
137名称未設定:2007/07/01(日) 00:21:27 ID:5L+q9KzS0
そうそう、バインディング使わずに、基本的なウィンドウだけIBで作ってあとはコントローラ側から弄った方が速いしいろいろ出来る。

実用的なものを作ろうとすると、自分で実装しないと使えないのが多いよな。
マクが好きって幻想だけでがんばるのは辛い。orz
人海戦術も出来て儲けも桁違いに稼げるウィンドウズの方が全然魅力的だったり。orz
138名称未設定:2007/07/01(日) 00:50:57 ID:EwoNhQlG0
C++勉強するのが面倒だからObjective-Cが好きな俺は趣味PG
139名称未設定:2007/07/01(日) 21:33:09 ID:xbcqJltA0
テーブルビューなどでマウスホイールやクリックなどのイベントを拾うには
どうすれば良いのでしょうか?

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

非常に厨というか根本的な質問ですみません。
140名称未設定:2007/07/01(日) 21:43:18 ID:U0TJz2SZ0
>>139

・InterfaceBuilderで、NSTableViewのサブクラスMyTableViewを作る。
・自分の用意しているインタフェース上のViewを、NSTableViewからMyTableViewに変更する。
・MyTableViewのファイルを書き出して、その@implementation内で
 - (void)mouseDown:(NSEvent*)eventなんかを上書きする。
141名称未設定: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名称未設定: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名称未設定:2007/07/02(月) 12:13:39 ID:qJAV3pLe0
最近、テーブルビューがらみの厨な質問を乱発してるのって、同じ人?
144名称未設定:2007/07/02(月) 13:17:36 ID:5wPz1kBF0
そうです。
すみません。
145名称未設定:2007/07/02(月) 16:11:36 ID:Ne8YEXNf0
ヒレガス本くらい読んどけよ。
146名称未設定:2007/07/07(土) 19:07:56 ID:odX4zdaf0
NSMutableDictionary があって、中身のキーを一つずつチェックして、キーがある条件を
満たしたら対応するオブジェクトを処理する、ということをしたいのですが、

これ、 -keyEnumerator を使ってやるのはよくないみたいですね。
(enumerate している間に dictionary の構造が変わるとまずいからでしょうが)
でもバリューのオブジェクトの値を変更するぐらいは許してほしいような。
どうやるのが正解(?)なんでしょう。
14797: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名称未設定: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名称未設定:2007/07/09(月) 00:06:39 ID:MKmnIjZg0
長時間費やしたのですが解決しなかったので質問させてもらいます。
ウィンドウ上に置いたボタンはsetKeyEquivalentで設定したキーで動作できるのですが、
ボタン上にaddSubviewして置いたボタンはsetKeyEquivalentをしてもキーで動作しません。
レスポンダチェイン周りを調べて自分なりに試行錯誤してみましたが解決しませんでした。
どうすれば動作するでしょうか?よろしくお願いします。
150149:2007/07/09(月) 06:57:44 ID:MKmnIjZg0
NSResponderを継承しているviewたちをウィンドウに配置してキーを押せば
performKeyEquivalentに入って来ます。上書きしてNSLogで確かめてみました。
しかしNSButtonにaddSubviewしたviewだと反応しないです。
acceptFirstResponderをYESで上書きしたりmakeFirstResponderを試しましたがダメでした。
けどなぜかNSSliderにaddSubviewした場合は反応しました。
まだ謎が解けません、、、お力添えをお願いします。
151名称未設定:2007/07/09(月) 12:24:49 ID:MtZ2kM7T0
NSButton が performKeyEquivalent を拾っているから、subview にはいかないということではなくて?
152149: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名称未設定:2007/07/09(月) 17:41:11 ID:2FPmw6nT0
そもそも、ボタンの中にボタンを配置するって
おかしいと思わんのか
155名称未設定:2007/07/09(月) 17:57:18 ID:MZpOL97p0
>>154
みんな分かってるけど、それに突っ込むとどうなるかも知ってるからじゃね?
156名称未設定:2007/07/09(月) 18:03:05 ID:uzTm6K720
>>154
いや、それはそれで面白いインターフェースかもと思って試してた
157146:2007/07/09(月) 18:25:05 ID:LonmC7zt0
>>147 >>148
どうもありがとうございます。ちゃんとドキュメントを探すべきでした。
自分の場合値を変更するので >>148 のやり方になるんでしょうね。
158149:2007/07/09(月) 21:47:15 ID:HHAS6qp/0
NSButtonの上にボタンを、と例を挙げましたが実際にはボタンやビューということでした。
http://www.pinkapple.tv/uploads/general20070709213058.jpg
左は通常時で右がdrawRectを上書きしたビューをボタン上に配置したものです。
この状態でボタンもビューも独自にperformKeyEquivalentを動作させたかったのです。
(ビューにテキストを表示したり、ビューが他の色、他の機能のものに置き換わったりするので
ボタンの見かけを変えるだけではダメなのです)
ウィンドウ上でなくてボタン上に配置したかったのは、ボタンとビューとでいろいろとデータのやり取りをするのでsuperViewとsubViewの関係にした方が処理が楽だったからです。
ということで>>153さんの方法を試してみます。ありがとうございます。
159149:2007/07/10(火) 05:34:16 ID:TgqP272E0
>>153さんの方法でできました。
いろいろ調べるとperformKeyEquivalentメソッドはNSResponder、NSView、NSButtonで記述、上書きされていて、NSViewのperformKeyEquivalentは自分のsubviewに処理を送る機能があるようです。
なおかつsubviewへのperformKeyEquivalentが誰も反応しなければNOが返ってきてview自身の処理を行います。
>>153さんのはまさにそれらの機能をコードで記述したものになってます。ありがとうございました。
160名称未設定: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名称未設定:2007/07/11(水) 05:48:22 ID:4RHpXxKf0
上のコードをコピペしてやってみましたが、おっしゃる現象は起きませんでした。
何かmyViewかmyDrawerに追加してる機能が邪魔してるのではないでしょうかね。
162160:2007/07/12(木) 01:10:46 ID:Mzn5q1ga0
>>161

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

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

としています。これがいけないのでしょうか?
163名称未設定:2007/07/12(木) 04:01:55 ID:DjNHr2pC0
>>162
問題の切り分けくらい自分でやりなよ。
そこまで面倒みきれない。
164名称未設定:2007/07/12(木) 04:02:28 ID:byx4vDAn0
>>162
ちょっとやってみましたがnotificationがうまくとれなかったので;確認できませんでした。
申し訳ない。
165名称未設定:2007/07/12(木) 09:45:28 ID:0PLO2dIL0
>>162
これがいけないのでしょうかってそこをコメントアウトすれば、いけないかどうかくらいすぐわかるだろうが
他人にいちいち確認のコードを書かせる気か?
166164:2007/07/12(木) 22:05:35 ID:pjCoXtAi0
興味本位でやってみたんだけど、間違った行動だったと反省してます。
まぁ答え出てないから意味ないけど。
167名称未設定:2007/07/12(木) 23:06:17 ID:N2Qo+TtK0
Cocoa Bindingで質問です。
テキストフィールドの更新がBindingで行われるように組んだときに、
モデルの属性がごく短時間に何度も更新された場合、アプリがしばらく
固まってしまうのですけれども、これを解決するのに皆さんならどの
ような手法をとりますか?

>ttp://blog.so-net.ne.jp/MyCometG3/2007-07-12-1
168名称未設定:2007/07/15(日) 03:38:01 ID:bqGSj8YO0
>>141
IB上でNSTableViewをダブルクリックして、
InspectorウィンドウのCustom Classde
MyTableViewに設定する。
シングルクリックだとNSScrollViewがフォーカスされるので注意。
169名称未設定:2007/07/15(日) 03:38:59 ID:bqGSj8YO0
すげー亀レスorz
170名称未設定:2007/07/15(日) 15:09:30 ID:iC/f5XUF0
NSPredicateで文字列「book」でフェッチしたあとに
「bookmark」など前回の文字列に付加した形の文字列で
フェッチするとひっかかりません。

毎回nilでクリアするしなかいのでしょうか?
171名称未設定:2007/07/16(月) 07:20:46 ID:qlrw2Rv40
やっぱり凝った事をやろうとすると手間だよな。orz
まあマクだからって簡単にプログラム作れる訳は無いのだが。
172名称未設定: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名称未設定:2007/07/18(水) 02:11:57 ID:/hOqb68d0
>>172
どっか別のところでインスタンス化した object01 を
object02 から参照できる変数に保持しておけば済む話だろう。
object02 のインスタンス変数として保持するか
あるいはグローバル変数として保持するか
その方法は時々によって違うだろうが。
174名称未設定:2007/07/18(水) 02:45:39 ID:3sY2PtI30
便乗して質問しますが、
.hファイルの中で
@interface MyButton : NSButton
{
NSString *myParameter;
}
と宣言するのと、.mファイルの中で
@implementation MyButton
NSString *myParameter;
と宣言するのはどう変わってくるのでしょう?
175名称未設定:2007/07/18(水) 03:58:40 ID:ubS40ed30
前者はMyButtonのインスタンス変数で、後者は単なるグローバル変数
176名称未設定:2007/07/18(水) 04:45:10 ID:3sY2PtI30
どちらの場合も
-(NSString *)getString{
return myParameter;
}
みたいな感じで外部から取得したり、考えずに使えているので使い分けが分からないんです。
インスタンス変数とグローバル変数ググってきます。
177名称未設定:2007/07/18(水) 10:03:54 ID:8GU8wJyL0
>>176
ごく簡単に説明するとインスタンス変数は使っていいけどグローバル変数は使っちゃダメ
178名称未設定:2007/07/18(水) 10:06:43 ID:3sY2PtI30
>>177
分かりました。
そのインスタンスに持たせたいパラメータはちゃんと.hファイルに記述してインスタンス変数にします。
ありがとうございます。
179名称未設定:2007/07/18(水) 11:17:24 ID:Avgak43d0
「何のために」共通のインスタンスが必要なのかがわかれば、助言の一つも出せるのだが。
180名称未設定: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名称未設定:2007/07/18(水) 14:26:05 ID:Avgak43d0
根本的な部分が分かってないのか。
とりあえず、
BOOL bool;
は原則禁止!
static BOOL bool;
で。(もちろん例外はあるが今は考えなくていい)

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

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


通常クラス定義ファイルに宣言定義された静的大域変数はクラス変数と呼ばれる。
クラス変数はすべてのインスタンスに共有されるため、その変更はすべてのインスタンスに影響を与える。
インスタンス変数はインスタンスごとに別のものとなるため、変更はインスタンスの中にとどまり他のインスタンスに影響を与えない。
182名称未設定: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名称未設定:2007/07/18(水) 21:03:40 ID:3sY2PtI30
↑全ボタンのパラメータ、の間違いでした。
staticはよそから干渉されないように局所的な変数にする、staticをつけないと外部変数と理解しました。
試しに上記のコードからのstaticを外し、まったく同じコードの別のNSButtonのサブクラスを作ってみたら
ちゃんとパラメータが共有されました。凄く勉強になりました。ありがとうございました。
184名称未設定:2007/07/19(木) 02:06:33 ID:a3+jGlIB0
ちなみに,そのstaticを付けた変数を「クラス変数」という.
185名称未設定:2007/07/19(木) 03:06:04 ID:U9xJQ7gH0
Objective-C にはクラス変数なんてありません。
186名称未設定:2007/07/19(木) 10:05:30 ID:gCGzQvIn0
クラスオブジェクトが持つ変数はクラス変数じゃないのか?
187名称未設定:2007/07/19(木) 10:16:57 ID:A6zlNdun0
どんな教科書(資料)で勉強したの?

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

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

... 一部のクラスは、静的な変数を宣言し、それらを管理するクラスメソッドを提供します
(クラス定義と同じファイルで static 変数を宣言すると、その有効範囲は当該クラスのみ、厳密には当該ファイルに実装されたクラスの部分に限定されます。
インスタンス変数と異なり、サブクラスは静的な変数を継承できません)。
188名称未設定:2007/07/22(日) 10:56:58 ID:rhiDTEck0
BOOL isNibLoaded = [NSBundle loadNibNamed: nibFileName owner: self];

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

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

[NSBundle loadNibNamed: nibFileName owner: self]
が失敗するのは、どういうケースが考えられるでしょうか。
189名称未設定:2007/07/22(日) 11:14:20 ID:/m9PDaPq0
>>188
>nibFileName には、正しく値が設定されているのですが、
>nib が読み込まれていれば、表示されるはずのウインドウが
>表示されません。

本当に正しく値が設定されているという自信はあるのか?
190188:2007/07/22(日) 11:45:38 ID:rhiDTEck0
>>189
あります。

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

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

でもそれを確かめる方法や、nib(特にバインディングの設定)の良い
デバッグ方法がわかりません。
191名称未設定:2007/07/22(日) 16:02:33 ID:aRES5gfc0
awakeFromNib が loadNibNamed:owner: 呼び出し中に呼ばれるから、何か実装してるなら
それを一度コメントアウトしてみる。

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

とかやってみるのはどうでしょう。
192名称未設定:2007/07/22(日) 17:11:47 ID:1Do/ZYGN0
その前にデバッガコンソールの存在に気づいているかが気になる。
193名称未設定:2007/07/22(日) 17:24:50 ID:rLqo+Xbu0
nib によって読み込まれるインスタンスの awakeFromNib 内に loadNibNamed: あると
無限ループになる
194188:2007/07/22(日) 17:58:58 ID:rhiDTEck0
>>191-193
ありがとうございます。

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

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


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

今回のバグの場合、awakeFromNib の1行目に置いた
ブレークポイントにも到達しませんでした。
195名称未設定:2007/07/22(日) 18:33:07 ID:VUxjnHCb0
>>194
>バインディングのデバッグ
バインディングはあんまりやってないけど、consoleメッセージとexceptionはいているなら
gdb> break -[NSException raise]
でなんとかなってる。
196名称未設定: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つづき: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名無しさん@そうだ選挙に行こう:2007/07/29(日) 09:08:45 ID:++cxbJD10
NSSliderからのアクションを
- (IBAction)myAction:(id)sender{
NSLog(@"action");
}
と受けると、スライダーのmouseDown、mouseDrag、mouseUpのタイミングでアクションが送られてくるようなのですが、
これを、この受け手側のmyAction内で分類できないでしょうか?
スライダーのサブクラスを作らなくてもこれらが分類できればいいなと思いまして。
御教授願います。
199198: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名称未設定: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名称未設定:2007/08/03(金) 03:55:22 ID:LeRHiyYZ0
>>200
関係ないかもしれないけど、Mail.app は言語環境を英語にして起動すると UTF-8 で送信される
202200:2007/08/03(金) 06:14:19 ID:9xPJ2l+O0
>>201
はい、言語環境が関係ありそうですが、日本語なんですよねえ。

しょうがないのでAppleScriptでMail.appつついて送信したら、
ISO-2022-JP で送れましたので、とりあえずこれで良しとします。
203名称未設定:2007/08/03(金) 10:34:05 ID:mJ4qs93D0
>>202

言語設定以外に、そのアプリが日本語にローカライズされててもダメ?
204200:2007/08/03(金) 17:13:45 ID:9xPJ2l+O0
>>203
はい、ローカライズしてます。
Localizable.strings(Japanese) から文字取れてますし、
Info.plist の CFBundleDevelopmentRegion を Japanese にしても一緒でした。
他に触るとこなかったかな?
205名称未設定: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名称未設定:2007/08/03(金) 22:49:36 ID:zBWSwrqo0
しかし NSMailDelivery ってどのぐらい Mail.app と連携してるんだろ。
なんとなく、単独で使えるようにはあまりメンテされてない感が...

しかし、今日び複数アカウントがあり、それぞれメールの送受信法が違うし、
メールの中身もいろんなものがあり、たかがメールを送るのも大変だよな。
207名称未設定:2007/08/04(土) 00:06:43 ID:N6Lu9KO20
NSMailDeliveryはAPIを見る限り、
貧弱すぎてMail.appでバリバリ使っているとは思えないよね。
NSMailDeliveryってヘッダ見ると1997のままだけど10年放置なの?
JavaMailレベルとは行かないまでも、もっと拡張してほしい。
208名称未設定:2007/08/04(土) 09:56:01 ID:zNZwO1rZ0
Cocoa Bindings で NSTextField に文字を表示させてるのですが、
表示させる文字を setValue: forKey: で更新すると、それまで表示していた文字と、
新しい文字とが重なって表示されてしまいます。

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

バインディングの設定のせいなのか、コードに誤りがあるのかもわかっていません。
上書きされたはずの文字「十」は、誰が保持しているのでしょうか。
209名称未設定:2007/08/04(土) 11:30:03 ID:I4XWeUY/0
>>208
>新しい文字とが重なって表示
ウインドウリサイズ等して再描写しても?
Application delegateにKVを持たせ、NSButton>appDelegate action内でsetValue:forKey:してみたけど意図通りになった。
210208:2007/08/04(土) 12:00:03 ID:zNZwO1rZ0
>>209
ありがとうございます、再描画したらきちんと表示されました。
再描画せずにきちんと表示するには、何が足りないでしょうか。
211208:2007/08/04(土) 12:01:03 ID:zNZwO1rZ0
>>再描画せずに

すみません。
リサイズなどをしなくても再描画するには、何が足りないでしょうか。
212名称未設定:2007/08/04(土) 12:51:34 ID:I4XWeUY/0
>>211
setter(内で値の加工をしている?内で他のオブジェクトにsetしている?)やKVOを見直したほうが
いいと思うけど、再描写は
[nsview setNeedsDisplay: (BOOL)]
か(他のスレッドからなら)
[nsview display] または、[[nsview superview] display]
213208:2007/08/04(土) 14:16:03 ID:zNZwO1rZ0
>>212
setter は、

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

となっています。
view に対して再描画させるとなると、
バインディングを使っている意味が薄れるので、
自分としても KVC/KVO で対処したいのですが‥。
214名称未設定: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名称未設定:2007/08/09(木) 20:05:40 ID:rPPfUlyN0
NSViewの上にNSImageを並べて表示させたいのですが、さっぱりです。
216名称未設定:2007/08/09(木) 21:10:54 ID:tas9QJXw0
Cocoa使ってるとよくCarbonのAPIを呼び出さなければならないことがありますけど、
いっそ入門Carbonとか読んでみた方がいいですかね
217名称未設定:2007/08/09(木) 22:55:25 ID:msAuLRcc0
>>214
ってゆうかそれだって例えば他のスレッドが [obj setName:]をほぼ同時に呼んだら
アウトだろ。
218名称未設定:2007/08/09(木) 23:31:14 ID:nEMt5Ylz0
>>214
NSMatrixでNSImageCellを使うのが手っ取り早い.
219名称未設定:2007/08/10(金) 00:10:34 ID:NXu0UGJP0
ループ内で座標にイメージのサイズを足せばいいだけじゃん
220名称未設定:2007/08/10(金) 21:20:23 ID:B2bpt6bp0
>>218 >>219
ありがとうございます。
NSMatrixで行列表示ができました。
でもなぜか、セルがウィンドウの上に切れて表示されるのと
putCell:atRow:column:でNSImageCellで画像をセットしても
同じ画像ばっかり表示されるんです。

もう少し勉強してみます。
221名称未設定:2007/08/10(金) 23:22:04 ID:NXu0UGJP0
>>220
NSMatrixにaddRow/addColumnして、[self cellAtRow:y column:x]に対してイメージをセットしたらどうかな
222名称未設定:2007/08/10(金) 23:23:05 ID:NXu0UGJP0
selfはNSMatrixね
223214:2007/08/11(土) 01:19:20 ID:4MGmk/Il0
なんかちぐはぐなレスになった>>214はあぼーんで。スレ汚しスマソ
>>217 指摘thx.
224名称未設定:2007/08/11(土) 01:27:56 ID:uNrauIzq0
220です。
自己解決できました。
NSScrollView内にNSMatrix作ったら左上から右下に向かって綺麗に並びました。
重複画像は単純にNSImageのalloc/releaseの記述ミスでした。

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

次は画像の影付けにチャレンジ。
これまた難易度が高そうです(^^;
NSImageにaddShadowとかあったら楽なのになあ。
225名称未設定:2007/08/13(月) 19:32:35 ID:HjQoWJR20
NSSegmentedControlをクリックした時、デフォルトだとマウスアップ時に選択が移行するのですが、
これをマウスダウン時のタイミングで選択を変えるにはどうしたらいいでしょう?
sendActionOn: メソッドを使ってみたのですがうまくいかず
今はマウスダウンの中を書き換えようとしてるのですが、
NSTabViewのtabViewItemAtPoint メソッドのようなものがNSSegmentedControlにはなくどうしてよいものか分かりません。
御教授よろしくお願いします。
226名称未設定:2007/08/15(水) 00:34:56 ID:eYK2hRJc0
サブクラスで

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

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

}
としてみるとか.
227名称未設定:2007/08/15(水) 04:21:23 ID:FI0rPcR60
NSSliderなんかと同じでNSSegmentedControlにはmouseUpが実装されてないので
例えばサブクラスで
- (void)mouseUp:(NSEvent *)theEvent{
NSLog(@"MouseUp");
[super mouseUp:theEvent];
}
としてもここに処理が回ってこないんです。
なので>>226のコードだと何も処理されないんです。。
正確にはNSSegmentedControlにmouseDownは継承されてるけど
オーバーライドされて機能しないようになってるってことだと思いますけど。
228名称未設定:2007/08/15(水) 06:42:46 ID:xHhBTOGd0
NSSegmentedCell (NSCell)の
sendActionOn あたりを変更してみるとか?
229名称未設定:2007/08/15(水) 06:43:45 ID:xHhBTOGd0
既出だったかスマン
230名称未設定: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:]

かなり面倒くさいけど。
231225,227: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名称未設定:2007/08/16(木) 17:16:23 ID:cDPUZH1x0
oomori.comってどうなったんだ?
233名称未設定:2007/08/16(木) 17:23:26 ID:D7uzhTeg0
先日つながらなくなって、一時復活したようだけど
それからまたつながらなくなったみたい
どうしちゃったんだろうね
234名称未設定:2007/08/16(木) 17:57:18 ID:5J/T/ZnQ0
愛想を尽かしたんじゃないかな。
235名称未設定:2007/08/18(土) 19:33:59 ID:b9e4iKE/0
236名称未設定:2007/08/18(土) 19:39:50 ID:qe4k9HGL0
cocoaで飯食ってけますか?
237名称未設定:2007/08/18(土) 20:25:28 ID:xDpeu2aa0
Cocoaは嗜好品であって主食にはなりません。
238名称未設定:2007/08/19(日) 00:50:40 ID:wXs7PQ2p0
>>235
面白いけど、MyCOMの記事への指摘を何故日記のコメントにするのか分からんな。
239名称未設定:2007/08/19(日) 01:52:34 ID:wwtSg7AR0
mkimoさん?
240名称未設定:2007/08/19(日) 06:35:14 ID:b5TCkvsd0
mkinoってエムキノって読むの?
241名称未設定:2007/08/19(日) 08:21:45 ID:x6297PUr0
>>238
俺も思た。
しかもコメント先はツールバーアイコンに関するエントリで、
マイコミは何にも関係ないんだもんな。
メールでもなんでもすりゃいいものを、ちょっとマナー悪いように思う。
242名称未設定:2007/08/19(日) 09:13:46 ID:fHLqYkOZ0
ダイナミックObjective-Cへの突っ込みにHMDTの最新エントリのコメント欄使う奴はけっこうよく見るだろ。
243名称未設定:2007/08/19(日) 09:34:24 ID:x6297PUr0
>>242
そーいうもんなのかな? 俺が自分のサイトでやられたらあんまり良い気分じゃないけど。
あまりにも主題と関係のないこと書かれたら、後からそこ探すの大変だし。
ま、時々見かけるmkinoマンセー連中もウザいし、どうでもいいんだけど。
244名称未設定:2007/08/19(日) 09:44:23 ID:etpi/Mpi0
>>239
わろた。
実物見たことないが、キモいのかw
245名称未設定:2007/08/19(日) 11:40:02 ID:ocPOSWi+0
コメント欄で主題と異なることを書き込むのは俺もマナー違反だと思うよ。

でも、Macでプログラム系の掲示板がどこかほしいな。検索機能付きのやつ。
HMDTにあった掲示板もスパムでやられて閉鎖されちゃったし、やっぱり
運営難しいのかな。こんな感じのがあればいいのに。
>ttp://www.atmarkit.co.jp/bbs/phpBB/index.php
246名称未設定: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名称未設定:2007/08/19(日) 13:24:40 ID:L1niG0WF0
エンコードがUTF-8じゃないんですか?

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

聞く前に NSError を返してもらって調べるくらいしましょうね。
248名称未設定:2007/08/19(日) 17:56:55 ID:fZdGSCkT0
>>247
できました。ありがとうございます。

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

精進します。
249名称未設定:2007/08/19(日) 22:17:57 ID:GJetEexT0
>>248
NSURLRequestとかも試してみたら?
250名称未設定:2007/08/20(月) 00:06:56 ID:sNRA//U50
>>245
PukiWikiなら設置してある。
放置気味だけど。
ttp://cocoawiki.aerial.st
251名称未設定:2007/08/20(月) 03:27:37 ID:VX9jayCX0
NSOpenGLViewが複数あるとき,一個のViewの方でpickしたら
もう一個のViewが描画されなくなるんだけどなんでだろう。
glRenderMode(GL_SELECT);

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

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

252名称未設定:2007/08/20(月) 09:02:13 ID:XvOlYfuG0
>243
実際あの指摘は正しいんだろか?
初心者の漏れにはサパーリわからんのだけど。
253名称未設定:2007/08/20(月) 22:17:07 ID:t64RIRSP0
>>252
サパーリな奴が、指摘が正しいかどうかだけ知って何の役に立つ?


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

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

最終的に「Cocoaパターン」とでも呼べるものが出来上がったら面白いなあと思う。
し、もしかするとそんな将来の著作も狙ってたりして。
254名称未設定:2007/08/20(月) 22:23:05 ID:t64RIRSP0
なんだ、ADCサイトに既に元ネタちっくなものがあるじゃないか...
あとはそれをどこまで膨らませて(いい意味で)書けるかだなあ。
255名称未設定:2007/08/20(月) 22:27:39 ID:t64RIRSP0
連投すまん。>>254のことはデザパタ関連の連載の最初にすでに断ってあった。
だから本人もそれを単純に踏襲したものにならないように書いてる筈だと期待。
256名称未設定:2007/08/20(月) 22:30:46 ID:XG0wpyE80
え?
期待してんの?
257名称未設定:2007/08/20(月) 22:31:52 ID:m/MJ9Do70
アクセス数の多いサイトの、本来は何の関係もないページトップのエントリに対して、
わざわざ自分のサイトへのリンクを記載してコメントするのはちょっと気が引けるな。俺は。
なんか宣伝みたいになっちゃうじゃん? 「こんな鋭いツッコミする俺ってどう?」みたいな。
ある程度気心の知れた常連さんみたいだし、そういう意図はないんだろうけど。
といいつつ、話の展開は気になる。
258名称未設定: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名称未設定:2007/08/22(水) 11:48:33 ID:09zetXWR0
>>259
SetMovieGWorld は CreateMovieStrage の後なんじゃね?
qtMovie が NULL の状態で SetMovieGWorld しても意味ない気がする。

Movie 作っても表示はされなくて、インスタンス化してから表示されるんじゃないか?
261名称未設定:2007/08/22(水) 13:46:57 ID:JadCL/7H0
>>260
ありがとうございます。仰る通りにCreateMovieStrage(…) の後に SetMovieGworld(…) を
やってみましたが、同じ結果でした。
で、関係する関数を調べてみたんですが、NewGWorld(…) が OSX10.4 で廃止されていました。
コンパイルエラーも実行時エラーも出てなかったので通っているものとばかり…
代わりの関数って何になるんでしょうか?
もちろん自分でも調べてみますが、ご存知でしたらお教えください。
262名称未設定:2007/08/22(水) 14:11:21 ID:fw6+crbU0
廃止?廃止予告じゃないの?
263名称未設定:2007/08/22(水) 21:59:05 ID:dvhT81p60
>>261
というか、関数のエラーチェックをしてないのでは?
どこで引っかかっているかはきちんと確認したか?

そのケースは普通GWorldがきちんと出来ていないか
Setではねられているかどちらかでは。
264259: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名称未設定: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名称未設定:2007/08/23(木) 09:28:42 ID:b2guyxFU0
267名称未設定:2007/08/23(木) 09:58:55 ID:7IM/N5ND0
>>265
それだね。QTKitCreateMovieのサンプルソース見ると
quicktimeMovieFromTempFileでストレージを作る際に
新規Movie構造体を一緒に作って、かえってきたMovieを
使ってQTMovieインスタンスを生成してる。

別のMovie構造体にセットしてもそりゃだめだな。
268259:2007/08/23(木) 11:59:41 ID:xQ3xY0pg0
>>265, 266, 267
おおおぉ、ありがとうございます!解決致しました。
quicktimeMovieFromTempFileから返って来たMovieについて、SetMovieGWorldをかけ
QTMovieを作ったら見事に消えました。厚くお礼を申し上げます。

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

何はともあれ、つきあって下さった皆様本当にありがとうございます。
269名称未設定:2007/08/23(木) 13:14:35 ID:MFvh7UHN0
>>268
Carbonの世界はCarbonの世界で悪くないよ。Appleは終息方向に向かいたいみたい
ですけどね。

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

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

まあ、Carbonはここではすれ違いだ。失礼しました。
270名称未設定:2007/08/23(木) 16:40:07 ID:tUB6r9Qr0
てことでObjective-C2.0のQTKitに期待なわけですね。
271259:2007/08/23(木) 18:29:02 ID:xQ3xY0pg0
>>269, 270
なるほど、Carbon からは QuickTime が使い易いんですね。
Leopard の QTKit が使い勝手よくなっていることに期待します。
後2〜3ヶ月か。うーん早く出して欲しいなぁ。
272名称未設定:2007/08/24(金) 13:00:09 ID:plQI0uRV0
>>269

判ってると思うけど、QuickTimeはCarbonじゃ無いよ。
GWorldとは手を切って、OpenGL Contextに移行しよう。
273259: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名称未設定:2007/08/24(金) 18:05:34 ID:plQI0uRV0
Creating a Visual Context
http://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
http://developer.apple.com/samplecode/CIVideoDemoGL/index.html


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

要はみんなテクスチャなんでGPUの中だけで相互にいじれると。
275名称未設定: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名称未設定:2007/08/25(土) 01:30:41 ID:VopUGkEZ0
>>275
MyCometG3氏と見た。
277259:2007/08/25(土) 19:15:58 ID:NJSbpzvW0
>>274,275
うーん、覚えないといけない事がいっぱいですね…一つずつ学びたいと思います。
ありがとうございました。
278名称未設定:2007/08/28(火) 07:04:19 ID:zHr/kI630
初歩的質問で申し訳ないのですが、NSString文字列の
制御文を書きたいのですが、どのようにすればいいのでしょうか。

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

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

のように書いたのですが、if の行でエラーが出てしまいます。
279名称未設定:2007/08/28(火) 07:09:19 ID:Xv9pLU0Y0
>>278

if (hoge isEqualToString:@"あいうえお") {
280名称未設定:2007/08/28(火) 07:11:51 ID:lNlMIRDY0
朝からcocoa
いいね素晴らしいね
281名称未設定:2007/08/28(火) 07:16:01 ID:zHr/kI630
>>279
分かりました。勉強不足でした。

ありがとうございます。
282名称未設定:2007/08/28(火) 12:58:25 ID:y/omrr0P0
>>279
@""の中に日本語はまずくないですか?

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

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

}

くらいでは。
283名称未設定:2007/08/28(火) 13:13:32 ID:rN2eIabO0
>>278
この例だと、>>278が意図したようには動かないが、エラーも出ないのでは。
284名称未設定:2007/08/28(火) 13:28:47 ID:qboyE3Nc0
オブジェクト定数に日本語使ったからエラー出たんじゃね?
285名称未設定:2007/08/28(火) 13:54:14 ID:p7clQF4e0
その前に条件式内での代入は不問なの?

>のように書いたのですが、if の行でエラーが出てしまいます。
どんなエラーかも分からないし。
286名称未設定:2007/08/28(火) 15:04:49 ID:y5W8OHwo0
パールや簡易系スクリプト上がりだと苦労するよ。オブジェC。
287名称未設定:2007/08/28(火) 15:42:39 ID:KiMzdaU00
CocoaDevCentralあたりにPHPからの移行チュートリアルみたいなのあった気がする。
英語だが。
288名称未設定:2007/08/28(火) 15:57:17 ID:qboyE3Nc0
うそん
俺AppleScript上がりだけどすんなり理解できたよ、ObjC
289名称未設定:2007/08/29(水) 03:40:32 ID:QhQnuPQW0
Cocoa初心者です。
ヒレガス本(日本語版)は、済ませました。
次にやると良い入門書があれば、ご紹介ください。
290名称未設定:2007/08/29(水) 13:43:03 ID:6vtaxeAX0
>>289
何を作りたいの?
291名称未設定:2007/08/29(水) 19:40:33 ID:mCpcDP8p0
テーブルビューでコアデータにバインドしないカラムのソート方法がさっぱりです。

ソート用にそのカラムの配列を作ってソートディスクリプタをかますのですか?
292名称未設定:2007/08/29(水) 19:50:19 ID:sxJk1+Ic0
NSTableView の - (NSArray *)sortDescriptors;
NSMutableArray の - (void)sortUsingDescriptors:(NSArray *)sortDescriptors;
がヒントというか殆ど答え。
293名称未設定:2007/08/29(水) 20:15:26 ID:FVUVQ2w00
NSTextFieldについて質問させてください

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

[NSControl sizeToFit]だと横幅が変わってしまいます
294名称未設定:2007/08/30(木) 01:39:01 ID:8W/XnYIW0
295名称未設定:2007/08/30(木) 01:47:09 ID:8W/XnYIW0
>>293
IBのインスペクタのサイズで,
NSTextFieldのサイズを上下にリサイズするように設定してみては.
上下にはバネ,左右は直線の表示に.
296名称未設定:2007/08/30(木) 02:23:58 ID:zfQNQU460
>>294
そこに書いてあることは間違ってるとは言わんが
すごく誤解を招きそうな感じの書きっぷりになってるな
297293:2007/08/31(金) 00:21:20 ID:coa9p3Qi0
>>295
ダメでした。IBの「Size to Fit」メニューではAutosizing設定に
合わせてくれるんですが、プログラムでは

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

としても横に長く伸びてしまいます
298名称未設定:2007/08/31(金) 03:54:43 ID:k2mfVNs40
>>297
NSTextFieldのsetLineBreakMode:でラップするよう設定してみては?
詳しくはリファレンス参照.
299293:2007/08/31(金) 23:09:17 ID:coa9p3Qi0
自己解決しました。これでできそうです。

NSRect fr = [textField frame];
fr.size = [[textField cell] cellSizeForBounds:[_textField bounds]];
[textField setFrame:fr];
300名称未設定:2007/09/01(土) 17:23:27 ID:V20HLbnL0
>>292 >>294
回答ありがとうございます。
チャレンジしてみます。
301名称未設定:2007/09/02(日) 16:01:51 ID:1W/RX5JH0
NSTableView(NSArrayController)で最後にソートしたカラムとソート順をアプリの終了時に保持して、
次回起動時に前回の状態でソートするにはどうすればよいのでしょうか?

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

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

良い知恵がありましたらお願いします。
302名称未設定:2007/09/02(日) 17:36:24 ID:QfZEBWjg0
自分で変数もってそれをプロパティリストに保存して起動時にソートしなおすとかは?
とNSTableView使ったことないけど言ってみる
303名称未設定: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
306名称未設定:2007/09/07(金) 21:36:25 ID:EENbuIBN0
ああ、さっぱりわからないよ兄さん。
307名称未設定:2007/09/11(火) 23:43:45 ID:8nKQQObl0
NSPredicateで" カラム=='値' "というのはできるのですが、
" 関数の返り値=='1' "みたいなことは出来るのでしょうか?
よろしくお願いします。
308名称未設定:2007/09/12(水) 20:54:55 ID:0PGJU/k/0
またHMDT恒例の、エントリ無関係ツッコミが始まりましたな。
309名称未設定:2007/09/12(水) 21:50:19 ID:f0yZ2CXF0
>>307


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

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

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

310名称未設定: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名称未設定:2007/09/13(木) 10:03:32 ID:tYOZKWhg0
すいません。
ごにょごにょやってたら出来ました。
何をやったのかは分かりませんorz
312名称未設定:2007/09/14(金) 03:22:19 ID:vPRPlLH90
まず、NSScrollViewから編集したつもりになってるようだけど、
実際はNSScrollViewの内部にあるNSTableViewから操作している。
NSScrollViewはスクロールを可能にするだけの縁取り的なものに過ぎない。
だからもしリファレンス等で調べるなら、
NSScrollViewではなくNSTableViewを参照すること。

次に、保存方法と編集可能云々は別問題なハズ。
Interface BuilderでNSTableViewのインスペクタのEditableとか
いろいろいじったんじゃない?
313名称未設定:2007/09/14(金) 11:37:14 ID:gUdBg/zp0
今回発売されたLogic 8は1000p以上の翻訳済みマニュアル付いてるそうな
世界同時発売で

で、Cocoaリファレンスの翻訳はまだですか?
314名称未設定:2007/09/14(金) 13:29:15 ID:sFJVO0iJ0
>>313

Cocoa Break
315名称未設定:2007/09/14(金) 18:33:16 ID:ZI20taVc0
cocoa breakは神
316310:2007/09/14(金) 20:03:38 ID:5NLP9ylV0
>>312
NSScrollViewは勘違いでした。
どこを弄ったのか良く分からなかったので、
何度か新規でプロジェクトを作り直したりしたら動いています。
今は何と何をバインディングさせたか理解してるんで、
ちゃんと正しいことをやってるくせぃ。
317名称未設定:2007/09/14(金) 23:10:21 ID:+9nlJNpQ0
俺をAppleで働かせてくれるなら死ぬ程翻訳しまくってやってもいい
とほざく求職中の俺
318名称未設定:2007/09/17(月) 21:49:27 ID:5CFLrUlr0
日本語入力 ?フ 英語入力 をアプリの中から切り替えるには、どうすれば
よいでしょうか。

URL を入力するテキストフィールドがあって、そこが入力状態になったときに
自動的に英語入力に切り替わるようにしたいと思っています。
319名称未設定:2007/09/17(月) 22:47:37 ID:vp+tEm1m0
たぶんそういうのはCarbonの中の古いAPIを使うんじゃないかな
320名称未設定:2007/09/19(水) 12:44:09 ID:QAAMlS8c0
Core Dataで名前と住所があるとして、NSTableViewで表示させるとします。
で、カラムは名前と住所を表示させるんだけども、
住所が未入力の人は名前を赤で表示させたい。
これってどうやればいいんでしょうか。
321名称未設定: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名称未設定: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名称未設定: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名称未設定:2007/09/19(水) 16:09:53 ID:7OHnYPwj0
念のため名前カラムの Bindings の中ね。

Bind to: NSArrayController
Controller Key: arrangedObjects
Model Key Path: (住所の入っているプロパティ名)
Value Transformer: MyValueTransformer
325320: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の思想みたいなもんが見えてきた。
これは便利そうだ。
326320:2007/09/19(水) 20:36:30 ID:QAAMlS8c0
すいませんが、もう1つ。

名前カラムに新規登録する度に、
headerを押さないでも自動でソートさせるのは、
どうすればいいんでしょうか。
327名称未設定:2007/09/20(木) 01:30:49 ID:r/uaSxxr0
>タップ……指で軽く叩く操作。マウスのクリックに相当
>ダブルタップ……2回叩く操作。ダブルクリックに相当
>ドラッグ……写真を移動する時に指をずらす操作
>フリック……リストをスクロールする時に指で軽くはらう操作
>ピンチ……2本指でのつまむ操作の総称
>ピンチアウト/ピンチオープン……2本指の間を広げて拡大する時の操作
>ピンチイン/ピンチクローズ……2本指の間を縮めて縮小する時の操作
http://k-tai.impress.co.jp/cda/article/news_toppage/36312.html?ref=rss

- (void)touchFlicked:(NSEvent *)theEvent;
とかになるのかな?
328名称未設定: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名称未設定:2007/09/20(木) 11:12:40 ID:CMoMWviD0
>>326
dealloc の中で後始末もしておいて。一応、マナーとして。

[[NSNotificationCenter defaultCenter] removeObserver:self];
330名称未設定:2007/09/20(木) 22:29:15 ID:A01fsnmG0
iPhone、iPod に OS X を内蔵したおかげで、Cocoaプログラマがすごい増えてるね
331名称未設定:2007/09/20(木) 23:33:41 ID:Xhf7l+HF0
>>330
332名称未設定: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
ではタイミングが遅いように思います。
問題なく動いているようなので、結果オーライかもしれませんが。

333320: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"を見つけてくれるんでしょうか。
334320: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名称未設定:2007/09/21(金) 12:09:17 ID:T5koP5+L0
>>334
http://developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_4.html
の「クラスオブジェクトの初期化」のところを見ると、

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

とのこと。
336名称未設定:2007/09/21(金) 21:44:20 ID:sPcrBli00
NSView(のサブクラス)にテキスト(日本語)を描画したいのですが、
どうすれば良いでしょうか?
(日本語のテキストを持ったNSStringインスタンスの内容を描画することを想定)
ネット上もあるドキュメント、サンプルコードなどご教示いただければありがたいです。
337名称未設定:2007/09/21(金) 22:05:02 ID:tcpbBsLq0
教えようと思ったけどメル欄がうざいからやめた
338名称未設定:2007/09/21(金) 22:12:28 ID:sPcrBli00
>>337
お騒がせしました。
自己解決しました。

hmdtに置いてありました。
339332: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 なんですよ。

もし、バインドだけでいけるなら私も知りたいです。
341320: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名称未設定:2007/09/22(土) 09:31:10 ID:Jwo4xXMJ0
削除したのに残るplistは「板データを修復」で消えるんだけど。
343名称未設定:2007/09/22(土) 09:32:02 ID:Jwo4xXMJ0
ごめん誤爆
344名称未設定:2007/09/22(土) 18:08:59 ID:e0U06nBz0
アレイコントラーのインスペクタにそれらしいチェックがあったような。
つーかインサートするたびにソートしたらうざくね?
345名称未設定:2007/09/22(土) 21:52:36 ID:YtaGMbG00
HMDTでiPhone開発の話をしてるけど
touch用の開発環境って出てきてるのかな?
iPhone用のアプリはtouchでは動かないみたいだけど
346名称未設定:2007/09/22(土) 22:04:54 ID:V8IHJ6+c0
もうiPod touchがてにはいるようになったの?
347名称未設定:2007/09/22(土) 22:59:32 ID:YtaGMbG00
今日出荷案内が来たよ
348名称未設定: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名称未設定:2007/09/23(日) 15:30:27 ID:zABjWK1w0
たぶん根本的に間違ってるよ。
そこに条件式を書いただけでは動かない。
350348:2007/09/23(日) 16:27:42 ID:74QYrWGQ0
>>349
下記ページの一番下の図にある通りのやり方なのですが、
根本的に間違っているのはどの辺でしょうか。
http://journal.mycom.co.jp/special/2005/cocoamvc/011.html

条件式以外には何が必要ですか?
お教え願います。
351名称未設定:2007/09/23(日) 19:40:13 ID:shGaGM9l0
>>350

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

352351:2007/09/24(月) 20:34:56 ID:s/hLGoL70
>>350

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

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

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

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

>>349 は別の方でしょうか?「根本的な間違い」というのが何なのか、
まったくわからないままなのですが‥。
354351: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名称未設定: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名称未設定:2007/09/26(水) 07:47:06 ID:KqKT5P0s0
WOはもうディスコンまっしぐらじゃない?
あれ?オープンソースになったんだっけ?
358名称未設定:2007/09/26(水) 14:05:35 ID:cVuwNs9i0
Quartz 2D Extream もどうなったのやら。やっぱディスコンまっしぐらかなぁ。
359名称未設定:2007/09/26(水) 18:52:49 ID://OJRjK+0
QuartzGLになりました。
360名称未設定:2007/09/26(水) 22:58:38 ID:KOSgLSOH0
質問です。

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


361名称未設定:2007/09/26(水) 23:16:06 ID:GjSqGsk10
>>360
必要なだけNSArrayに入れてmakeObjectsPerformSelectorとか、後はNSNotificationとかかな。
362名称未設定:2007/09/27(木) 00:01:26 ID:PDbAKstz0
NSViewでまとめてsubViewsで取り出す
363名称未設定:2007/09/27(木) 00:43:29 ID:8K+2oe1e0
過去に同じようにな質問なかったか
364名称未設定: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名称未設定:2007/09/27(木) 05:24:39 ID:CM0/B6Sl0
>>365
NSLog(token); → NSLog(@"%@¥n", token);
でどうかな?
367名称未設定:2007/09/27(木) 06:07:29 ID:1zrfBisP0
NSLog(@"%@¥n", token);  にすると、
日本語フィールドも表示されるようになりました。
が、最後に余計な「A¥n」が出ます。(本当はAの上に変な記号のついた文字。これをいれると
Cocomonarが落ちるので書けない
)よくわからないのですが、エスケープされてる、
ということなのでしょうか。

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

文字コードが悪さをしているのは見当つくのですが、具体的にどこが
悪いのかはさっぱりです。ファイルを読み込むときも、NSDataに落としてから
エンコーディングを変えながらいろいろ試してみたのですが。
368名称未設定:2007/09/27(木) 06:23:48 ID:CM0/B6Sl0
>>367
ごめん、¥はバックスラッシュのつもりだった。
とにかくNSLogの日本語表示だけの問題だから気にしなくていいよ。
369名称未設定:2007/09/27(木) 11:57:33 ID:1zrfBisP0
本当だ、¥の代わりにバックスラッシュにしたら期待道通りの結果がでました。
ありがとうございました!!
370名称未設定:2007/09/27(木) 14:30:21 ID:8h5IL6rA0
巨大なテキストファイルから改行コードで区切って1行ずつ読み込んで処理したいのですが、
テキストファイルをすべて読み込んでから改行コードで区切って配列に入れるとメモリを膨大に消費してしまいます。

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

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

後は先読みバッファを作って、特定のサイズ分ファイルを読み込んで、そこから
改行までを取り出して、残った部分をムーブして空いた分だけファイルから
読み込み、これを繰り返す。
372名称未設定:2007/09/27(木) 16:12:29 ID:8h5IL6rA0
>>371
ご教授ありがとうございます。
Cのfgets()関数を使ってうまくいきました。
objective-cで出来るか探してみましたがなさそうですね。

373名称未設定:2007/09/29(土) 10:12:39 ID:zZqJ0dcb0
NSWindow 上に NSTableView がいくつか置いてあるのですが、
その TableView 間でファーストレスポンダが変わったことを
検出するには、どういった方法があるでしょうか。
374名称未設定:2007/09/29(土) 15:34:01 ID:8IGuMuZ60
文字列を正規表現で置換したいのですが、標準機能ではないのでしょうか?

>>373
テーブルビューの選択が変わったなら通知するのがあったような。
375名称未設定:2007/09/29(土) 15:40:36 ID:x13OGOM+0
Cocoaで正規表現ならOgreKitが定番かな。

ttp://www8.ocn.ne.jp/~sonoisa/OgreKit/
376名称未設定:2007/09/29(土) 15:45:51 ID:pwcm/+Ub0
>>373
acceptsFirstResponderとかその辺でどうかな。
377名称未設定:2007/09/29(土) 15:57:41 ID:E1JHDeBB0
regex.h
378373:2007/09/29(土) 16:17:02 ID:zZqJ0dcb0
>>374
どのような通知でしょうか。
調べてみてはいるのですが、見つかりません。

>>376
すみません、acceptsFirstResponder をどのように使うのでしょうか。
379名称未設定:2007/09/29(土) 16:27:27 ID:pwcm/+Ub0
>>378
ググってみて。HMDTさんのサイトがお勧め。
380名称未設定:2007/09/29(土) 18:34:35 ID:EN0/o6QM0
通知ってnotificationのことでしょ
NSTableViewのヘルプにあるよ
381373:2007/09/29(土) 22:19:34 ID:zZqJ0dcb0
>>380
具体的にどの notification のことをおっしゃられていますでしょうか。
検出したいのはTableView間の移行の話なので、TableView の notification
ではないのではないかと思うのですが。

ちなみに現在は暫定策として、NSWindowDidUpdateNotification を
使っていますが、これだと必要のないときにも notification が出るので、
パフォーマンス改善のためにもっと良い方法を探しています。
382名称未設定:2007/09/29(土) 22:57:21 ID:3B7qOXdqP
NSResponderで定義されてるbecome〜などのファーストレスポンダ関連の適当なメソッドを上書きして適当な通知を送るようにすればいいんじゃない?
383380:2007/09/29(土) 22:59:45 ID:EP9ETOnN0
>>373
ごめんね、NSResponderのnotificationだったわ
384名称未設定:2007/09/30(日) 08:23:16 ID:1+3bPOa/0
>>361
遅レス申し訳ありません。

InterfaceBuilderで置いたボタンをNSArrayに入れる方法が分かりません。
すみませんが、よろしくお願いします。
385名称未設定: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名称未設定:2007/09/30(日) 16:33:17 ID:2MyNhREa0
その直前でretain count調べてみれば?
388名称未設定:2007/09/30(日) 16:36:42 ID:ZGxp/2ZH0
エスパーがいらっしゃるまでしばらくお待ちください
389名称未設定:2007/09/30(日) 16:46:22 ID:FHx4HOJm0
retain count なんて調べてるやつはバカです
390名称未設定:2007/09/30(日) 18:25:25 ID:9ybOP3SL0
alloc+copy==release+autorelease
391名称未設定:2007/09/30(日) 18:37:41 ID:1+3bPOa/0
>>385
やってみます。
ありがとうございました。
392名称未設定:2007/09/30(日) 18:50:03 ID:hHTRsSyH0
LeopardでRIUIを採用するのかしないのか
QuartzGLも採用するのかしないのか
雰囲気的にはTigerが出る前と全く変わらないな...
393名称未設定:2007/09/30(日) 18:54:51 ID:hHTRsSyH0
誤爆に見えないかもしれないけど誤爆したみたい...orz
394名称未設定:2007/09/30(日) 20:53:05 ID:KRhNhdGX0
>>390
copy は明示的には使っていないので、数は合っている筈なのですが、
もう少し勉強してみます。
395名称未設定:2007/09/30(日) 20:59:28 ID:RmZQ6wEv0
クラスメソッドの中で一時的に作成した配列や辞書は、
メソッドの最後でまめにリリースしたほうが良いのでしょうか?
それとも勝手にリリースしてくれるのでしょうか?

アプリケーションの使用メモリが増えてきてどうすれば良いのかご教授下さい。
396名称未設定: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名称未設定:2007/09/30(日) 21:24:04 ID:J3lW9Bur0
auto の部分は autorelease の誤りです
398名称未設定:2007/09/30(日) 21:38:11 ID:KRhNhdGX0
copyを使ってなければ、allocの数とrelease 又はautoreleaseの
数を一致させればいいのですよね。
でもpool releaseでコケる。う〜む。
399名称未設定: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名称未設定:2007/09/30(日) 23:13:19 ID:J3lW9Bur0
とりあえずretainCountの仕組みを

・そのpool releaseをコメントアウトするとコケなくなるのか?
401名称未設定:2007/09/30(日) 23:14:22 ID:/8gv9Izg0
>>399
GCが導入されると、違いは無くなるのですかね?。
402名称未設定: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名称未設定:2007/09/30(日) 23:17:41 ID:J3lW9Bur0
>>401
さあ。GCの仕組みをどう実装してるかによるんでしょうね。
404名称未設定:2007/09/30(日) 23:23:15 ID:KRhNhdGX0
>>402
>また、メインスレッドでも、forやwhile文などのループ内でautoreleaseを何度も呼び出す場合は、
>release予約の(つまりメモリ解放されない)インスタンスが増えるので、ループ内で
>NSAutoreleasePoolの作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。
>

どうもこの辺が怪しい気がしてきました。
405名称未設定: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名称未設定: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名称未設定:2007/10/01(月) 03:20:31 ID:4GJ4e1sj0
Mail.appの設定じゃないかな。
smtp serverがローカルで動いている必要はないはず。
409名称未設定:2007/10/01(月) 11:50:57 ID:oEXnpz/k0
オーナーシップデバッグ。
これ基本。
http://developer.apple.com/jp/technotes/tn2124.html
NSZombieEnabled='YES'
環境変数なので、 「実行可能ファイル環境」で設定のこと。
410名称未設定:2007/10/01(月) 13:18:53 ID:jb1YsKc80
>>408
はじめはそう思ってMail.appの環境設定の項目を調べてみたのですが、
どうもそれらしいものが見当たりません。システム環境設定も同様でした。
411名称未設定:2007/10/01(月) 13:20:27 ID:jb1YsKc80
>>409
参考にさせていただきます。
ありがとうございます。
412名称未設定:2007/10/01(月) 15:30:29 ID:v2NRyQLs0
>>410
[NSMailDelivery hasDeliveryClassBeenConfigured] は、
「Mail.appでメールが出せる設定が出来ているかどうか」の意味っぽいけど?
できてる?
たぶんMail.appのアカウント設定の情報を参照してSMTPサーバにメールを
自前で投げるんだと思う。
413名称未設定:2007/10/01(月) 23:44:37 ID:jb1YsKc80
>>412
>「Mail.appでメールが出せる設定が出来ているかどうか」の意味っぽいけど?
>できてる?

Mail.appは毎日のように使っているので、そういう意味では問題筈です。
でも、「設定」の意味がよくわからないんですよね、海外のサイトを見ても。
414名称未設定:2007/10/02(火) 07:18:33 ID:4wWs2Gwh0
スクリーンショットを撮るアプリケーションを作っています。

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

何か解決策があれば、教えていただけるとありがたいです。
よろしくお願いします。
415名称未設定:2007/10/02(火) 07:43:14 ID:HqqJ+v970
>>414
例えば純正である
/アプリケーション/ユーティリティ/グラブ.app
の場合はタイマー機能で任意のアプリのスクリーンショットを取ることを可能にしている。
416HK:2007/10/02(火) 19:13:50 ID:zksrfeR70
>>414
http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/index.html
のNSUIElementやLSBackgroundOnlyその他を参照。
日本語訳はポッチンルームにあります。
自作日本語入力メソッドを作りましたが、
サーバーアプリケーションはこのへんを設定して裏にまわります。
裏から変換候補ウインドウを他アプリが前面のまま表示できます。
417名称未設定:2007/10/02(火) 19:51:17 ID:t7c+rGGO0
>>415,416
的確に教えていただき感謝です。ありがとうございました。
418名称未設定:2007/10/05(金) 19:46:57 ID:gAtx49120
例えば引数のメッセージやアイコンからメッセージダイアログを出すクラスを作って
いろんなクラスからそれを利用したい場合、

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

どちらの方法が良いのでしょうか。
419名称未設定:2007/10/05(金) 20:46:57 ID:qqy/rlKl0
>>418
NSAlertをお勧めします。
自作する場合もそれに準じるのが良いと思います。
420名称未設定:2007/10/05(金) 21:20:03 ID:uw5Y856q0
>>419
最初は各クラスで必要な箇所でNSAlertをだしていたんですが、
かなり頻繁にいろんな箇所で使うのでまとめたいなあと。
メッセージ、表示ボタンもケースによってバラバラですし。

なので、共通で引数で処理するようまとめてみたんですが。
421名称未設定:2007/10/05(金) 23:35:57 ID:qqy/rlKl0
>>420
素直にNSAlertのカスタムクラスかカテゴリはどうですか?
422名称未設定:2007/10/07(日) 22:01:11 ID:3CacK9uM0
423名称未設定:2007/10/07(日) 23:36:08 ID:jl2bDT9K0
無料のときからずっと使っているとこの十月で更新になるからな
424名称未設定:2007/10/08(月) 15:05:10 ID:pbJo8Zn/0
>>421
アドバイスありがとうございます。
カテゴリなんてのもあるんですね。勉強してみます。
425名称未設定:2007/10/11(木) 09:29:49 ID:nscIn2lg0
CIImageのオブジェクトなんですけど、
ビットマップの上と下に余白部分を作りたいんですよね。
バックグラウンドになるビットマップを作って、
そこにCIFilterのCompositing Filtersで合成しようと思い立ったんですけれど、
CIFilterが最初から持ってるエフェクトで座標を指定して合成するのって見当たらないんです。
で、なにかいい方法があればお教え願いたいんですが。。
426名称未設定:2007/10/11(木) 15:53:07 ID:+RNbQCmY0
CIAffineTransform
427425:2007/10/11(木) 16:12:36 ID:nscIn2lg0
>>426さん
■■■■■余白
□□□□□もともとのビットマップ
□□□□□
■■■■■余白
こうしたいのですが、アフィン変換でそんなことできるんですか?
428名称未設定:2007/10/11(木) 16:33:26 ID:ToYfcU0y0
>>427
ググればすぐ分かる事を...
ヒント貰ったんだから、あとは自分で調べなよ。
429425:2007/10/11(木) 17:17:47 ID:nscIn2lg0
CIFIterのCIAffineTransformのところはドキュメントを読んでたんですけれど、
いまいちピンと来ないんですよね・・・。
Google検索してもこれと言って情報も無いし。
拡大してoutputImageしてからもう一回inputImageして縮小するってことかな。
もうちょっと調べてみます。
430名称未設定:2007/10/11(木) 18:21:54 ID:Q0Oj/uoh0
原点...
431名称未設定:2007/10/11(木) 19:05:53 ID:ToYfcU0y0
>>429
アップルのサイトに全てありますよ。
座標移動の NSAffineTransform は、
[[NSAffineTransform transform] translateXBy:0 yBy:10];
みたいな感じで作れるよ。
あとはこれを inputTransform に設定するだけじゃないですか。
432429:2007/10/11(木) 19:11:36 ID:ToYfcU0y0
あれ、これって変換した新しいCIImageを作るだけですね。
ごめんなさい。
433432:2007/10/11(木) 19:59:57 ID:ToYfcU0y0
名前欄間違えました。
ちょっと調べてみたけどCIFilterでは無理っぽい。
面倒だけど自前でやるしかないですね。
434名称未設定:2007/10/11(木) 20:05:06 ID:RqBWEm1l0
WindowかViewをフェードアウトして消えてくように
したいんですが、どのようにやるといいでしょうか。
自力で透明度いじるしかありませんか?
OSX10.4です。
435名称未設定:2007/10/11(木) 20:21:29 ID:ukinxETG0
黒で塗りつぶした上にCIImageの座標を適当にずらして描画すればんじゃないのか?
436425:2007/10/12(金) 09:29:16 ID:XnHNJR3q0
>>433
そうなんですよね。CIFilterが最初から持ってるエフェクトだと、
合成時に座標を指定する事が出来ないんですよね。
NSOpenGLView側で描画位置を変えるって言う手もあるんでしょうけれど、
それだと背景色を指定できないし。
>>435
NSGraphicsContextとNSBezierPathでビットマップを作って、そこに貼付けるってやり方でやってるんですが、
カスタムのCIFilterを作るしか無いのかなと思って来てます。
437名称未設定:2007/10/12(金) 09:29:45 ID:CM/NoWBY0
>>434
標準的なUIにはない挙動だから(多分)、自分で何かするしかないのでは。
10.4ならNSViewAnimationを使うのが一般的&楽かな。
より原始的(?)に、タイマーで透明度を徐々に変化させていってもできる。
438425:2007/10/12(金) 09:30:20 ID:XnHNJR3q0
あれ?ひょっとしてアフィン変換した元画像をビットマップに合成すればいいのかな?
ちょっとやってみます。
439425:2007/10/12(金) 16:49:48 ID:XnHNJR3q0
やってみたところうまくいってるみたいです。
ありがとうございました。
440名称未設定:2007/10/12(金) 16:53:45 ID:HFBiEdQm0
なんという回り道・・・
441名称未設定:2007/10/13(土) 09:03:43 ID:hg0jttDu0
各種ファイルをNSFileWrapperを使ってシリアライズ・比較・更新等するような
ソフトを作ろうと思って少し試しているんですが、

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

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

こういう場合、データのシリアライズ化とファイル内容の同一性って、どうやって
両立したらいいでしょうか... もし同一性もチェックできるシリアライズ化
なんてものが存在するとうれしいのですが。
442名称未設定:2007/10/13(土) 11:02:54 ID:XvtdC7UH0
http://hmdt.jp/archives/2006_07.html#sec2006071301

こんなアプリが増えていますけど、みんな似たような事してるんですかね?。
最近の増え方を見ていると、もっと楽な方法がありそうな気がするのですが。
443名称未設定:2007/10/13(土) 21:38:57 ID:eZww9H1A0
Vistaが「遅い」と感じませんか?
http://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名称未設定:2007/10/15(月) 08:47:51 ID:RJEHHK9w0
うーん、ApplicationDidFinishLaunchingノティフィケーションを実装しても
何故か呼び出してくれない。サンプルのsketchを見るとセンターに登録せずに
使えてるようなんだが・・・
445名称未設定:2007/10/15(月) 08:57:43 ID:w9VArlJf0
delegate にする
446名称未設定:2007/10/15(月) 09:23:49 ID:RJEHHK9w0
>>445
Notificationじゃなかったのか。ありがとう。
おかげで起動時にパレットを表示できるようになったよ。
447名称未設定:2007/10/16(火) 01:50:24 ID:RhpguY+z0
age
448名称未設定:2007/10/16(火) 23:56:51 ID:UHgbhQAb0
Leopardは26日発売か。早くADCのサイトでLeopardのドキュメントが読めるよ
うになってくれないかなぁ。Obj-C 2.0とCore Animationの詳細が知りたくてた
まらん。
449名称未設定:2007/10/17(水) 13:10:54 ID:vy+i57Fb0
$500で1年前から読めるけど。
450名称未設定:2007/10/17(水) 15:12:35 ID:9JlNZqhL0
趣味で読むには高過ぎる値段だ。
451名称未設定:2007/10/17(水) 15:34:38 ID:bw4gG9tu0
でもLeopard買わずに済むよ。MacProを買うんなら元取れるし。
452名称未設定:2007/10/17(水) 20:37:50 ID:1AjA4OVd0
俺の用途から言って趣味でMacProなんて宝の持ち腐れも良いとこだし。

まあ26日には読めるんだからそれまで辛抱だろうな。
453名称未設定:2007/10/17(水) 21:22:18 ID:UrqKimq/0
454名称未設定:2007/10/18(木) 01:06:04 ID:mkmoS9NR0
XcodeのSCM機能は貧弱と聞いたのだけれども、3.0で改善されているのかな
ttp://doni-dog.blogspot.com/2007/06/xcode.html
455名称未設定:2007/10/18(木) 01:17:10 ID:slHsJ97C0
>>454
そのリンクの奴、ちゃんと使えてるとは思えんな。
SCMが特許対策というのも意味わからん。
456名称未設定:2007/10/18(木) 02:23:44 ID:Mr8A9HPs0
svnadminなんてXCodeに必要な機能じゃないし、TimeMachineなんてありえないわ。
457名称未設定:2007/10/18(木) 06:35:32 ID:tLRRr8tY0
きっと、単に変更履歴を追いかけることが出来るから、後で
特許関連で訴えられたときに証拠として採用するように訴える
ことが出来るだろ、てことじゃないのかな。

採用されるかどうかは分からないが。
458名称未設定:2007/10/18(木) 09:02:33 ID:fqG2TSy+0
オープンソース等で公開されているものなら証拠にはなるかもしれないけど
そうでないなら信頼性はまったくないな。
459名称未設定:2007/10/18(木) 10:54:31 ID:Y0mjkOTf0
まぁ俺は、リビジョン管理システムがないのはやはり欠点と思う。

開発ツールなんだしさ。定期的にスナップショットを保持出来る
ような仕組みがあるだけでも大分違うし。
460名称未設定:2007/10/18(木) 20:27:18 ID:6hta7bjM0
http://www.apple.com/jp/macosx/features/300.html#xcode3

Xcode 3.0

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

失敗を恐れず、心ゆくまでテストしましょう。プロジェクトのすべてのファイルを、いつでも好きな時に記録しておけます。万一の時もこれで安心。プロジェクトをいつでも元の状態に戻せるので、自信を持ってテストできます。
461名称未設定:2007/10/18(木) 22:15:13 ID:lA7sYrRH0
Xcode3.0楽しみだね。早くこいこいGC。
462名称未設定:2007/10/19(金) 12:34:51 ID:VK3fEPzF0
>>460
それってsvnベース?
変更点を見比べることができるようなインターフェースが欲しい。
463名称未設定:2007/10/19(金) 13:02:13 ID:GQjRZD8/0
今でもあるけど。
464名称未設定:2007/10/19(金) 13:06:34 ID:z7q4y0U10
>>463
shift-jis 以外の日本語で落ちなければ、今のままでいい。
変換すればdiffは見れるけど、マージできないし。
465名称未設定: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;
467465:2007/10/19(金) 17:04:47 ID:uOW40gYR0
>466
ありがとう
awakeFromFetchでできました
468名称未設定:2007/10/19(金) 19:17:19 ID:m+Row12Z0
>>462
普通に考えるとTime Machineじゃね?
469名称未設定:2007/10/19(金) 20:09:43 ID:k7hQT15w0
現在使用しているシステムの言語を取得するには
どうすればいいのでしょうか?
470名称未設定:2007/10/19(金) 21:06:05 ID:XaYlxLt20
echo $LANG
defaults read NSGlobalDomain AppleLanguages

471469:2007/10/19(金) 22:49:11 ID:k7hQT15w0
>>470
どうもです、以下の方法でいけました。

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];

http://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名称未設定: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名称未設定:2007/10/20(土) 03:17:55 ID:nttpT0GF0
Appleのドキュメントや荻原本(p306)にあるように、

NSCalendarDate *calendarDate =
[[NSCalendarDate alloc] initWithTimeIntervalSinceReferenceDate:uploadedTime];
[calendarDate descriptionWithLocale:
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];

こんな感じでもやってみましたが、ユーザデフォルトから作った辞書のなかに、
NSShortWeekDayNameArrayやNSWeekDayNameArrayといったキーがないので、
やはり日本語が出てくれません。
475名称未設定:2007/10/20(土) 05:52:17 ID:pIwCUrUa0
LANGじゃ機能不足だから。
476名称未設定:2007/10/20(土) 09:31:19 ID:chy8q2CK0
http://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名称未設定:2007/10/20(土) 10:08:04 ID:A3g+yh3Z0
見るべきはこの辺じゃないの?
http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFLocales/index.html
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/Reference/Reference.html

CocoaはLANG なんて使ってないし。
プログラム内で自分でNSLocaleの初期化時に使えばいいんでないかな?

どうせ聞いてくるから先に。
getenv(3)
478名称未設定:2007/10/20(土) 12:22:05 ID:nttpT0GF0
みなさんありがとうございます。これから仕事なので、
あとでもっとしっかり読みますが、いま、ざっと読んだかぎりでは、

環境変数で挙動を変えるのではなく、コード内でユーザの設定を読み取る必要があるという
ことですね。
すると、やはり、その読み取ったロケールに従って、locale dictinary
を作り(あるいはこれも取得できるのかもしれませんが)、それを引数に指定して
withLocale系のメソッドを呼ぶ、ということになりそうです、いまの理解では。
少なくても10.3においては。
479名称未設定: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名称未設定: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名称未設定:2007/10/20(土) 20:44:18 ID:C5KB0rGs0
初期化してやらないといけないのでは
482名称未設定: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名称未設定:2007/10/20(土) 23:55:06 ID:i5VOuciv0
ウィンドウの外観をmail.appみたくスッキリした明るいツルペタにしたいのですが、
どこかリソースを配布しているところはありませんでしょうか?

それらしいアプリのリソースフォルダを漁ってもなかなか見つからなくて。
485名称未設定:2007/10/21(日) 00:20:37 ID:AuZVtDw10
NSUnifiedTitleAndToolbarWindowMask
486名称未設定:2007/10/21(日) 12:37:24 ID:2g9tmK/v0
LeopardのObjectiveCのランタイムってオープンソースだよね?
Tigerにも入れられないのかなぁ

ところで、/System/Library/Frameworksの中身って、
アプリケーションバンドルに入れて配布していいの?
配布できるのなら、Tigerでも動くGCアプリが組めるかもしれないね
487名称未設定:2007/10/21(日) 23:54:28 ID:uO+uiivY0
>>479
此方でも確認できました。

>>474で駄目だったのは、一言で云えば勘違いです。
デフォルトフォーマットだと曜日が出力されないため、漢字が表れなかっただけでした。
失礼しました。

皆さんのご教示にヒントを得て試した限りでは、
>>478の内容で間違いなさそうです。

つまり、コード内でロケールを取得し、それに従った辞書を使う、ということですね。
そして、辞書はユーザデフォルトが使えます。これはAppleのドキュメントや荻原本や
>>479のとおりです。

ここまでで当面の障害はクリアできました。しかし、いまだに>>472が謎です。
%@がdescriptionWithLocale:を呼ぶとあるのですが、その場合引数はどこからくるのかな、
と思うわけです。nilだとしたら単なるdescriptionを呼ぶのと差が出ないし。
プログラミングを進めていくうえでこの謎が障害ではないのですが、もし解決するとスッキリ
するので書いてみました。

レスいただいた皆さん、ありがとうございました。


488名称未設定:2007/10/22(月) 15:12:29 ID:Gv93rxrK0
>>487
>%@がdescriptionWithLocale:を呼ぶとあるのですが、その場合引数はどこからくるのかな、
>と思うわけです。nilだとしたら単なるdescriptionを呼ぶのと差が出ないし。

NSLog() では locale 部分は常に nil が指定されているっぽい(挙動より推定)。
何らかの方法で別の locale を指定できるかは不明。ただ NSCalendarDate 側で
setDateFormat: 等により日付の書式を変更することは可能。

NSString の format を扱うメソッドでは locale を指定できる。
489名称未設定:2007/10/23(火) 11:09:44 ID:xEB3AVEJ0
490名称未設定:2007/10/23(火) 12:43:14 ID:hf1e1yJr0
http://pc11.2ch.net/test/read.cgi/mac/1161656142/899
調べたらいろいろあるなぁ
491名称未設定:2007/10/24(水) 19:31:02 ID:7aPURO+G0
ややこしい質問ですみません。

メニューアイテムのサブクラスを作り、アイテムを動的に変化させるサブメニューを追加ました。

メニューアイテムを選択した時にサブメニューの内容を再表示させるために
・親メニューのデリゲートをメニューアイテムにセット。
・メニューアイテムのサブクラスでmenuNeedsUpdateを記述し、サブメニューを再作成する処理を記述。

この場合、親メニューに同じような動的に変化するメニューアイテムを複数追加すると、
どれかひとつだけしかサブメニューが展開されません。

原因は親メニューのデリゲートを個々のメニューアイテムのサブクラスで取り合ってるからだと思いますが、
うまく全てのサブメニューを動かす方法はありませんでしょうか。
492名称未設定:2007/10/24(水) 20:03:08 ID:sR3ireTF0
単にvalidateMenuItem:で変化させるのじゃダメなの?
493名称未設定:2007/10/24(水) 23:05:29 ID:stlIlKGC0
>>492
ご指摘ありがとうございます。なんとか自己解決しました。
サブクラスのインスタンス変数にNSMenu *aMenuを作って、最初に[aMenu setDelegate: self ]で
サブクラスに記述したmenuNeedsUpdateが効くようになりました。
あとは毎回aMenuのアイテムを作り替えれば出来ました。
494名称未設定:2007/10/27(土) 10:17:12 ID:3Nec+9va0
ウインドウにボタンとラベルだけを配置した画面を
Leopardのテクスチャウインドウにしたら......カッコ悪るすぎる!!
495名称未設定:2007/10/27(土) 11:52:47 ID:jEECVdr70
age
496名称未設定:2007/10/27(土) 14:15:46 ID:3Nec+9va0
Recessed Buttonのフォーカスリングがバグっぽいんだけど俺だけ?
497名称未設定:2007/10/27(土) 17:07:06 ID:iaL/K9DY0
メタル指定のnibウィンドウ、Leopardで起動すると
もっと暗いソリッドな灰色になっちゃう
激しく見づらいです・・・
498名称未設定:2007/10/27(土) 18:36:18 ID:C2JoQvU90
>>497
だよねー。テキストの色を白くするか黒くするか迷うくらいに微妙な色使いだよ
499名称未設定:2007/10/27(土) 21:08:55 ID:Og+Fksq40
まだタイガーなんですけどメタルウインドウは
Leopardではツルペタになるんですか?
500名称未設定:2007/10/27(土) 22:08:37 ID:Bh3IlNe10
メタルなウィンドウにテキストを書く場合は、
テキストに下方向に白色のドロップシャドウを落とす
(そうすると彫り込んであるように見える)のが筋だね。

Leopardのソフトはほとんどそうなってる。
501名称未設定:2007/10/27(土) 22:08:41 ID:C2JoQvU90
なるんですよorz
それがかっこわるいんですよorz
502名称未設定:2007/10/27(土) 22:57:58 ID:kLyG3aM00
タイガーで問題なかった俺のコード
レパドンでは動かねぇ‥ orz
503名称未設定:2007/10/27(土) 23:10:42 ID:ucyY83x00
俺のは全部動いたお \(^o^)/
504名称未設定:2007/10/28(日) 00:31:30 ID:74uJkHwy0
NSMenu のサブクラスを作り、
numberOfItems の中で [self setDelegate:hoge] を(問答無用に)実行してた
Tiger では問題なかったけど、Leopard では setDelegate が numberOfItems を呼ぶので
無限ループになってしまった。
505名称未設定:2007/10/28(日) 07:29:38 ID:TbbSGqL60
NSString lineRangeForRange:
について質問です。これは、改行コードを種別に関わらず含まない
NSRangeを返すと考えてよいのでしょうか?
例えば、CRLF、LF、CRのいずれも取り除いた(改行コードをふく
まない)1行の範囲を取り出してくれるということでしょうか?

ずっと自前で実装してたので・・・orz。
506名称未設定: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名称未設定:2007/10/28(日) 17:56:23 ID:VmKk9DlI0
ですね。
特に新IBは、自分のクラスをインスタンスする方法が解らなくてイライラしたw
509名称未設定:2007/10/28(日) 20:18:21 ID:XloRMi6L0
>>506
レスさんきゅです。

結局安直な手法で逃げました。
[NSString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];

これだとマルチラインには対応できないですけど、とりあえず
は使えそうなので・・・
510名称未設定:2007/10/29(月) 00:56:39 ID:24BH5rD00
>>509
安直と言うか、よくわからんがやりたいのはそれなのか。
ちなみにwhitespace(空白)もトリムされるがいいのかな。
511名称未設定:2007/10/29(月) 22:30:49 ID:ZYf1cvjU0
GCすげえ!!
俺のアプリのメモリ消費量が半分になったorz
512名称未設定:2007/10/29(月) 22:40:21 ID:WF5b1sUq0
それはGCが凄いと言うか・・・
513名称未設定:2007/10/29(月) 22:58:14 ID:3xNL/5J/0
……まあ、orz付けてるのに免じて
少なくともAppleは>>511に福音を齎したと言う事でひとつ。
514名称未設定: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
516434:2007/10/30(火) 07:10:03 ID:kfmeCiZ40
>>437
ずいぶん経ちましたが、NSViewAnimationでいけました。
517名称未設定:2007/10/30(火) 10:38:54 ID:IZLIO/QN0
1.0で書かれたコードでGC有効にするのって、特に何もしなくても良いの?
518名称未設定:2007/10/30(火) 10:53:40 ID:uwVxnpmO0
deallocの内容によるんでねえの。
519名称未設定:2007/10/31(水) 02:16:17 ID:SyaOS2Kn0
萩原本の検証と結論が済んだLeopard対応版を待ってしまう俺はヘタレ
520名称未設定:2007/10/31(水) 19:24:36 ID:AmyfOyxk0
521名称未設定:2007/10/31(水) 23:15:48 ID:73MMG/Dl0
今HMDTを見て知ったんだけどWooden shipsの人が亡くなったんだね。
昔自作のソフトを載っけてもらったことがあるんだよなあ
49歳なんてまだ若いのに残念
522名称未設定:2007/11/01(木) 00:33:29 ID:25EKZp+g0
OS X使いとしてはitojun氏が無くなったのもかなり残念。37歳、若過ぎる…。
523名称未設定: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名称未設定:2007/11/01(木) 11:29:01 ID:XHMm/9gV0
Fontの属性を変更するのでは無くて、2行目の位置を自前で計算してだせば良いのでは?
525名称未設定:2007/11/01(木) 15:07:06 ID:m0Ek7Tcl0
>>524
Fontはほぼgetterしか無いからそうするしかないのかな
33がline spacingっぽからset 0とできればスマートなのだけど
526名称未設定:2007/11/01(木) 19:21:45 ID:XHMm/9gV0
Fontが編集出来たら原理的に駄目だろう。俺んちのosakaフォントとお前のうちのosakaフォントの
見た目が違ったら駄目じゃん。
うまい方法hじゃ
527名称未設定: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名称未設定:2007/11/02(金) 18:12:22 ID:B5h15Yrn0
Leopard で動かない報告が多く出ているのを考えると、拡張性が高い Objective-C
が裏目に出ているのかな。つうか、発売が延期になったくせに対応できてない商用ソフト多数
ってところに、Mac の力の弱さを感じる。
530名称未設定:2007/11/02(金) 20:41:01 ID:0Xa0RRTf0
そもそも動かなくなるってのはなんで?
クラスやメソッド自体がなくなるとか?
531名称未設定:2007/11/02(金) 20:52:31 ID:tSiOpZEw0
Tigerの時に廃止を予告されたものは数多くあるが、互換性はまだあるだろ。
Carbonの古いAPIですらまだ動くぞ。
532名称未設定:2007/11/02(金) 20:53:11 ID:PjiJdx3J0
>>529
だって発売日まで最終版が手に入らなかったわけだから仕方ないでしょう
バグなのか仕様なのかはっきりしない部分も沢山あった

>>530
メソッドがなくなるのもあるし、10.5から非推奨関数になったものは正常に動かない場合もある
533名称未設定:2007/11/02(金) 21:14:18 ID:/uepB7fw0
>>532
非推奨の古いAPIの方が変にいじらない分ちゃんと動くよ。
出来たばかりのAPIとか内部構造を改良した(つもり)のAPIの方が
動作が変わったり、バグが出たり消えたりして動かないw
534名称未設定:2007/11/02(金) 21:58:02 ID:EINr1KLa0
ていうかObjCランタイム総入れ替えしてるわけだから
何があってもおかしくないでしょ。
535名称未設定:2007/11/03(土) 16:19:10 ID:fenLA4fy0
Xcode2.5が出ていますが、これはタイガー用ということでしょうか?
現在2.4.2なのですが2.5にあげるメリットはありますでしょうか?
(Leopardでも動くようになるとか)
536名称未設定:2007/11/03(土) 16:50:48 ID:x0ahP+Zd0
・Xcode 2.4.2って存在してたっけ?

せめてこのページくらいは読んでからにしてくれ。
http://developer.apple.com/tools/download/
537名称未設定:2007/11/03(土) 23:27:00 ID:NGuLosbV0
ありがとうございます。
Xcodeは2.4.1でした、うろ覚えだったもんで。

英語にちょっと弱いんですが、2.5にするとLeopardでも動く
ということでしょうか。
538480:2007/11/04(日) 00:25:35 ID:RpfIewzZ0
亀レスで恐縮です。
>>480についてなんですが、

@implementation クラス名 のあとにstaticで静的変数を宣言しました。
そして、その変数に値を代入するメソッドを実行したのち、
そのクラスの別のメソッドから戻り値としてその変数の値を
返す、ということをやってみました。

ところが、NSLogでログ出力してみると、変数に値を代入する
メソッドにおいて、値を代入した直後に出力したログには、正しく
代入した値が表示されるのですが、別のメソッドでNSLogで
ログ出力してみると、nill がかえってきてしまいました。

デッバガで見ても、やはり静的変数の値が、値を代入したメソッドを
抜けると、保持されていないみたいです。

静的変数は、宣言したクラス内では値が保持され、どのメソッドから
でも値を入れたり、呼び出したり出来るものと認識しているのですが、
何からおかしい部分はあるでしょうか?
よろしくお願いします。
539名称未設定:2007/11/04(日) 01:21:37 ID:wjfj7/Ph0
その現象が再現する最低限のソースくらい出してくれ。
540480: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名称未設定: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名称未設定: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名称未設定:2007/11/04(日) 02:27:45 ID:hRwgY5Fp0
setter と getter はスタイルだけの問題じゃなくて、
Cocoa binding につかえるかとかにかかわってくるので、
しきたりに従っておいたほうがいいですよ
544名称未設定: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名称未設定: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名称未設定: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名称未設定:2007/11/04(日) 08:33:21 ID:TZN/ptPy0
>>544
あとで自分でreleaseすれば問題ないじゃんとか思ったのはオレだけでいい
550名称未設定:2007/11/04(日) 09:00:12 ID:EtU+Y3fk0
>>548
あなたが立てたスレッドAの中で mydl を生成したのなら、
そのスレッドAに対して delegate のメッセージが送られますよ、と。

だから、メインスレッドで delegate メソッドを受け取ろうとしてもダメ。

勉強し始めで NSThread と格闘する必要はあまりないような気がします。
やりたかったことは、NSThread で別スレッド立てなくても十分
出来ると思います。NSTimer で一定間隔で NSURLDownload を作って
やればいいと思う。
551名称未設定:2007/11/04(日) 09:08:28 ID:mdbrqZtH0
>>549
甘い。渡された array が arrayA とたまたま同じだった場合に
retain count が増えてしまって開放されなくなる。

まあ static object 一個ぐらいいい気もしますが。
552540:2007/11/04(日) 09:09:37 ID:hK/+lBWK0
>>541-543
ご指摘ありがとうございました。
release や retain に全く気を配ってなかったので、
そのへんを勉強し直したいと思います。

コーディングスタイルについても、アップルのドキュメントが
あったので、参考にしたいと思います。

また何かありましたらよろしくお願いします。
553名称未設定:2007/11/04(日) 09:35:10 ID:mdbrqZtH0
まあ Leopard で ガーベジコレクタがついたので、
retain/release はあんまり気にしなくてもいいんではないかと思うけど。
554名称未設定: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名称未設定: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名称未設定:2007/11/04(日) 14:41:54 ID:LrVqL1O30
>>554
ぱっとドキュメント流しただけでまだ勉強中なんだが、GCにするとRelease/Retain
で書いたコードは既出の通りRelease/Retainが無視されるようになる。ただし
-deallocも呼び出されなくなるようなので、dealloc内で解放以外の処理(ノー
ティフィケーションの登録削除とか)してると修正いるんじゃない?
559名称未設定: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名称未設定:2007/11/04(日) 19:31:56 ID:F4mUKxhG0
>>560
ググると参考になりそうなソースが見つかるよ。
562名称未設定:2007/11/04(日) 21:27:53 ID:m+9mmSo10
>>561
ググっても、ゲイツに聞いても見つけられませんでした。
教えていただけないでしょうか。

スポットライトで更新されたファイルをみてもそれらしいのは、見つけられませんでした。
563名称未設定:2007/11/04(日) 21:56:20 ID:eMpGE3Ul0
質問です。
IB で作った GUI のボタンのクリックによって呼び出される
メソッドは、IB でアクションとして登録したメソッドでなければ
いけないのでしょうか。

GUI のボタンクリックから直接クラスメソッドなどを呼び出せれば、
便利だと思うのですが...

よろしくお願いします。
564名称未設定:2007/11/04(日) 21:57:36 ID:g1odPZrS0
>>560
リファレンスのListing 2見る限りそのメソッドは、チェックボックスの表示と
チェック結果の取得ができるだけで、チェック結果は自分でuser defaultsなどに
保存する必要があるように読めます。
その保存結果を消せばよいのではないでしょうか。
565名称未設定:2007/11/04(日) 22:11:04 ID:7bDqXoXS0
なんでこんなところにVB厨が?
566名称未設定:2007/11/04(日) 23:07:40 ID:hkBkZacr0
>>563
便利感がわかりません。
567名称未設定:2007/11/04(日) 23:16:31 ID:+MPnTuBD0
>>563
Visual Studioでオナニーしてきてください。
568名称未設定:2007/11/04(日) 23:21:01 ID:m+9mmSo10
>>564
ありがとうございます。
小さいプロジェクトでやってみましたら、たしかに保存されません。

しかし、保存されている(と言うかチェック後アラートが出なくなった)プロジェクトもあります。
ユーザデフォルトは使っていますが、自分で保存はしてません...、何か別の要因ですかね。
569名称未設定:2007/11/05(月) 00:03:37 ID:cWmVqLLf0
>>563
引数はどうするんだい?
570563:2007/11/05(月) 00:44:49 ID:vL57EKa+0
自分はVisualStudio など使った事がないので、どうして
そのように言われるのか全く分からないのですが...

たとえば、ボタンをクリックすると引数のいらないシンプルな
メソッドhogeを実行させたい場合、ボタンから受け付ける
IBAction のメソッドは、単にhogeにメッセージを投げるという
メソッドを実装するということになります。そうであれば、ワンクッション
おかずに直接一般的なメソッドをボタンから呼べれば便利かと
思ったのですが。

>>566 の便利感が分からないというのは、このようなことで面倒
臭がってる感覚がおかしいということでしょうか?

>>567のレスは、このような考え方が Cocoa の考え方から逸脱
しているという意味ですか?
571名称未設定:2007/11/05(月) 00:53:26 ID:cxjLp4Oj0
>>570
>>>567のレスは、このような考え方が Cocoa の考え方から逸脱
>しているという意味ですか?
MVCの考え方からするとあまりよろしくないんじゃないかな
572名称未設定:2007/11/05(月) 01:17:22 ID:eRl6Ul/x0
>>570
それができたとしても、結局ボタンが押されたときに
どのクラスの
どのクラスメソッドを
動かすか指定しないといけないよね、
それと、アクションをctrl-クリックでつなぐのと
面倒くささは似たり寄ったりだとおもうんだけど?
573名称未設定:2007/11/05(月) 02:46:33 ID:Jwl3DmWu0
>>570
わざわざ引数無しのメソッドに投げる意味が分かりません。
引数を無視するほうがシンプルでしょうが。
574名称未設定: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名称未設定:2007/11/05(月) 08:01:47 ID:hf81cxz/0
○○ができた方が便利、なんて言い出したらキリないよ

だから、最低限アクションの発生もとがわかる様に
senderを引数とするメソッドを呼ぶ様にしているだけ

576名称未設定:2007/11/05(月) 09:55:21 ID:8hT6idG50

送り元を特定する処理を書かなくてすむので楽。

 senderがViewの場合、Viewに対して問い合わせが容易。
 senderがControllerの場合、Controllerに対して問い合わせが容易。

結局senderがある理由って、MVC/KVCを実装するのに便利っていう感じ?
577名称未設定:2007/11/05(月) 17:00:38 ID:IpQGnVb20
KVCは関係ないわな。
あと、.NETでもアクションに対してsender(とevent)は送られる。
578名称未設定:2007/11/05(月) 23:20:43 ID:bq62hcmK0
ネットからデータをダウンロードするたぐいのアプリを作ろうとしてるのですが、
マシンがネットにつながっているかどうかを調べるには、どうすれば良いでしょうか。
579名称未設定:2007/11/06(火) 00:01:37 ID:dDZ7LoMrO
人間の貴方ならどうやって確認しますか?

ブラウザで繋いでみる
ピンで応答を見る
ルーターにグローバルアドレスが振られているか確認する

580570:2007/11/06(火) 00:43:54 ID:EfkD9Hx20
>>574
まさに、そう考えていたわけです。

確かに、MVCの観点ではあまりよくないという事で、納得しました。
レスしてくださった皆さん、ありがとうございました。
581名称未設定:2007/11/06(火) 01:03:46 ID:yXSDPyUU0
64ビットでコンパイルしたらメモリ使用量が2倍になったorz
582名称未設定:2007/11/06(火) 01:06:25 ID:82XP8MSU0
>>578
まずは本当に「ネットにつながっているかどうか」を調べる必要があるのか考えるべき
583名称未設定:2007/11/06(火) 01:27:07 ID:0tRgvZRF0
>>581
そりゃポインタが 64bit になるんだから、id だらけの Cocoa プログラムなら目盛使用量が2倍になるベ

そんなにすごい仕事してるの?GUI で64bit って余程のプロでないと使わない気がする ...
584581:2007/11/06(火) 19:07:34 ID:EYJtqLlN0
>>583
特に64ビットは必要ないんだけどソースコードの品質を上げるために試してみた
現時点ではバイナリサイズもメモリ消費量もでかくなるのでメリットはないかも
でもねアクティビティモニタに唯一64ビットと出るので、優越感は味わえる...人も...
585名称未設定:2007/11/07(水) 23:34:09 ID:simMyFDM0
CoreAnimation に関する和訳資料が、木下さんの
http://journal.mycom.co.jp/special/2007/leopard/002.html

これぐらいしかないんだねー。
CocoaBreak! さんとかががんばってるのに、アップルジャパンは
仕事しないねー。
586名称未設定:2007/11/08(木) 00:30:07 ID:QRMuL5KH0
CoreAnimationってWindows(.NET)のWPFよりショボクない?
というより、CoreAnimationの活用場所が限られ過ぎorz
587名称未設定:2007/11/08(木) 00:41:08 ID:oaqtntGw0
確かに、簡単だからといって乱用は禁物ですよね。
でも、テーブルの並び替えや移動とか、アニメーションすることに
よってユーザビリティが上がる事もあるから、使い方次第ですかね。
588名称未設定:2007/11/08(木) 00:50:21 ID:rO6zyLL/0
とりあえず [[view animator] setFrame: ...] とかでアニメーションになるのはいいことだとおもう
589名称未設定:2007/11/08(木) 09:08:40 ID:7GRUAd0i0
setFrameとかを使う機会がないかも...
タブを切り替えるときにいちいちウインドウサイズなんて変更しないし

それよりもiPod touchのような感覚的に解りやすくなるUIを期待していたのにな
スクロール移動に慣性を持たせたりね
590名称未設定:2007/11/08(木) 17:24:26 ID:zEdsiKUW0
ていうかアニメーションのあるUIってなんかイヤだ
591名称未設定:2007/11/08(木) 17:33:37 ID:mw5+Wv5j0
IB3.0のライブラリパネルが軽くフェードインアウトするような
ちょっとした効果は、まあ多少心地いいんだけど

設定でアニメ切れるようにして欲しいとも思ふ
592名称未設定:2007/11/08(木) 20:59:50 ID:8YBf9K2+0
インターフェイスがぐにゃりと曲がって笑ったw
パフォーマンスを気にするソフトでは使えないなぁ
593名称未設定:2007/11/08(木) 21:24:26 ID:InO3sJ7M0
NSFileManagerで例えば大量のbmpを移動させると、
メモリ使用量が増えまくるけど何故?
594名称未設定:2007/11/10(土) 11:24:03 ID:yoCzO0Lu0
バグじゃない?
というかCocoaのメモリリークはGCに頼るしかないかもorz
595名称未設定:2007/11/10(土) 15:52:41 ID:x13Isy6l0
何でもライブラリのバグのせいにする奴がいるが、大抵は自分のコードが原因。
596名称未設定:2007/11/10(土) 16:32:44 ID:5JNbGREU0
Core Data で、関連の設定がうまくいかず困っています。
コード内で NSMutableSet を setValue: forKey: でエンティティの
関連に設定してるのですが、一度セーブして再びそのファイルを開くと、
設定したはずの関連が無くなってしまっています。

関連は「一時」ではありません。
アプリは、document based では無い方です。
どの段階で関連が切れてしまっているのか、さっぱりです。
597名称未設定: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名称未設定:2007/11/10(土) 22:32:02 ID:uoStVjcs0
>>597
つ /Developer/Examples/Quartz/Core Animation
600名称未設定:2007/11/11(日) 12:09:17 ID:/h9pnLX90
Cocoaで開発しているとつい構造体の存在を忘れてしまうけど、
データ構造を解りやすく表現する手段として重要だよね。
(KVCやDictionaryだと規模が大きくなると大変)
そんな時にpropertyの登場。うれしいけど下位互換性を保てなかったものか....
601名称未設定:2007/11/11(日) 23:54:16 ID:3xiFJV1b0
構造体使ってると、PPC/Intelで整合性がとれなくなるよ...
602名称未設定:2007/11/12(月) 00:02:37 ID:6pJx53410
CPUに依存するコードを書くから。
603名称未設定:2007/11/12(月) 00:16:22 ID:6YN+nfcu0
エンディアンですか
604名称未設定:2007/11/12(月) 00:18:23 ID:jJlBa7Hw0
べつに構造体つかってもいいんじゃない?ちゃんとディスク/ネットワークに書くときに気をつければ。
605名称未設定:2007/11/12(月) 00:41:11 ID:bRgWt6KB0
>>601
そろそろ答えをお願いします。
606名称未設定:2007/11/12(月) 01:52:24 ID:6qKNkZiA0
オブジェクト指向はどこへ消えた


607名称未設定:2007/11/12(月) 06:44:56 ID:t+THQgiE0
質問します。たとえばQuickSilverみたいに、どんなアプリが動いていても
起動してくれるショートカットキーの設定って、どうやるのでしょうか?
システム全体のキーボードイベントをフックして実装するのかと想像してるのですが
そういうイベントを受け取る方法を見つけられませんでした。

キーボードとかマウスとかフォーカスとかのシステムイベントをフックする
方法ってあるんでしょうか?
608名称未設定: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名称未設定:2007/11/12(月) 09:06:28 ID:1OnUOF+c0
エンディアン変換はAppleが用意してるのでそれ使えばいいだけだ。
注意しなければならないのは浮動小数点を中間コードに変換することくらいだな。
ディスクに書き込むのなら、構造体ではなくてXML使うようにしてるけどな。
611名称未設定:2007/11/14(水) 11:18:15 ID:n4OM99880
Cocoaにはデフォで複数行表示で左揃えなタブコントロールはないのか・・・
612名称未設定:2007/11/14(水) 11:19:38 ID:6xRVuEo90
そんな気持ちの悪いUIはいらん。
613名称未設定:2007/11/14(水) 11:58:54 ID:n4OM99880
まあ複数行表示なんてどうでもいいが
Safariのタブはなぜ標準提供されないのだろうか
614名称未設定:2007/11/14(水) 21:09:56 ID:+yEMUk1e0
AppleアプリのUIは継ぎはぎだらけなので真似するのが大変orz
だからRIUIを難しくしているような気がするけどな
615名称未設定:2007/11/14(水) 22:16:14 ID:KqpvVDcT0
3になってカバーフローとか簡単に出来るんかいな。
616名称未設定:2007/11/14(水) 22:35:49 ID:XnqPDGec0
Windows の Office の環境設定一度でも使った事ある人なら、
複数行タブの馬鹿らしさが分かる
617名称未設定:2007/11/14(水) 22:46:16 ID:iClwHio80
CGSGetOnScreenWindowListで取得したウィンドウに対して
CGSSetWindowLevelによりウィンドウレベルを設定しようとしています。
自アプリのウィンドウは変更されるのですが、
他アプリのウィンドウはエラーが返ります。
同じくTransitoinWindowでウィンドウを操作しようとしますが、
他アプリのウィンドウは操作出来ません。
どなたか他アプリのウィンドウを操作する方法をご存知ないでしょうか?
618名称未設定:2007/11/14(水) 23:09:12 ID:jAWzhafe0
他アプリのウィンドウの参照をどうやって取ったの?
619名称未設定:2007/11/14(水) 23:12:58 ID:jAWzhafe0
あああ、上のレスは忘れて
620名称未設定:2007/11/14(水) 23:23:01 ID:Xis7E2030
>>615
ソースが公開されているが読んでもよくわからん
621名称未設定:2007/11/15(木) 00:45:47 ID:GB5EBmPl0
>>609
QuickSilver オープンソースになったよ
blacktree-alchemy でぐぐれ
622名称未設定:2007/11/15(木) 12:46:30 ID:Mwb686F+0
時々Getterコードで
-(Foo*) foo
{
return [[foo retain] autolerease];
}
というコードを見るんだけど、何か意味があるの?
623名称未設定:2007/11/15(木) 13:06:16 ID:7a7zfmZx0
AutoReleasePoolが解放されるまでの間保持させるってことだろ。
624名称未設定:2007/11/15(木) 13:08:13 ID:woMNQIGU0
呼び出した後に元のクラスを解放することを想定してんじゃね?
625名称未設定:2007/11/15(木) 13:29:39 ID:9q45mP2D0
しかしCocoaのポリシーとしては、そういう場合はgetterを呼び出した側が(必要なら)retain-autoreleaseしなさいと言っているように見える。
http://developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html#//apple_ref/doc/uid/20001425-107866
626名称未設定:2007/11/15(木) 13:48:25 ID:o0uKsE520
Leopardで刷新されたMac OS X対応開発言語「Objective-C 2.0」の真価を探る
http://journal.mycom.co.jp/special/2007/objectivec/index.html
627名称未設定:2007/11/15(木) 14:16:50 ID:7a7zfmZx0
propertyのとこ、おかしくないか?
インスタンス変数がNSString * _name;だとエラーになるんじゃね?
628名称未設定:2007/11/15(木) 18:06:34 ID:yJVNynki0
プロパティとかブロック構文みたいのとか便利だと思うけどLeopard専用じゃあすぐには手を出しにくいなあ
記事にもあるけどせめて10.4くらいから動いてくれないと
629名称未設定:2007/11/15(木) 19:42:11 ID:7a7zfmZx0
Objective-C 2.0にするとTigerをサポート出来なくなるからな。後、2年くらいは
Tigerをサポートしたいし。

10.4.11でObjective-C 2.0のランタイムをサポートしてくれれば良かったのに。
630名称未設定:2007/11/15(木) 22:27:57 ID:OxRPElrt0
Xcode3ではなんと!!!!!!!!
@"あいうえお" が使える!!!!!!!
うれしい!!!!!!!
631名称未設定:2007/11/16(金) 00:48:51 ID:qefaGqef0
>>630
>@"あいうえお"

なにおきてもしらんど
632名称未設定:2007/11/16(金) 08:32:57 ID:oGZ+fjo20
>>625
>>622 と同じ例もあったりするけどね。

http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/chapter_4_section_5.html#//apple_ref/doc/uid/TP40002974-CH5-SW5

どうなんだろうなあ。とりあえずコード的にはこっちの方がすっきりするが...
中がどうなってるか分からない getter から返ってきたオブジェクトはは常に retain
しなきゃいけないとすると、めんどくさいなあ。
633名称未設定:2007/11/16(金) 11:47:44 ID:N3h5kz0i0
>>632
信頼できないライブラリなら retain ではなく copy するべきかもね。
返された NSString が実は NSMutableString で、知らないうちに内容
が書き変わっていたりするかもしれんしw
634名称未設定:2007/11/16(金) 12:09:30 ID:cNV2hLUV0
>>632
GC 無し Cocoa では、init.... もしくは copy... 以外のメソッドから
返ってきた id を保持する場合は retain すべしという決まりになっていた
気がするんですが。
635名称未設定:2007/11/16(金) 12:19:47 ID:CbzyFQzY0
>>631
うそーん。なんで?
636名称未設定:2007/11/16(金) 20:39:40 ID:CUEn9uCm0
>>626>>622と似たようなコードの例が載ってて、それはマルチスレッドに対応するためらしい。
似てると言っても結構違うけど。
637名称未設定: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名称未設定:2007/11/16(金) 23:23:35 ID:hGnpQD7r0
>>626とかみて今まで不思議だったんだけど、nilのオブジェクトに
メッセージ送っても安全なんですかね?
retainやreleaseはnilチェック無しでもOKなんですか?
639名称未設定:2007/11/16(金) 23:44:09 ID:U4RUIbsl0
>>638
問題ない。

ついでにいえば ヒレガス本 p44にそのまんま書いてある。
640名称未設定:2007/11/16(金) 23:47:58 ID:WI/houEB0
>>638
先越されたが、メッセージ送信自体は安全らしい。
http://developer.apple.com/jp/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_22.html

ところで>>626のリンク先にnilにメッセージ送ってるコードある?
641名称未設定:2007/11/16(金) 23:52:36 ID:OhjYmzCB0
ぬるぽ!
642638:2007/11/17(土) 03:22:18 ID:kGkshqIg0
>>639-640
ありがと。いままでnilチェックしてたわ。他の言語なら
余裕で落ちると思ったけど。結構アバウトに動くのね。

>>626は_nameの初期値がnilだろうから・・・いいのかな?って感じに。
643622:2007/11/17(土) 09:00:15 ID:aQOoTe4X0
>>623
>>624
ありがとう!。でもそういう使い方を,,,,,,するかも(ゾッ)
プログラムを見直してみよ
644名称未設定:2007/11/18(日) 12:38:23 ID:YFIOeH3f0
>>637
>ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。

そういうことを疑問に思っているんじゃなくて。

>retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。

上の文は、「サイクルの外で」で切れるんだろうなあ。最初「外で取得した」と読めた。

ともかく、getter の中で何をやっているのかわからないときがあって(ソースのないクラスとか)、
そうするとオブジェクトが autorelease pool に登録されてるかよくわからないだろ。
645名称未設定:2007/11/18(日) 13:27:12 ID:xb1Ii9wH0
「よくわからない」、じゃなくて、
getter から返ってきたのをインスタンス変数等に
保持したい場合はretain しないといけない、
保持しないで今の関数で使い捨てのときはなにもしなくていい、
というのが「きまり」じゃないの?

getter はそう使われて問題ないように組みなさいということのはずでしょ。
すくなくとも Cocoa の API は全部そうなっているんでは。

ネットに落ちてるフリーのライブラリもそれに準拠してると思ってたけども。

http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_5.html
646名称未設定:2007/11/18(日) 14:17:29 ID:6Cn1RaWD0
>「よくわからない」、じゃなくて、
>getter から返ってきたのをインスタンス変数等に
>保持したい場合はretain しないといけない、
>保持しないで今の関数で使い捨てのときはなにもしなくていい、
>というのが「きまり」じゃないの?

そんな基本的なレベルの話じゃなくて、「今の関数で使い捨て」しようとしたときでも、
getterの直後に別スレッドでsetterが呼ばれて、(getterによって返された)古いオブジェクトが解放された
とか、
getterの直後に別スレッドが(そのgetterメソッドを持っている)オブジェクトを解放した
とかいうケースの話をしてるんじゃないの?
こんな場合にも対応するには、getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。
647名称未設定:2007/11/18(日) 14:49:43 ID:xb1Ii9wH0
なるほど、それは失礼しました。
Cocoa のマルチスレッドは全く判っていないので、勉強します ...
648名称未設定:2007/11/18(日) 15:17:43 ID:6Cn1RaWD0
>getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
>それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

で、getterを呼び出した側でretainしようにも、その前に別スレッドで解放されたら終わりなので、結局getter自身でretain-autoreleaseするしかないと。
てことは、thread-safeを謳っているライブラリについては、getter側でretain-autoreleaseしていることを想定していいのかなぁ?
649名称未設定:2007/11/18(日) 21:52:08 ID:MNuVJVruO
Cocoaは難しい
650名称未設定:2007/11/18(日) 22:23:41 ID:DA9RCPIX0
確かに安定したソフトを作るのは難しいかも
まあ、リソースを確保したままで終わるような簡単なソフトは簡単だけどね
651名称未設定:2007/11/19(月) 15:27:16 ID:02ojrBP20
Cocoaってそんなに難しいのか? 比較対象がToolboxしか知らんからわかんね。
652名称未設定:2007/11/19(月) 15:38:10 ID:LV7+iq+v0
Toolboxに較べたら簡単だろう。Toolboxみたいに冗長で神秘の呪文を何度も
唱える必要がないだけでもありがたいくらいだ。部品も結構揃ってるので
本来やるべき仕事の部分に集中出来る。
653名称未設定:2007/11/19(月) 16:40:12 ID:LvFFLwZ10
フレームワークの充実度で圧勝。
654名称未設定:2007/11/19(月) 17:00:29 ID:PeaucL070
Toolboxに比べる事自体Cocoaに失礼
655名称未設定:2007/11/19(月) 17:44:27 ID:In4q82oq0
Interface builder にでてくる File's Owner, 1st Responder というのを理解するまではわけわからんかったが、その後は楽勝だった
656名称未設定:2007/11/19(月) 17:52:00 ID:9E3IVsAz0
このスレ住人のXcode 3.0への移行具合はどうよ

XcodeでClassを書く(Interface BuilderでClassが作れない)
Interface BuilderでのAnimationが設定できる
などなど変更点山盛りで覚えること多数で苦戦してんだけど
657名称未設定:2007/11/19(月) 17:55:48 ID:In4q82oq0
確かに instantiate class... というメニューが
IB になかったからどうしようかしばらく困った。
でもこれまでからなぜか Xcode でクラス作ってたのでそんなに変わってないです。

あと自分用の小さなソフトしか作ってないので、
GC on にして手抜きしまくりです。

Animation のつかいかたは判ってないです ...
658名称未設定:2007/11/19(月) 18:13:08 ID:LV7+iq+v0
IBからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
さすがにXcode3.0には戸惑ったが、まぁ何とかなりそうだ。
659名称未設定:2007/11/19(月) 19:00:01 ID:PeaucL070
>>658
> Bからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
> 大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
俺も同じw
660名称未設定: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の場合は、同じ。
662660:2007/11/19(月) 21:51:45 ID:9Yj++wrA0
>>661
ありがと。ってことはMainMenu.nib以外では、違うってことだろうか。
ちょっくら試してみます。

 あと、IB3.0のライブラリには、いろいろ便利そうな新規クラスが
 入っているみたいだけど、これらの使い方をどこかのスーパー
 プログラマーがさっくりと分かりやすい日本語チュートリアル
 作って公開してくんないかなー。(他力本願)
663名称未設定:2007/11/19(月) 21:56:31 ID:PeaucL070
http://journal.mycom.co.jp/special/2007/objectivec/001.html
に、
- (NSString*)name
{
@synchronized(self) {
return [[_name retain] autorelase];
}
}
ってコードがあるけど、ここの@synchronizedの対象って_nameじゃダメなの?
664名称未設定:2007/11/19(月) 22:01:37 ID:MSo6PDwW0
それにしても独特な開発環境だよね
洞察力の訓練には最適かもw
665名称未設定:2007/11/19(月) 22:34:43 ID:KUTYWe1G0
>>663
setName:をどう書くか悩むからだめ。
666名称未設定:2007/11/19(月) 23:08:49 ID:+8DQ+G5D0
そういえばnilへのsynchronizeの挙動って定義されてたっけ?
667名称未設定: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 を自分で設定する。
668662:2007/11/20(火) 19:03:19 ID:vX1nP8Nx0
>>667
なるほど!っていうか初めてFile's Ownerの
役割が分かりますた。
簡潔且つ的確なご説明ありがとうございます。
669名称未設定:2007/11/21(水) 20:17:19 ID:G817xlPC0
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
の中でmenuItemに対してsetState:とかtagを呼ぶと
'tag' not found in protocol(s)
とか言われてしまうんだけどなんでだろう?
670名称未設定:2007/11/21(水) 22:56:41 ID:sg+XtEJO0
知らんけど、NSMenuItemがプロトコルだからじゃね?
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;//引数menuItemはNSMenuItemプロトコル
- (BOOL)validateMenuItem:(NSMenuItem*)menuItem;//引数menuItemはNSMenuItemクラス
って事かなー。


671名称未設定:2007/11/21(水) 23:17:07 ID:hTxVVTev0
>>669
まずヘッダを確認してみてはいかがでしょう。
ウチのxCode2.4ではdeprecatedだけど一応使えるみたい。
672名称未設定:2007/11/22(木) 00:53:05 ID:NI+W3MNs0
ありゃ、プロトコル自体がdeprecatedだったのか
警告が「プロトコルの中にないよ」って書いてあるもんだから、
NSMenuItemプロトコルの中を見てちゃんとあるのに変だな〜と混乱してた
失礼しました

結局>>670みたいに書き直しなさいということね
673名称未設定: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名称未設定: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名称未設定: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名称未設定:2007/11/22(木) 23:50:05 ID:T7a7mhhK0
>>677
awakeFromNibで設定するのが簡単だと思う。
679名称未設定:2007/11/23(金) 00:34:54 ID:1Oijf2vw0
>>677
IBでインスタンス化したオブジェクトはアーカイブされてnibファイルに格納されて
プログラムで読み込むときはアンアーカイブして取り出すので
初期化メソッドはプログラム中では呼ばれない

はず
nib上のオブジェクトを初期化するにはawakeFromNibを使いましょう
680674:2007/11/23(金) 10:22:00 ID:GeUHqHT60
>>675
どうも
NSArrayControllerを使ってBindするというのは、
具体的にはどうすればいいのですか?

NSArrayControllerのインスペクタのBindをみても
NSTableViewのクリック関する項目はないのですが。
681名称未設定:2007/11/23(金) 10:49:36 ID:hcJ8Hx2n0
NSTableView の binding のところで、中身を
NSArrayController の content とかに設定して、
NSArrayController のほうを CoreData につないでください。
ADC のどっかにチュートリアルがあったはず。
682675:2007/11/23(金) 12:06:28 ID:gHJ1tYgX0
>>680
行の選択が変化したかどうかは KVO で見る

NSArrayController の例えば selectionIndex とかを addObserver で登録して、
observeValueForKeyPath の中で、そのときに NSArrayController に
選択されている NSManagedObject を取り出す
683674:2007/11/23(金) 12:37:53 ID:GeUHqHT60
>>682
>>681
素早い応答ありがとうございました。

ADCのチュートリアルを教えてください。
Core Data Programming Guideをみたり
table view bind で検索しましたが,
それらしいものが見つからなくって。

まだまだ初心者なので,インスペクタの設定や
サンプルコードがないとピンとこなくて。
すいません。

もしサンプルプロジェクトをダウンロードできるサイトがあったら
教えてください。
684名称未設定:2007/11/23(金) 12:51:39 ID:hcJ8Hx2n0
英語だけど、apple のこれ
http://developer.apple.com/cocoa/coredatatutorial/index.html
はビデオ付き。まさに tableview につないでるから。
あと、Scott Stevenson の
http://cocoadevcentral.com/articles/000085.php
もわかりやすい。
というかそこの記事はどれもこれもわかりやすいので、おすすめ。

あと、mkino さんのところにも解説ありそうだけど、どうでしょう?
すくなくとも本の第三版にはのってるらしいけど、持ってないのでわからん。
685名称未設定:2007/11/23(金) 13:02:19 ID:iA/8JIe10
binding ってバカを量産する仕組みなんだろうか
686675: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
http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/

Key Value Observing
http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/

とか
687名称未設定:2007/11/23(金) 15:23:08 ID:NQ+7IO3Q0
>>685
自分の頭の中のCocoaはbindingが導入される前で止まってるw
未だに使った事が無い恐がりの俺
688名称未設定:2007/11/23(金) 15:40:43 ID:vBC4oFan0
bindingとpropertyは職業プログラマ用だろ。
garbage collectionは量産しそうだけど、いいんでない?
689名称未設定:2007/11/23(金) 16:07:53 ID:hcJ8Hx2n0
>>687
binding は Panther で追加された頃は IB での扱いがひどかったけど、
(設定しても反映されない等、)最近は随分安定している気がする。
690名称未設定:2007/11/23(金) 16:08:47 ID:40+P0Y410
>>688
いや、Bindingだけは素人でもきちんと使えるようにすべき
MVC、KVCできちんと書けるようになるからな
691名称未設定:2007/11/23(金) 17:45:45 ID:/aNuome90
メモリ管理をあまり理解しないまま、KVCを使っていると知らない間に
大量のメモリリークを生みだしそうな気がする
まあ、GC前提なら問題ないけどね
692名称未設定:2007/11/23(金) 19:05:51 ID:gj7dOudc0
>>689
俺未だにPanther使ってるけど、そんなことないぞ。
693名称未設定:2007/11/23(金) 20:17:15 ID:he+xUhyD0
>>691
KVC がメモリリークの原因になるのって、どういうケース?
694名称未設定:2007/11/23(金) 20:44:51 ID:MrpH+FwN0
>>691
あなたの場合、KVCを知るべきだね
695名称未設定:2007/11/23(金) 22:27:23 ID:4T8D50XS0
bindingで量産されたバカの一人ですが質問があります。

code上でbindingする時に
bind:toObject:withKeyPath:options:を呼び出すのと
IB上のbindingインスペクターでバインディング設定するのは等価ですか?

IB上のbindingって双方向にobserveValueForKeyPath:ofObject:change:context:
呼ばれているような気がするんだ。(双方向で値が変わるんで思い込んでいるだけかもしれない)

ひょっとして、IB上の設定ではbind:toObject:withKeyPath:options:は双方向にbindingを
設定してんのか?

696名称未設定:2007/11/24(土) 00:54:03 ID:8RcyvOmj0
等価と考えていいと思う。

詳しく動作を追いかけたわけではないが、例えば、NSTableViewとNSArrayControllerをbindした場合、間にNSBinderが挟まるっぽい。

NSTableView <--> NSBinder <--> NSArrayController

だから、NSBinderが双方にobserveしている可能性はあると思う。

697名称未設定:2007/11/24(土) 12:41:05 ID:KO1pPZN00
>>696
ありがとう。NSBinderのヒントでかなりbindingとKVOの理解が進んだよ。

IB上の設定でのbindingは、NSNibConnectorのサブクラスのNSNibBindingConnectorを使う事が判った。
nibから呼び込まれた後に、establishConnectionが呼ばれてbindingが確立されているようでした。
それ以上はやっぱり判らん(W
もやもやするけど、NSBinderがproxyとして双方向にアクセスして調整していると理解して先に進みます。

698名称未設定:2007/11/24(土) 15:54:07 ID:l5zb8Of80
>>684
日本語はmkinoさんがやってるのがあるよ。アップルに
http://developer.apple.com/jp/documentation/japanese.html
のCocoaセミナー上級編がCoreDataまでカバーしている

ビデオ、スライド付き。
699名称未設定:2007/11/24(土) 16:12:45 ID:EoXTCZxW0
Nibウインドウに、スマートフォルダのようなグループ管理機能が欲しいのは俺だけかな?
CoreDataを使うとNibウインドウにアイコンがいっぱいになって、操作ミスで原因不明なバグを
作ってしまうことが多いんだけど俺だけかな?
そんで、Nibファイルを分けるとCoreDataが使いにくくなるのは俺だけかな?
なので、CoreDataをあまり使いたくないのは俺だけかな?

ごめんなさい。
700名称未設定:2007/11/24(土) 17:43:05 ID:Ow7o7jy80
アレイコントローラの中身(arrangedObjects)が(predicateやソートなどで)変更されたか
どうかを知るには、どうすればよろしいのでしょうか?
701名称未設定:2007/11/24(土) 18:40:41 ID:KO1pPZN00
>>700
KVOでこんなんでどうよ
@interface AOAppDelegate : NSObject
{
NSMutableArray* model;
IBOutlet NSArrayController* controller;
}
@end

@implementation AOAppDelegate

- (void) awakeFromNib
{
model = [[NSMutableArray alloc] init];

// controller.arrangedObjectsをselfが監視する事にする
[controller addObserver:self
forKeyPath:@"arrangedObjects"
options:0
context:nil];
}

// 変化があれば呼ばれる
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
NSLog(@"keyPath: %@", keyPath);
}

@end
702名称未設定:2007/11/25(日) 10:58:53 ID:lBh8NNrY0
>>701
出来ました。
ありがとうございます。
感謝感謝です。
703名称未設定:2007/11/28(水) 10:16:49 ID:lW2fLSDp0
704名称未設定:2007/11/28(水) 11:10:27 ID:ZOVsBBPU0
お、いちおう Apple JP も仕事はしてるんだな
705名称未設定:2007/11/28(水) 11:11:23 ID:wiitCa7C0
これってAJの仕事なの?
706名称未設定:2007/11/28(水) 21:17:31 ID:XYuOb7To0
スクロールビューの中にあるクリップビューで
指定のポイントに自動スクロールさせるように出来たのですが、
ゆっくりと指定のポイントまでスクロールさせるには
どうすればよろしいのでしょうか?
707名称未設定:2007/11/29(木) 05:48:51 ID:eihTS5ZL0
タイマー仕掛けて徐々に場所移動させるとか
タイマーは NSAnimation のタイマー使えばいい
708名称未設定:2007/11/30(金) 11:30:07 ID:LYxep66i0
>>706
システム環境設定->アペアランス->スムーズスクロール機能を使用をONにする。

defaults read "Apple Global Domain" AppleScrollAnimationEnabled
で読めるみたいだけど、俺の環境だと書き込んでも効いてない。
キャッシュに入ってるのかもしれないけど判らない。
709名称未設定:2007/11/30(金) 18:32:34 ID:vjd8NQtg0
QuickLookのプラグインを作ったんだけどアプリのバンドルに入れたものをちゃんと認識してくれない・・・
MyApp.app/Contents/Resources/QuickLook/
に入れれば良いと書いてあるんだけど、これで本当に動く?
ライブラリのQuickLookフォルダに直接放り込むとちゃんと動くんだけど
710名称未設定:2007/11/30(金) 18:43:24 ID:UwYew9uC0
>>709

qlmanage で登録(-r)・確認(-g)。
711名称未設定:2007/11/30(金) 18:44:50 ID:yWWRLXzJ0
>>709
QuickLook-devのMLで
「Xcodeのガイドには 〜.app/Contents/Library/QuickLook/
って書いてあんぞ?」ちゅー話が出てるが。
712名称未設定:2007/11/30(金) 19:36:43 ID:vjd8NQtg0
>>710
確認済み、おkだったよ

>>711
あ、ほんとだ
リソースの中とはどうも変だなあとは思っていたんだけどね
Xcodeの方は2007-08-21でWeb上のは2007-10-29だからXcodeの方が古いんだけど
普通に考えてLibraryの中だよな
で、さっそく移動して試してみたんだけどやっぱり認識されないっす
もうちょっといろいろ試してみるよ
713名称未設定:2007/11/30(金) 19:48:58 ID:yWWRLXzJ0
>>712
Cocoabuilderのフォーラムで「二つ同じQuickLook plug-inがあると
ロードに失敗するバグがあるから気をつけろよ。デバッグとリリースの二つとか。」
ちゅー話も。
ていうか、ちょっとぐぐったらこういう情報みつかるんだぜ?
714名称未設定:2007/11/30(金) 19:57:05 ID:vjd8NQtg0
>>713
あ、当たり
ちょうどCocoabuilder読んでた
よくわからんからあっちこっちにいろいろ入れて試してたんだけど、それが良くなかったみたい
一つにしたら簡単に動いた
サンクスでした
715名称未設定:2007/11/30(金) 22:50:23 ID:7CYJeIRl0
Obj-C 2.0の勉強始めた。
64bitで@synchronize使うとインスタンス変数まで合成するって
機能、なんで32bitだと削られたんだろう
716名称未設定:2007/11/30(金) 23:20:04 ID:7CYJeIRl0
@synthesizeだったorz
717名称未設定:2007/12/01(土) 03:00:24 ID:eAS5K+Tz0
The Objective-C 2.0 Programming Language > Properties > Runtime Differences
718名称未設定:2007/12/01(土) 15:24:36 ID:5AhowjJu0
719名称未設定:2007/12/01(土) 16:10:41 ID:/MKn3ZsH0
NSPopUpButtonなどの、ポップアップされたウィンドウで
選択肢を選んだときの背景の青色(アクア)をグラファイトに変更するにはどうしたらいいでしょう?
NSMenuItemCellかなと思ったのですが、それにアクセスできなくて行き詰まっています。
720名称未設定:2007/12/01(土) 16:38:02 ID:Yb46GS0N0
>717,718
トンクス。互換性を重視か。
当分だろうけど、32bitが残ってるうちは、冗長に書かざるを得ないのね。
721名称未設定:2007/12/01(土) 22:05:10 ID:QmkRSOkh0
Cocoaバンドルについて質問です。
Carbonから呼び出す、UIダイアログ部分を分離しようと考えています。

Window/nibを含んでいて、controllerとmodelをnibのなかでinstance化
してあります。nibでinstance化したクラスを、bundleのprincipal classと
して指定するのは誤りなのでしょうか?

この場合BundleのPrincipal classをcontrollerクラスとしてしまうと、
nibからawakefromnibでできるinstanceと、loadbundleで作られた
instanceの二つが出来てしまうようにも思えます。

それとも、bundleの主要クラスを別にきちんと用意してやって
(インターフェースクラス?やり取りを受け持つ窓口クラスとして)
それを通じてnibを読み込んでやるような形にするべきでしょうか?
722名称未設定:2007/12/02(日) 02:53:04 ID:YTofjpSM0
>>719
アクアかグラファイトかは、システム環境設定のアピアランスで設定すると
あとは自動でやってくれる話だから、自分で変えちゃ駄目
723名称未設定:2007/12/02(日) 03:09:27 ID:YTofjpSM0
>>721
誤りというか、principal class はそういうものではないのでは。
あくまで [bundle principalClass] は Class を返すわけで、
インスタンスをかえすわけではないと思いますけども。
あと、loadable bundle の場合は、
勝手に nib を読み込んでくれるわけでもないので、
どこかに nib を読むコードを書かないといけないんでは?

というわけで、ぼくなら、principalClass を MyPrincipalClass とするなら、
MyPrincipalClass の init で
NSNib * nib = [[NSNib alloc] initWith ...];
[nib instantiateNibWithOwner: self topLevelObjects: ...];
とやって nib の File's Owner をMyPrincipal Class 自身にしてやります。

コントローラは nib のなかに別に作ってもいいし、
File's Owner (=MyPrincipalClass) にしても問題ないと思います。
724名称未設定:2007/12/02(日) 07:43:19 ID:PMcN21130
>>723
むつかしいですね・・・CarbonCocoaとかBundleLoadingGuideとか
みてもいまいち飲み込めなくて・・・

Carbonからバンドルを読みこんだときは、初期化ラッパ関数で
コントローラをインスタンス化して参照をグローバル変数で
保持しておく形になるのかなと思っています。

コントローラはfile's ownerにして、初期化関数でインスタンス化、
initのなかでnibを読み込んで、というので行けそうですね。
やってみます。
725名称未設定:2007/12/02(日) 10:01:11 ID:SyEfYF/S0
>>722
プロアプリっぽいインターフェイスにしたいので全体的にグレーな感じにしたいのです。
スライダーやその他は表示を変えるのは楽なんですけどMenuの部分だけどうしても分かりません。
アプリ全体をグラファイトにするとメニュー左上のリンゴマークやウィンドウの赤黄緑色のボタンも
グラファイトになってしまうので、表示を変えたい部分だけ手動でいじっている次第ですが
いじってはいけないのですか、、すいません。
726名称未設定:2007/12/02(日) 10:32:37 ID:D4mG2Q2v0
>>725
NSControlTint でFramework内を検索すればあるいは。

自分だけで使う分には何をどうしようが勝手だと思いますよ。
どっかに公開するのなら、あなたが「全体的にグレーな感じにしたい」
と思ったように使う人が「全体に統一感をだしたい」と思うかもしれません。

まあ、公開するにしても「俺は俺流でいく!」という信念でいくのであれば
僕は問題ないと思います。「僕は」ですが。
727名称未設定:2007/12/02(日) 12:50:23 ID:UJ3UCfYV0
ProKit.frameworkを公開してくれれば問題ないのになぁ。
728名称未設定:2007/12/02(日) 13:25:56 ID:YTofjpSM0
ProKit といえば
/System/Library/PrivateFrameworks/ProKit.framework/Versions/A/Resources
にある謎な defaultimage.tiff ...
729名称未設定:2007/12/02(日) 20:32:29 ID:0yxsgtcB0
NSView内をクリックしたあと、そのView(もしくは上位のNSScrollViewとか)に
フォーカス(?)を移すにはどうすればよろしいのでしょうか?
そのView内でキーイベントを受け付けるようにしたいのです。

何も実装しないと他のNSTableViewなどがアクティブになったまま
そこでキーイベントを受け付けてしまいます。
730名称未設定:2007/12/02(日) 21:40:58 ID:VWNgnwKC0
"そのview"がfirst responderにならないのが原因ではないでしょうか?
以下のコードをviewに付け加えては如何でしょうか。

- (BOOL)acceptsFirstResponder
{
return YES;
}

>728
マジでコーヒー吹いた(w
731名称未設定:2007/12/02(日) 21:54:48 ID:tY0pbx+P0
>>728
いいのか Apple、他社のロゴを勝手に混ぜて...
732名称未設定:2007/12/02(日) 22:38:05 ID:0yxsgtcB0
>>730
ありがとうございます。
しかし、うまくいきませんでした。
例えばAというテーブルビューで行をクリックしたあと、Bというテーブルビューで行をクリックすると、
Aテーブルビューの選択行はハイライトが薄くなって、矢印キーの上下でBテーブルビュー内の
行選択が上下できますよね。(その逆も)

BテーブルビューのかわりにNSView(上位はNSScrollView)でできるようにしたいのです。
733名称未設定:2007/12/02(日) 23:34:05 ID:47gl0y6m0
その「NSView(上位はNSScrollView)」っていうのが、View階層上のどこに位置するのかが、いまいち分かりません。

BというNSTableViewをクリックしたときに、別のNSViewでfirstResponderを横取りしたい、という話なのでしょうか?
734名称未設定:2007/12/02(日) 23:51:57 ID:0yxsgtcB0
>>733
はい、その通りです。
試行錯誤でうまくいきました。

NSViewのサブクラスでmouseDownメソッド内に、
[[self enclosingScrollView] becomeFirstResponder];
と書いたらうまくいきました。

いろいろと協力していただきありがとうございました。
735名称未設定:2007/12/02(日) 23:59:05 ID:VWNgnwKC0
>>733
(1) 以下のコードをかいて

// testView.h
#import <Cocoa/Cocoa.h>
@interface testView : NSView
{
}
@end

// testView.m
#import "testView.h"
@implementation testView
- (void)keyDown:(NSEvent *)theEvent{
NSLog(@"keyDown");
}

- (BOOL)acceptsFirstResponder{
return YES;
}
@end

(2) nibで適当に編集

nib - window - scroll view - test view
- scroll view - table view

ってやったけど、logに"keyDown"って表示されました。

こうゆうことじゃない?そのviewが何のsubclassかによっても違うと思うけど、どうよ
736名称未設定:2007/12/03(月) 00:22:41 ID:qLapvJjY0
>>728
10.3.9にはないんだけど、何があるの?
737名称未設定:2007/12/03(月) 09:33:28 ID:PEuMC0th0
>DefaultImage.tiff
ちょwwwww
まじなにこれ
738名称未設定:2007/12/03(月) 10:51:23 ID:+iASPd2G0
Leopard にしか入ってないみたい
ttp://www.imgup.org/iup514289.jpg
739名称未設定:2007/12/03(月) 11:56:36 ID:6WdlT8Jq0
>>738
不具合がでる可能性があるのでTigerの該当位置に入れておきました。
740名称未設定:2007/12/03(月) 17:50:06 ID:yrp5l/Wh0
「たのしいCocoaプログラミング」買ってきたけど、レパード
なのでパレットのClassのところでつまずきました。
早くレパード対応の本を出してほしいです。木下さん。
741名称未設定:2007/12/03(月) 18:22:07 ID:nXydMrj60
>>740
右クリックしてインスタンス化するとかその辺のことかな。

ライブラリからNSObjectをMainMenu.nibにD&D。
適当に名前を変える。これでおしまい。
Pythonだからコードは違うが、手順的には同じ。参考まで。
ttp://blog.monospace.jp/2007/11/05/xcode3_cocoa_python/
742名称未設定:2007/12/03(月) 18:27:20 ID:nXydMrj60
sage忘れたorz
743721:2007/12/03(月) 21:36:31 ID:jrnZVwzZ0
721です。
CarbonからCocoa Bundleを読み込んで、Cocoa Dialogを表示するのは
出来たのですが、Cocoa Dialogが操作を受け付けない状態です。

親がCarbon Dialogで、そこからさらにCocoa Dialogを読んでいるのですが
作られたCocoa Dialog自体はWindowの切り替えやドラッグは出来るものの
マウスクリックやキー入力を受け付けません。
親のCarbon Dialogは引き続きクリックを受け付ける状態です。

親のCarbonDialogのModalFilterUPPあたりになにか仕掛ける必要があるの
かと推測しているのですが、情報が見つけられません。
Carbon-Cocoa特有の話と思いますが、対処をご存知でしたら教えてください。
744名称未設定:2007/12/03(月) 22:28:46 ID:kOzjjxfS0
NSApplicationLoadは呼んである?
745721:2007/12/03(月) 22:55:10 ID:jrnZVwzZ0
はい。NSApplicationLoadはYESを返してきているので、
きちんと機能しているようです。
うーん。
746名称未設定:2007/12/03(月) 23:29:24 ID:0mW+pBQN0
>>743
Carbon は全く知らないので見当外れだったらすいませんが、
Cocoa Dialog 側のルーチンは Cocoa で書いてます?
わからないなりに、Carbon-Cocoa integration guide をよんだかぎりでは、
Cocoa Dialog 側のイベントは Cocoa で処理されてしまうので。

それとも、そもそも Cocoa のクラスに target/action がとんでこない?
747721:2007/12/04(火) 00:03:10 ID:jrnZVwzZ0
動きました。テストコード側の問題でした。

親のCarbon Dialogは、QuickTimeが出している
Standard Video Compression Settingsです。
これ自体はMovieExportDoUserDialog()というので表示します。

ただ、この関数を読んでいるテストコードがコマンドラインのコードでして、
そこからGUIのダイアログを出すのにちょっと特殊な方法を使っています。
CPSEnableForegroundOperation()とかSetFrontProcess()とか。
これがまずいみたいですね。
ウインドウ切り替えをきちんと扱ってくれないようで。

cocoaなら [NSApplication sharedApplication]; 一発なのに。
ん〜Carbonきらい。使いにくい。
748名称未設定:2007/12/04(火) 00:24:57 ID:7CzJCxV80
Carbon も勉強してみたいんですが、そもそも tutorial がほとんど落ちてないのでどうやっていいかわかりません。
OS 9 からの移植の方へ ... とかはありますが、基礎が分からないのでなんとも。

Cocoa なら案外ネットにころがってるんですけど。ADC もふくめ。

Quicktime 関連は QTKit ではできないの?まだ全部は Obj-C からはできないんでしょうか。
749名称未設定:2007/12/04(火) 00:29:28 ID:7CzJCxV80
http://www.cocoadev.com/index.pl?QTMovieExportSettings
てのをみつけました。
これは内部で結局 MovieExportDoUserDialog() を呼んでますね。

でも、64bit cocoa は QTKit しかないんだったら、どうするんでしょう??
750名称未設定:2007/12/04(火) 00:44:56 ID:KjSYL/lm0
>>738
Tigerだと得体の知れない青い生き物なんだがw
751名称未設定:2007/12/04(火) 11:05:09 ID:e3EYjFUC0
Xcode 2.5のBindingでバグっぽい挙動を見つけた
NSMatrix内のcell要素に対する、enabledでBindingすると、
enabledとeditable両方にbindingされてるみたいだ。

CheckboxのMatrixとかつくると、操作がめちゃくちゃになる。
本来editable属性がないはずのCheckboxの文章がEditableになるよ
なんだこれ
752名称未設定:2007/12/04(火) 12:08:23 ID:ZiTcFxim0
>>750
同じくw
753名称未設定:2007/12/04(火) 12:38:52 ID:GMQ+t5Zi0
Pantherは?
754名称未設定:2007/12/04(火) 13:12:26 ID:DWQp0scA0
>>750
環境依存の問題になるかもしれない。アップしてくれ。
755名称未設定:2007/12/04(火) 16:43:00 ID:oEHllIDC0
>>753
Pantherにはそんな名前のファイルない。
756750:2007/12/05(水) 00:17:10 ID:keQLFhzK0
757名称未設定:2007/12/05(水) 00:30:59 ID:ZU5GgrXI0
>>756
うちもTigerだけどそんな画像入ってないなあ。
パスとファイル名は同じなんだよね?
758750:2007/12/05(水) 00:36:33 ID:keQLFhzK0
>>757
うん。ロダの制限によりPNGに変換してるだけで、パス及び元ファイル名は>>728と同一。
759名称未設定:2007/12/05(水) 19:33:06 ID:57A97QlX0
>>750
年をとって禿げたクッキーモンスター、クソワロタw
760名称未設定:2007/12/06(木) 21:23:35 ID:cogQMvKQ0
LeopardのNSTextViewで検索結果がピョンとハイライトされる効果を使いたいんですが、
あれは自分で呼び出すことはできますか?
できるようならどのクラスを使えば良いんでしょうか?
761名称未設定:2007/12/07(金) 08:27:54 ID:kEWlglfz0
>>760
- (void)showFindIndicatorForRange:(NSRange)charRange
762名称未設定:2007/12/07(金) 19:01:44 ID:wjFKVpCB0
>>761
できました!
ありがとうございます!
763名称未設定:2007/12/08(土) 10:34:44 ID:XjOz1KCl0
ちょっと前の話題にあがっていたけど、
Xcode3.0になって、日本語リテラル文字列が許可されたのかな?
ワーニングもでないしPantherでも問題なく動くんだけど。
764名称未設定:2007/12/08(土) 16:25:43 ID:UI7lu3Gu0
Jpeg Library(IJG)を使ってJpeg変換しているんですけど、
Debugのコンパイルはエラーなしなのに、Releaseだとエラーがでる。
エラー内容は”cputype 〜”って感じでどうも"ppc"がコンパイルオプションに
入っているとエラーになるっぽい。
静的、動的ライブラリ両方試したのですが上記エラーがでました。

PowerPCじゃIJGが使えない。ってことは無いと思うから確実に私のミスだと思うんですけど
なにか解決法が分かる方いませんか?
私の方でで考えられる原因は下記だと思うのですが・・・。
・IJGライブラリ作成ミス
・IJGライブラリに対するリンクミス
765名称未設定:2007/12/08(土) 16:52:22 ID:bsi/19Hh0
>>763
自分も思ってた。
だが、タイガーで作ったプロジェクトを書き換えて日本語リテラル文字列を
コンパイルすると警告でる。

作成時のデフォルトがかわったのかな。
766名称未設定:2007/12/08(土) 17:36:40 ID:lGXLAmYc0
ウォーニング
767名称未設定:2007/12/08(土) 23:42:29 ID:z3viYCM40
>>764
ライブラリ作成ミスだとおもう。
そのエラーは、universal binary を作ろうと思ったのに、ライブラリかオブジェクトファイルのどれかがuniversalじゃないよと言ってる。
あと、Debug ビルドでは、自分のマシン用のバイナリしかつくらないけど、Release ビルドではuniversalバイナリをつくる。

ライブラリ作成の時にきちんとuniversal版をつくりました?
CFLAGS= -arch ppc -arch i386
で済む場合もありますが、もともと OS X 用のソフトじゃないばあいは、
ppc 用でコンパイル→出来上がったファイルを保存
intel 用でコンパイル→出来上がったファイルを保存
lipo でつなぐ
とかしないとだめなばあいもあります。
ちょっと古いけど、
http://developer.apple.com/opensource/buildingopensourceuniversal.html
http://developer.apple.com/technotes/tn2005/tn2137.html
のあたりを参照。
768名称未設定:2007/12/09(日) 20:39:10 ID:1ixFcN/v0
ライブラリはとにかくUniversalで作っておくのが楽でいいよ。
自分はライブラリ分のビルドターゲットはUniv専用。


最近の外部ライブラリって、-fno-omit-frame-pointerが使われてるのが
多くて、デバッグできん。外すとコンパイル通らなかったりするし。
769名称未設定:2007/12/10(月) 00:01:19 ID:IAWZA1mK0
NSManagedObjectContextにバインドされたNSArrayControllerのremove:でもって、
NSManagedObjectを削除したあとundoで復活させた場合、そのMOCの再初期化の
機会はあるのでしょうか? propertyでないインスタンス変数の最初期化とか
relationのpropertyのobservationなどの再設定ができなくて困っています。
770名称未設定:2007/12/10(月) 08:05:11 ID:RHWrEgdH0
↑769 MOC→MO=ManagedObjectの間違い すみません
771名称未設定:2007/12/10(月) 08:58:31 ID:V9JU9ls40
awakeFromInsert ではだめなん?
CoreData むずかしくてつかったことないから知らんけど :p
http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html#//apple_ref/doc/uid/TP40001803
ここには、 transcient property も undo で自動的に処理されるって書いてあるけども ...
772名称未設定:2007/12/10(月) 12:09:02 ID:RHWrEgdH0
だめなんす…awakeFromInsertもawakeFromFetchも呼ばれず。
propertyの値だけは面倒見てくれているようですが、
例えばそれがrelation(=pointer)でその先のオブジェクトをKVOしてたりする場合に
値だけ戻っても機能せず、再度addObserverし直すにも機会がない、という状況です。
773名称未設定:2007/12/10(月) 14:40:58 ID:KrwC/fQO0
自分もその解決方法を知りたい。
結局 Undo を自分で対処するのが手っ取り早いような気はする。
774名称未設定:2007/12/15(土) 18:28:08 ID:b4+vZHzZ0
ヒレガス本第3版原書
「今秋発売」じゃなくなったのか‥ orz
ttp://www.amazon.co.jp/Cocoa-Programming-Mac-OS-X/dp/0321503619
775名称未設定:2007/12/15(土) 21:22:24 ID:RORZcU7t0
このスレが原因だったんだな。
ふとヒレカツを連想して食欲が増進するのは。
776名称未設定:2007/12/16(日) 10:52:26 ID:5lcIflcX0
Distionary.app かそれ相当なものを、Cocoa から呼び出す方法って
ありますか?

翻訳ソフト、とまではいきませんが、英語の文章の全単語を
日本語の単語に置き換える(単純に1対1で)、みたいなことを
やりたいんですが。
777名称未設定:2007/12/16(日) 11:00:33 ID:07v6ewVO0
http://developer.apple.com/documentation/UserExperience/Conceptual/DictionaryServicesProgGuide/access/chapter_4_section_2.html#//apple_ref/doc/uid/TP40006152-CH5-DontLinkElementID_4

でできます。やったことないけど。

あと、それ以前に、英語と日本語の単語って単純に一対一じゃないからね ...
778776:2007/12/16(日) 11:10:07 ID:5lcIflcX0
>>777
ありがとうございます。やってみます。

一対一でないのは、もちろんわかってます。
やろうとしているのは翻訳ではないので、その点は大丈夫です。
779名称未設定:2007/12/16(日) 15:08:39 ID:eK/AkfIq0
特定ウィンドウを前面に持ってきたり、マウスカーソルの画像を取得したいんですけど、
何か方法知っている方いませんか?

マウスカーソルは自アプリなら画像取得できたんですけど、自アプリから出ると座標しか取得できない。。。
780名称未設定:2007/12/17(月) 14:42:47 ID:TOsDi+ip0
基本的な質問をさせてください。
今、ヒレガス本(翻訳版)で勉強しているものです。
retain releaseの辺りを勉強しているのですが、試しに以下のようなコードを作って、レテインのカウントを確認してみました。

そしたら、NSNumberに13より大きな数字を入れている限りでは、インスタンス作成直後のリテインカウントの値は1となるのですが、NSNumberに12以下の値を入れると、リテインカウントの値がなぜか2になります。
これはいったいどういうわけなんでしょう?

----------------------
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSNumber *number;
int i = 5;

number = [[NSNumber alloc] initWithInt:i];
NSLog(@"The first count is %d", [number retainCount]);


[number release];
NSLog(@"The second count is %d", [number retainCount]);

[pool release];
return 0;
}
--------------------------
781名称未設定:2007/12/17(月) 16:01:42 ID:r5pLQwKR0
>>780
脊髄反射で答えるけど、
retain countは自分が管理しているもの以外は意味の無い数字と思った方が良いよ

ブラックボックスなフレームワークの中でどのように保持されているかなんて
わからないし、知らなきゃいけないようなコードは避けるべき

あとreleaseした後にそのオブジェクトに触れちゃいかん
782名称未設定:2007/12/17(月) 18:18:46 ID:5McnLJbg0
>>780
Flyweightパターンをつかってんじゃね?
783名称未設定:2007/12/18(火) 00:25:22 ID:j9/K/TX90
>>780
[[ ... alloc] init... ] は必ずしも新しいオブジェクトをかえすとは限りません。
とくに NSNumber なんて、なかみの数字が一緒なら、違うオブジェクトを使う必要が全く無いので、使い回しているということです
784名称未設定:2007/12/18(火) 07:46:40 ID:agdX9DpW0
アプリ内で使ったものをdealloc内で解放してやるのが普通だそうですが、
アプリが終了したら使ってたものは自動で解放されないんですか?
アプリを立ち上げて終了するごとにメモリがリークしてくってことでしょうか?
785名称未設定:2007/12/18(火) 09:51:55 ID:WSZWoMdK0
確かに確保したメモリくらいはプロセス終了で破棄されるけど。

外側のリソースロックしたまま落ちるとそのままになるのくらいは
分かるよね。deallocの先で何やってるか分からないんだから、
素直に自分で破棄するべし。
786名称未設定:2007/12/18(火) 12:45:27 ID:agdX9DpW0
なるほどありがとうございます。
787780:2007/12/18(火) 15:01:07 ID:RbM/Eqad0
>>781
>>782
>>783
780です。
皆さんレスどうもありがとうございます。
retaiCountメソッドはいつも正しいリテイン数を返すわけではないのですね。
勉強になりました。
定評あるヒレガス本ですが、細かいところを読んでいくと、間違いというか誤解を招くような記述が結構あるようです。
しっかりほかの情報にも当たりつつ勉強していこうと思いました。
788名称未設定:2007/12/18(火) 15:03:50 ID:Cn0DVRf90
> retaiCountメソッドはいつも正しいリテイン数を返すわけではないのですね。
いつも正しい値を返しています。
789名称未設定:2007/12/18(火) 15:06:08 ID:j9/K/TX90
retainCount が正しい retain count をかえさないんではなく、
alloc init が新しいオブジェクトを返さない場合があるだけです

NSNumber* a=[[NSNumber alloc] initWithInt:1];
NSNumber* b=[[NSNumber alloc] initWithInt:1];
NSNumber* c=[[NSNumber alloc] initWithInt:1];

とかやると、たぶん a, b, c は同じポインタになるからやってみてください
790名称未設定:2007/12/18(火) 15:09:03 ID:BPsCsap20
>>789
それ最適化潰さないとだめではw
791名称未設定:2007/12/18(火) 16:05:25 ID:DoZkUhdc0
>>787
そういう深みを知りたくなったら荻原本を読みましょう
792780:2007/12/18(火) 23:06:40 ID:RbM/Eqad0
>>788
>>789
>>791
早速のご指摘ありがとうございます。
なるほど、勉強になります。
789さんの言われた通りのコードを試してみましたら、同じところを指していました。
驚きです。

ヒレガス本を通読した後で、791さんの紹介してくれた荻原さんの本にチャレンジしてみようと思います。
793名称未設定:2007/12/19(水) 00:09:05 ID:gZLCKDku0
>>792
そういう深いところに興味があるなら、
http://journal.mycom.co.jp/column/objc/001/index.html
とか、息抜きにはじめから読んでいけばいろいろ勉強になりますよ。
794名称未設定:2007/12/19(水) 18:44:30 ID:WD5kaata0
私のドキュメントベースドアプリでウィンドウを閉じると落ちるバグが発生してます。

KERN_INVALID_ADDRESS

と表示され、ググってみると結構同じ症状が普通のアプリでも発生してる人がいるみたいなんですが、
対処方法をご存知の方はおりませんか?
795名称未設定:2007/12/19(水) 19:41:23 ID:FTsnf9nL0
( ゚д゚)
796名称未設定:2007/12/19(水) 19:57:20 ID:oEOmLeJm0
デバッガ起動で探すとか。
797名称未設定:2007/12/19(水) 22:01:38 ID:WD5kaata0
>>795
そんな顔なさらないで・・・

>>796
デバッガ起動して調べてみたり、deallocの中身を中を変えてみたりしましたが症状は変わりませんでした。
798名称未設定:2007/12/19(水) 22:23:21 ID:+Gmej5fP0
dealloc したあとのモノに触ろうとして
OSからおこられたとか
799名称未設定:2007/12/20(木) 00:52:12 ID:yqsEQN5/0
俺がやったのはNSArchiverから読み込んだ時にretainし忘れてて、閉じた時過解放
でクラッシュという奴だった。
800名称未設定:2007/12/20(木) 00:56:04 ID:VsqKWHpO0
>>797
>>798の言う通り一般的に解放後のメモリにアクセスした時にそのメッセージが表示されることが多いと思う
MallocDebugやなんかを使ってreleaseしすぎとかないか確認してみ
801名称未設定:2007/12/20(木) 09:08:21 ID:Te2igULW0
>794
>>409 参照
802名称未設定:2007/12/21(金) 00:17:02 ID:9PFNEpyq0
>>780
レオパルド専用アプリをつくっているのであれば、GCをONにすれば、
気にしなくてすむ。
803794:2007/12/21(金) 00:18:40 ID:kQXY468/0
すみません。

助言ありがとうございました。 MyDocument.mの (void)deallocの中の[super dealloc]
が原因でした。こいつを消した事で普通に動作するようになりました。
804名称未設定:2007/12/21(金) 01:44:45 ID:R1rvSaQM0
いや、super dealloc はしなきゃだめだろ、常識的に考えて ...
やっぱりなにか release しすぎなんでは。
805名称未設定:2007/12/21(金) 01:54:04 ID:WWNN6wiT0
一番ありそうなのはドキュメントウィンドウの二重解放かな
806名称未設定:2007/12/21(金) 11:29:16 ID:HSX+gYpV0
> こいつを消した事で普通に動作するようになりました。

不覚にもワロタ
807名称未設定:2007/12/22(土) 18:29:46 ID:bEKDNZM60
NSTextField へのアウトレットがあって、そこに設定した string を
選択された状態にしたいのですがうまくいきません。

IBOutlet id window; // NSTextField が乗っているウインドウ
IBOutlet id textField;

で、

[window makeFirstResponder: textField];
[textField selectText: nil];

としているのですが、textField はファーストレスポンダにはなってくれる
のですが、テキストフィールド内の string が選択されている状態になって
くれません。

使い方が間違っている、あるいは何か足りないでしょうか。
808名称未設定:2007/12/22(土) 19:21:58 ID:h/tqrsag0
同じウインドウ上に、自分で作ったサブクラスのレスポンダ(text field に限らず)がもしあるのなら、
acceptsFirstResponder
becomeFirstResponder
resignFirstResponder
あたりがうまく実装されていないのかも

809名称未設定:2007/12/22(土) 20:04:43 ID:z92Mxx3B0
全部選択なら

[textField selectAll:nil];

だけでいいんじゃネーの
810名称未設定:2007/12/24(月) 18:19:32 ID:y5xJ02/q0
こんなん出てたのか。ありがとうマイコミ

ttp://journal.mycom.co.jp/special/2007/coreanimation/menu.html
811名称未設定:2007/12/24(月) 21:28:23 ID:iEUsEp8K0
どっちかというと礼は木下さんに向けた方がいいんでないか?w

いろんなとこに節操無く取っ掛かり記事書いてくれるのに感謝
812名称未設定:2007/12/24(月) 21:55:29 ID:j3Z0jz1v0
>>810
CoreAnimationに関してはアポジャパンもがんばってるね
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html

>>811
節操無くっていう言い方はないだろw
813名称未設定:2007/12/25(火) 23:32:00 ID:/uP4DZcK0
おお。アポーも日本語訳出してたのか。ほとんど期待していなかったんだがw
814名称未設定:2007/12/26(水) 00:04:13 ID:gW1NY9Qq0
灯台下暗しという奴だな。
815名称未設定:2007/12/26(水) 06:20:27 ID:5B1adFX60
iPhone用のOSXサブセット?ってGC実装してないのな、がっかり。
816名称未設定:2007/12/26(水) 07:52:49 ID:OmCgAjff0
そうなのか。
まあでも SDK 出る頃には変わってるかも知らんし、
別に retain / release も大したことないベ
iPhone 自体のハックにくらべたら。
817名称未設定:2007/12/27(木) 00:13:20 ID:UgcUYpPq0
ここのスレで適切か分かりませんが、他に思いつかないので質問させてください。
Xcode3.0 Leopardで「テーブルビューの使い方」を学んでいました(木下さんのmovファイルのです↓)
http://lightchaos.blog10.fc2.com/
しかし、Xcode3.0では前のバージョンとテーブルのColumnの名前を設定する方法が違うらしく、
どこで名前を設定すれば良いのか分かりませんでした。名前というのは、テーブルのColumnのタイトルを
読み込ませるための"title"という名前で、実装ファイル内で使用する名前です。Inspector内には設定するための
場所は見つけられませんでした。設定する場所が分かる人、もしかしたらここかも、というのがある人は
助けてください。よろしくお願いします。
818名称未設定:2007/12/27(木) 00:36:20 ID:/MH8FyA90
>>817
>Inspector内には設定するための場所

これってIBのこといってるの?
だったらTableViewを何回かクリックしたらわかるはず。最初のクリックでScrollView、次のクリックでTableView、カラム上でも一度クリックでTableColumnだ。
違っていたらすまそ
819名称未設定:2007/12/27(木) 00:53:19 ID:j14dxRTE0
>>818のいう通りTableColumnを選択するのはなんだかややこしいので
nib Winow左上のView Modeでカラムかアウトラインを選択して、
何を選択しているのか確認しながらビューの階層を下にもぐって行くと良い

カラムを選択したらコマンド+1でインスペクタが表示される。
正しくTableColumnが選択されていたら
インスペクタウィンドウの名前がTable Column Attributeになるよ
820名称未設定:2007/12/27(木) 00:59:58 ID:UgcUYpPq0
>>818
>>819
素早い返事をありがとうございます!
2、3回クリックしたら設定できるようになりました。
821名称未設定:2007/12/27(木) 09:52:57 ID:SqeEQDL/0
「Leopardで不安定だぞゴルァ」とメッセージが来たんだがどうすれば。
822名称未設定:2007/12/27(木) 12:40:42 ID:7q7fWpRK0
Leopardで安定にするしかないね
823名称未設定:2007/12/27(木) 21:07:27 ID:lb/1IW8I0
Core Data のエンティティを NSArrayController に binding させて
テーブルビューで表示させるアプリがあるのですが、アプリの立ち上げ時に
NSArrayController にデータがロードされるのに若干時間がかかります。
(NSArrayController には、IB で "Prepares Content" にチェック入れています)

ロードが完了してから始めたいメソッドがあるのですが、
NSArrayController にデータのロードが完了したタイミングを知る方法は
あるでしょうか?
824名称未設定:2007/12/27(木) 21:13:27 ID:/MH8FyA90
>>823
>ロードが完了してから始めたいメソッド

awakeFromNibかwindowControllerDidLoadNibでだめなのか
825名称未設定:2007/12/27(木) 21:27:45 ID:sOSfeQQ/0
>>823
fetchWithRequest:merge:error:
を使って手動で、fetchする。
その後に、そのメソッドを実行させます。

http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdBindings.html
のAutomatically Prepares Content Flagの項を参照してください。
826823:2007/12/27(木) 21:45:32 ID:lb/1IW8I0
>>824
nib をロードした時点では、NSArrayControllrer の中身はまだ空のようです。

>>825
マスター・ディテイルのインターフェイスになっていて、ディテイルの方の
NSArrayController の contentSet をマスターの NSArrayController に
binding させているのですが、fetchWithRequest:merge:error: を使って
手動で fetch すると、なぜかこの2つの NSArrayController の間の binding が
おかしくなってしまいます。

automaticallyPreparesContent であれば大丈夫なのですが、こちらは
ロードされるタイミングがわかりません。
827名称未設定:2007/12/27(木) 23:55:51 ID:7q7fWpRK0
ここの
http://gien.nm.land.to/LadioManager/
LadioManagerというソフトがやっているウインドウのエフェクトは
どのAPIを使っているのでしょうか?わかる方いますか?
828名称未設定:2007/12/28(金) 00:26:48 ID:qPkJ3+aw0
CGSPrivate.h だとおもいます。
LadioManager.app の中にヘッダファイルがはいってるよ。
車輪の再発明もなんだから、そこのソースコードだけ貰えるように
本人に頼んでみたら?2ch 発のフリーウェアなんだし。
便利な EffectiveWindow というクラスをつくってあるようです。
(LadioManager.app 内 Contents/Frameworks/EffectiveWindow.h 参照)
829名称未設定:2007/12/29(土) 02:49:54 ID:lmXy7r8Q0
Xcode3.0で作成しているんですが、
Panelが最前面でなくなると2秒ほどで消えます。 なんでだろう?

アプリはアクティブのままです。
830(・∀・):2007/12/29(土) 07:35:25 ID:2Jv61LSO0
>>829
Panelってのは、もともとそんなものだよ。
831名称未設定:2007/12/29(土) 11:31:49 ID:ATn+Flu50
>>826
どこかのサンプルコードで
awakeFromNib内でperformSelector: withObject: afterDelay: を呼んでた。気がする。
delayは0.0でもよかったと思う。
832名称未設定:2007/12/29(土) 12:00:53 ID:lmXy7r8Q0
>>830
だとするとツールボックスとかには使えないのかな〜。

GC無しだと消えなくて、有効にすると消えるようになるのでハマってます。
(バインディングしても×)
833名称未設定:2007/12/29(土) 12:24:32 ID:80uY670V0
NSButtonのサブクラスでmouseDraggedを検出したいんだけど、
mouseDownを上書きしなかったり[super mouseDown:];したりすると呼び出されない。

Safariのブックマークバーの移動みたいなのを実装したいのだけど、どうしたらよいモノクローナルか。
834名称未設定:2007/12/29(土) 12:25:30 ID:80uY670V0
>>833
>よいモノクローナルか

「よいものか」のタイプミス?
よく見て打ってなかったw
835名称未設定:2007/12/29(土) 12:34:56 ID:lmXy7r8Q0
>>832
IBOutletで中身のTebleViewとかを参照するようにしたら消えなくなりました。
GCの動作を考えると納得できるかな、、。

本当に失礼しました。

836名称未設定:2007/12/29(土) 12:59:06 ID:zIf9nF5M0
>>835
いえいえ、はたから読んでいて勉強になりました
どこからもリファレンスされてないので回収されちゃったんですね。
837833:2007/12/29(土) 22:29:52 ID:QsDwGvT0O
自己解決
838名称未設定:2007/12/30(日) 12:42:38 ID:I03enZu7P
もしよければどうやって解決したのか説明プリーズ
839833:2007/12/30(日) 13:53:26 ID:Od2H0dir0
NSButtonのサブクラスで
- (void)mouseDown:(NSEvent *)event{
[self highlight : YES];
}

- (void)mouseUp:(NSEvent *)event{
[self highlight : NO];
if(!__dragged)[self setNextState];
__dragged = NO;
}

- (void)mouseDragged:(NSEvent *)event{
NSPoint mouseLoc = [[[self window] contentView] convertPoint : [event locationInWindow] toView : [self superview]];
[self highlight : NSPointInRect(mouseLoc, [self frame])];
__dragged = YES;
}

後はmouseDragged:中にButtonの移動を[self setFrameOriin:]したり他のButtonを[[** animator] setFrameOriin:]したりして。
840名称未設定:2007/12/31(月) 01:10:31 ID:0Ph9yQxH0
非常に古いフリーウェアを Leopard でコンパイルしようと思ったら、
IB 3.0 で古い nib が開けなかったよ!
IB 2 で一度コンバートしろとか言われた。びっくし。
841名称未設定:2008/01/03(木) 14:42:21 ID:O+w5XhSV0
>>838
サンキュー
842名称未設定:2008/01/04(金) 23:57:09 ID:XMjyAcod0
Message FrameworkってLeopardでdeprecatedになってるね。
Mail.appでも使っているのにdeprecatedってことは10.6以降、
新しいMessage Frameworkがくるのかな?
843名称未設定:2008/01/05(土) 09:43:10 ID:YVarFCfy0
もう俺は deprecated の文字を見たくない
便利だと思って使っていた機能は、ことごとくdeprecated になってゆくorz
844名称未設定:2008/01/05(土) 11:15:58 ID:hapEjhXD0
たとえば?

個人的には stringWithData: が deprecated になってよかった。
みなさんきちんと stringWithData: encoding: を使ってくださいね ...
mac のデフォルトエンコーディングという概念は危険すぎる。
845名称未設定:2008/01/05(土) 19:14:00 ID:B7tIeJMI0
バインディングってフォーカスが他に移動しないと値が反映されない?

NSTextFieldに値を入力中にNSButtonを押しても入力前の値なのですが
NSButtonのアクションで何かしてあげないといけないのでしょうか?
846名称未設定:2008/01/05(土) 19:27:46 ID:6P4bDC6n0
>>845
- (void)commitEditing
847845:2008/01/05(土) 19:34:08 ID:B7tIeJMI0
>>846
サンクス。
848名称未設定:2008/01/05(土) 20:01:05 ID:AWRu+xs/0
QTMovieView(またはQTMovie?)で再生が終わった、または最後のフレームに達したか
どうかを知るにはどうすればよいのでしょうか?

スライドショーを作りたいのです。
よろしくおねがいします。
849名称未設定:2008/01/05(土) 20:04:06 ID:cZnlCfWP0
現在の再生時間とムービーの長さを比較すればいいんじゃねえの
850(・∀・):2008/01/05(土) 22:34:16 ID:wcRF3eEH0
>>848
QTMovieDidEndNotificationを受け取る。
851845:2008/01/05(土) 23:17:27 ID:B7tIeJMI0
Cocoaバインディングを使ってみたけど小回りが悪い?
もしかして無理矢理使うメリットはない??
852名称未設定:2008/01/05(土) 23:45:03 ID:6TLa1vYF0
無理に使わなければいい
853名称未設定:2008/01/06(日) 00:04:23 ID:5q6zaMcO0
>>845 >>846
Obj-C 側からなにもやらなくても、
IB で continuously updates value とかいうのがあるよ

あと無理に使うことはない。ややこしいことがやりたくなると
IBOutlet つかわないとどうしようもなくなるけど、
環境設定パネルとか、テーブルをつくるのは非常に簡単になるとおもうけど。
854名称未設定:2008/01/06(日) 00:05:46 ID:5q6zaMcO0
あと、小回りが悪い、ってどういうあたり?興味があるので聞いてみたい

また、845 のような質問をしている段階で、
何事も一日だけで判断するものじゃないと思う。
コーヒーだってはじめて飲んだ日は苦いだけだよ。
855845:2008/01/06(日) 08:35:33 ID:Jc7YFiKh0
Cocoaプログラミング最初の一本、かつ初日なもので…。

(1) 複数の入力値から複数の出力結果を求める簡単なプログラムを作成。
(2) (1)をビューに依存するクラスとビューに依存しないクラスに分割。
(3) (2)のビューに依存しないクラスをCocoaバインディングに書き換え。←今ここ

XcodeとIBを適当にいじりながら作業しているのですが
Cocoaバインディングで不正な値が入らないように
入力チェックする方法がわかりませんでした。(ValueTransfomer?)
856名称未設定:2008/01/06(日) 10:08:41 ID:5q6zaMcO0
857名称未設定:2008/01/06(日) 10:10:35 ID:5q6zaMcO0
個人的には、あるていどわかってきたら、
ADC の関係しそうなドキュメント (〜Guide)にざっと
はじめからおしまいまで目を通して、
どういう機能があるのかないのかを把握するのがいいとおもいます
858名称未設定:2008/01/06(日) 10:12:18 ID:5q6zaMcO0
日本語訳もあったので。
http://developer.apple.com/jp/documentation/japanese.html

とりあえず Cocoa するなら、そこにあがってる
Cocoa Fundamentals, Application Architecture, Cocoa Bindings,
KVC, KVO はざっとよんでおいたほうがいいとおもう
859名称未設定:2008/01/06(日) 11:58:36 ID:5DfTBz+t0
>>845

蛇足かもしれんが
ttp://developer.apple.com/jp/documentation/japanese.html
に置いてあるムービー見とくとわかりやすいかもしれん。

初期からCocoaフレームワーク触ってると、10.3で使えるようになったバインディングは使わにゃ損、853の人がいうように、よほどのこと以外はIBOutlet使いたくない、てのが実感。
860845:2008/01/06(日) 12:01:59 ID:dDmkiqNsO
皆さんご親切にアドバイス感謝です。
本当はJavaらーなのですがもう少しXcode+Obj-Cで頑張ってみます!
861名称未設定:2008/01/06(日) 12:57:26 ID:5q6zaMcO0
Cocoa はもうほとんどスクリプト言語並の動的自由度があるので、
慣れればたまらなくなりますよ。ぜひもうちょっと遊んでみてください。
862名称未設定:2008/01/06(日) 21:21:03 ID:EZpcMz620
つうかObjective Cはそれ自身のメタ言語なんだと気がついた
863名称未設定:2008/01/07(月) 07:42:04 ID:D+YR1Ldb0
テキストフィールドを持つダイアログで、バインディングを使っています。
OKボタンに対するIBActionで、編集状態のテキストフィールドの内容を
確定させて、その後モデルからデータを取り出すようにしたいと考えています。

>845-847 を読んで調べたのですが、いまいち飲み込めません。
NSObjectControllerに対してcommitEditingを投げれば、編集中の値が
確定される、と考えればよいのでしょうか?
864名称未設定:2008/01/07(月) 07:47:04 ID:Mjvp+3Xw0
バインディングつかってれば何もしなくていいです。
ボタンからアクションが呼び出された段階で、
モデルにただしい値がセットされてるはずだけど。

ただ、標準では NSTextField はリターンキーかタブキーかおさないと
モデルに値がセットされないので、なにもしなくてもボタンをおすだけで
よくするには、Interface Builder で、バインディングの value のところに、
continuously updates value
というチェックボックスがあるので、それをチェックしてください

そうすると commitEditing もなにもする必要ないです
865名称未設定:2008/01/07(月) 09:37:57 ID:EaxSFrw/0
>>864
>continuously updates value
>というチェックボックスがあるので、それをチェックしてください
うまく行きました。ありがとうございます。

・・・これは数値入力のテキストボックスなのですが、alphabetの入力
も出来てしまいます。
数値以外のタイプ自体を拒否するような、方法がきっとあると思うので、
調べてみます。
866名称未設定:2008/01/07(月) 09:47:22 ID:aALtQ6Pb0
>>865
NSFormatterってのがあります。
あなたの使ってるIBのバージョンが分からないけど、
数値のみのNSFormatterがパレットにあるので
それを配置したNSTextFieldにドロップすればいいです。

IB 2.xならNSTextFieldのインスペクターのプルダウンメニューから、
3.0ならNSTextFieldの下に変なアイコンが付くのでそれをクリックすれば
フォーマットを編集できます。
867名称未設定:2008/01/07(月) 09:58:50 ID:Mjvp+3Xw0
>>856 >>857 >>858 >>859
あたりの文献をみてみてね!
868868:2008/01/07(月) 18:28:42 ID:aknoU2Gy0
「たのしいCocoaプログラミング」を読んでいる初心者ですけど、NSTableViewについてさっぱり解らないので、教えてください。
280ページ
「numberOfRowsIntableView:は、テーブルの行数を返すもの」と書いてあるけど、282ページでは、わざわざ実装しているのはなぜですか?
C言語的発想だと、「numberOfRowsIntableView:」を呼び出して、値を与えればいい様な気もしますが・・・?

基本的なところが、解ってないかもしれませんので、悪しからずです。m(_ _)m
869名称未設定:2008/01/07(月) 18:54:53 ID:esLQEgX50
できるだけ NSTableView に値を持たせないのが Cocoa 的発想だと思っとけばいい。
870868:2008/01/07(月) 19:48:34 ID:aknoU2Gy0
質問の仕方がまずかったのかなぁ?

データソースメソッドには、「numberOfRowsIntableView」が在るのよね。
って、ことは、282ページにあるように
- (int)numberOfRowsIntableView:(NSTableView *)tableView
{
(中略)
}
と書くのは、お約束なの?

もしかして、(int)に返す値が、「テーブルの行数を返す値」なの?
871名称未設定:2008/01/07(月) 19:54:04 ID:esLQEgX50
そうです。
872名称未設定:2008/01/07(月) 20:00:05 ID:QKTCUJQC0
NSTableViewはデータソースメソッドを実装した(任意の)オブジェクトの参照を持ってる。
必要に応じてnumberOfRowsIntableViewとかがNSTableViewから呼ばれるから、
必要な値を返すように実装する。
この場合はキミが表示させたいデータが何行あるかその数値を返せば良い。
873名称未設定:2008/01/07(月) 20:06:56 ID:va0FCvA00
「(Informal) Protocol」が何であるか理解していないような気がしないでもない。
874名称未設定:2008/01/07(月) 21:32:53 ID:4bqMNgg4O
ボタンが押されたときの処理で、Cocoaバインディングでバインディングしたインスタンスを渡したい場合
NSObjectControllerをアウトレットにする以外の方法って何かありますか?

この方法で動いてはいるのですが、アウトレット経由になるのが気持ち悪くて。
875名称未設定:2008/01/07(月) 22:21:08 ID:V6qGd51/0
>>870
"ハリウッドの原則" でググってくれ。
あんたがメソッドを呼び出すんじゃなくて、フレームワークがあんたの実装したメソッドを呼び出すんだ。
876名称未設定:2008/01/07(月) 22:35:01 ID:J7OSGz+N0
>>870
>お約束なの?

ちょっと不思議だけどそれがCocoaのお約束。
テーブルビューは自分を表示するときにいちいちデータソースに「おまい様テーブル何行あるのかおせーて」「おまい様、この列のこの行は何かおわかりかい」と聞いてくる。
そのメソッドにNSLog(@"Tell me how many lines");とか埋め込んで動かしてみると働きぶりがわかる。

858のムービーの中級編テーブルビューの真ん中あたり見てみ。
877名称未設定:2008/01/07(月) 23:27:49 ID:iwps7dYr0
>>874
NSDictionary *theDict = [self infoForBinding:@"theBindingValueName"];
id theBindingedObject = [theDict objectForKey:NSObservedObjectKey];

判らんけど、これで取れないかな?outletを減らしたいのは禿堂なので実験してみてくれ。
878名称未設定:2008/01/07(月) 23:31:14 ID:c00g2X7+0
>>863
846です。
continuously updates value とか NSControl のcontinuous は便利なのですが。
core data のように undo, redo を実装したモデルの binding に使うと、
NSUndoManager の stack が無闇に増えていくという副作用があるので、注意して
使う必要があります。

NSEditor Protocol に準拠している NSController や NSManagedObjectContext に
- (BOOL)commitEditing を送信すれば、編集中の値は確定されます。

蛇足ですが、IBOutlet を使うのを忌避するポストがありましたが、
GC を使う時には、Nib file の top - level objects を参照する必要がありますから
あまりこだわらなくてもよいのでは?と思います。
879名称未設定:2008/01/07(月) 23:45:12 ID:Mjvp+3Xw0
>>870
テーブルビューはあなたが与えたデータを表示するんだけれども、
データが何行あるかはあなたは知ってるけど
テーブルビューは知らないでしょ。
だから、テーブルビューにあなた(データソース)が教えてあげないと行けない。
それをするのが numberOfRowsInTableView です。
このメソッドは、普通はあなたは呼びださないけど、
NSTableView が表示するときに呼び出すわけです
880名称未設定:2008/01/08(火) 07:42:52 ID:HQLW2jxJ0
870です。
書き込みが遅れて、すみません。m(_ _)m

お蔭様で、少しは理解できた気がします。
皆さん、本当にありがとうございました。
881名称未設定:2008/01/08(火) 08:25:17 ID:sRcwfeaY0
>>874
NSButtonのAction Invocation bindingsのargumentにbindすれば可能です。

ただtarget-actionの方が適切なことが多いと思います。

サンプルコードは
Bound Button
http://developer.apple.com/samplecode/BoundButton/index.html
にあります。
882名称未設定:2008/01/08(火) 09:06:41 ID:WoCf1ayA0
当方Xcode 2.5 + Tigerです。

>866, 867
色々試したのですが、テキストフィールドで数値のみ受け付ける、
かつリアルタイムでチェックする、という方法がみつけられません。

NSNumericFormatterをattachしてみたのですが、これ自体は英文字や記号の
入力が出来なくするわけではないですね。確定するタイミングでチェックが行わ
れるだけでした。

この状態でcontinuously updateがセットされた場合、formatterが通らない
文字が打ち込まれた瞬間からモデルが更新されなくなります。(Viewのみ)

試しに、KeyValue Validationを実装してみたのですが、テキストフィールドの
validates Immediately をチェックしても、やはり確定するタイミングでのみ
validateKey:error:が呼ばれるだけでした。

KVVでcontinuously update + validates Immediately の組み合わせの場合、
validationは一文字ずつタイプするたびに呼ばれるのですが、文字をタイプした
ときにすぐ警告のシートが降りてくるとか、ビープがなるとか、そういった挙動
はしてくれません。やはり確定時になってから警告のシートが出てきます。

リアルタイムでチェックするのも、数値のみ入力を受け付けるというのも難しい
のでしょうか。
883名称未設定:2008/01/08(火) 09:21:07 ID:ottJpccK0
>>882
NSTextFieldのサブクラスでtextDidChangeを
オーバーライドではダメ?
884名称未設定:2008/01/08(火) 10:04:17 ID:Qr8BlOH00
NSMovie(View)は使わない方がよいのでしょうか?
885名称未設定:2008/01/08(火) 10:29:40 ID:LHkDm1Xc0
10.4 以上でいいなら QTMovieView / QTMovie をつかえという Apple のお達しです。
そっちのほうが高機能だし、べつに使い方もより難しいわけでないし。
886名称未設定:2008/01/08(火) 12:41:17 ID:sRcwfeaY0
>>882
そういったインターフェースにしたいのなら
モデルをvalidateするよりも、NSFormatterのisPartialStringValid:newEditingString:errorDescription:
を使うのが手間がかからなくてよいと思います。

使い方はヒレガス本を読んでください。
(訳本ならP299, 2nd EdならP326)
887名称未設定:2008/01/08(火) 18:36:08 ID:CqWkWRK70
>>885
10.3.9以上だよ
888名称未設定:2008/01/08(火) 19:20:59 ID:40DHP1ku0
>>885>>887
ありがとうございました。
889833:2008/01/08(火) 20:46:15 ID:NQAHvI5T0
GC的には
1000 名前: 名称未設定 Mail: sage 投稿日: 2007/05/19(土) 00:29:23 ID: uGrJMnws0
self = nil;

とすべき?
890名称未設定:2008/01/08(火) 23:18:07 ID:LHkDm1Xc0
なにがしたいのかわからんが、 self に代入してもなにも起こらないよ
method の暗黙第一変数なだけなので。解放されるわけでもないです
891名称未設定:2008/01/09(水) 00:55:53 ID:wm9BAiDF0
>>886
ありがとうございます。NSNumberFormatterのサブクラスを書いて
isPartialStringValid:newEditingString:errorDescription:
を実装するということですね。なるほど、これなら出来そうです。

・・・結局、TextFiledへのoutletは必要になりますが。
892名称未設定:2008/01/09(水) 00:58:12 ID:G5w7KVAY0
まあ binding は万能じゃないし、
べつに outlet つくるのが悪いわけでもないとおもう

モデルとビューのつまらん同期のコードが半減するので便利でありがたいという
話で、全部 binding にしないと ... とかいうものではないと思います
893名称未設定:2008/01/09(水) 22:32:03 ID:ptWjRje40
undo/redoが効かなくなりました。
メインメニューのメニューアイテムがアクティブになりません。
コネクションはファーストレスポンダの該当アクションに
接続されています。
今まではテーブルビューでレコードの追加削除の後に
効いていたのですが。
データとなるアレイコントローラのバインドも正しいです。

何か接続が切れたのでしょうか。
894名称未設定:2008/01/09(水) 22:42:29 ID:nktB7QkM0
自己解決しました。
メインウィンドウのデリゲートの接続が切れていただけでした。
お騒がせしました。
895名称未設定:2008/01/11(金) 23:59:53 ID:W9AJWJcx0
iTunesのプレイリスト作るボタンみたいにoptionキーを押したら絵が変わるボタンを作りたいのですが、
どうやって作れば良いでしょうか?
HotKeyではoptionのみのキーダウンは拾えないみたいなんですが。
896名称未設定:2008/01/12(土) 11:28:14 ID:ya+eYLnU0
>>895
[[NSApp currentEvent] modfierFlags]
897名称未設定:2008/01/12(土) 11:31:39 ID:YD/gC/7K0
NSApplicationかNSWindowのサブクラスを作って、sendEvent:(NSEvent*)をオーバーライドしてみては、どうでしょうか?
比較的ローレベルなイベントが拾えるはずです。
898名称未設定:2008/01/12(土) 11:43:20 ID:ZzXgnVVX0
-[NSResponder flagsChanged:]
899名称未設定:2008/01/12(土) 12:22:23 ID:YD/gC/7K0
>>896
>>898
それだと、いつキーが押されたか分からないのでは?
-[NSResponder flagsChanged:] は、firstResponderになってないと、イベントが送られて来ないだろうし。

900895:2008/01/12(土) 12:29:24 ID:AWhplJtC0
>>896-899
レスありがとうございます。

>>896さんの方法は>>899さんご指摘の通りポーリングで監視する必要がありますね。
ボタンのサブクラスを作って>>898さんのメソッドを上書きしてみたのですが、
たしかにfirstResponderじゃないとイベントを拾えなかったので、
結局ボタンがのっかっているウィンドウのサブクラスを作ってflagsChanged:をオーバーライドして
そこでボタンのイメージを変える事でうまくいきました。
901名称未設定:2008/01/12(土) 17:35:48 ID:NyaXsIz20
Objective-Cを勉強しようと思い木下さん著の本を買って来たのですが、
メソッドというものがどういうものなのかよくわかりません。
メソッドとは様々な処理だと書いてありますが、インスタンス変数とごっちゃになってしまいました。
初歩的な質問ですがどうかご教授ください。
902名称未設定:2008/01/12(土) 17:36:19 ID:NyaXsIz20
sage忘れ失礼いたしました
903名称未設定:2008/01/12(土) 17:50:15 ID:lfKHK/MT0
変数:値(数値や文字列)を保持したもの

メソッド:変数に値を代入したり取り出して処理したりする一連の流れ
904名称未設定:2008/01/12(土) 17:53:30 ID:NyaXsIz20
>>903
なるほど。理解できました。
ありがとうございます。
905名称未設定:2008/01/12(土) 18:35:59 ID:ogJZ65Iu0
>>904
あと、マルチポストというものについて理解した方が今後のため
906名称未設定:2008/01/13(日) 10:01:25 ID:ZP3911Lw0
マルチスレッドというのを初めてやろうとしてるのですが、
NSThread の detachNewThreadSelector:toTarget:withObject: で
スレッドを走らせ、その処理の最中にアプリが終了された場合って、
このスレッドはどうなってしまうのでしょうか。

スレッドの処理が途中のまま、アプリと一緒に終了?
スレッドの処理が終了するまで、アプリも終了しない?
アプリだけ終了し、スレッドはその処理が終わるまで残る?
907名称未設定:2008/01/13(日) 11:40:44 ID:AaMLdA1f0
聞く前に自分でテストすればわかる事だと思うんですが
908名称未設定:2008/01/13(日) 12:37:34 ID:h/BZsqFz0
>>906
スレッドは同一プロセス内の分散多重処理技術ですよ。
909名称未設定:2008/01/13(日) 13:45:58 ID:wa8Q1tNK0
画像、ムービービュアーの作成で悪戦苦闘しているのですが、
ムービーのサムネイルをリアルタイムで作成表示させるとかなり重く遅くなります。

サムネイル画像のファイルを別に作成して表示させたいのですが、
ファイル名を一意に付けるにはどうするのが良いのでしょうか?(連番カウンターを保持?)

そもそもサムネイル管理の定石が他にあるのでしょうか?

お知恵をお貸しください。
910名称未設定:2008/01/13(日) 13:51:52 ID:uK/1UFuk0
元ファイル名とサムネールファイル名の対照表をつくって別に保持するか、
僕なら安直にもとのファイルのフルパスで / を _ か何かにかえた名前で
~/Library/Caches/app_name/imgs/
とかのしたにファイルをつくりますが。
そうするとほとんど一意になりますよ。
911名称未設定:2008/01/14(月) 16:42:12 ID:D1mx4Mip0
CoreDataアプリで、

一度保存して、変更加えないでまた保存すると書類が0KBで
何も書き込まれてない状態になるんだが、同じ人いる?
912名称未設定:2008/01/14(月) 18:02:03 ID:E2gHr8tc0
>>868
なるほど、ありがとうございます。
試してみたのですがファイル名がやたらと長くなるのが難点ですね。
HFS+フォーマットだと255、HFSフォーマットだと30バイトみたいなので
ちょっと難ありかもしれません。
913名称未設定:2008/01/14(月) 18:41:52 ID:jXHyaSwtP
俺ならパスからテキトーなハッシュ値を生成してファイル名に使うかな。
それなら長くならないし、SHA1なら重複しにくいだろうし。
どう生成するかは知らないんだけど…
914名称未設定:2008/01/14(月) 19:22:35 ID:cfDn7TYJ0
現在の日付を使う。
915名称未設定:2008/01/15(火) 00:55:15 ID:nkNypgn80
対象ファイルの inode 番号 もしくは HFS の CNID をキャッシュファイルの id としてつかってしまえばいいのでは?
それならひとつのボリューム上では一意なことが保障されてるし。
前者なら stat
後者なら FSGetCatalogInfo をつかう。
916名称未設定:2008/01/15(火) 20:28:57 ID:jk78Wild0
質問です∩(´・ω・`)  思いっきり初歩の初歩の初歩です。
質問するのもはばかられるような質問です。

多くのMacアプリ開発本を見ると「C原語の知識を持っててね」と書いて
あります。

ほいじゃあ、C原語本を買ってみるかあ……と思うのですが疑問が2つ。

1・MacOS X付属の開発課環境を使って勉強できるんでしょうか?

2・(1が出来るとして)基本的にWin系で説明されてるのですが、Mac上で
  も同じことができるんでしょうか?

ずーっとCOBOL使いだったんですが、プログラムの仕事も離れ久々に
何か作りたいけどどうしたものかと。
917名称未設定:2008/01/15(火) 20:32:20 ID:2p5aaL6/0
>>916
1. おけー
2. おけー

でも、あんまりWindowsベッタリな本はあまりよろしくない印象が…
918名称未設定:2008/01/15(火) 20:36:03 ID:nTjAtwvn0
>>916
目的は、Cじゃなくて、Macアプリだよね?。
だとしたら、俺のおすすめは、
"たのしいCocoaプログラミング" & "Xcode"かな。
たのしいCocoaプログラミングは、Cの知識を前提としていないので、
これで、足りなければCを学べば良いでしょう。
正直、5年前にこれがあればと思った。
919名称未設定:2008/01/15(火) 20:49:19 ID:NWUP/alr0
グローバル(大域)変数という悪魔から逃れられれば、C言語は簡単ですよ。
変数のスコープってのを意識し続けましょう!

ポインタはとりあえず、見ないふりでも大丈夫かな?Cocoaなら。
920名称未設定:2008/01/15(火) 22:11:42 ID:jk78Wild0
>>917-919
あれな質問にレスありがとうございます。ほんとに嬉しい。
開発環境が使えるのは安心しました。
ちょいと本屋に行ってみます。

まあ、きっと、ENVIRONMENT DIVISIONとか書くのよりは応用範囲が
広いような気がしないでもありません。COBOLはCOBOLで楽しうござ
いましたが。
921名称未設定:2008/01/15(火) 22:27:31 ID:CuW5Ners0
大丈夫大丈夫。
言語を問わずプログラミングの知識があれはなんとかなるよ。
見よう見まねで後は慣れ。
俺も日曜プログラミングで半年でだいたいわかった?
922名称未設定:2008/01/15(火) 23:41:50 ID:nkNypgn80
>>921
折角いいことをかいているのに、文章の終わりが ? だとなんか台無し ...

あと、GUI プログラムをしたかったら、
やっぱり Mac 用の本を買ったほうがいいと思う。
まだすくないけど売ってなくはないので。

GUI はライブラリ周りがかわると別物だからね。
923名称未設定:2008/01/16(水) 00:22:33 ID://9NDsl10
うん、やっぱり一冊有ると大分効率が違うね。その他の情報はネットで補完するにしても。
924名称未設定:2008/01/16(水) 17:07:27 ID:c4ja9XYF0
楽しいCocoaプログラミングの本でノンビリ楽しんでいるところ。
RSSリーダーを作った後、メモリ管理とかデータソースの説明に進み、
今作ったRSSリーダーそのものの説明がないことに少し戸惑う。
「この行の、この部分はこういうことをしている」的な説明が欲しいな。
でももう少し読み進めてみる。
925名称未設定:2008/01/16(水) 17:19:56 ID:I2soBNVj0
GCに対応してCocoaに手を付けたけど、

やっぱりiPod touch用アプリとかも後々つくってみたいなーと思ったら
結局メモリ管理が必要になるのが嫌すぎる…。
926名称未設定:2008/01/16(水) 19:18:58 ID:WWFWcQSl0
>>925
俺もそう思う。Javaから入ったから、メモリ管理なんてめんどくてやってられんよ。
アップデート+SDK以降は、対応してますってならんかな。
927名称未設定:2008/01/16(水) 19:26:33 ID:b17aVHmU0
なってほしいねえ。
現状のtoolchainは第三者に開発される事想定してない状態の物なんだし、ありえなくはないかもなあ。
しかしGCのオーバーヘッドも皆無じゃないだろうし、メモリ逼迫気味なtouchに提供できるかな。
願わくばRubyCocoaのサブセットもぜh(r
928名称未設定:2008/01/16(水) 21:22:00 ID:p7/lmNKr0
そんなカリカリにチューンしないと動かないほどなのか?
Ruby VMが動かないくらいってことは知ってるけど

retain/releaseがある分参照関係のメモリ管理とからくちんだと思うんだけどなぁ
929名称未設定:2008/01/16(水) 23:04:21 ID:i+MYBBeb0
じゃなくて、GCはどうしてもメモリを余計に使うから。
原始的なマーク&スイープならばあまり無駄にならないけれど、たっちのパフォーマンスだと
窒息症状が頻繁に起きるだろう。
930名称未設定:2008/01/17(木) 00:18:24 ID:ceTc0rj50
iPhone SDK に GC あってほしいのは同意だけど、
retain / release は C のメモリ管理ほど面倒じゃないよ ...
ほとんどの一時変数は autorelease pool で勝手に破壊してくれるので。

1. 他のメソッドから戻ってきた変数を保持したかったら retain
2. 自分で alloc initHogeHoge したときは既に retain されてる
3. 自分で retain したものがいらなくなったら autorelease

でおしまいですが...

まあ GC より面倒なのは事実
931925:2008/01/17(木) 01:55:25 ID:7+geBbsU0
家にほったらかしてあったヒレガス本の主にメモリ管理の部分を読んでみつつ、
ちょっとしたアプリを作ってみた。

ま、まあ、恐れていたほど怖くもないかな、releaseも、retainも…。

とりあえずautoreleaseの意味がやっとわかったのが収穫かなー。
やっぱりなんか作ってみないとわからんねこういうのは。
932名称未設定:2008/01/17(木) 10:58:13 ID:Mu2Xb5R00
#importなんですけど、
<〜>と"〜"の違いって何ですか?
933名称未設定:2008/01/17(木) 11:04:29 ID:ceTc0rj50
< ... > はシステムのヘッダをよみこむとき (Cocoa とか。)
" ... " はそのプロジェクトのディレクトリにある自分で書いた .h をよみこむとき。
934名称未設定:2008/01/17(木) 11:26:42 ID:Mu2Xb5R00
>>933
ありがとうございます。よくわかりました。
935名称未設定:2008/01/17(木) 15:55:41 ID:7+geBbsU0
すみません、マルチスレッドでのメモリ管理について質問です…。

- (void) doThread {
id object = ...
[NSThread detachNewThreadSelector:@selector(action:)
 toTarget:self withObject:data]];
}

-(void) action:(id) data {
 NSAutoreleasePool* pool = ...
 ...
 [pool release];
 [NSThread exit];
}

っていう処理を考えたときに、

actionメソッドの引数dataってretainしないと駄目なんでしょうか?
だとするとdoThreadのスレッドがactionメソッドでretainする前にdataをreleaseしたら、
ぬるぽな気がするのですが何か解決策はあるのでしょうか??
936名称未設定:2008/01/17(木) 16:11:10 ID:AL5m7V8i0
detachの前にdataをretain → actionでreleaseってやっとけば中で何が起きてても大丈夫のような気がする
937名称未設定:2008/01/17(木) 16:17:11 ID:LNX3wXfd0
スレッド起動前とスレッドの中のdataの参照カウンタをデバッガで確認してみて。
detachNewThreadSelectorが1増やしてるような気がする。
938名称未設定:2008/01/17(木) 16:24:34 ID:g2mkYCaA0
そんなまぬけなことをする前にドキュメントを読め。
939名称未設定:2008/01/17(木) 16:38:45 ID:7+geBbsU0
ぶ、ドキュメントに書いてありました…。

The objects aTarget and anArgument are retained
during the execution of the detached thread, then released.

ありがとうございますorz
940名称未設定:2008/01/18(金) 13:07:18 ID:bh9nmVe00
すいません。質問させてください。
ttp://pc11.2ch.net/test/read.cgi/mac/1198258657/320

このソースを使って機能拡張したいと思っています。
同梱の”safari.txt”にある
- (void)goForward:(id)fp8;
- (void)closeCurrentTab:(id)fp8;
などは
CWindow.h内の
-(void)selectPreviousTab:(id)sender; の下に
-(void)goForward:(id)sender; や
-(void)closeCurrentTab:(id)sender; と追記して
CWindow.mで
[winCont goForward:nil];
[winCont closeCurrentTab:nil];
と書く事で実行できたのですが、
”safari.txt”の1155行目にある
- (void)reload:(id)fp8;
を実行することができません。
これを実行するにはどのようにすればいいのでしょうか?
お願いします。
941名称未設定:2008/01/18(金) 14:34:44 ID:77u0NS0y0
もうそのソースダウンロードできないからわからないけど、
手元で class-dump したかんじでは、
reload は BrowserDocument のメソッドで、
goForward とかは BrowserWindowController のメソッドみたいだから、
そりゃ window controller に reload 送っても動かないよ。
BrowserWindowController クラスにもいろいろ reload 系の
メソッドがあるからそれをつかってみたら?
942名称未設定:2008/01/18(金) 18:09:24 ID:bh9nmVe00
>>941
自分では全部試したつもりだったのですがまだ試してなかったようで
- (void)stopOrReload:(id)fp8;
を使う事で希望の動作は実現しました。
ありがとうございます。

ただ、現状、BrowserWindowController以外のクラスのメソッドがつかえません。
これを使うようにするためにはどうすればいいのかわかりません。

NSWindowをポージングしているようで、
CWindow.h内で
NSWindowを継承したCWindowクラスと
@interface NSWindowController (HiddenMethod)
といったかんじでカテゴリ?されています。
943名称未設定:2008/01/18(金) 18:24:13 ID:77u0NS0y0
そのソースコード内ではどうやって window controller を取り出してるの?
もちろん window controller のオブジェクトには
window controller のメソッドしか使えないので、
BrowserDocument のメソをつかいたかったらなんとかして
BrowserDocument のインスタンスをとってこなきゃいけないです。
944名称未設定:2008/01/18(金) 18:37:46 ID:bh9nmVe00
そこがわからなくて余計に困って状況なんです。

クラスダンプしたやつの手元のファイルで4831行目くらいに
@interface WindowController : NSWindowController
ってなってるのとかって関係あります?

でも、XCodeのドキュメントでNSWindowControllerをみても
NSWindowを継承しないんですよねぇ。

自分で書いてないコードなんでさらしちゃっていいものか。
945名称未設定:2008/01/18(金) 18:39:38 ID:bh9nmVe00
ちなみにSIMBLプラグインです。
946名称未設定:2008/01/18(金) 19:45:53 ID:m5X9XEz/0
>>944
ソース見たら分かるだろう。これだよ。
NSWindowController * winCont = [self windowController];
947名称未設定:2008/01/18(金) 20:10:14 ID:HAji0UCd0
低レベルな私は話についていけませんorz
948名称未設定:2008/01/18(金) 21:07:50 ID:EDLBHfWn0
>>946
[self windowController];
の windowController っていうのはどこからきたんでしょうか?
self はCWindowですよね?
949名称未設定:2008/01/18(金) 21:15:26 ID:EIIYfupC0
親クラスが持ってるんでネーの?
950名称未設定:2008/01/18(金) 23:47:00 ID:EDLBHfWn0
親クラスって言うのは
NSWindowControllerの親クラスということでしょうか?

Safariをクラスダンプしたなかには
NSWindowControllerのサブクラスはみつかったのですが、
親は見つけられませんでした。
951名称未設定:2008/01/18(金) 23:51:32 ID:m5X9XEz/0
- (id)windowController は NSWindow のメソッド
self は CWindow
CWindow の親クラスは NSWindow

952名称未設定:2008/01/19(土) 01:29:52 ID:0lGu4F/k0
なるほど。ということは
Safariのクラスダンプの中から
selectNextTabメソッドが使いたいとなると
そのメソのクラスのBrowserWindowControllerが
継承している WindowController クラスを探す。
そいつはNSWindowControllerを継承している。
NSWindowControllerのインスタンスを作れば、
selectNextTabメソッドを使えるようになる。

そのためには、
NSWindowのサブクラスを作って
さらにSafariのNSWindowクラスをポージングして、
windowControllerメソッドで
NSWindowControllerのインスタンスを作る。

という流れであってますでしょうか?
953名称未設定:2008/01/19(土) 02:12:55 ID:8mK8xGGb0
>>952
windowControllerメソッドはインスタンスを作るものではないよ。
既に作成済みのインスタンスを取得するメソッド。

NSWindowとNSWindowControllerの関係はSafariに限らずCocoaアプリの基本。
Safariではそれぞれのサブクラスを作って拡張している。

まずは普通のアプリケーション作りに挑戦してみる方が理解ははやいと思います。
954名称未設定:2008/01/19(土) 02:31:36 ID:0lGu4F/k0
ありがとうございます。

僕は思いっきり勘違いしまくってますね。

Safari用のSIMBLプラグインを作りたかったのですがやはり初心者には無謀のようですね。
単体アプリとして作りたいようなネタがなくてモチベーション維持が大変ですが
急がば回れってやつですね。
もうちょっとだけ海外のサイトでソースコードとか拾ってきてみていろいろ試してみます。
955名称未設定:2008/01/19(土) 02:48:38 ID:8mK8xGGb0
私自身わけも分からず旧Mac OSの機能拡張書類とかから始めたクチなんで、
基礎知識を学んでからハックするのがいいか、
ハックする過程で基礎知識も身に付けていくのがいいか、
どっちがいいかは断言できないけどね。
956名称未設定:2008/01/19(土) 08:43:54 ID:M+hPyBnZ0
Cocoa をほとんど知らずに SIMBL プラグインというのは、すごい!
心意気や良し、というかんじですね、がんばれ
957名称未設定:2008/01/19(土) 11:51:12 ID:0lGu4F/k0
>>955
>>956
Safariスレでソースコードを公開してくださった方がいなかったら
全くできなかったと思います。そのソースの時点で僕の欲しかった
6つの機能うち2つはできていたので自分で残りをつけたしただけです。

もうちょっと勉強して個人的にSafariで好みじゃない動作を自分好みに
調教してみたいと思います。
958名称未設定:2008/01/19(土) 11:56:58 ID:QWEHpT1M0
ある程度基礎的なところは勉強しておいた方が良いと思う
Cocoaは設計思想がしっかりしてるから、
知らないクラスや新しいフレームワークをいじる時でも、
Cocoaの流儀ならこうすれば良いはず、という勘で大体使い方がわかるからね
959名称未設定:2008/01/19(土) 12:00:53 ID:M+hPyBnZ0
http://developer.apple.com/jp/documentation/japanese.html
の Cocoa のところの Fundamentals, アプリケーションアーキテクチャ入門
あたりをよむといいと思います。
SIMBL プラグインの中でなにやってるか判ってくると思いますよ。

別個になにかプログラムしてみる動機がなくても、仕組みをわかっておくのは面白いことだと思います。
960名称未設定:2008/01/19(土) 13:40:10 ID:0lGu4F/k0
>>958
>>959
JavaScriptやRubyは触ったことがあったのですが、
変数の型があるような言語(静的? ObjCは動的要素があるみたいですが)は初めてに
近いのでそのあたりも個人的にはつまづきポイントです。

良スレに出会えた事に感謝しています。
今日は教えていただいたドキュメントを読んでじっくり勉強させていただきます。
961名称未設定:2008/01/19(土) 14:08:53 ID:M+hPyBnZ0
がんばってドキュメントよんでみてね。
Obj-C はほとんど動的だけど、確かに int / float はオブジェクトじゃないのは
つまづきのもとかも。それでも C++ にくらべたら全然動的ですよ。

Key-Value Coding とか、delegate のあたりとかはほとんどスクリプト言語なみです。
962名称未設定:2008/01/19(土) 16:28:40 ID:awe/q4zJ0
すみません、初歩的ですが質問させて下さい。
クラスの内部からしか呼び出さない処理(の固まり)を書くにあたって
メソッドと関数の扱いについて悩んでいます。
とりあえず今は、内部からしか呼び出さない処理は
@interfaceや@implementationの外に関数として書いています。

1.プライベートなメソッドを作ることはできるのでしょうか
2.外部から関数を呼び出すことはできるのでしょうか(呼び出せてしまうのでしょうか)
3.そもそも上記のようなやり方は慣例としてはおかしいのでしょうか

ご教示お願いします。
963名称未設定:2008/01/19(土) 16:47:36 ID:yLO07M730
>>962
>外に関数として書いています

あまり進められない方法だと思うよ。普通Hogeクラス内部専用のメソド-(void)fooは、カテゴリつかってHoge.mのなかに
@interface Hoge(PrivateMethods)
- (void)foo;
@end
@implementation Hoge
- (void)foo
{
...
}
@end
とやらやることが一般的のようよ。カテゴリについては
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/
あたり参照。
964名称未設定:2008/01/19(土) 16:53:36 ID:KzpUaXZW0
>>962
> 1.プライベートなメソッドを作ることはできるのでしょうか
出来ません。

> 2.外部から関数を呼び出すことはできるのでしょうか(呼び出せてしまうのでしょうか)
static なら同一ファイルに限る関数になります。

> 3.そもそも上記のようなやり方は慣例としてはおかしいのでしょうか
べつに。
965名称未設定:2008/01/19(土) 20:33:15 ID:awe/q4zJ0
回答ありがとうございます。

>>963
カテゴリについてじっくり読んでみます。

>>964
「Obj-Cのクラス」としてばかり考えていましたが、よく考えたら
関数はObj-Cもクラスも関係なしに普通のCの扱いで良いんですね。
966名称未設定:2008/01/19(土) 21:46:39 ID:IEMqeysc0
Objective-Cにプライベートメソッドはないけど、
僕はよくstaticな関数をプライベートメソッド代わりに使ってますよ。

@interface Hoge : Super
{
int privateVar;
}
@end

@implementation Hoge
struct _self { @defs(Hoge) };
#define OBJC_INSTANCE_REFERENCE struct _self* REF = (struct _self*)self;
static void privateMethod(Hoge* self, ...)
{
OBJC_INSTANCE_REFERENCE
int a = REF->privateVar;
[self setValue:@"abc" forKey:@"def"];
}
@end

Objective-Cのメソッドは、呼び出しにコストがかかるしね。
パフォーマンス改善のために、メソッドと共に関数を併用することがあるけど、プライベートメソッドこそ関数の使いどころではないかと。
プライベートなメソッドは外部から呼ばれる可能性がないので、動的にする必要がないしね。

967名称未設定:2008/01/19(土) 22:02:37 ID:P9X/P87o0
@defs() を使う必要はないような。
そのクラスの @implementaion の中なら private な ivar にアクセスできるよね。


@implementation Hoge

static void privateMethod (Hoge * self, ...)
{
int a = self->privateVar;
...
}

@end
968名称未設定:2008/01/20(日) 00:56:23 ID:A9BtnmAn0
メソッドの呼び出しのコストが気にかかる状況ってそんなにありますかね
日曜プログラマには想像もつきません

べつに @interface のなかに書かずに @implementation のなかにだけ
メソッドをかいておけば private っぽいメソッドになるので、
僕はそうしてますけど。

(もちろん Obj-C なので、呼び出そうとおもえば呼び出せますが、
コンパイル時に warning がでるので。)
969名称未設定:2008/01/20(日) 01:43:04 ID:mLhR/zt20
> @defs() を使う必要はないような。
> そのクラスの @implementaion の中なら private な ivar にアクセスできるよね。

おお、そうだったのかぁ。
いままで、無駄なことしてたな。
970名称未設定:2008/01/20(日) 15:43:49 ID:VvrXVh6H0
NSUserDefaultsController で質問です。
Xcode3.0、IB3.0です。

設定パネルにApplyボタンを付けてるんですが、何か設定が変更されたときだけ
Enableにしたいです。
NSUserDefaultsController:hasUnappliedChanges をBindすればいい?と思い、
ボタンのEnabledにController Key: hasUnappliedChanges でBindしてみましたが、
hasUnappliedChanges の値が変わってるにもかかわらずボタンは変化しませんでした。
試しに Controller Key: appliesImmediately としてみると、
- setAppliesImmediately でボタンが変化してくれたのでBindのやり方は間違って
ないと思うのですが・・・

hasUnappliedChanges ってそういうものなのでしょうか?
何か他にも良い方法があれば教えて下さい。
971名称未設定:2008/01/21(月) 00:41:09 ID:fhBikJAK0
ほんとだ、なんか動作が変だね ...
972名称未設定:2008/01/21(月) 04:56:01 ID:2ojcW0WF0
ボタンをイネーブルにするメソッドを作り、パネル上のコントローラのアクションは
すべてそれを呼び出すようにするw
973名称未設定:2008/01/21(月) 05:47:59 ID:fhBikJAK0
それはさすがにめんどくさいよね ...
974名称未設定:2008/01/21(月) 18:09:03 ID:O7DKrhM00
すいません。質問させてください。ちょ〜初歩的な質問だと思います。
ソースを貼り付けたかったのですが、改行が多いと怒られたのでうpしました。
http://uproda11.2ch-library.com/src/1160439.zip.shtml


GUI上の”Aボタン”を押すとテキストフィールドに”hoge”と出ます。
同様に”Bボタン”を押すと”fuga”と出ます。
これでGUI上のMyView上で左クリックと右クリックをするとデバッガコンソールにはNSLogでしていした内容が出力されるのですが、
テキストフィールドには何の変化もありませんでした。

どこがいけないのでしょうか?
ご教授お願いします。
975970:2008/01/21(月) 19:15:37 ID:TVm2qy440
>>971-973
ありがとうございます。
いい方法を思いつかないので、パネルをモーダルにしてApplyボタンやめました。\(^o^)/

>>974
IBでAppControllerのインスタンスできてるのにMyViewの中で作っちゃダメですよ。
MyViewにAppControllerのOutlet足してインスタンスにつなげましょう。
976974:2008/01/21(月) 19:47:25 ID:O7DKrhM00
>>975
ありがとうございます。

MyView.hを
@interface MyView : NSView {
IBOutlet id AppController;
}
@end

して、IBでMyViewからCtrlドラッグしてAppControllerの青いのにつなぐということでしょうか?
977名称未設定:2008/01/21(月) 20:51:43 ID:oLgy+Xte0
そうだよ。っていうかやってから確認ね。
978974:2008/01/21(月) 20:56:11 ID:O7DKrhM00
すいません。やったんですけどできませんでした。
AppControllerに実装したメソッドをMyView.mで呼びだしかたがわかりません。
AppControllerのインスタンスはどう作ればいいのでしょうか?
979名称未設定:2008/01/21(月) 21:02:04 ID:YRuAqsfu0
>すいません。やったんですけどできませんでした。

殿下は教え方が悪いとの仰せです。
980名称未設定:2008/01/22(火) 00:31:02 ID:1rEndO1a0
>>978

MyView.mで、
[AppController メソッド名:引数];
で、AppControllerのメソッドが起動しませんか?


私からも質問なのですが、メソッド内で
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
// いろいろ処理
[dict release];
return;
と、
NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelese];
// いろいろ処理
return;

ではメソッド終了後はどちらもdictは解放されるのですか?
dictはそのメソッド内でしか使いません。





981名称未設定:2008/01/22(火) 00:34:51 ID:eKFI00pz0
>>980
つい最近、Cocoaのメモリ管理を学んだばかりの私が答えてしんぜよう。

autoreleaseだと「メソッド終了後」にはdictは解放されません。

autoreleaseしたオブジェクトを明示的に解放したかったら、
自分でAutoReleasePoolを生成して解放しないとダメポ。
982名称未設定:2008/01/22(火) 00:45:41 ID:SuyCMfiP0
>>981
それはちょっと誤解を生むベ。
autorelease だと、メソッド終了後、
処理が Cocoa のイベントループにもどったあと
システムが気が向いたときに dict が解放されます。
いつかはわからないけど解放されることは保障されてるので。

ふつうはキーボード、マウスイベントを待ってる暇なときに解放してるはず。
983名称未設定:2008/01/22(火) 01:02:25 ID:gqmN74tq0
イベントループごとにAutoreleasePoolを作っているはずだから、
ループから抜ける前にreleaseされると思う
まあそのタイミングに頼るべきではなくて、
正確に解放のタイミングを制御したければ自分でpoolを作るかreleaseするかだけど
984978:2008/01/22(火) 01:34:46 ID:nVixcHVL0
>>980
うぁぁぁぁぁっ!
できました。

ミスってた原因は
MyView.hで足したアウトレットの名前をクラス名と同じAppControllerにしていたからのようです。
同じにしてたのでクラスメソッドと思われてて警告がでてました。
アウトレットの名前を変えて、IBで繋ぎなおしたらうまくいきました。

勉強になりました。
本当にありがとうございました。
985名称未設定:2008/01/22(火) 20:34:58 ID:KsYM31Vf0
10.5なのですが、IB3.0のライブラリのメディアにあるものは
Finderでいうとどこに収納されているのでしょうか?
音はシステム/ライブラリ/Soundsにあったのですが、
アイコンのイメージが見当たりません。
986名称未設定:2008/01/22(火) 23:37:31 ID:gqmN74tq0
/System/Library/Frameworks/AppKit.framework/Versions/C/Resources/
とか
987名称未設定:2008/01/22(火) 23:47:34 ID:EMRUv/xn0
これは?
/System/Library/CoreServices/Finder.app/Contents/Resources/

こういうのってimageNamed:で呼び出すんだよな?
988名称未設定:2008/01/23(水) 14:21:33 ID:U8s/mCdB0
Cocoaで選択された画像を表示するビューワーを作ってるのですが
LZW圧縮?されたTIFFの中にある複数の画像を表示させるのは
どうすればいいのでしょうか
989名称未設定:2008/01/23(水) 19:41:10 ID:lsK4DrcY0
なんか最近人が増えた気がするので貼っておくか。
Cocoaセミナー 2/6, 2/13, 2/20, 3/5 @ 東京
ttp://developer.apple.com/jp/briefing/cocoa.html
990名称未設定:2008/01/23(水) 21:02:18 ID:oVRWRPPz0
>>986>>987
ありがとうございます。
10.5で追加されてたNSComputerとかNSDotMacとかどこに入ってるのかなぁと思ったのですが、
結局見つかりませんでした。

Cocoaセミナーってノート持ってないときついですか?
991名称未設定:2008/01/23(水) 21:55:44 ID:bYNH/Zmz0
>>990
miniとディスプレイとキーボード&マウスを持ち込んでるのを見た事があるから、
平気じゃね?
992名称未設定:2008/01/23(水) 22:20:06 ID:M+F2NEWa0
>>991
miniも持ってませんw
もし行くならiMac持ち込みですかorz
993名称未設定:2008/01/23(水) 23:02:25 ID:VzBmhMZ70
>>992
miniよりも持ち込む部品は少ないのでは?
994名称未設定:2008/01/24(木) 00:18:29 ID:jIwqcX4J0
>>988
tiffファイル自体は、NSImageのinitWithContentsOfFile:で読み込んで、複数の画像はrepresentationsで取得できると思う。
995名称未設定:2008/01/24(木) 00:28:08 ID:n/pnDUtI0
>>990
個人のマシンを持ってこいって書いてあるよ。
1/3 の時間が実際の演習で、mkino さんが手取り足取り教えてくれるんでしょう。

まあこれを機会に Air を買って、参加者から羨望のまなざしを受けてみたらいいのでは
996名称未設定:2008/01/24(木) 01:50:00 ID:/Ae+OMPn0
次スレ

[NSThread detachNewThreadSelector:@selector(
 http://pc11.2ch.net/test/read.cgi/mac/1201106820/
)
toTarget:self withObject:nil];

997名称未設定:2008/01/24(木) 02:43:35 ID:/pIJmByT0
[self setNextThreadURL : [NSURL URLWithString : @"http://pc11.2ch.net/test/read.cgi/mac/1201106820"]];
998名称未設定:2008/01/24(木) 07:25:02 ID:X5saKV3E0
なんだmkinoか
数年前mkinoの本買ったけどひどくわかりにくかったな
999名称未設定:2008/01/24(木) 09:25:13 ID:T1Kwwqvq0
HMDT白黒は評判悪かったからな。
1000名称未設定:2008/01/24(木) 09:45:10 ID:n/pnDUtI0
1000 なら iPhone SDK で Cocoa が世界を席巻!!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。