Cocoaはさっぱり!version:2

このエントリーをはてなブックマークに追加
1名称未設定
Cocoaはやっぱり!を見て真似してソフトを作ったは良いが、
オリジナルを作ろうと思ったら、全然その先に進めない人集まれ!

親切なプログラマーさんが暇なときだけ教えてくれる(かも?)

前スレ
http://pc.2ch.net/test/read.cgi/mac/1007632025/l50

関連スレは>>2-20までには
2あぼーん:あぼーん
あぼーん
3名称未設定:02/11/10 20:26 ID:FTCD2p+F
>>2
氏ね
4 :02/11/10 21:45 ID:SfOoV9YF
ていうか、関連スレを人任せな1にも問題があるかと…
5あぼーん:あぼーん
あぼーん
6コリン ◆EIQCCGY9hg :02/11/10 22:39 ID:97roG81A
>>1
お疲れ〜
でも、前スレにリンクが貼れなかったのが残念
7名称未設定:02/11/11 01:21 ID:eTPFWQHf
とりあえず貼っときます。
不備があったら誰か補って下さい。

関連スレ

Macでプログラミング{2}
http://pc.2ch.net/test/read.cgi/mac/1025998843

◆◆◆◆◆◆MacでJava◆◆◆◆◆◆
http://pc.2ch.net/test/read.cgi/mac/991194610

前スレ発
Cocoaでメーラー作るよ
http://pc.2ch.net/test/read.cgi/mac/1035386838

関連サイト
Cocoaはやっぱり!
http://www.big.or.jp/%7Ecrane/cocoa/

HAPPY Macintosh Developing TIME!
http://homepage.mac.com/mkino2/

Cocoa Developer Documentation
http://developer.apple.com/techpubs/macosx/Cocoa/CocoaTopics.html
(開発ツールをインストールすれば、/Developer/Documentation/Cocoa/CocoaTopics.html に同様の資料がある)
8 ◆ftPf.M4w3U :02/11/11 17:02 ID:3CNSm3S7
>>1
9名称未設定:02/11/13 00:12 ID:T0KM6e2H
ドキュメントベースアプリでウィンドウにNSTextView張り付けて
『フリーのテキストエディタです、使って下さい』
っていうのはもういいよ。

↑たまに見かけるんだよね。
SimpleTextにも満たないエディタは必要ないよ。
練習のためならいいと思うけど。。。

>>1
御吊
10名称未設定:02/11/13 22:03 ID:eDc4xtay
すみません、いま練習用に簡単な画像ビュアーと画像形式変換アプリをCocoaで作っているんですけど
疑問点が2つ出てきましたので質問させて下さい。

(1) ファイルからinitWithContentsOfFileでNSImageに貼付けた画像の元データの画像形式を知る方法は
あるのでしょうか?PNGやJPEGなどはNSImageに貼付けるとぜんぶBitmapImageRepとして保ってる
ようなのでrepresentationの種類で区別はできなそうですが他になにかありますか?
NSDataで取り込んでから自前の判定ルーチン作るか、拡張子やファイルタイプで見分ければいけるとは
思いますができればCocoaに任せたいのです。
(2) 画像形式を変換して保存する際、「Cocoaはさっぱり!」に書かれているようにBitmapImageRepを
作ってrepresentationUsingType: properties :で変換しようとしたのですが、NSBMPFileTypeの時だけ
何を入れてもnilが帰ってきます。PNG等は問題なく生成されます。
alphaを除いたりpropertiesにnilや適当なNSDictionaryを入れたのですが全然ダメです。
なにか他に必要な前処理か、必須のキーがあるのでしょうか。

googleなどで検索しましたが参考になる記述が見つかりませんでした。
もしなにか分かる人がいましたら教えて下さい。
開発環境はOS10.2.1とそれに付属のProjectBuilderです。
11名称未設定:02/11/14 23:45 ID:TR9aYstl
>>9
NSTextViewだけでSimpleTextを軽く超えている罠。
129:02/11/15 01:14 ID:AUeHEC4M
>>11
俺が言いたかったのはテキストエディットのことらしい。。。
全然気付かなかった。。。
撃つ堕し膿。
13名称未設定:02/11/16 12:55 ID:d66nvhZZ
書籍版「Cocoaはやっぱり!」の第4章「カウントダウンタイマーを作成」に挑戦中です。
NSTimerの項のソースを作成し、ビルドすると

?Compiling TimerController.m (2 個の警告)
TimerController.m:25: warning: cannot find class (factory) method
TimerController.m:25: warning: return type for `scheduledTimerWithTimeInterval:target:selector:userinfo:repeats:' defaults to id

というワーニングが出ますが、アプリケーションは作成されます。
しかし、作成されたTimerアプリケーションを起動し、Startボタンをクリックすると
Project Builderの実行ウィンドウに

2002-11-16 12:31:50.218 Timer[582] *** +[NSTimer scheduledTimerWithTimeInterval:target:selector:userinfo:repeats:]: selector not recognized

というメッセージが出ます。

次に、ソース中のタイマー作成部分を

?timer = [self doAlerm];

と、メソッドを呼ぶだけに変更してビルドするとワーニングは出なくなったのですが、
前回と同じくStartボタンをクリックすると、

2002-11-16 12:28:47.750 Timer[554] *** -[TimerController doAlerm]: selector not recognized

というメッセージが出ます。

doAlermメソッドがうまく認識されていないような気もしますが、何が悪いのかさっぱり
分かりません。とほほ。
アドバイスをお願いします。
14名称未設定:02/11/16 13:15 ID:4spgFSNh
>>13

× scheduledTimerWithTimeInterval:target:selector:userinfo:repeats
○ scheduledTimerWithTimeInterval:target:selector:userInfo:repeats

user"I"nfo
Iが大文字です。

メソッドはヘッダからコピペしたほうが安全。
あと、警告を信じる。
15名称未設定:02/11/16 16:42 ID:THE4kyr1
今cocoa/Javaの勉強を兼ねてFTPのクライアントを作成しているのですが、
二つほど謎のエラーがおきます。

『***はシグナル 10(SIGBUS)により終了しました。』
『abstractMethodError』

というエラーなんですけど(二つ目はめったに出てこないので記憶が曖昧で
す)どちらも特定の場面で出てくるわけではなく、たまに(恐らく処理が重いとき)出てきます。
処理が重いといっても全然たいしたことないはずですし、どうしていいのかわかりません。
だれか原因について思い付く方はいらっしゃいませんか?
16名称未設定:02/11/16 19:01 ID:uvqdPQmj
>>15
推測だけど、最初のがメモリ関係、次がそのまま、インプリメント
されてないメソッド、抽象クラスなどのメソッドを呼び出した、
ってことでないの? Javaは詳しくないけど。

ところで、まさか、そのプログラムで他人のサーバに
つないでないだろうね(w
17名称未設定:02/11/16 19:16 ID:LBGGcBgj
Web上でObjective-Cの解説サイトってわかりやすくて、
いいところないですかね。
普通のC言語なら掃いて捨てるほど出てきますが。
18名称未設定:02/11/16 19:29 ID:V79Ufrn7
>>15
AbstractMethodErrorは、抽象メソッドを呼び出したっていう
意味で、普通はコンパイル段階でエラーになるはず。
一度クラスファイルを全部削除して再コンパイルをかけた方が
いいんじゃないかな。
めったに出ないなら、すでに問題が解消されているような気もするけど。

上のエラーの方は、それだけじゃちっともわかんないので、
まずは地道にデバッグして落ちている箇所を特定しましょう。
1913:02/11/16 19:45 ID:d66nvhZZ
>>14

あ、全然気が付きませんでした。
実は去年からずっとここで悩んで止まってたんです。
目、悪すぎ>俺

やっと次に進めます。本当にありがとう!
20名称未設定:02/11/16 19:46 ID:HR986RqX
file://localhost/Developer/Documentation/Cocoa/ObjCTutorial/index.html
21名称未設定:02/11/16 20:08 ID:UPY/awzr
おまえら英語を母国語のごとく使えるんですか。そうですか
うらやますいです。
2215:02/11/16 21:38 ID:THE4kyr1
お返事ありがとさんです。
>>16
やっぱり一つ目のエラーはメモリ関連ですよね。
まさかjavaやっててメモリ関連のエラーを受けるとは・・・、とほほ。

>>18
いまから目を凝らして落ちてる場所を探します。
そういえばテーブルの描画周りが怪しい、ドキュメントにも
『このメソッドは気をつけろ』ってのがあったしなぁ。
ちょっとやっつけちゃいますね。

2315:02/11/16 22:42 ID:THE4kyr1
たびたびすいません。
今気付いたことなんですけど、どんなにクラスファイルを全削除 -> リコンパイル
してもコンパイルエラーが出ません。なのにjava.lang.AbstractMethodErrorは
しっかりでます。
具体的にはテーブルやボタン等をひたすら連続でクリックすると出てきます。
しかも[Abstract ~~~~]が出た後にシグナル10で落ちます。
シグナル10はメモリ関連ということで俺が悪いのでしょうけど、[Abstract ~~ ]は
どうもよくわかりません。
同じようなことに出くわしたことある人っていませんか、いませんよね。
がんばってみます。

delegate関係なのかなぁ??
24どざ:02/11/17 14:53 ID:AoXQp0yz
>>21
そんな貴方にMSDN!
殆ど日本語になっている。
Windowsはいいぞ・・
でも最新情報を見る際はアチラ語が必要罠。

Cocoaは例え日本語でも楽でない気がする。
資料多すぎ。
今は皆そうか・・
25名称未設定:02/11/17 18:53 ID:JuIOHsrq
アフォな質問でもうしわけないんですけど
一行もコードを書いていないdocument-based applicationで
ウインドウを閉じたり出したりしてるだけで
どんどん常駐メモリサイズ増えていくんですけど
どうすればいいですか?
26名称未設定:02/11/17 21:03 ID:AoXQp0yz
決してアフォな質問ではないぞ>>25
たぶんcacheだと思うが・・
OSXでは掴んだら他が苦しみだす迄離さないのが多い噂。
余裕がある限り浪費しまくるらしい。
詳細は知らんので後は何方か頼む。
27名称未設定:02/11/17 23:07 ID:EHrarF3T
>>25
それすげー気になる。
だれか分かる人はいませんか?
Cocoaの神よ、降りてきて下され!
28名称未設定:02/11/18 00:54 ID:9VxuTFPf
29名称未設定:02/11/18 03:04 ID:yMpybPUr
胸、でか!
3010:02/11/18 14:26 ID:mGA7yCj/
>>28
あ、どうもです。
リンク先見てみたけどどうもそこはCocoa-javaの話みたいでjavaはさっぱりなわたしには
ちょとよくわからないけど、どうやら画像の判別はしていないようでした。
もうちょっと勉強してみます。どうもありがとうございました。
31名称未設定:02/11/18 14:54 ID:E9r0CerX
>>15
Javaは良く分らんが、クラスクラスタが抽象クラスのオブジェクトを返してるんじゃないのか?
hoge = new NSArray();
hoge,count();
とか。

>>25
- setReleasedWhenClosed:(BOOL)flag;
- (BOOL) isReleasedWhenClosed;
この辺じゃねーの?
32名称未設定:02/11/18 22:22 ID:HJP2ChSK
>>26
はは、思わず笑っちゃったよ。

DevツールのObjectAllocを使えば、自分のコードに問題が
あるのか、それともフレームワークのキャッシュなのか分かるよ。
3325:02/11/19 19:00 ID:JgIxcG4+
え〜とよくわからないけど気にすんなってことか。
34名称未設定:02/11/23 14:09 ID:SFJs1zUE
ホッシュ ホッシュ
35名称未設定:02/11/23 15:05 ID:BArg2VmU
NSUserDefaultsなんですけど、本によって#defineを使ってるのとNSString *〜ってやる方法がありますよね。これって、どっちが良いんでしょう? なんか違いとかあるんでしょうか?

あと、Cocoaはやっぱり!のP110〜の「環境設定の読み込みと保存」とか読んでTextFieldにデフォルト値から文字列を読み込む方法は分かったんですけど、チェックボックスのデフォルト値を保存したりする方法ってどうすればいいんでしょう?
36名称未設定:02/11/23 15:45 ID:fkVOFMwB
>>35
個人的にはどっちでもいいような気がします。
自信はありませんけど・・・

>チェックボックスのデフォルト値を保存したりする方法ってどうすればいいんでしょう?
- setBool:forKey: や
- boolForKey:
を使いましょう。
あと少しでもいいですからAppleのリファレンス読んでみて下さい。
英語ですが大体のことはここで分かります。
37名称未設定:02/11/23 18:46 ID:ck8YguLD
最近Amazonが古本の個人売買の仲介始めましたよ。

Mac関連のプログラミング本も安くゲットできるチャンスかも。
3835:02/11/24 16:35 ID:JE4xLmZr
>>36
どうも、ありがとうございます。
早速試していますが、デフォルト値を定義して上手く.plistに書き込むところまで
は成功しましたが、変更が保存されません。。
例えばデフォルトではチェックボックスをONにしてあるものをOFFにしても
その変更が繁栄されない、という感じです。

保存は(Cocoaはやっぱりの例を拝借して)こんな感じ↓でやってます。

[ defaults setBool : obj1 forKey : @"obj1" ];


>あと少しでもいいですからAppleのリファレンス読んでみて下さい。

リファレンス、苦労してます。あれ読んでも具体的にどう書けば良いのかが掴めず。。
39名称未設定:02/11/25 15:45 ID:LN3mpiqD
>>38

>例えばデフォルトではチェックボックスをONにしてあるものをOFFにしても
>その変更が繁栄されない
これは、通常プログラマの仕事であって、フレームワークの仕事ではない。

>Cocoaはやっぱり!のP110(略)
多分この本には、サンプルコードだけではなく、
サンプルコードのこの部分はこう言うことをしている、という説明がついてるはずだ。
説明には、自動的に設定が反映されると書いてあったのか?
日本語も読めないのか?
40名称未設定:02/11/25 18:14 ID:5/1W17Xm
こうしてCocoaプログラマは減っていく…
41名称未設定:02/11/25 19:03 ID:nd6BCjh+
NSTableViewに表示されるテキストの色を、行ごとに変えたいのですが、
これは可能なのでしょうか。
42名称未設定:02/11/25 19:45 ID:FwBGxRRY
10.2から実装されたSpinタイプのプログレスバーだけど、サイズの変更、コーディングで細かく設定出来ないすかねぇ?
43名称未設定:02/11/25 20:00 ID:5yltS0rr
Finderの「情報をみる」パネルみたいな、
黒い三角のボタンを押すと隠れていた項目がにょきっと出てくる
インターフェースを作りたいんと思っているのですが、
これって、Cocoaだと、どうやってやればいいのでしょうか。
調べてもどうしても分からないので、
ご存知の方がいらっしゃったら教えてください。
44名称未設定:02/11/25 22:16 ID:PyISHp7r
>>43
> 黒い三角のボタンを押すと隠れていた項目がにょきっと出てくる
> インターフェースを作りたいんと思っているのですが、

これをやるには自分で作るしかないと思われ
調べてもどうしても分からないんだったら諦めたほうが吉
4536:02/11/25 22:35 ID:PyISHp7r
>>38
あくまでもNSUserDefaultsがやることはデフォルト値を保存するということだけで
チェックボックスのON,OFFを自動的に感知して保存するわけではありません。
もしそれをしたいのならばチェックボックスのActionを他のインスタンスに設定して、
その都度BOOL値を保存する必要があります。

あとは、もう少し予算があれば本を買うことをお勧めします。
荻原本やヒレガス本あたりが基礎を高めるのにはいいと思います。
4638:02/11/25 22:50 ID:FwBGxRRY
>>45
ありがとうございます。Actionまわりを設定したら上手く保存出来たようです。

>荻原本やヒレガス本あたり
分かりました、良いと評判のヒレガス本を買ってみます。
47名称未設定:02/11/26 15:32 ID:95oFXXL9
>>41
できるよ。
データソースの
tableView:objectValueForTableColumn:row:
このへん。

>>43
Carbon in Cocoaになると思う。
http://developer.apple.com/techpubs/macosx/Essentials/AquaHIGuidelines/AHIGControls/Disclosure_Triangles.html
このへんと
http://developer.apple.com/techpubs/mac/HIGOS8Guide/thig-24.html
このへんと、
http://developer.apple.com/techpubs/macosx/Carbon/HumanInterfaceToolbox/AppManager/appearancemanager.html
http://developer.apple.com/techpubs/macos8/HumanInterfaceToolbox/ControlManager/controlmanager.html
このへん。

GrafPtrはNSQuickDrawViewから、
WindowRefはNSWindowから持ってこれる。
4841:02/11/26 16:17 ID:CoVbHzGj
>>47
レスありがとう。

Formatterを使ってNSAttributedStringのインスタンスを作ってやれば
いいのかな。
49名称未設定:02/11/26 21:45 ID:aez694eC
よく平然と英語解説ページを提示したりしてる人達は
英語ペラペラなの?

やっぱ英語勉強した方がいいのかな・・
50名称未設定:02/11/26 22:28 ID:/bkrNtOS
>>49
英語解説ページ読むのに英語ペラペラは関係なし。
必要なのは、
中卒程度の英語力+コンピュータ用語語彙+英和辞書
51名称未設定:02/11/26 22:33 ID:8v4+pZj2
正直、プログラマー的な慣用につまづく。
52名称未設定:02/11/26 22:58 ID:qJyXcWyF
>>44
ありがとうございました。
おかげであきらめる決心が付きました・・・
別のやり方でやりたいと思います。
5347:02/11/27 08:48 ID:mjJgJ9yQ
>>49
私の英語力は、話せません、聞き取れません、書けません、辞書があれば何とか読める程度です。
リア厨、リア工時代は何とか及第点を取れる、もしくは頭を下げて及第点をもらう程度でした。今思うとめちゃ悔やまれる。
こう言うのを読むときは、gooかexciteの辞書ページ開いてます。
専門分野の解説での長文翻訳は意味不明な日本語にしてくれるので逆効果です。
これでも専門用語を知っていれば何とかなります。
意味が分らない専門用語は英単語のままでもgoogleの日本語限定の検索で結構引っかかりますし、
それでも分らなかったら、無理やりカタカナにして検索すると言う手もあります。

私の場合、専門用語を覚えるのはもちろん日本語の解説書でです。
正直MacOSXPBあたりの時のCocoaは五里霧中状態でした。
NeXTSTEP,openstep関連のページを検索したり、MacTech Magagineを掘り出してきてラプソディー関連を読んでみたり...
やっと何とか使えるようになってからドドドと日本語の解説書が出てきた時は泣きました。

まあ、何とかなるもんなんで、一度読んでみて下さい。
54名称未設定:02/11/27 11:45 ID:TOo99iKJ
- drawRect: に渡される rect の値が時々正しくなくなり、表示が乱れて
しまいます。どんな原因が考えられるでしょうか。

ウィンドウを切り替えたときに、背面にまわったウィンドウの表示がおか
しくなります。調べてみると、rectの値がアップデートするべきviewのもの
と違ってしまっています。こんなことってあるのでしょうか。
55名称未設定:02/11/27 15:10 ID:mjJgJ9yQ
>>54
>調べてみると、rectの値がアップデートするべきviewのもの
>と違ってしまっています。

これが、Viewのframeの値と違ってると言うのなら、そういうものです。
アップデート対象部分だけがrectに入ってきます。

もし違うのであれば、
http://developer.apple.com/bugreporter/
これかなあ。でも英語だしねえ。
5654:02/11/27 17:47 ID:C2HfZNRJ
>>55
どうもありがとうございます。勘違いしてました。

[self bounds]を使って正常になりました。
正しくないのは私の頭の方でした。
57名称未設定:02/11/28 01:08 ID:o34aQNfC
初心者な質問で申し訳ないんだけど、教えてください。

CStringに入ってる文字列をStringにして、んでTextViewとかに表示させたいんだけど、
日本語が入ってる場合文字化けしちゃうんだけどどうすればいいのかな。

[ textView ?setString:[ NSString stringWithCString: CStr ]];
例えばこんな感じでtextViewに表示させても日本語だけ文字化けしちゃうのよね。
で、エンコードする必要があるとは思うんだけど、どうすれば良いのでしょうか。
誰かお助けを。
説明が下手でごめんなさい。
5857:02/11/28 03:20 ID:o34aQNfC
↑すまそ、わけわかになってた。なんでもないっす。忘れてください。
59名称未設定:02/11/28 08:21 ID:tV4du4ko
>>57

NSDataを介します。

NSData* shift_jis_Str = [NSData dataWithBytes:CStr length:strlen(CStr)];
NSString* string = [[NSString alloc] initWithData:shift_jis_Str encoding:NSShiftJISStringEncoding];
60名称未設定:02/11/28 12:05 ID:pAol6nz1
あれー?
charCString[] = "てすと";
[ textView setString: [NSString stringWithCString:CString] ];
で問題なく日本語いけたけどなあ。(OS10.2.2)
61名称未設定:02/11/28 20:25 ID:CnBW/6Az
shift_jisなら大丈夫なんだよね。
62名称未設定:02/11/29 04:35 ID:R37yFDBy
CocoaからCarbonを経由しないで、AppleEventを送信することはできますか?
NSAppleScriptでもいいんだけど、やっぱりローレベルの方がいいなと。
(かといってCarbonはわからない…)
63名称未設定:02/11/29 15:53 ID:rkUwweRh
>62
素直に NSAppleScript 使えばいいのに。なんで駄目なの?
つーかローレベルってCarbonのことじゃない、この場合。
それともMachのメッセージ通信のこと?
64名称未設定:02/11/29 18:44 ID:BvlS5AIB
cocoaって情報少な過ぎ・・やっぱ止めようかな・・
65名称未設定:02/11/29 18:54 ID:It/NUsFY
>>64
情報少な過ぎなんて思うのはリファレンス読まないだけじゃないのか?
中学生レベルの英語でもメソッド名見れば大体分かるし。

66名称未設定:02/11/29 21:00 ID:tx7QvZFD
リファレンスに簡単なサンプルコードがついていればねぇ…
67名称未設定:02/11/30 04:52 ID:Cjq7zlyu
いや、ほんとにリファレンス読んで、ネット上にある数少ない情報を汲み取って
やればいろんなことが出来るよ。

俺も最初は『情報少なっ!』って思ったけどやってるうちに普通のことが普通に
出来るようになってた。(どんな言語や環境でもそんなもんだろ)

最初にちょっと苦労しておけば後が楽ですよ。
(って言っても読まないやつは読まないんだろうなぁ <- リファレンスのこと)
68中学英語で質問してみる。:02/11/30 11:05 ID:1Ta223gV
How do I change window to fullscreen?

I set menu invisible and tried to change window mask.
But window mask cannot change except for initialization.
69厨学生:02/11/30 11:20 ID:t1lfE8e8
どうやれば窓を全画面にできまつか?

メニューを不可視に設定して窓の覆いを変えてみますた。
しかし、初期化せずに窓の覆いを変更することはできませんでつ。
70名称未設定:02/11/30 14:15 ID:ez6+CgxV
>>68

ADC reference より
An NSWindow's style is set when the object is initialized. Once set, it can't be changed.
ここまで
71名称未設定:02/11/30 21:10 ID:gcdL/i+9
>>66
 あー、サンプルコードついてるといいね。ADC行って適当なサンプルないか
探してくるより楽でいいや。Tell Usしてみる?
72名称未設定:02/11/30 22:47 ID:KDCTJISn
いやー、英語で書かれてる云々よりも、解説の仕方というか、
書き方というか、その辺かと。
リファレンスとか読んでも、何が出来る、ってのは分かるんだけど、
あとは「書式」と「返り値」とか書かれてるだけで、
具体的にどういう感じに書けば良いのかがさっぱり掴めないんだよね。
リファレンスだけじゃなくて、「Cocoaはやっぱり!」も書き方同じだし。
「で? どう書けばいいのよ?」みたいな。

分かってる人には分かるかもしれないけど、あれって、いわゆる
プログラマー的慣用表現なの?
初心者にはやっぱり分かりづらいと思うけどなぁ。
73名称未設定:02/11/30 22:56 ID:hlh3YJMp
自分で試すしかない。

テンプレートプロジェクトに少しずつ書き加える。
又はサンプルコードを少しずつ書き換える。

8bitBASIC時代からこの点は変わらないと思う。
74名称未設定:02/11/30 23:20 ID:xXTQZHxO
>>72
Referenceだけじゃなくて下のほうのProgramming Topicsも読んでそれをいってる?
サンプルコードもProgramming TopicsのTasksにあると思うが。
75名称未設定:02/11/30 23:26 ID:lbtRXp8c
なんにしろ母国語じゃないテキストだと
文章の意味を考えるところでいったん思考がとぎれる感じでやりにくいわな。
76名称未設定:02/11/30 23:35 ID:GjV2W5ux
なんかここの所心地よい程に今迄出てこなかった本懐が吹き出てますな。
77名称未設定:02/12/01 06:06 ID:mJVog20L
>>73
俺も思う。

>>72
いまから勉強をはじめる初心者には分かりづらくても仕方がないでしょ。
だって何も知らないんだから。
>>73の言う通り一つずつ試して納得していくしかないよ。
なんでもいいからアプリケーションって呼べるものを作ってみるといいよ。
その過程で必要なことを学ぶしかない。
78名称未設定:02/12/01 11:27 ID:Lj9NcLaf
リーナスもビルゲイツもみんな最初は初心者だったんだ
79名称未設定:02/12/01 13:27 ID:y8ocN46l
>>78
(´_ゝ`)フーン
80名称未設定:02/12/02 20:04 ID:vpa25MiQ
>>69
NSWindowのサブクラスを作って、- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag

で初期化する。
InterfaceBuilder上では、このサブクラスを指定する。
81名称未設定:02/12/03 11:39 ID:hZcL6gkc
誰か前スレ保存してる人いない?
82名称未設定:02/12/03 16:40 ID:tDZUDA3f
>>81
俺も読みたい。だれか,たのむ。
83名称未設定:02/12/03 17:03 ID:86kTXrtx
>>81
>>82
1-985までならあるけど。

うpロダは?
8410.1.5:02/12/05 16:38 ID:gY14st/y
April 2002 Developer Tools BetaにupしたらProjectBuilderのメニューが
英語になった。
85名称未設定:02/12/06 20:58 ID:pJLljC0s
NSDictionaryについて質問です.よろしくお願いいたします.

下記のようなproperty listをNSDictionaryとしてメモリに
展開するところまではできました.しかし,
allKeysを使用して全てのkeyを取りたいのですが,KeyString-1
しかとれません.他のキー(例えばKeyString-2)を取るには
どのようにしたらよいでのしょうか.ご教示お願いいたします.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeyString-1</key>
<array>
<dict>
<key>KeyString-2</key>
<string>hoge</string>
<key>KesyString-3</key>
<integer>1</integer>
<key>KeyString-3</key>
<string>hoge</string>
<key>KeyString-4</key>
<true/>
<key>KeyString-5</key>
<true/>
</dict>
</array>
</dict>
</plist>
86名称未設定:02/12/06 22:31 ID:Kh6J19bk
KeyString-1
├KeyString-2─hoge
├KesyString-3─1
├KeyString-3─hoge
├KeyString-4─true
└KeyString-5─true
となっているようだがツッコミを入れといた方がいいのか?
87名称未設定:02/12/07 03:11 ID:VT9rZAZv
cocoaでプログラミングしてる人って普段何してるんですか?
macのプログラマー?
88名称未設定:02/12/07 03:12 ID:06x21qQG
漁師ですが
89名称未設定:02/12/07 08:10 ID:2VVR0iYR
日曜大工
90名称未設定:02/12/07 11:41 ID:pOVnGu3L
>>72
分かる気がする。

やりたいことを実現するメソッドは見つかった。そいつの引数も分かった。
しかし、その引数のオブジェクトはどこから調達してくるの?
おれが用意しているオブジェクトからどうやってとってくるの?
みたいな堂々回り。

またやりたいことと用意されているメソッドの機能レベルが違うと
探すこと自体がたいへんだしね。
もっとも、これはクラスライブラリの全容を知らないからだけど(^^;;
91名称未設定:02/12/07 14:04 ID:Rv/fl+c0
そのへんはメソッド名をぐぐるで検索すればたいていどこかの誰かがサンプル書いていると思うが。
英語サイト行かないとわからないときもあるけど。
9285:02/12/07 14:21 ID:bHIIFNMT
>>86
そうなんです.そのようにネストされている場合の
Keyの取り方が分からないのです.
KeyString-1のvalueを取ってきて,valueを再び
NSDictionaryにして,allKeysでKeyを取る.
といったことしか思い付かないのですが,それしか
ないのでしょうか?
93名称未設定:02/12/08 19:20 ID:zAei9Sp0
AppKitとFoundationのFrameworkリファレンスを見る!

PDF版ならAcrobatで栞を目次代わりに使えるので便利。
94名称未設定:02/12/08 20:41 ID:QlUwYw4v
Cocoaで、こういう感じの日本語ドキュメントのサイトはありませんか?
http://www.microsoft.com/japan/msdn/library/

http://developer.apple.com/
の下を探したのですけど日本語のが見当たりません。
95名称未設定:02/12/08 20:58 ID:VuYRBze7
>>94
オライリーがイイ仕事してる。本をかいな。
アップルジャパンは昔からその手の情報の翻訳はほとんどダメだ。やってない。
96名称未設定:02/12/08 22:10 ID:zAei9Sp0
日本語DOQはMSが一番!

・・いやマジで。

>>95
AdobeやRealやNewTekなどもSDK資料は英語。
OracleはDBの付属資料は流石に翻訳されているが
ApplicationServerSDKは未翻訳だった;今はどうか?

資料ローカライズでMSに張り合えるのはIBM位か・・
97名称未設定:02/12/08 22:38 ID:7ymdFHGd
>>94
公式で翻訳されている文献はあんまりない
http://developer.apple.com/ja/techpubs/

Cocoaのリファレンスの翻訳ならばここ
http://www.oomori.com/cocoafw/index.html
98名称未設定:02/12/08 22:51 ID:pCWmqpCj
結論:MS > IBM >>>>>{超えられない壁}>>>>> Apple

つか、そもそもMSと違って、売りっぱなしが基本姿勢だから、
活用の為の資料提供なんかする会社じゃないっての(藁
釣った魚に餌は与えないっつーか…。
99名称未設定:02/12/09 00:38 ID:EWG83ZBe
>>92
Foundationのみですませるなら、そうなりますね。

Core FoundationのXML Serviceを使えば、Tree構造として
展開、アクセスできるから、複雑な構造のXMLを処理するの
なら、こちらをどうぞ。
100100:02/12/09 02:09 ID:oRWuzLq0
XMLServiceってDOMだけなの?
101警戒宣言:02/12/11 02:23 ID:WjsHSuKs
念入りすぎるほど
保守。
102名称未設定:02/12/11 18:22 ID:gZWMy9lt
そしてさらに保守。
103警戒宣言:02/12/12 00:41 ID:OzDkU41w
解除。
危機は去った。スレ違いスマソ
104名称未設定:02/12/12 14:11 ID:cmdLCwuG
>>100
ちょうどHMDTにその情報載ったよ。
DOMでもSAXでも無いけど両方に似たようなのがあるらしい。
105名称未設定:02/12/12 17:37 ID:cb9F24RT
HMDTって・・・・なに?
106名称未設定:02/12/12 19:12 ID:i36lFTBu
107名称未設定:02/12/13 00:26 ID:GEb3wLMf
DOMでもSAXでもないXMLパーサ…そんなアフォなシロモノが実在するとは…。
108名称未設定:02/12/13 02:29 ID:SFIkYX1x
Cocoa-Javaでホットキーの登録方法を教えて下さい。

HMDT(>>105,106参照)でやり方が書いてあるんだけど全くObj-Cが
分からないので理解が追い付きません。
それでも必死で読み続けてみて分かったことはCarbon Eventを使うということのみ。。

そもそもJavaからCarbonって使えるんですか?

一応スレ違いでは無いと思うのでここに書かせてもらいました。
109名称未設定:02/12/13 15:14 ID:zT151Epi
>>107
全てのXMLパーサがDOMかSAXかじゃないと駄目だと思っているのかよ。

>>108
Core FoundationはObjective-Cじゃない。
C++でもない。ただのCだ。

つーか、Cocoaじゃない。
JavaでXMLを扱いたければJAXP使え。
HDMTにも書いてあるけど今のCFXMLは
XMLパーサとしては原始的すぎて不完全。
システムに標準で付いてくるから
CarbonやObjective-Cで即使えるってのが利点。
110名称未設定:02/12/13 20:11 ID:JyhG0V93
結論:MSXML >>>>>>>>>>>>>>>>>>>>>(越えられない壁)>>>>>>>>>>>>>>>>>> CFXML
流行のXMLでこの体たらくは、まさにMicrosoftとAppleの技術力格差を象徴してるな。
111名称未設定:02/12/13 20:28 ID:Q1sivQp6
↑ expat の位置はどのへん?
112108:02/12/14 02:31 ID:1IIcBngU
>>109
反応さんくす。

>Core FoundationはObjective-Cじゃない。
>C++でもない。ただのCだ。

っていうのはつまり
『自分でCとJavaの橋渡しをしなさい』
ってこと?

了解です。
113名称未設定:02/12/14 02:48 ID:ZMKB0U/X
がんがれ。
114名称未設定:02/12/14 10:31 ID:1Re06XJ0
>>112
了解したんなら余計なお世話かもしれが…
Javaでプログラム書くんなら、素直にJavaで書かれたXMLパーザを
使えばいいじゃん、と >>109 は言ってる。
115名称未設定:02/12/14 12:16 ID:yvQkSo92
Javaでプログラム書くなら、Windowsの方が何かと便利。
116名称未設定:02/12/14 15:09 ID:1UHjsgj3
JavaにはSolaris。コレ、最強。
117名称未設定:02/12/14 15:15 ID:cjstDqhD
風呂釜。これ。
118名称未設定:02/12/14 15:18 ID:tjtGusRQ
VisualC++で書いてデバッグしてMacでコンパイル&リリース
これ最強(SDLを使う時)
119名称未設定:02/12/14 15:37 ID:1Re06XJ0
ココハココアスレ
120名称未設定:02/12/15 15:59 ID:KzOJ/Uqg
CocoaGesturesってどう言う仕組みで動いているんですか?
121名称未設定:02/12/17 15:23 ID:tJ8gR1x1
>>120
分からないからせめて・・・・

保守!
122名称未設定:02/12/18 23:34 ID:5nVxa2G+
消えて欲しくないから保守!

かといって今ここで聞きたいことも無いし。。
だれか話題提供プリーズ。
まぁ、まったりしてていいけどネ。∞
123名称未設定:02/12/19 17:32 ID:Urax7ARa
>>122
CW最新版の割れ物は何処にありますか?
124名称未設定:02/12/20 04:48 ID:vKzqlyjj
分からない・・・・。ゴメンヨ
125名称未設定:02/12/20 10:15 ID:qp5IZPgE
>>123
CWlite
126名称未設定:02/12/20 16:58 ID:tgbMO7Wq
デベロッパツールが新しくなったので皆さん気合い入れて落としましょうw
127名称未設定:02/12/20 17:05 ID:jM3eTAIc
を、ほんとだ。
自動インデントを有効にするとぼろぼろおちるの
なおってるかなぁ
128名称未設定:02/12/20 22:29 ID:Va/6rg+s
300メガでかい
129名称未設定:02/12/20 23:00 ID:IHLxfHGg
新しいのって日本語ローカライズ対応してる?
130名称未設定:02/12/21 00:47 ID:xXHMzR+o
アクセス拒否られるなぁ。落とせないよー。
131名称未設定:02/12/21 13:39 ID:7u2vBk5Z
>>130
 パスワードの期限が切れてるんじゃない?

#定期的に新しくするのって面倒。
132名称未設定:02/12/21 19:14 ID:jL6qu1gl
>>129の疑問が自分も気になる。誰か教えて。
133名称未設定:02/12/21 19:30 ID:SQXJVlOr
PBは以前から日本語化していた訳だが、他のローカライズは
http://developer.apple.com/tools/macosxtools.html#breadcrumb
を見る限りは無いみたいだな。

個人的にはスクリプトエディタの新バージョンβに興味あり。
134名称未設定:02/12/22 00:10 ID:0D51mckv
本当にAppleは日本語開発者に冷たいな。
つか、やる気ないだろ?
135名称未設定:02/12/22 13:48 ID:rexa71Qw
 雑誌の画面写真でしか見た事ないけど、NEXTSTEP時代のPBには
クラスやメソッドの解説が日本語になってたよね?
136名無しさん@Emacs:02/12/22 15:29 ID:WAow/daK
あれはキヤノンががんばってたんでは?
137名称未設定:02/12/22 16:01 ID:ubMHsN0Y
最近ようやくtech notesのCocoa物が翻訳されてるのみて、を〜やっときたか〜って感じでしたが。Cocoaで翻訳されてるのは2個しかない罠(藁。
てか日本人の開発者ってCarbonとかしかやっとらんと思われてるんだろーか?
tech notesもQ&AもCarbon絡みとかQT絡みばっかだよねぇ。
CocoaのDiscoverOPENSTEPは今のCocoa入門のPDFより出来がいいからあのままでいいけど(をい。
AppKitとFoundationKitのReferenceとっとと翻訳しろ〜〜〜(><)
138名称未設定:02/12/22 21:50 ID:f9UAkvm2
リファレンスの翻訳よりむしろ、逆引き系のドキュメントが欲しい。
InsideMacにあって、Cocoaのドキュメントにないのはそこだよ。と
りあえず英語のままでかまわんから‥
139名称未設定:02/12/23 00:30 ID:3O1qjF8Q
Windowsとのソフトの量の差の原因はこれか…。
140名称未設定:02/12/23 00:39 ID:vLosFQ0u
ユーザ数の差だろう...
141名称未設定:02/12/24 00:45 ID:C8SMmhAk
シェアの差は開発者の人数の差でもあるからなあ
142名称未設定:02/12/24 22:45 ID:YZLUCAKe
ただのユーザだったけど、プログラミングに興味が出た、って人物が
英語の壁で玉砕のケースが多いモヨリ。
Windowsには、酷評されつつも安易で使いやすいVBがあるし。
143名称未設定:02/12/25 02:50 ID:RYOVzj/X
プロジェクトビルダーとか付ける位なら教科書位出してくれてもいいのに。
中途半端。
144名称未設定:02/12/25 02:51 ID:RYOVzj/X
各国版の、って事ね。せめて主要国の。
145名称未設定:02/12/25 03:46 ID:D/CIxqso
新しいデベツールで
フルスクリーンになるアプリを実行して終了すると
メニューバーの表示がおかしくのは折れだけですか?
146 :02/12/25 11:04 ID:25KUSDdK
>>143
ProjectBuilderないと魅力半減。
教科書がほしいなら本で買ってもいいのでは。
147名称未設定:02/12/25 21:37 ID:mPpb3QIm
さいきんcocoa本が増え始めたようだよ 日本語の
148名称未設定:02/12/28 11:18 ID:4kFcyKqB
1,2冊たまたま同時期に出ただけだろ。
149名称未設定:02/12/29 02:29 ID:alltZCeg
つうか、増えてもどれも基本的な事に付いて説明してて、
内容が結構重複してんだよな。
150 :02/12/29 03:08 ID:x+lnhwDZ
初心者向けのばっかりだよね。
リファレンスとか、Tips集とか、はまりどころ集とかほしい。
151名称未設定:02/12/29 09:23 ID:GKyK1UDq
Cocoa を始めてから自分で調べる力がつきました。
個人的には本がすぐに出ないことが幸いしたような気がする。

そろそろまとまった内容のCocoa本が見たいけどね。
152名称未設定:02/12/30 23:28 ID:ngMA608/
>>151が「調べる力」なるものを身に付けている間に、
ドザはMFCアプリを完成させてる罠
153名称未設定:02/12/30 23:46 ID:c/SVydmr
ハア?
154名称未設定:02/12/31 01:04 ID:fCF4nYhQ
>>152-153 ドザはMFCの底なし沼にはまっている罠
155名称未設定:02/12/31 01:19 ID:TMgO2I0o
底なし沼とは具体的に何を指しているん?
156名称未設定:02/12/31 01:26 ID:kFoGGNld
調べる力が力尽きるほど調べても調べても調べ尽くせない調べのことでは?
157 :02/12/31 02:37 ID:1XWAiJ80
MFCとくらべたら、Cocoaのほうが洗練されてるよね。
でも、.NETと比べたらあやしいところかなぁ。
158名称未設定:02/12/31 02:58 ID:5U3cQxzv
.NETよりJavaのほうがイイって本当?
159 :02/12/31 03:25 ID:1XWAiJ80
>>158
価値観による
160名称未設定:02/12/31 12:58 ID:MZ8v8kXZ
やっぱCちゃんと勉強してからじゃないとObjective-Cはキツイかな
161名称未設定:02/12/31 13:14 ID:IssqW5mC
C自体はさほど難しい言語じゃないんだけど、
Obj-Cの解説書ってプログラマーならアタリマエに知ってるんだろう的
用語が連発するんでちょっと難しくないですか。
162 :02/12/31 15:57 ID:1XWAiJ80
Objective-Cがはじめてのプログラミング言語という人向けの
本が無いのですな。だれかかきましょう:-)
そういえば、阪大は(むかしは?)1年のときにObjective-Cを
ならったとかどうとか。そのときの教科書の流出とかないのかな。
163名称未設定:02/12/31 22:13 ID:MZ8v8kXZ
うん。
こないだC解説してるページ見て(void)とかすらやっと理解した。
載ってないんだもん。

と言う訳で今日アマゾンにC(C言語プログラミング" ハーベイ・M. ダイテル )と萩原本を注文しました。
164名称未設定:02/12/31 23:13 ID:Zmfhjh1x
萩原本は良いよ。初学者向けかどうかちょっとわからないけど、
Objective-CでCocoaプログラム書くつもりなら、いずれは参考にな
るときがくるでしょう。

といいつつ、本心では、メモリ管理をほとんど気にしなくていい言
語の方が初学者には向いてるんじゃないかと思う。どのくらい本気
なのかとか、目的にもよるが・・・
165 :02/12/31 23:17 ID:1XWAiJ80
>>164
萩原本はいいですな。うんうん。
わたしもメモリ管理気にしない言語のほうがいいかな〜と思ったのですが、
最初は不便な環境でいろいろ考える習慣をつけたほうがいいので、
ちょうど Objective-C くらいがいいのかも。

#うちの学校では B1 前期で scheme やって、後期に C をやるのですが、
#なにもわかってないくせに C ってつかえね〜とか言う厨が....
166名称未設定:03/01/01 02:43 ID:FB0kK2l3
メモリ管理しなくていい言語なんてあるんすか。
参考になります押忍。

スレ中前述の様にObje本はせいぜい中級者向け(萩原本)迄しか無いのがつらい。
167名称未設定:03/01/01 13:06 ID:zJdSzk0e
>>166
押忍!
なんつーか「富豪的プログラミングで構わないならば」メモリ管理
を気にしなくてよい言語ってことです。いっぱいあるよ、
Java Ruby Python Perl Scheme lisp ...。
Java, Ruby, Python, Perlあたりは、その気があればCocoa
のプログラミングに使えるみたい。

Cocoaプログラミングに使えそうな言語へのリンク
ttp://www.fscript.org/links.htm
富豪的プログラミング
ttp://www.csl.sony.co.jp/person/masui/fugo.html
168名称未設定:03/01/01 18:34 ID:7KUkRcR3
え!!
PerlがCocoaに使えるんですか?ていってもどういう意味なのかわからない程度の素人なんですが。
普段Perlはテキスト処理用のスクリプトとして使ってます。
169名称未設定:03/01/01 23:08 ID:KJRrImHU
富豪的、っていうより
RubyやJavaみたいにメモリ管理の面倒(ガベージコレクションとか)
みてくれる言語のほうが初学者には楽、ていう意味だと思ったんだけど。
170名称未設定:03/01/01 23:53 ID:oVRtSIEp
171170:03/01/02 00:00 ID:V0oTkhiy
スマソ、まちがえた
CamelBones (perl)
ttp://camelbones.sourceforge.net/
172163:03/01/03 03:54 ID:hWNCnpWQ
まだこない。発送は当日にされたらしいが、
ペリカンって正月休みだっけ?

と、発送スパンをメモしとく。
173名称未設定:03/01/03 23:27 ID:nk3C7Fqb
サービスを提供するアプリを作りたいんですが、
例えば

サービスメニューから呼び出す

提供側のアプリでユーザーが何か操作をして、
「終了」ボタンが押される

呼び出した側で結果が挿入される

みたいな事をやりたい時はどうすればいいのでしょうか?
174173:03/01/03 23:27 ID:nk3C7Fqb
age
175名称未設定:03/01/04 02:09 ID:5zdvt1wZ
>>173
すいません、いってることがよく分からないのですが。。。
サービスメニューっていうのはアプリケーションメニュー(アプリケーション名
がついたメニュー)の中の『サービス』の項のことでいいの?

なにか具体的な例が欲しいな。
176172:03/01/04 08:32 ID:LQxVcN6Q
昨日朝9時頃C本到着。
と止めようかと思ったけどそれでもスレ汚しメモ。
177173:03/01/04 13:45 ID:JsoTqK/7
>>175
具体的もなにも、そのまんまなんですが……
例えば

TextEdit側でテキストを選択して、
サービスメニューから「キーワードに色付け」を呼び出す

色付けサービスを提供するアプリで、
キーワードを指定して行くと同じ文字列に色がついていく。
キーワード全部に色が付いたらユーザーが「色付けを終了」を押す

TextEditに色付けの終わったリッチテキストが挿入される

て感じですが。

色んなCocoaの入門書を読んでみても、
サービスの提供にユーザーが介入しないサンプルばっかりで困ってます。
178名称未設定:03/01/05 02:10 ID:oiKOy1Xw
一つ聞きたいことがあるんですけど、MacOSXのインストーラみたいに
一つのウィンドウの中でビューをころころ変える時ってあるじゃないですか。
例えば10個のNSViewがある時にそれをプログラム側で
NSWindow.setContentView(view1)みたいにやりますよね。

その時に各ビューにいろいろなコントローラ(ボタンとか)があるとアクション
を受け取るクラスが必要になります。みなさんだったらこの受け取り側のクラス
を一つにしますか?それとも複数(例えば各ビューごと)に分けますか?

もちろん時と場合によるんでしょうけど、いままで自分は一つのクラスで
やってたんですけどビューが多くなるとあらゆる処理が混ざっちゃって。。
分けるのもありかなぁって思ったんですよ。

オブジェクト指向的には分けるのが当たり前な気もするのですが・・・。
どうでしょうか?
179 :03/01/05 03:10 ID:0hPLvfw4
>>178
Objective-C的にはCategoryでわけておくのもいいでしょうか。
結局、Viewの相互依存度によって柔軟に対応することに
なるのでしょうな。
180178:03/01/05 04:48 ID:oiKOy1Xw
>>179
レスありがとうございます。

なるほど確かにそうですね。
プログラムは常に柔軟にってことですね。
依存度は低め(決して0ではないですが)なので分けてやってみます。
今紙にオブジェクトの依存関係を書いてみたんですがうまくやれば
きれいにまとまりそうです。

がんばってみますね。

それにしても『プログラムを書く』ということと『アプリケーションを作る』
っていうのは二つの間に壁がありますね。必死で勉強します。
181名称未設定:03/01/08 19:34 ID:LIvgpbkk
少なくともsafariのソースを読んで意味が理解出来る位になりたい・・
182名称未設定:03/01/09 00:06 ID:dvmn6aeG
>>156
その説明では、何も判りません。
183名称未設定:03/01/16 02:39 ID:89tBpTdi
ある文字列をEUCに変換したいのですが、

NSString *str = @"あいうえお";
NSData *dat = [str dataUsingEncoding:NSJapaneseEUCStringEncoding];

これでEUCのNSData型にして、そのあとNSStringに戻す方法は
どうしたらいいのでしょうか?
また、エンコードの方法はこの方法であっているでしょうか?
184名称未設定:03/01/16 09:10 ID:oo03MoCL
>>183

そこまで分かっているなら、
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
を使えばいいことも推測できそうなものですが。
185名称未設定:03/01/16 21:33 ID:IxtFqHx0
直接Cocoaでなくてあれなんですが。
みなさんプロジェクトのバックアップとかってどうしてるんですか?
今んとこソーズいじる前に必ずtar.gzで丸ごと保存してるんですが、
何かいい方法あります?
186名称未設定:03/01/16 21:58 ID:oo03MoCL
>>185

CVSを使うのがおすすめ。
http://www.a2zsd.co.jp/~a2zsd217/book/cvs/book1.html

コマンドラインからレポジトリを用意して、プロジェクトをIMPORTしておけば、
あとはProjcet Builderから差分を確認したり元に戻したりすることが簡単にできます。
187185:03/01/16 23:16 ID:IxtFqHx0
>>186
早速試してみました。
ちとこむずかしくて手こずりましたがなんとか導入できました。
んでも実際のプログラム以前にCVSに手こずる罠。。。

ちなみに教えていただいたページ以外にもCVSで検索してみたんですが
ttp://www.linkclub.or.jp/~tumibito/soft-an/cvs/cvs-man/cvs-ja_toc.html
(これって、DevelopToolsでインストールされるCVSのドキュメントの翻訳?)
ここもとても参考になりました。

とにかく186さん、ありがとうございます!
188名称未設定:03/01/17 04:52 ID:iae4P0gQ
>>185, 186
いままで何となくCVSに手を出しそびれていた俺に踏み出す勇気をくれた
お二人さん『アリガトウ』
俺も今夢中でttp://kahori.com/j-cvsbook/j-cvsbook.htmlを読んでた
まだまだ実用的なことはできないけどがんばるよ。
189185:03/01/17 10:54 ID:lcNODBLM
ちと疑問に思ったんですが、一つのリポジトリにたいして
複数のプロジェクトをIMPORTしてもいいんですか?
それともプロジェクトごとにリポジトリを作るの?

間抜けすぎる質問らしく解答を見つけられない...
190 :03/01/17 11:04 ID:LipkprQm
>>189
別に問題ないのではないか。
#なにが問題なのかわからん・・・。
191185:03/01/17 12:08 ID:lcNODBLM
>>190
即レスありがとう。
疑問氷解。

>#なにが問題なのかわからん・・・。
反省。
192188:03/01/17 14:47 ID:iae4P0gQ
>>189
俺も全く同じことでつまずいた。
>>188にあるサイトにそこらへんのことが少し書いてありますよ。
193185:03/01/17 16:52 ID:+NX+CZKg
>>188
重ね重ねありがとうございます。
読んでて分からんところは今に分かるだろうと、
思いっきり飛ばし読みしてます。

ついでにCVSググってて、こんなん見つけました。
ttp://www.sente.ch/software/cvl/
CVL is a graphical user interface to CVS most often used commands.

以上、Cocoaちっくな話題でなくすんませんでした。
194名称未設定:03/01/17 18:15 ID:HweL1539
terminalでCVSROOT(とCVS_RSH)を設定してから、
cvs loginして
openでPBを蹴ってやればリモートCVSも使えるよ。

ssh使ってる場合はパスフレーズ無しにしないとだめだけど。
195名称未設定:03/01/18 07:00 ID:giUYiAl2
ProjectBuilderって'\'(円記号)の表示できなくない?

C言語の勉強をしてみよう!と思って教本買ってきたんだけど
いきなりつまづいてしまった。

#include<stdio.h>
int main()
{
printf("\\");
return 0;
}

だと、←バックスラッシュがぽつんと表示される。
196名称未設定:03/01/18 10:03 ID:Qdc5gDs2
>>196
\と¥の関係について
もうちょっと勉強しよう!

というかなんで\でなくて¥でないと
ダメなんですか?
197名称未設定:03/01/18 16:12 ID:ALrZXQoJ
プロジェクトビルダーでコード入れてるだけでやたらと落ちまくる
人ってどれくらいいるのか? オレは作業できんくらい落ちまくる。
一文字入れて落ち、一行入れたと思ったら落ち、改行できたと思ったら
落ちる。騙し騙しやってるけど、みなさんもそんな感じですか?
198名称未設定:03/01/18 17:00 ID:3WVxlwou
>>197
>プロジェクトビルダーでコード入れてるだけでやたらと落ちまくる
>人ってどれくらいいるのか?

>>127をよく読もう。
199名称未設定:03/01/18 18:16 ID:MRKdqgWl
>>198
小春日和のような人
200名称未設定:03/01/18 18:43 ID:Hl9LmSa+
200げっちゅ
201名称未設定:03/01/19 00:02 ID:qkoizFWS
Project BuilderからできるCVS操作って限られてるなぁ。
( ひ と り ご と だ す )
202名称未設定:03/01/19 21:05 ID:fU25KtyI
おいっ!
いまフジテレビでcocoa特集やってるぞ!見れ見れ!
203名称未設定:03/01/19 21:19 ID:WKI8D/qq
2の煽りが消されてんじゃん。ワラタのに。
204名称未設定:03/01/19 21:30 ID:qkoizFWS
>>202
分かってはいてもちょっと見ちゃったよ。(w
205名称未設定:03/01/20 18:22 ID:t2BhBQWd
鶴薗さんフレーム使うの止めて下さい。
206名称未設定:03/01/22 02:51 ID:4maCModN
『Cocoaはさっぱり!』よ永遠に。
age

そういえばCocoa/JavaでFrameworkを作りたいんですけど
headerとかが必要らしいけどどうすればいいのかなぁ?
自分用にカスタムビューをいっぱい作ってフレームワークにしたら
便利だと思ったんですけど…。
207名称未設定:03/01/22 10:58 ID:1+Qkm5Xj
テキストエディタを半透明にすることができない。
黒背景&半透明のターミナルが気に入っているので同じようなものを作ろうと思ったんだが、
NSTextViewのAtributesからBackgroundのopacityをいじっても透過するようにならない。
下地のNSeWindowにはカラーをいじる項目はないし、どうしたらいいのだろう・・・

208名称未設定:03/01/22 11:40 ID:4maCModN
>>207
とりあえずNSWIndowを透明にするなら
window.setBackground( NSColor.clearColor() );
window.setOpeque( false );
setHasShadow( true );

でいける。(Javaでごめん、何となく分かるでしょう

ちょっと時間がなくて半透明まで書けない。
ごめんよ、でももし参考になれば。。。
209名称未設定:03/01/22 11:41 ID:4maCModN
あれ?2重書き込み?
重ね重ね、ごめん。
210207:03/01/22 12:26 ID:1+Qkm5Xj
>>208
ありが?ォ。

具体的にはNSwindowのクラスをインスタンス化して
アウトレットをNSWindowに接続、

で、呪文を唱えると言うことなのだろうか。。

昼間はもう時間がないので今夜試してみます。
211名称未設定:03/01/22 14:10 ID:JQ+stKB+
>>210
NSWindowをサブクラス化。
setBackground、setOpequeをオーバーライド。

IB
クラスのヘッダファイルを読み込み。
ウインドウのカスタムクラスを変える。
212山崎渉:03/01/23 02:20 ID:Kx2M+3Qk
(^^)
213208:03/01/23 07:01 ID:wK5RAK5s
>>210
がんばって!
>>211が言うようにサブクラス化した方が吉!
214207:03/01/23 23:58 ID:WDG0Ml0l
とりあえずこんな感じで書いてみた。(JavaはサパーリなのでObj-C)

#import "MyWindow.h"

@implementation MyWindow
- setBackgroundColor
{
[self setBackgroundColor:[NSColor clearColor]];
return self;
}
- setOpaque
{
[self setOpaque:FALSE];
return self;
}

@end

MyWindowはNSWindowのサブクラス。MyWindow.hは何も変更なし。
で、とりあえずコンパイルは通るがもちろん透明にはならない。
どこかでwindowを初期化しないといけないとは思うのだが
initWithContentRect:styleMask:backing:defer: はドキュメント読んでみてもよく分からない・・・

215207:03/01/24 00:01 ID:lHQMFngz


 ∧||∧
(  ⌒ ヽ  
 ∪  ノ 
  U U

216207:03/01/24 02:40 ID:lHQMFngz
やっとできた。awakeFromNibを使った。

#import "MyWindow.h"

@implementation MyWindow
-(void)awakeFromNib
{
[self setBackgroundColor:[NSColor clearColor]];
[self setOpaque:FALSE];
}

@end

こんな感じ。いろいろ教えてくれてどうもありがとう。
ようやく眠れる・・・

217名称未設定:03/01/26 18:59 ID:IzKleeOY
定期あげ
218名称未設定:03/01/26 23:09 ID:O+/ffiFw
NSStringに格納された
/Users/hoge/Desktop/
というUNIX式のパスを
Maciintosh HD:Users:hoge:Desktop:
というMac式のパスに変換する方法は無いものでしょうか。

ざっと調べた限りでは該当する機能がCocoaのクラスに見つからなかったので、
何か良い方法をご存じの方はご教示願えませんでしょうか。
219名称未設定:03/01/26 23:20 ID:rEUgqX0Y
ふつうに一文字ずつ調べてコロンに変換すればいいだけでは?
220218:03/01/26 23:26 ID:O+/ffiFw
>>219
その方法も考えたのですが、
起動しているディスクの名前を調べる方法が分からないので
断念してしまいました。
221218:03/01/26 23:37 ID:O+/ffiFw
あ、NSStringに格納されているのは
/Users/hoge/Desktop/というパスの決め打ちではなく、
実際にはどんなパスなのか不確定な場合です。
222名称未設定:03/01/26 23:44 ID:rEUgqX0Y
起動ディスクの名前を調べる方法?
AppleScriptで「StartupDisk」を使って名前を調べるってのはダメかな。
そこだけAppleScriptでテキストファイルに書き出すように組んで
起動時にいったん呼び出すとか、できないかな。

223218:03/01/27 22:14 ID:4opfdzsB
その後色々と自分で考えてみた結果、

-(NSString*)getColonDelimitedPath:(NSString*)filename{
FSRef fRef;
FSRef pRef;
OSErr err;
HFSUniStr255 name;
NSMutableArray *nameArray=[NSMutableArray array];
BOOL isDirectory;

if (![[NSFileManager defaultManager] fileExistsAtPath:filename isDirectory:&isDirectory]) return @"";

err=FSPathMakeRef([filename UTF8String],&fRef,NULL);
if (err == noErr) {
while (1) {
err=FSGetCatalogInfo(&fRef,kFSCatInfoNone,NULL,&name,NULL,&pRef);
if (err != noErr) break;

[nameArray insertObject:[NSString stringWithCharacters:(name.unicode) length:(name.length)] atIndex:0];
fRef = pRef;
}
}

if ([nameArray count] > 1) [nameArray removeObjectAtIndex:0];
if (isDirectory) [nameArray addObject:@""];
return [nameArray componentsJoinedByString:@":"];
}

というメソッドを組んでUNIX流のパスMac流のパスに変換することができました。
Carbonは全く触ったことがないので、もっとスマートな方法があるかもしれませんが、
とりあえず解決した方法を報告しておきます。
長文申し訳ありません。
224名称未設定:03/01/28 04:41 ID:O6299JZg
そういえばUNIX流パスからFSSpecへ変換するコードを
QuickTimeのサンプルの一部としてどこかで見た記憶がある
Cocoaで取得したパスをFSSpecしか受付けないQuickTimeに
渡す方法として紹介されていた気がする
FSSpecが得られたらFSMakeFSSpecを繰り返せばいいんだけど
スマートじゃないやり方だなあ
それに長いファイル名だと名前の末尾がおかしくなっちゃうかもね
225名称未設定:03/01/28 15:40 ID:VStRHzrc
HTMLの読み込み方を説明してるページって無いでしょうか。
226名称未設定:03/01/28 16:17 ID:NgRJ+NNu
#include <stdio.h>
main() { FILE *fp = fopen("index.html", "r"); }
227名称未設定:03/01/30 01:38 ID:RAb1dDyE
>>225
質問の意味が若干曖昧なのですが、
「サーバに接続してデータをダウンロードしたい」という意味であれば、
NSURL *url=[NSURL URLWithString:@"http://www.apple.co.jp/index.html"];
NSData *data=[url resourceDataUsingCache:NO];
といった感じで実現できます。
228名称未設定:03/01/30 21:21 ID:GOsOyZ0P
HTMLの読み込み方って言ってるんだから
ttp://www.midi.co.jp/objc0.html
こんなんじゃないのか?
これだと読み込めないけど
229名称未設定:03/01/31 00:55 ID:jSuCPtPg
230名称未設定:03/01/31 03:28 ID:nWV7f5Kl
NSTextView で OR 検索はできないでしょうか?
文中に wordA か wordB があったら
そこだけ別の処理をしたいです。
231名称未設定:03/01/31 10:36 ID:7ArxHJrs
>>230
ちょっと調べてないから分からないけど多分
自分で組むしか無いんじゃない。
perlで組めば難しくはないよね。
232名称未設定:03/02/01 01:11 ID:8bNReTRB
>>230
Cocoaの標準ではできないっぽいけど、
>>229のURLにあるOmniFoundation フレームワークには
正規表現ライブラリがあるみたいだから、
それを試してみるというのはどうでしょう。
233名称未設定:03/02/02 23:40 ID:ohzM6UCC
過去ログを参考に、テーブルビューの項目をdeleteキーで削除できるようにしようと考えています。

前に、NSResponderのサブクラスを作って、tableViewに
[tableView setNextResponder:myResponder]
を送ってmyResponderでキーイベントを処理すればいい、っていう事が書いてあったんでこの通りにしました。
(ついでに[MyResponder setNextResponder:[tableView superview]も入れました。不要ですか?)

その結果、キーイベントを拾えるようにはなったのですが、このサブクラス中では[tableView selectedRow]の結果はいつも0しか返ってきません。おかしいなーと思い、試験的に
[tableView selectRow:3]
した直後に-selectedRowを送ってもやはり0が返ってきます。

何かやり忘れていることがあるのでしょうか。知恵をお貸し下さい..。
234名称未設定:03/02/03 00:15 ID:Zlq3gph/
>>233
tableViewがnilなんじゃない?
235名称未設定:03/02/03 00:14 ID:Zlq3gph/
>>233
tableViewがnilなんじゃない?
236名称未設定:03/02/03 00:50 ID:1DSE6VJD
>>233
メニューにDeleteっていれてEquivを\Dにするのはダメ?
簡単だけど。。
237名称未設定:03/02/03 01:01 ID:V9mQ7ebK
>>234
ありがとうございます!確かにtableViewがnil(0x0)になってました。
さて・・なんでnilになってるんだろう・・。

tableViewからIBでMyResponderにつないでるのになー・・・なんかすごい初歩的な所で間違ってそうだな・・。

>>236
なるほど、そういうのもアリですね。確かに簡単!
できればdelキーだけで消去できた方が自然な操作かなーと思いますが、どうしても無理だった時に使わせていただきます。
238名称未設定:03/02/03 01:20 ID:VAtApCIA
Cocoaといえば
ケントデリカット
239235:03/02/03 01:29 ID:Zlq3gph/
二重カキコスマヌ

>>233
tableViewがスペルミスってるか、
IBでMyResponderインスタンスを作ってるのに自分でallocしてるとか。

ぬるぽExceptionがでないことの弊害か。
240236:03/02/03 02:25 ID:1DSE6VJD
>>233
別にメニューにこだわってるわけじゃないけど、メニューにキー登録すれば
delキーでもメニューでも同じ動作が出来るから俺は好き。
いや、アプリの特性にもよるし、今求められてる答えじゃないから気に
しないでおくんなまし。
241名称未設定:03/02/03 20:23 ID:GA7OTv+E
これからcocoaをやろうかと思います。
参考書を買おうと思うんですが、中村本とアーロンヒレガスとではどっちがいいですか?
242名称未設定:03/02/03 20:37 ID:4QHl9ldJ
>>241
個人的にヒレガス本を勧めます。こっちのほうがきちんと解説していると思います。
ただこれを読むには最低限のC言語とオブジェクト指向の知識が必要です。ご注意を。
243230:03/02/03 21:24 ID:geaLcjev
>>231,232
どうもありがとう!
Omni のライブラリを調べてみます。
244名称未設定:03/02/04 00:19 ID:a/2oqPVh
>>242
ありがとうございました。
C言語なら分かりますがオブジェクト指向ってのは分かりませんが、ヒレガスにします。
245233,237:03/02/04 00:28 ID:F8EYt14K
>>239
ありがとう、答えは後者でした。
実はオブジェクト指向なるものが分かってない可能性が高いようで・・・(汗)
ばっちり動作しました。Cocoaって面白いですね〜。

後に続く人のために、今回やった方法を書いときます。

(1)メインのコントローラーオブジェクト(mainController)のアウトレットにIBでインスタンス化したmyResponderを接続
(2)mainControllerの - awakeFromNibで
[tableView setNextResponder:myResponder]と
[myResponder setNextResponder:[tableView superview]]
を送る。
(3)myResponderの - keyDownメソッドで、押されたキーのキーコードを調べて、Delキーだったら[mainController deleteItemOfTableView(メソッド名は適当)]を送る。
(4) ( ゚Д゚)ウマー

かなり洗練されてなさそうだけど、とりあえず動いてるのでOKかな。
246236:03/02/04 01:38 ID:RBgOtZQ6
>>245
おめでと!
247名称未設定:03/02/04 22:13 ID:+MMCD9Ww
Cocoaと直接関係ないかもしれないけど,MacOS Xってコマンドラインツールって
結構あるじゃないですか.UNIXの.で,その中の対話形式になっているツールを
CocoaのGUIで制御したいのですが,(フロントエンドですね)入力待ち状態になっ
ているコマンドラインツールに,どうやってGUIからコマンドを入力するんですか?
例えばrm -iってやると,yesかnoを聞いてきますよね.その時yesなりnoなりを
どうやってrmに渡したら良いのか...
(rm -fしろというのはなしでおねがいします.あくまで例なので.)
248名称未設定:03/02/04 23:56 ID:/Om4uQAD
>>247
パイプを使って標準入力に流し込みます。

CocoaはやっぱりのPerlスクリプトを実行するが参考になると思います。

waitUntilExitを使わず、performSelector:afterDelay:;なんかをつかって
標準出力をパイプを使って読み込んで、
必要であればパイプを使って標準入力に書き込む
という手順でしょう。
249名称未設定:03/02/05 00:48 ID:nxCAebx7
>>247
> (rm -fしろというのはなしでおねがいします.あくまで例なので.)
rm -i hoge | yes :)
250名称未設定:03/02/05 20:35 ID:MfIzGyu1
>>248
????????????.??????????????,Perl?????
???????????????.???????????????
???????,????????rm -i????,???ftp??????
??,??????????????????,????????.

fp = popen("rm -i hoge.txt", "w" );
fwrite( fp, "yes" );

?????C???????,???????????????????.



>>249
????????????.
???,???yes?rm -i??????????????????,
??????????...(???????????)
251250:03/02/05 20:38 ID:MfIzGyu1
すいません.Safariバケです.

>>248
レスありがとうございます.紹介していただいたサンプルは,Perlスクリプト
が常に標準入力待ち状態ですよね.それだとたしかにうまくパイプで
いけそうですが,先にしめしましたrm -iだったり,例えばftpだったりする
場合,いつもいつも入力待ち状態ではないので,うまくいきません.

fp = popen("rm -i hoge.txt", "w" );
fwrite( fp, "yes" );

ベタベタなCですみませんが,このようなかんじのコードを書いています.

>>249
レスありがとうございます.
えーと,それはyesにrm -iの標準出力を流し込もうとしているので,
ちがうと思うのですが...(実際できませんでしたし)
252250,251:03/02/06 21:36 ID:UYOxbH3T
>>251
fwrite( fp, "yes" );
これはまちがいですね.
fprintf( fp, "yes" );
でした.すみません
253名称未設定:03/02/07 21:39 ID:bNgyiqZA
ほっしゅ
254名称未設定:03/02/07 23:30 ID:7wMX8TxP
>>251
-(void)test:(id)sender {
NSTask*task = [[NSTask alloc] init];
NSPipe*output = [NSPipe pipe];
NSPipe*input = [NSPipe pipe];
NSString*rmPath = @"/bin/rm";
NSString*arg1 = @"-ir";
NSString*arg2 = @"/Users/hoge/hoge";
[task setStandardError:input];
[task setStandardInput:output];
[task setLaunchPath:rmPath];
[task setArguments:[NSArray arrayWithObjects:arg1, arg2, nil]];
[task launch];
while(YES){
NSData*inData = [[input fileHandleForReading] availableData];
if( inData && [inData length] ) {
NSData*outData = [NSData dataWithBytes:"yes\n" length:4];
[[output fileHandleForWriting] writeData:outData];
} else {
break;
}
}
}
????
% pwd
/Users/hoge
% mkdir hoge;touch hoge/hoge;touch hoge/foo;touch hoge/bar; ls hoge
bar foo hoge
%???????
% ls hoge
ls: hoge: No such file or directory
255254:03/02/07 23:32 ID:7wMX8TxP
化けたが伝えたいことは分かるだろう。。。
256名称未設定:03/02/08 01:04 ID:4RKC1Ceg
質問です。
NSArrayのリファレンスを読んでいたのですが、- indexOfObject:メソッドは
配列中の要素にisEqual:を送る事で「引き数の物と一致しているか」を判断する、とありました。
また、- indexOfObjectIdenticalTo:メソッドは、id値を頼りに一致しているかどうかの判定を行う、
とありました。

ところで、荻原本によるとisEqual:は「同じポインタを持つ物は等しいと見なす」とあります。
となると、結局上記の2つのメソッド- indexOfObject:と- indexOfObjectIdenticalTo:は、両方とも
オブジェクトへのポインタを頼りに「一致しているかどうかの判定」を行っているように見えます。
両者のメソッドは、一体何が違うのでしょうか?
257名称未設定:03/02/08 01:49 ID:nc13ukt6
Obj-Cはわからないから詳しくは分からないけど
>isEqual:は「同じポインタを持つ物は等しいと見なす」
っていうのがなんか違う気がする。

isEqualってメソッドなんだよね(それさえもわからない。。)。
だからじぶんでisEqualを実装すれば実際には違うオブジェクト
(ポインタの異なるオブジェクト)でも同じとみなすことが出来る。
って事じゃない?
ごめん、説明下手で。
258名称未設定:03/02/08 02:48 ID:25lWZyO8
オブジェクトが同じ値であることと同じ物であることは違う。
オブジェクト指向プログラミングの本には必ず書かれている
基本概念なので調べてみましょう。
259名称未設定:03/02/08 04:23 ID:PjXD2qHV
「原則として」と書いてあるじゃん
260256:03/02/08 06:27 ID:nZBs88YL
みなさんのレスを参考にいろいろ考えてみて、以下のようなコードで実験してみました。
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 NSNumber *testNumber;
 NSMutableArray *testArray = [NSMutableArray arrayWithCapacity:1];

 [testArray addObject:[NSNumber numberWithInt:3] ];
 testNumber = [NSNumber numberWithInt:3];

 NSLog(@"indexOfObject: result...%d\n",[testArray indexOfObject:testNumber]);
 NSLog(@"indexOfObjectIdenticalTo: result...%x\n",[testArray indexOfObjectIdenticalTo:testNumber]);

 [pool release];
 return 0;
}
実行結果は以下のようになりました。
2003-02-08 06:12:55.958 arraytest[885] indexOfObject: result...0
2003-02-08 06:12:55.960 arraytest[885] indexOfObjectIdenticalTo: result...7fffffff

isEqual:を使ったindexOfObjext:では0番目の要素がマッチしているにも関わらず、
ポインタを参照しているindexOfObjectIdenticalTo:ではNSNotFoundが返りました。

みなさんのおっしゃる通り、isEqual:は単にポインタを参照しているだけでは無い事が解りました。
ヒントを下さって、どうもありがとうございました。
261256:03/02/08 06:57 ID:nZBs88YL
ところで、手元にあるヒレガス本を読み返してみると、isEqual:は
やっぱり「ポインタが同じである場合」と書いてありました。
が、「例えばNSStringは(中略)このメソッドをオーバーライドしている」とありました。
上記の実験で使ったNSNumberも、どうやら同じようにオーバーライドしていたようです。

当初私もisEqual:に変更を加えているのでは、と思ったのですが、ところが、
NSStringやNSNumber(NSValue)のヘッダを見てみても、オーバーライドしたとは
明示されていませんでした。これが私が混乱した元になってしまったようです。
お騒がせしてすみませんでした。
262名称未設定:03/02/08 10:03 ID:qe15kRor
isEqual は、Cocoaのオブジェクト指向プログラミングの世界観を
理解する上で重要なので、おざなりな理解で済ませない方がいいよ。
素直にNSObjectのリファレンスを読みなさい。

- (BOOL)isEqual:(id)anObject

Returns YES if the receiver and anObject are equal, NO
otherwise. This method defines what it means for an instance
to be equal. For example, a container object might define
two containers as equal if their corresponding objects all
respond YES to an isEqual: request. See the NSData,
NSDictionary, NSArray, and NSString class specifications for
examples of the use of this method.

If two objects are equal, they must have the same hash
value. This last point is particularly important if you
define isEqual: in a subclass and intend to put instances of
that subclass into a collection. Make sure you also define
hash in your subclass.
263251:03/02/08 20:01 ID:jKIPEwj2
>>254
コードまで書いていただいてありがとうございます.
そうか,パイプを入出力用に2つ作らないといけないわけですね.
そして入力を検知するまでループで待ち(ここがポイントかな?),
それから出力用のパイプにデータを流し込む.
ちょっと今は試せないのですが,分かりました.
しかし,世の中のコマンドラインツールのフロントエンドって,
みんなこういうことしてるんですかね.結構大変そう.
264名称未設定:03/02/08 21:54 ID:k+NDFvP8
オンラインのURLをそのままHTML表示したりはできますかね?
265248,254:03/02/08 23:39 ID:RHwyfaZZ
>>263
このループはただ削除対象ファイルがなくなるまで回してるだけです。
実際にこのような処理をして、コマンドラインツールからの出力が遅れると
GUIの処理が全くされないので虹が回りはじめます。
で、performSelector:afterDelay:;とかを使えばどうですかということです。

-(void)hoge {
if( タスクからの出力がある ) {
出力にあわせて処理
}
if( まだ処理が残っている) {
[self performSelector:_cmd afterDelay:0.0];
}
}

みたいなことをやればGUIに処理が回りますので虹は回りません。
もちろんスレッドを使ってもいいですけど。
266名称未設定:03/02/09 05:30 ID:0I2KfkjL
F1 キーを押したときに、
コンテキストメニューを表示させるにはどうしたらいいですか?
sendEvent で F1 キーを捕まえるところまではできています。
でも、メニューの生成・表示方法がわかりません。
267名称未設定:03/02/09 10:02 ID:rBb3Vu6y
[view menu];
ってやるとか?

なるかどうかは知らん。
268名称未設定:03/02/09 14:39 ID:OynYE/8M
>>266
ttp://infoatmackers.jp/cocoa/programming/programming19.html
でコンテキストメニューについて書かれてるみたいだね
269266:03/02/09 22:32 ID:BA69j0bx
>>268
それっぽいのができるかも! ありがとー。
270256:03/02/10 02:40 ID:+aF+n49+
>>262
確かにその通りです。が、今まで訳に自信が無く、敬遠していました。
英和辞典と格闘しながら読んでみて、自分なりに実験を繰り返していましたが、
"isEqual:は単にプロトコルとして提供されているだけで、判定方法は各クラスが自由に設定できる"
と結論するに至りました。
int型変数testValueを持つ自前クラスTestClassを用意し、
[testArray addObject:[[TestClass alloc] initWithValue:3]];
obj = [[TestClass alloc] initWithValue:3];
[testArray addObject:obj];
NSLog(@"indexOfObject: result...%d\n",[testArray indexOfObject:obj]);
NSLog(@"indexOfObjectIdenticalTo: result...%d\n",[testArray indexOfObjectIdenticalTo:obj]);
とした所、結果は
indexOfObject: result...1
indexOfObjectIdenticalTo: result...1
でした(NSNumerを使った>>260では0番目がヒットしたのに!)。ここで、isEqual:を次のように定義した所、
-(BOOL)isEqual:(id)anObject
{
 if([anObject isMemberOfClass:[self class]])
  if([self testValue] == [anObject testValue])
   return YES;
  return NO;
}
結果は以下のようになりました。
indexOfObject: result...0
indexOfObjectIdenticalTo: result...1
>>260で使ったNSNumberも、おそらくこのような拡張を行っていたんですね。
勉強になりました
271名称未設定:03/02/10 21:29 ID:Dew/Ojim
>>270
なんとなく、微妙な理解の仕方のような気がする・・・
"isEqual:は単にプロトコルとして提供されているだけで、判定方法は各クラスが自由に設定できる"
という文章を読むと、単に実装の仕組みを理解しただけで、意味を理解できていないような気がします。
なので、一応説明しておきます。既に理解してたらスマソ。

isEqualは、実装上の仕組みうんぬんではなくて、
もう少し論理的なレベルで考えないと、きちんと理解することができません。
Objective-Cに限らず、Javaでもなんでもオブジェクト指向言語では、
「オブジェクトが同一」ということと、「オブジェクトの値が同一」ということを
はっきりと区別しています。
Objective-Cの場合、前者は、ポインタの比較で判定します。
後者は、isEqualを使って判定します。
例えば、同じ"abc"という文字列を表す別々のNSStringのインスタンスA,Bがあった場合、
前者で比較した場合はNOですが、後者はYESです。NSNumberもしかり。
しかし、クラスによっては、「オブジェクトが同一」の場合に「オブジェクトの値が同一」と
みなすのが適当なものもあります。
例えば、NSObjectなんかはそう。NSObjectは比較すべき値をもっていないから、
NSObjectのインスタンスa,bが同じ値である、というためには、
aとbが同一のオブジェクトかどうかを判定するしかないのです。
つまり、この場合は「オブジェクトが同一」の判定と「オブジェクトの値が同一」の判定は、
*たまたま*同じ結果になるのです。
実装だけをみれば同じことをしていても、この2つの意味はきっちり分けて
考えなければいけません。

NSArrayのindexOfObjectIdenticalToは引数と「オブジェクトが同一」のもののindexを取得し、
indexOfObjectは、引数と「オブジェクトの値が同一」のもののindexを取得します。
272名称未設定:03/02/10 22:41 ID:a9ihwh+e
関係ないけど、(NSObjectみたいな)ベースクラスのオブジェクト比較メソッドは
「常に真を返す」という実装である方が論理的に整合性が取れる、つう話が
JavaHouseで出ていたな。
273名称未設定:03/02/11 02:05 ID:j79c6DbT
>>272
その話、理由を聞かないとなんとも言えないが、わけのわかってない
人が言っただけのこと?
それともJavaHouseで複数の識者に支持されるような説得力のある話?
URLキボン
274名称未設定:03/02/11 02:13 ID:j79c6DbT
271ニハゲドウ
世界観を知った上で、現象を見て理解を確認するのはいいけど、
現象から理解しようとしすぎない方がいい。
とくに基本哲学的なところは。。。
275名称未設定:03/02/11 15:55 ID:X1zYJQXj
>>272
それ、俺も気になる。
もしその話なかで根拠になるものが書いてあったら教えてほしいです。。
もしくはURLが。。
276256:03/02/11 22:18 ID:kNLtXHAM
>>270
ああ、おかげでやっとisEqual:のリファレンスにあった
"This method defines what it means for an instance to be equal."の現す真意が理解できました。
確かにおっしゃる通りで、各クラスとも「同一と判定してほしい条件」は異なるはずで、時にはそれが
ポインタであったり(同じメモリ空間に格納された『同じもの』)、時にはNSStringやNSNumberに
代表されるような「表現している値」(あくまで『たまたま値が等しいだけ』)の場合がありますものね。
(しかも、状況によってはその都度判定条件を変える必要に迫られる可能性もあるでしょうし)。
それに「ポインタの比較 == 値の比較」としか表現できない状況も確かにありそうです。
//メソッドしか持たないオブジェクトの場合、こうするしかありませんよね。

で、isEqual:というのは「このクラスではこういう条件や状況で『同じ』と判定して欲しいなあ」を
定義するメソッドである、という訳なのですね。御丁寧にどうもありがとうございました。
277名称未設定:03/02/11 22:20 ID:8DblXC2f
278名称未設定:03/02/13 15:05 ID:YVSvw8xP
java bridgeがうまく動きません。(obj-cからjavaを使いたい。)
http://developer.apple.com/techpubs/macosx/Cocoa/Legacy/JavaBridge/JavaBridge.3.html

HelloWorld.javaに
class HelloWorld {
int i ;
void HelloWorld(int e){ this.i = i ; }
int hoge(){ return this.i ; }
}

として、main.mに
#import <Cocoa/Cocoa.h>
#import <stdio.h>
int main(int argc, const char *argv[])
{
id e = [[NSClassFromString(@"java.util.HelloWorld") alloc] init : 5] ;
printf("%d",[e hoge]) ;
return 0 ;
}
としたんですがうまくいきません。ご教授お願いいたします。
279278:03/02/13 15:09 ID:YVSvw8xP
void HelloWorld(int e){ this.i = i ; }

void HelloWorld(int e){ this.i = e ; }

でした。すみません。
280名称未設定:03/02/14 06:12 ID:YLK143md
Obj-Cはわからんけど
>id e = [[NSClassFromString(@"java.util.HelloWorld") alloc] init : 5] ;
この行はおかしくない?
HelloWorldはjava.utilパッケージに入ってなよね。
予想だと[ java.util.HelloWorld >> HelloWorld ]じゃないかな?
試してみてよ。
281278:03/02/14 20:53 ID:LnD46CMV
HelloWorldにかえてみたんですがやっぱりうまくいきません。

#import <Cocoa/Cocoa.h>
#import <stdio.h>
#import <Foundation/Foundation.h>

int main(int argc, const char *argv[])
{
Class javaClass;
NSString* javaClassName;
id e ;
javaClassName = @"HelloWorld";
if (!(javaClass = NSClassFromString(javaClassName))) {
[NSException raise:NSGenericException format:@"Failed to load class'%@'", javaClassName]; }
e = [[javaClass alloc] init : 5] ;
printf("%d",[e hoge]) ;
return 0;
}

として実行すると
<NSGenericException> Failed to load class'HelloWorld'

HelloWorld はシグナル 5(SIGTRAP)により終了しました。
となり例外処理されてしまいます。
282名称未設定:03/02/14 21:13 ID:selVPrLv
使ったことないからよく知らんけど、Java Setup の関数を使うんじゃねーの?
283280:03/02/14 22:50 ID:YLK143md
協力してあげたいけど前述通りObj-Cは分からない…(ゴメソ
>>282が言う通りJava Setupってのがポイントじゃないかな?
ドキュメントをちょろっと読んでみたんだけど NSJavaClassesFromString てのが
あった。
役に立つかもしれないからJava Setupのドキュメントを読んでごらん。
わかったらやりかた公開してね。

ちなみにそれらしきドキュメントがある。Obj-C使いにとっては当たり前かもしれないが一応手助け代わりに場所だけ教えてあげる

/System/Library/Frameworks/Foundation.framework/Versions/C/Resources/English.lproj/Documentation/Reference/ObjC_classic/Functions/FoundationFunctions.html

ずいぶん奥深くにあるなぁ。
284名称未設定:03/02/14 23:32 ID:OuEkm7oo
日本語は無いのか?
285名称未設定:03/02/15 00:05 ID:Ac1Y59ai
ところでJavaBridgeって積極的に使って良いの?
TopicsのとこにはLegacyってなってるけど。

かわりにJNIを使うことになると思うんだけど。
どっかにJavaBridgeよりJNIを使えって書いてあったかな?
JNIのほうがめんどくさそうだが。
286280:03/02/15 01:32 ID:26ywk9jx
>>284
分からない。
パッと見はなさそう。
あったら俺も見たい。
287278:03/02/16 11:12 ID:diyOpGVW
java bridge (obj-c -> java & java -> obj-c) のサンプルコードを発見しました。
tp://members.blackbox.net/a/programs/
のJava/ObjC-example for Cocoaにあります。
288278:03/02/16 11:15 ID:diyOpGVW
必要に応じてJavaReactor.javaの冒頭を変更してださい。
import com.apple.cocoa.foundation.*;
import com.apple.cocoa.application.*;
289名称未設定:03/02/19 13:36 ID:AJv6KGuf
守君参上
290名称未設定:03/02/21 09:04 ID:1xBXzSNJ
こそ〜り保守中
291名称未設定:03/02/22 00:14 ID:Sgmn5d2E
堂々と保守!
292名称未設定:03/02/22 14:01 ID:rZwK672+
あの・・10.2になってから(もしくはQT6になってからだったかも)NSMovieViewでのMPEG2再生がうまくいかないことないですか?

自作のアプリでNSMovieViewを使ってMpeg2再生してたら1分ほど再生した所で止まる(内部的には再生されているみたいだけど、音声も映像も止まる)ようになっちゃって、解決できません・・・。

ためしにWindowにMovieViewを貼っただけのテストアプリを作ったり、Cocoaはやっぱり!のサンプルアプリを見てみたりしたんですが、やっぱりこれも止まる。

解決できてるよ!という人がいたらご助言願いますー。
293292:03/02/22 15:11 ID:rZwK672+
ああ、よく考えたらMPEG2再生できるようになったのはQT6からか。
としたら、止まるようになったのは10.2にしてからだなぁ、きっと。

今さっき、システムの再インストして確認したけどやっぱり止まりました。うちだけじゃないですよね?
294名称未設定:03/02/22 17:02 ID:T31Zl/+7
>>292
確かに止まりますねえ。(Cocoaはやっぱり!のMoviePlay2で確認)
295名称未設定:03/02/22 23:34 ID:Sgmn5d2E
>>292
本当だ、、止まる。
なんでだろ?
296292:03/02/22 23:39 ID:rZwK672+
QTPlayerで止まらないのは当然として、RBで作ったらしいカーボンアプリ
「MacMovieTV」
http://www.vector.co.jp/soft/mac/art/se197681.html
でも止まりませんでした。Cocoaだけの不具合なのかな・・。
297名称未設定:03/02/23 11:07 ID:A2MIrTF6
>>292

ああ、10.2で止まるのって私だけじゃなかったんだ…。
うちではMP3を再生していても止まってしまいます。

私はしょうがないので「Cocoaはやっぱり! 出張版」を
参考にしてQuickTimeを直接呼び出して対処したんですが、
これだとモーダルダイアログの表示中に再生が一時停止して
しまうんですよね…。
298名称未設定:03/02/24 22:02 ID:y8x3g38E
細くとも長く生きてほしいから保守に一票
299292:03/02/24 23:25 ID:cL6Sq5AD
>>297
QuickTimeを直接呼び出すって言うのは、何をすれば良いんですか?
再生をstartするところだけQuickTimeを使えば良いのでしょうか。
300297:03/02/25 01:57 ID:DyErNNd5
>再生をstartするところだけQuickTimeを使えば良いのでしょうか。
そういうことです。

実際のコードはこんな感じです。

#import <QuickTime/QuickTime.h>

NSMovie *movie;
Movie qtmovie;

EnterMovies();
movie = [ [ NSMovie alloc ] initWithURL:aURL byReference:YES ];
qtmovie = [ movie QTMovie ];
StartMovie(qtmovie);

301292:03/02/25 22:49 ID:Ld3tJhfj
うむむー、StartMovie()で再生開始してみたんですけど、やっぱし止まります・・。
別の問題があるのかなぁ?
302297:03/02/26 20:57 ID:gQBzciJD
>>301
あ、私は音さえ鳴れば良かったのでNSMovieViewには
MovieをセットせずにStartMovie()を実行してます。

なので、映像も表示させたい場合は他にも処理を
付け加える必要があると思います。
303名称未設定:03/03/01 13:54 ID:kRnIXCQg
このスレッド見て2週間前からcocoa勉強始めました
中村本List4-3で出てくる

NSSavePanel *savePanel = [ NSSavePanel savePanel ];

の意味するところですが、右辺(?)のNSSavePanelクラスに
クラスメソッド+savePanelを送った結果、戻り値の
インスタンスが左辺のNSSavePanelクラスのインスタンスである
savePanelとされる、という解釈するんですかね?
304名称未設定:03/03/01 15:14 ID:s7FTtIdk
>>303
たぶんそゆこと。
俺、ObjC知らないけど…。
あれ、アスタリスクがつくのってポインタなんだっけ(Cではそうだよね)?

ってか、Cocoa-Javaって制約大きいよなぁ。
勉強しようかなぁ。
時間ないなぁ。
独り言です…
305名称未設定:03/03/02 00:52 ID:SBH9raFv
>>303
NSSavaPanelについては良く知らんけど、
左辺のsavePanelはただの変数名。で、変数名の前のNSSavePanel *ってのは、
「この変数はNSSavePanelクラスのインスタンスを格納するための変数ですよ」という事を
『コンパイラに明示する』ために書いてあるものなんだ。だから、べつに:
  id savePanel = [ NSSavePanel savePanel ];
としても特に問題は無いよ。
/*正確には『NSSavaPanelのオブジェクトのポインタを格納するための変数だと明示する』事。*/
/*試しに"NSString *savePanel"としてみよう。コンパイラが文句言うと思う*/

という訳でNSSavePanel *savePanel = [ NSSavePanel savePanel ]; という行は、
「NSSavePanelクラスのインスタンスを格納する予定である変数savePanelを宣言し、
そこに [ NSSavePanel savePanel ] の結果(返り値)を代入して変数を初期化する」って意味になるよ。

結果として、変数savePanelにNSSavePanelのインスタンスが代入されるみたいだね。
306名称未設定:03/03/02 01:07 ID:SBH9raFv
>>304
Javaが解るならObjective-Cなんて楽勝でしょう。
ヒレガス本あたり買ってみては?
307名称未設定:03/03/02 04:14 ID:AapsQ2b/
>>306
ん〜、やってみようかな?
マックでソフト作るならこれからObj-Cが必須な気もするし。。
ちょっと今はWebアプリの勉強をしなくちゃいけないからその次かな?

とりあえずObj-cを読めるようにはならないとなぁ。
AppleのサンプルもほとんどObj-Cだし。

ちょっとしたら初めて見ますわ。
308303:03/03/02 12:33 ID:sIDGxSpd
>>305
あ、なるほど。「id savePanel =」と考えると見慣れた構文ですね
バッチシ理解できました。Thxです。

クラスからインスタンスの生成、というと
[ MyClass alloc ] init ];
と初期化とセットで考えてしまうのですが、
この場合[ NSSavePanel savePanel ]で生成された
インスタンス(右辺のsavePanel)は生成後自動的に初期化されているですか?

「cocoaはやっぱり」のキッチンタイマーでも
tmKitchen = [ NSTimer scheduledTimerWithTimeInterval: ...... ];
と alloc している部分は見当たらず・・・

ここもしかしてクラス固有の特性を理解していないのかもしれませんが
309303:03/03/02 12:37 ID:sIDGxSpd
ちと今頭の中混乱中なので妙な事書いてたら突っ込んでください(涙
310名称未設定:03/03/02 13:17 ID:tVKgOb9U
>>308

インスタンスを生成するクラスメソッドは原則として
初期化とAutoreleaseまでやってくれることになってます。

なので、
[ NSSavePanel savePanel ];
というのは
[ [ [ NSSavePanel alloc ] init ] autorelease ];
と読みかえることが出きます。
311名称未設定:03/03/02 14:34 ID:YV6rGazc
突然もうしわけないが・・・
前スレが985という半端な数字でおわっているのは?
312名称未設定:03/03/02 16:38 ID:AapsQ2b/
>>311
気付いたら落ちちゃったんですよ( ´Д⊂
313311:03/03/02 22:15 ID:YV6rGazc
>>312
ご説明ありがとう。私超厨房で、dat落ちとか知らなかった。

とてもいいスレです。いま前スレを読んでまして、参加できる
日を楽しみにしてます。
314名称未設定:03/03/02 23:20 ID:AapsQ2b/
>>313
既に参加してるじゃないですか?
とてものんびり進行してるのでたまに顔出して下さいな。
315303:03/03/02 23:22 ID:sIDGxSpd
>>310
おお、先の件と2点分かっただけで目の前で霞んでいたものが
晴れてきた気分。多謝、多謝です。
316名称未設定:03/03/03 02:22 ID:qwTwrPB/
>>308

同じインスタンスを使い回してたりとか。

>tmKitchen = [ NSTimer scheduledTimerWithTimeInterval: ...... ];

この場合はちょっとちがうかな。
NSTimerはNSRunLoopに登録しないと機能しないんです。
で、上のメソッドを呼ぶとインスタンスを生成させた後、カレントランループに
そのインスタンスを登録して、それを返してくれる。
単純なビルダーパターンみたいなもんですね。
317xxx:03/03/05 01:05 ID:n4eQ24cL
>インスタンスを生成するクラスメソッドは原則として
>初期化とAutoreleaseまでやってくれることになってます。

というパターンもあれば、ずっと常駐する、あるいは解放する必要がない
ものを返す場合もあります。(たとえば[NSColor redColor]とか)
318守護霊:03/03/06 00:27 ID:zZEaj4Vp
あ、こんにちは守護霊です。
今日は保守に参りますた。
319 :03/03/06 02:07 ID:do/ax8Tj
>>317

その辺はsingletonパターンを使っているのでAutoreleaseしているか
常駐しているか意識しなくてもいいようになっているんだろうね
320名称未設定:03/03/08 02:50 ID:nolDcyCk
みんな職業なにさー。プログラマ?
321名称未設定:03/03/08 02:55 ID:1RkPkO0x
大工
322名称未設定:03/03/08 04:15 ID:4NgTRL//
学生…、そろそろクビだけどね…。
323320:03/03/09 01:29 ID:+PqwrKw6
>>321
マジっすか。凄い家を建てそうですね。

>>322
クビってw。勉強しろよw。
324名称未設定:03/03/09 17:08 ID:msa+sHAS
初歩的なことだと思うんですが、さっぱりわからないのでおまいら誰か教えてください。
htmlソースからリンクを抜き出そうとした時、
例えば <a HREF="xxx.html"> の部分を探して xxx.html の部分を抜き出したい時、
<a HREF=" や "> を検索しようとすると、@"<a HREF=""、@"">" となってしまってうまくいきませぬ。
" を含む文字列を記述するにはどうしたらいいのでしょうか?
325名称未設定:03/03/09 18:12 ID:6mXvgXjh
�バックスラッシュ+"でできると思う。
326名称未設定:03/03/09 22:04 ID:msa+sHAS
>>325
激しく感謝!!
やっと先に進めます。ありがとう!
327名称未設定:03/03/10 23:29 ID:mRFFOi61
NSOutlineView で、Safari のブックマークみたいに Column に
色をつけたいのだが、どうしたら良いのでしょう?
やはり NSTableView を継承するのが良いのでしょうか?
328名称未設定:03/03/10 23:41 ID:658LH3T0
"Safari のブックマークみたいに Column に色をつけたい"というのが良く分からないが、
NSOutlineViewの
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;
あたりがヒントになるかもしれない。
329名称未設定:03/03/11 00:57 ID:9t0TPS4H
IrDAを使いたいんですが資料のあるところ知りませんか?
330329:03/03/12 01:53 ID:U+AUWkbk
それらしい情報を見つけたんですけど、ちとよくわからんです。
/dev/cu.IrDA-IrCOMMch-b を読んだり書いたりすればいいのかな?

http://www.omnigroup.com/mailman/archive/macosx-dev/2001-November/020999.html
331保守:03/03/15 07:58 ID:4pQJTuAp
ていうかOSXでIrDAてつかえるんか?
332名称未設定:03/03/16 17:36 ID:g/2cX/Mn
Object-Cでフォルダを作るのってどうしたらいいのですか。
NSFileManagerあたりがクサイと探していますがさっぱり見つかりません。
333名称未設定:03/03/16 17:47 ID:sxlGCdlS
334名称未設定:03/03/16 19:59 ID:g/2cX/Mn
いや、ごめんなさい。NSFileManagerそのものを探してるわけではなくて。
フォルダの作り方がさっぱり。
335名称未設定:03/03/16 20:12 ID:4OraDKFV
>>334
>>333見れ
336名称未設定:03/03/16 22:24 ID:g/2cX/Mn
あ、createDirectoryAtPathか。サンクスサンクス。読み逃してた。
http://www.oomori.com/cocoafw/Foundation/NSFileManager/createDirectoryAtPath.html
337名称未設定:03/03/17 11:34 ID:vwFLfm0V
あのー、intをNSStringに変換するのってどうすればいいんでしょう?
思いっきり初心者質問で申し訳ナイス
338名称未設定:03/03/17 11:49 ID:rNrgj0l9
>>337
[[NSNumber numberWithInt:int]stringValue]
339名称未設定:03/03/17 12:01 ID:vwFLfm0V
>>338
即レスありがとう!
340名称未設定:03/03/19 05:20 ID:VPA/u3fR
隠れ保守神
341名称未設定:03/03/21 17:51 ID:YVSn6hCY
Object-Cなんですが、
ある作業がちゃんと完了するのを待ってから先へ進ませる、ということはできますか?
たとえば何かの動作中に、作業状況をTextFieldに逐一表示したい場合とか...
342名称未設定:03/03/23 01:45 ID:OSxgBhrr
保守
343名称未設定:03/03/23 11:48 ID:zlrwIDrS
すみません、つい最近Cocoaプログラミングに手を出したんですが
FileMergerの使い方がよく分かりません。

◆やったこと
・クラスを作成していくつかアウトレットやアクションを作成
・生成したソースファイルにコードを書いてコンパイル
・その後クラスにアウトレットを追加したのでもう一度関連ファイルを生成
・ここでFileMergerが立ち上がるけどよく分からないのでセーブして終了
・ソースがまっちろに!うわーん

クラスを変更した結果増えた行に関しては(ヘッダファイル)、
問題なく追加されているんですが、新しいほうのファイルにない
行があるファイルは全部消えて置き換わってるんです。
正しいマージの仕方を教えてください。
344名称未設定:03/03/23 12:20 ID:4EplBd0u
>>343
・その後クラスにアウトレットを追加したのでもう一度関連ファイルを生成
・ここでFileMergerが立ち上がるけどよく分からないのでセーブして終了

ここが問題。
一旦生成した Hoge というクラスに Outlet や Action を追加するには、
クラスの Hoge.h と Hoge.m ファイルに IBOutlet や IBAction のコードを書くだけでOK。
そして、その Outlet や Action とコントロール部品を接続するには、
Hoge.h ファイルを Interface Builder の
Classes > Read Hoge.h メニューで読み込んでから接続する。
345名称未設定:03/03/23 14:15 ID:jwdEcO0V
要はインターフェースビルダーから書き出し(クリエイト)すると
まっさらなひな形がプロジェクトビルダーで上書きされるんです
だから今まで書いたコードがまっさらに。

だから逆にプロジェクトビルダーのほうでアウトレット等書き込んでやって
それをインターフェースビルダーに読み込ませてコントロール等と
結線する、と。

どんなコードを追加したらいいかは最初にクリエイトしたひな形で
だいたい想像つくでしょ?
346名称未設定:03/03/23 20:52 ID:UR167USc
OS.Xになったことに伴ってCocoaに触りはじめています。

Toolbox の GetKeys のように、キー入力の状態を取得したいのですが、
他にフレームワークを追加するみたいで、行き詰まっています。

どなたかご存じの方がいらっしゃいましたら、ぜひ教えて下さい。
347346:03/03/23 21:00 ID:UR167USc
あぁ、すいません。書き込んだ後すぐにCarbon.frameworkが見つかりました。
348名称未設定:03/03/23 23:14 ID:zlrwIDrS
>>344,345
助かりました! それが正しい(?)方法なんですね。

ところでもう一つ凄く初歩的な質問があるんですが…
"nil"ってなんですか? NULLのこと?
Cocoaはやっぱりのwebの例に

NSTimer *tmKitchen= nil;

ってありますけど、意味も分からずにそのまま書いてます。
349名称未設定:03/03/23 23:37 ID:fNMMXLs6
350名称未設定:03/03/24 13:33 ID:n86SSaMT
しばらく見ない間にずいぶん初心者にやさしいスレになったな。
351名称未設定:03/03/24 18:09 ID:Tl6Q9zvZ
もともとさっぱりな人たちが助け合うスレだから。
352名称未設定:03/03/24 21:00 ID:EQLEFjNY
初心者排除したらこのスレはすぐに落ちちゃいます。
353名称未設定:03/03/28 11:12 ID:GvA0+xOO
スレッドについてわかりやすく解説してるところはないですか?
NSThreadは読みましたが、実際どういうものなのかがわかりませぬ。
354名称未設定:03/03/28 12:23 ID:nijosm6z
javaのスレッド解説サイトとかで感じをつかむとか...
355名称未設定:03/03/28 16:28 ID:M9lTTgB2
自分は荻原 剛志氏の著書で理解できました。<NSThread
356名称未設定:03/03/28 17:34 ID:4B5F/J3B
もしかして、javaでDeterminateなNSProgressIndicator
は動かないのだろうか...
357353:03/03/28 21:45 ID:GvA0+xOO
>>354-355
サンクスコ。あちきは中村本の弟子なもんで...
プログラムがはじめてでもわかりやすい本だったけど、
やっぱりその分踏み込みは浅めですね。
荻原本とかもう一冊買おうかなあ(それとも立ち読みか)
358名称未設定:03/03/28 22:19 ID:SPgj6TFf
>>357
技術書の立ち読みは個人的には好かんな。
まぁ、知りたいことがすでに絞り込んであるなら立ち読みもありだけど
できるだけ全体を通して理解した方が力にはなるよな。
本はいくら読んでも損はしないぞ。
特に入門本を買った時は間違いなく踏み込んだ本が必要。

説教じみてきたな。。。
スレッドに関しては>>354氏が言うようにjava系の解説を読むと
理解しやすいかも?
ガンバレ
359353:03/03/28 23:24 ID:GvA0+xOO
>>358
いやあ、何かと春は物入りなもんで高い本にはなかなか手が出ないザンスよ。
Cocoaから始めたので未だにJAVAは機械語にしか見えないし...
とりあえずいろいろ実際動かして試してみよかな。
360名称未設定:03/03/28 23:27 ID:A+eq+s3h
そう?
Javaも独自の部分を除けばCに似てると思うけど。
361358:03/03/29 11:53 ID:EALTZVpH
>>359
>いやあ、何かと春は物入りなもんで高い本にはなかなか手が出ないザンスよ。
うんうん、わかるよ。

スレッドに関しては言語に依存しない解説も結構あるから探してみるといいかも。
362名称未設定:03/03/29 16:02 ID:+jtwqOS3
年度末ってソフトのバージョンアップとかがガーッと来ますよね。

スキャナとプリンタ欲しいけどもう金ねえ。

>>360
>>353が現状で何を勉強しているかわからないけど、Cocoaからプログラミングの勉強をはじめたので
どの言語もわけわからんものに見えるのだと思われ。
363名称未設定:03/04/03 11:04 ID:YumVfF0c
保持しておきたいデータオブジェクトlogData、
その後に追加するnewDataがあるとして

@interface MyController
NSData *logData;


@implementation MyController

- (void)appendLog: (NSData *)newData
{
if (logData)
{
NSMutableData *tempData;
[tempData mutableCopy:logData];
[tempData appendData: newData];
logData = [tempData copy]; //.........(1)
} else {
logData = newData;//..................(2)
}
}

(1)と(2)の部分でその前に
[logData autorelease];
しておかないとメモリリークしますか?

それと(2)は
logData = [newData copy];
としておかないとlogDataの値って保持されないですかね?
364363:03/04/03 11:22 ID:YumVfF0c
あら、でも自分でallocしているわけじゃないのでreleaseする必要は
ないのかな....?
(1)と(2)、それぞれ前と後じゃ同じlogDataでも別物ですよね?
このメソッド繰り返すとワサワサメモリ使っていっちゃうんでしょうか?
365名称未設定:03/04/03 12:31 ID:7ox0ucKs
>>363

logDataが有効なオブジェクトである場合:
 まず[tempData mutableCopy:logData];はtempData = [logData mutableCopy];だと思うんだが。
 mutableCopyとかcopyはautoreleaseされてないはず。よってtempData変数が破棄される前に参照するオブジェクトを解放するか、保持(ownerを設定)しなければならない。
 次のlogData = [tempData copy];では今まで指していたlogDataをtempDataのコピーに変更するので、元のオブジェクトがリークする。よって(1)のまえにlogDataをreleaseかautoreleaseする。
 あとtempDataはすでに元のlogDataとは別のオブジェクトなのでわざわざcopyするのは無駄だと思うが。

logDataがnilだった場合:
 if (logData)により、(2)が実行される。
 メソッド実行後、newDataのオブジェクトをlogDataが指すが、newDataが他でreleaseされたらlogDataの指すオブジェクトは無効になるのでretainが必要。

変数とオブジェクトのインスタンスを分けて考えることと、
オブジェクトオーナーシップを理解することなどが必要かと。
366363:03/04/03 16:27 ID:YumVfF0c
速レスありがとうございます
仰る通り今オブジェクトオーナーシップの項でつまづいてまして。
レス見ながら3時間考えてしまいますた

>まず[tempData mutableCopy:logData];は
>tempData = [logData mutableCopy];だと思うんだが

すません、単純にミステイクです。

>mutableCopyとかcopyはautoreleaseされてないはず。よってtempData変数が破棄される
>前に参照するオブジェクトを解放するか、保持(ownerを設定)しなければならない

この部分がちょとわからないす...でも調べているうちに別の疑問も解決したりしてちと前進。
もう少し考えてみます。

あとリークの話ですが、例えば
NSString* str = @"abc";
str = [ str stringByAppendingString : @"def"];
この場合は最初の文字列定数に対するstrといった場合は
相手が定数、ってことでリリースする必要はないですか?


>あとtempDataはすでに元のlogDataとは別のオブジェクトなので
>わざわざcopyするのは無駄だと思うが。

tempDataを得た時点で処理が終わらず、次々得られたnewDataを末尾に結合し
常にlogData変数に溜め込んで最後に「連続したデータとして」吐き出す、という考えです。
367名称未設定:03/04/03 16:43 ID:FkUa8EXL
本家 Cocoaはやっぱり が404...
本買って読めって事?
368名称未設定:03/04/03 16:59 ID:A1JseunR
site-aroも調整中?みたいだけど。
http://www.big.or.jp/~crane/
369365:03/04/03 18:38 ID:7ox0ucKs
>>366
オーナーシップの話題はさんざん既出なので資料はたくさんあると思う。

>NSString* str = @"abc";
>str = [ str stringByAppendingString : @"def"];
strは定数なのでリリースしない。

リリースする必要がある(=インスタンスのオーナーである)のは基本的にalloc,copyした場合とか、retainした場合。

>tempDataを得た時点で処理が終わらず、次々得られたnewDataを末尾に結合し
>常にlogData変数に溜め込んで最後に「連続したデータとして」吐き出す、という考えです。
よくわかないっす。並列に実行するの?
っつーかlogDataをNSMutableDataにして、
-(id)init {
[super init];
logData = [[NSMutableData alloc] init];
return self;
}
- (void)appendLog:(NSData *)newData {
[logData appendData:newData];
}
とかでいいんじゃないかな?

370363:03/04/03 21:36 ID:GdSqss15
>>369
>リリースする必要がある(=インスタンスのオーナーである)のは
>基本的にalloc,copyした場合とか、retainした場合。

allocやretainと憶えていたのでこれまた前進です。
なんか断片的にジグソーバズルが埋まっていくような。

>よくわかないっす。並列に実行するの?
あ、今回はアルゴリズム的な話ではなく、Cocoaの作法として
考えて下さって結構でし。

ども、ありがとうございました。
371名称未設定:03/04/04 01:07 ID:3GIJbdVL
ちょっと分かりにくい質問なんですけど、例えばDockの大きさは
システム環境設定のDockの設定のところで動的にリアルタイムで変化させれますよね?
あれってどうやってるんでしょうか?
Apple Eventでもなさそうだし、ああいう風に他のアプリを自分のアプリから
コントロールする場合、どういう手法を採るんでしょうか?
372名称未設定:03/04/04 01:22 ID:/+WnuhbR
米Appleは、12月1日(現地時間)に現在のSwitchキャンペーンの後続と
なる「Real Switch」キャンペーンを開始した。「Switch」キャンペーンとは、
他OSからMacintoshへの変更を促すもの。転向したユーザーを「Switcher」
と呼ぶが、どうも、「偽Switcher」が多く含まれていた模様。このため、
Appleは、Switcherの中から本当のSuitcherを見つけるキャンペーンに
切り替えたようだ。

ttp://pc.watch.impress.co.jp/docs/2003/0401/uocchi/rs.htm
373名称未設定:03/04/04 13:41 ID:MjmTJW8j
PithってSafariと完璧に連動してるけど、あれってどうやってるんだろ。
どこの何を読んでるの?
374名称未設定:03/04/04 14:28 ID:ZfGtqqRT
AppleScriptでアイドルハンドラで数秒ごとにウインドウ監視してればできそう。
375名称未設定:03/04/05 12:00 ID:R0KODGis
この気違いドザにCocoaを見せつけてやりたい
http://www.geocities.co.jp/Milkyway-Lynx/4133/article/art_7.html
376名称未設定:03/04/05 12:11 ID:ZucYqqEz
>>375
いきなり
> 世界で最も美しいGUI、"Motif"
とは驚きだ。
…つーかそいつ、犬糞erじゃないの?
377名称未設定:03/04/05 12:19 ID:Wq2mRxT5
>行数にして僅かに66行(空行含む)。
>Windowsで同じ事をすると倍近くのコードを書かねばなりません。
>MacintoshでCarbonやToolBoxを使った日にはさらに倍以上のコードを書くハメになります。
ナニモ シラナイノニ エラソウナコトイウナ!
378名称未設定:03/04/05 12:32 ID:y7qF7tfY
Cocoaだったら20行でいけるわな。
379名称未設定:03/04/05 12:47 ID:Wq2mRxT5
いや、あれだけならInterface builderで(ry
というか行数どうのこうのより、CocoaのCの字も知らないのに
バカにしているのが許せん。
380名称未設定:03/04/05 16:15 ID:phxq/2S9
>>375
Mac批判してるだけでドザって思い込むのはやめたほうがいいぞ。
どう見てもドザじゃないし・・・。
OSXも使っててそれでもMotifがいいって言ってるんだから
価値観の合わない人とは関わらないのが吉。
381名称未設定:03/04/05 16:51 ID:7ul0KRc8
ま、知らない方が彼にとっては幸せだよ。
微笑しながら見守ってあげましょう。
382名称未設定:03/04/05 21:42 ID:DU7TfmNg
て、いうか、例としてあげているCのコード、ダサ過ぎ。
BeOSのアプリケーションのソースを見せてやりたい。(←をいっ!
383名称未設定:03/04/05 22:54 ID:asYB7vUe
Cocoaはやっぱり
ttp://www.big.or.jp/~crane/cocoa/
落ちてますか?404 Not Found なんだけど…
384名称未設定:03/04/05 23:13 ID:mrX8GlKK
マッカーに過ぎたる物は余りないが、敢えて言うなら
Interface Builderだな。これはいい。
385名称未設定:03/04/06 01:26 ID:J03Qt8Is
>>375
ワラタ
かなり電波入ってるなぁw
でも、彼の頁のファイルダイアログ批評には激しく同意。
386名称未設定:03/04/06 02:33 ID:cbA9GWNr
しかし、 Interface Builderみたいなものって、CUIの世界からGUIの世界に移ったとき、
開発環境としていちばんはじめに用意されるべき物だったような気がするんだが。
387名称未設定:03/04/06 02:38 ID:r+CG+vF0
>>385
電波にしてはまだまだ弱い気がするけど、ただ若いだけというか。
ていうかファイルダイアログってリサイズできたのか。
388名称未設定:03/04/06 02:51 ID:cbA9GWNr
>>385 
電波っていうか、たんに自分の好きなものをマンセーしてるだけだな・・・
モーオタのファンサイトと同レベルかな。

cocoaの保存ダイアログのカラム表示は好きだけどなあ、
でもイマイチ整頓しきれていない感はあるな
389名称未設定:03/04/06 02:56 ID:9uHmEORt
最近使った項目とかを全部一つのプルダウンに押し込んだのはどうだろう?
それと、上の階層のフォルダに上がりにくくなった。

スレ違いだけど。
390名称未設定:03/04/06 03:05 ID:cbA9GWNr
プルダウンは、ブラウザのブックマークを意識してるのかも。
ブラウザのブックマークは一つのプルダウンの中に入ってるからね。
慣れてないと、わかりにくい。

上の階層に上がるのは、カラム表示なら下のハンドルを掴んでうごかすだけのような。
391名称未設定:03/04/06 03:05 ID:3o4jut1o
いつになく盛り上がってますな。
392名称未設定:03/04/06 10:55 ID:o0PnofWA
Cocoaから大分離れてきたが……

たしかにOS.9からXに移行した時
一番使いにくかったのがファイルダイアログかな。(iBookだったし)
最近はPowerBook買って1280*854までスクリーンが広くなったから
そんなに苦じゃなくなったけど。
393ほんとにさっぱりしてる:03/04/06 19:30 ID:3EwRybz3
>>383
ttp://www.big.or.jp/~crane/
によると、しばらくblogします、だってさ。
394名称未設定:03/04/06 22:33 ID:Lw1E0CGA
IEじゃないと見れないな。
395名称未設定:03/04/07 00:46 ID:wFMoad4B
インラインフレーム使ってる
396名称未設定:03/04/07 07:59 ID:I+qXa1L8
>>394
気付かずCaminoでみて何もないのかと思った。
397名称未設定:03/04/07 13:42 ID:619o4sfV
Cocoaなひとなのに、SafariやCaminoで見られないサイトを作るのは何かの嫌がらせ?
398名称未設定:03/04/07 13:55 ID:zzVqvOEm
tp://ch.kitaguni.tv/u/120/
あんま Cocoa と Blog は関係無さげ。
MovableType 流行ってるね。tDiary とかWiki も。
399名称未設定:03/04/08 13:14 ID:YFjcPzEw
Blogがじゃなくて、デベロッパな人がIE以外で自分のページを確認してないってのはどうなのよと。
400名称未設定:03/04/08 14:02 ID:8wTCAmOB
>>399
Webデザイナーだったら激しく問い詰めてやるところだが
デベロッパだったら別にかまわないんじゃないの?
といいつつ400ゲット
401名称未設定:03/04/08 14:23 ID:CSfncauk
別にWindowsのデベロッパだったらわからなくもないが、Cocoaの書籍を書いているのにSafariやCaminoで読めないサイトを作るのは不思議だなぁーと。
なんか嫌な事でも有ったのか?
402名称未設定:03/04/08 19:09 ID:D2j+hYgM
Safariは未完成かつバグ持ちだから、
Safariに合わせて作るわけにもいかんでしょ。
403名称未設定:03/04/08 21:29 ID:CSfncauk
いや。Safariにあわせてじゃなくて、IEだろうがNetscapeだろうがOperaだろうがw3mだろうがって意味。
SafariとCaminoだと、blogの存在すらわかんないじゃん。
404名称未設定:03/04/08 21:44 ID:D2j+hYgM
だからそんなこと知らんってばよ。
ちゃんとHTMLにさえ準拠してないブラウザが悪い。
405名称未設定:03/04/08 22:05 ID:NcOqdo2x
>>404
君はstrictじゃないね。
406名称未設定:03/04/08 22:10 ID:B+W1wavS
ソースを見たところ、HTMLの方が不完全だったけど…
実験段階のblogらしいし、あんまり拘ってないのかな。
たぶんiframeのurl属性を""でくくってないから、
一部のブラウザで表示されないんじゃないんかなぁ?
407406:03/04/08 22:16 ID:B+W1wavS
と思ったけど、表示されない原因はまた違うみたい。
なんで表示されないんだろう。
408名称未設定:03/04/08 22:18 ID:NcOqdo2x
409406:03/04/08 22:30 ID:B+W1wavS
tableの中のiframeの高さ(height=95%)が極端に小さいものと認識されているようだ。
410名称未設定:03/04/08 22:39 ID:CSfncauk
「作者がSafariでテストしていない」が論点です。それもCocoaのプログラム識者なのに。という意味。
411名称未設定:03/04/08 22:41 ID:CSfncauk
>>409
さあD2j+hYgMさん。その箇所なおして再アップロードしといてください。
412名称未設定:03/04/09 02:49 ID:0CLAVZ0m
PBで\nとしても改行されないのは
なんとかならないんでしょうか。
バックスラッシュいちいちコピペしてるんですが。
413名称未設定:03/04/09 05:21 ID:ZFgISmAt
プログラミング自体初めてな俺、
いままさに
414名称未設定:03/04/09 08:20 ID:KUJbjg3U
>412
スクリプトを米国にして、Option+\でバックスラッシュが入力できます。
415名称未設定:03/04/09 11:25 ID:u/OaGNRB
>>414
できました。
ありがとうございました。
416名称不確定:03/04/09 16:05 ID:ZwuYuJnV
よくわからんけど
CocoaとSafariとどう関係するんだ?
CocoaフレームワークにSafariに関するクラスとかメソッドでもあるの?
417名称未設定:03/04/09 16:38 ID:YJvsqjsE
Interface Builderで作成したアプリケーションの
パッケージ内のファイル、特に画像ファイルを見れなく
する方法てないですか?
ゲームなんかだと簡単に見られたく無い画像とかあるので。
418名称未設定:03/04/09 16:47 ID:6mlIhf9s
>>416
CocoaフレームワークとSafariは直接関係ないだろう
一部ではWebKitフレームワークがアツいようだが

>>417
独自フォーマットに汁
PNGでプライベートチャンク使うとか
ビットマップをシーザー暗号でエンコードするとか
419名称未設定:03/04/11 16:54 ID:aOO376W1
TableViewのデータソースで悩んでます。
中村本だとデータソースにはNSMutableArrayを使うんですが、
NSCellを使ったりする方法もあるようで、
テーブルの項目の中に画像を使おうとするとそのほうがいいのかなあ。
なんだか根本的なことがわかってないような気もしますが、どなたかアドバイスキボンヌ!
420名称未設定:03/04/11 20:11 ID:ks8ALL2s
>>419
要はアイコン付きリストを表示させたいのか?
NSTableViewじゃなくてNSOutlineViewの場合だけど……
俺はNSBrowserCellを使った
NSCellを継承してオリジナルのクラスを実装した場合に比べて
何もしないでもAQUAのアピアランスに沿ってくれるので楽
NSOutlineViewのExampleを改造したので
データそのものはNSObjectを継承したFileSystemItemクラスに持たせた
それとデータを保持するクラスとデータソースは別だぞ
421名称未設定:03/04/11 23:02 ID:aOO376W1
うーん、よくわからないのはテーブルのひとつひとつのセルの中には何を表示できるのか?ってことナンス。
普通だとNSStringやらNSNumberやらでつが、ここにNSCellを返せばいいのか、
はたまたNSImageを直接ぶちこんでもいいのだろうか、とか。

>それとデータを保持するクラスとデータソースは別だぞ
あっ、そうですた。
422名称未設定:03/04/11 23:05 ID:p0pqNUxk
分からなければ実際にコードを書いて実験したみたらどうだろうか?
その方が理解も進むぞ。
423名称未設定:03/04/12 00:01 ID:nlJewAEd
NSImageは既に失敗しますた。NSCellはどうにもうまくいかず。
424420:03/04/12 02:30 ID:Wq3c32eI
>>421
データソースの-tableView:objectValueForTableColumn:row:で
返すオブジェクトはそのセルに表示する文字列(すなわちNSString)
NSCellはNSTableColumnに対してアプリ起動時にsetDataCellしてやる
NSTavleViewを継承してawakeFromNibをオーバーライドしてもいいし
デリゲートでアプリ起動を受け取ってアウトレットを使ってもいい
データセルは上記データソースメソッドの中で
cell = [tableColumn dataCell]; するとインスタンスへの参照を取り出せるので
そいつにsetImageしてやる(どこにも返す必要はない)
つまりテキストとイメージは渡す先が別だということ
NSCellは継承して改造しないとうまくいかないんじゃないかな
でもNSBrowserCellを使う方が簡単だと思う
ちなみにアイコン「だけ」表示させればいいという時は
NSTextAttachmentCellだけのNSAttributeStringを返してやればいい
言葉で説明してもよくわからないと思うので
NSOutlineViewでアイコン付きリストを表示させるソースをウプしようか?
NSTableView用に書き直すのは簡単だと思う
NSImageやNSCellで失敗してハマっちゃってるみたいだし(w
425名称未設定:03/04/12 09:36 ID:nlJewAEd
アイコン付きリストを表示、ってこんな感じのソースですか?いじってみたけどよくわからず...
http://homepage.mac.com/mkino2/cocoaProg/AppKit/NSCell/NSCell.html#iconedCell
目指しているのはMailのリストのような、アイコンで項目の状況を表示する(未開封アイコンとか)ものなんす。
わからないのは最初にカラムにsetDataCellしてしまって、そのあと「何番目の項目にこのアイコンを」とかってことはどうやってやるんだろう、と。
426名称未設定:03/04/12 10:51 ID:HC66oXv/
>>425
その例はアイコンとテキストを同じ cell に表示させるためのもの。
アイコンのみ表示させたい場合は、もっと簡単。

NSTableView の delegate に
-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row;
を実装して、引数として渡される cell の-(void)setImage:(NSImage *)image; を呼んで、
その引数として row に応じたNSImage クラスのオブジェクトを渡すだけでOKだと思う。

NSTableColumn の -(void)setDataCell:(NSCell *)cell; は、
その列の dataCell の型を指定するためのものにすぎない。
427名称未設定:03/04/12 11:05 ID:nlJewAEd
>>426
おお、なんとなく理解できる!w
とりあえず試してみます(・∀・)
428420:03/04/12 11:36 ID:Wq3c32eI
どうもちゃんとsetDataCellしとかないと
-tableView:WillDisplayCell:forTableColumn:rowで
cellにsetImageする時にエラーで落ちるような???
つーわけでNSTextAttachmentCell使って30分でデッチ上げてみますた

http://ruffnex.oc.to/ipusiron/upload/6758.lzh

要はこういうことがやりたいの?

#画像はCocoMonarからの流用...
429名称未設定:03/04/12 11:50 ID:nlJewAEd
>>428
そう!そうなんでつ!まさにこれ!
しばらくこのコードを研究します!サンクスコ!
430名称未設定:03/04/12 12:03 ID:HC66oXv/
>>427
ごめん。
実際に試してみたら426では動かなかった。
NSCell に -(void)setImage:(NSImage *)image; があるので直に通るかと思ったら、
やはり setDataCell をしないとダメらしい。
http://www.geocities.co.jp/SiliconValley-Bay/5171/tableviewsample.dmg.gz
とりあえず単純すぎるサンプル作ってみた。
431名称未設定:03/04/12 13:11 ID:nlJewAEd
なるほど。どちらもCellに画像をセットして返すのは同じで、そのタイミングが違うわけですねー。
なんだが別の部分でうまく動かなくなってまだうちでは成功してないわけですが(;´Д`)
432名称未設定:03/04/12 18:45 ID:HC66oXv/
よく考えたら、
NSTableColumn の -(void)setDataCell:(NSCell *)cell; で NSImageCell をセットしていたら
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;
で NSImage を返せばOKで、無理に
-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row;
で cell に NSImage をセットしなくても良いんだな。

cell の修飾は後者の方法という先入観があったので、
今まで気付かなかった。
何のために返り値が id なのかと小一時間(ry
433名称未設定:03/04/16 06:13 ID:12HTIbHt
>432
丁度テーブルで簡単にイメージを表示する方法をさがしてました。
参考にさせていただきました。ありがとうございます。
あー。快適です。

よいスレなのに人がいなくて寂しいのでage。
すいません。
434名称未設定:03/04/16 20:10 ID:ta/8SmU2
自分の作ったソフトを公開する場合に、
そのソフトに付けるアイコンはどうやって調達されてますか?

デフォルトのままだと気が抜けたような感じだし、
自分でアイコンを作るのは絵心が無いので無理だしで、
どうも困ったものです。
435名称未設定:03/04/16 21:18 ID:VCcUn7JM
>>434
確かに Mac OS X になってアイコンの解像度が上がってから
というもの、自作アプリのアイコンを自作するのが極端に難しく
なった気がするなー(絵心のない人は特に)

「描く」という発想を捨て、デジカメで撮った写真を素材に
それを加工するという方針でいってはどうでしょう?
436名称未設定:03/04/16 22:29 ID:2TWhHO33
結構人の作ったアイコンを使ってるソフトってあるけど、
あれはちゃんと了解をとってるのかな?結構みんなパクリ?
437名称未設定:03/04/16 22:40 ID:fVBJS3aw
>>436
たとえば?
438名称未設定:03/04/17 00:33 ID:7TzdHjIj
デジカメで撮った写真を元にするのはアリかもしれませんが、
何のソフトのアイコンか分からないとダメなので、
最終的には絵心というかセンスの問題ですねぇ。

それを考えると絵心のある他の人に作ってもらうというのが無難かもしれません。
ただ、他の人に作ってもらうのも難しいのですが。
439名称未設定:03/04/17 01:33 ID:RGT/kCP0
写真をそのまま使ったJeditは激しくかっこわるかったぞ。
440山崎渉:03/04/17 15:31 ID:6I5vRaG+
(^^)
441名称未設定:03/04/19 03:02 ID:542+Wjis
ググっても駄目だったので、お聞きしたいんですが,
アプリがクラッシュした時のCrash reportってどうやってみるんですか?
自作アプリが、ふとした拍子に落ちるんですが,原因が分かりません。
再現性もなし。
とりあえずCrash reportでもよめば何か分かるのかな,と思いまして。
442名称未設定:03/04/19 03:21 ID:Y6JQeL8Z
>>441
~/Library/Logs/CrashReporter/アプリ名.crash.log をダブルクリックしる!
443名称未設定:03/04/19 03:28 ID:542+Wjis
あ、すんません。書き方が悪かった。
そのログの見方がわからないんです。。。

Thread 0 Crashed:
#0 0x9068ba50 in objc_msgSend
#1 0x9310e518 in -[NSMenuItem setImage:]
#2 0x00006d4c in -[AppController currentAppMenu]
#3 0x00004f9c in -[AppController addMenu]

みたいなのが続いてくんですが、
このThread 0 Crashed:の所は何となく下から上に向かって処理が流れていって、
この例で言うと
#1 0x9310e518 in -[NSMenuItem setImage:]
あたりでクラッシュしてるんかいな、と見当を付けてるんですが。

違いますかねぇ...
444名称未設定:03/04/19 10:21 ID:EP/fWNyz
>443
まさにそういう事かと。
その辺りのオブジェクトのメモリ確保とかに問題あるんじゃない?

というか自作アプリならProjectBuilderからデバッグモードで起動させた方が手っ取り早いと思う。
445名称未設定:03/04/19 11:37 ID:69ZrkNkS
>443
ごく単純に考えればsetImage:に渡しているオブジェクトが解放されているせいかと。
446名称未設定:03/04/19 12:10 ID:UqlDwCfO
>>445
どんぴしゃです。
おはずかしい。。。
思いっきりsetimage:にわたすオブジェクトを他のところで解放してました。
NSDictionaryにパスと一緒にsetObject:forKeyしてたんですが、
その後ですぐ[image release];してました。
はぁー。。。

ありがとうございました。
447名称未設定:03/04/20 01:47 ID:M4PLzZ0q
Objective-Cでゲーム作ろうとしているのですが、
ゲームの画面を表示するView,GameViewを用意し
Thread走らせて、その中で画像のオフスクリーンへの描画
そしてそれが終わったらGameView対してdisplayを渡すという風にしたのですが、
(GameViewはオフスクリーンをView内に表示するだけ)
どうも動作が重く、画面更新もちゃんと行われません。

しかし、Timerを使うとちゃんと快適に動いてくれます。
やっぱりTimerを使ったほうがいいのかな。そうするとゲーム自体のコードが複雑になってしまう;
誰か助けて。
448山崎渉:03/04/20 04:23 ID:ZHDoPsUy
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
449447:03/04/20 18:25 ID:M4PLzZ0q
?自己解決しました。
ウェイトをかけなかったために、動作に負担がかかってしまったみたいです。
?TickCountを使って30FPS程度に抑えたらスムーズに動きました。
450名称未設定:03/04/21 22:51 ID:NTulwzH4
空age(゚д゚)ウマー
451名称未設定:03/04/27 00:07 ID:IrQMMfyt
Prefix headerって何の為にあるのでしょうか?消しても大丈夫っぽいけど・・・
452名称未設定:03/04/27 01:20 ID:x2s49Y6w
コンパイルが速くなるんじゃないかな。たぶん。
453名称未設定:03/04/27 02:32 ID:IrQMMfyt
>>452
ありがとー
454名称未設定:03/04/28 20:45 ID:NEdRKdm2
良スレ
455名称未設定:03/04/29 21:39 ID:BcLcx+5r
main( )からの戻り値が得られないんですが、どうすればいいの?

通常、こうなってますよね。
int main (...)
{
return NSApplicationMain(...);
}
でもNSApplicationMain( )は返ってこないんです。

どうやら、[NSApplication terminate:] 内部で exit(0) が呼ばれてます。

こうした処理はできますか?
int main (...)
{
int ret = NSApplicationMain(...);
// <-- 処理を入れたい
return ret;
}
456名称未設定:03/04/29 21:42 ID:SxaNpOC3
ステータス返す値としてmainの戻り値を使わなければいいという話じゃなくって?
457名称未設定:03/04/29 22:27 ID:BcLcx+5r
>>456
>ステータス返す値としてmainの戻り値を使わなければいい

それも不思議なんです。
Cocoaにそれらしい関数がないようですが、どこからでも exit(number);
で終わらしていいということでしょうか。
458名称未設定:03/04/29 22:43 ID:SxaNpOC3
exitで返さなくても、戻り値を返すための変数を呼び出し側で用意しておいて、
そこに値を放り込んで勝手に終了するとかいろいろ方法はあるでそ
459名称未設定:03/04/29 23:38 ID:BcLcx+5r
>>458
意味がわからない。

本題はNSApplicationMain( )から戻ってこないということなんですが。。。
フックとか、戻り値をセットする関数とか、mainのreturnに返ってくる
関数あります?

NextStepもそうなのかな。
これは、もしかして、バグ?
460名称未設定:03/04/30 00:44 ID:EMvvjLY1
NSTextFieldとかに文字入力してる最中にも,
キーイベントとりたいんですけどどうしたらいいですか?

自力で調べたところ,
NSTextFieldがFirstResponderを奪ってしまっているために,
-keyDownが使えない見たいなんだけど...

なにかいい方法ないですかね?
461名称未設定:03/04/30 02:23 ID:qWPrDMtc
>>459
NSApplicationのリファレンスは読んだ?

terminate:の解説に、
>Don't put final cleanup code in your application's main() function-it will never be executed. If cleanup is necessary, have the delegate respond to applicationWillTerminate: and perform cleanup in that method.
とあるので、戻り値を自分でかえるのはダメなんでは?

どうしてもやるならカテゴリでterminate:を上書きとかになるけど、よくないよなー。
462名称未設定:03/04/30 02:29 ID:m3zd3BWS
>>459

憶測だけど、NSApplicationMain()はフレームワーク内部からのみ
値を返せる仕様になってるんじゃないかな。

一応、
[ NSApp stop ];
でmain関数に戻ってくることは可能なようです。
戻り値は指定できないようなので、グローバル変数で
受け渡す等の方法を使う必要がありそうですが。
463名称未設定:03/04/30 08:47 ID:ywjZpSlR
>>461
mainには戻らないとありますね。
ただ、戻らない(戻り値を返さない)理由になっていません。
「mainに戻らないから、後始末は delegateのapplicationWillTerminate:でやれ」
ということだけです。

terminate: では、delegateのコールと、内部Handlerの後始末して、exitが呼ばれる
ようでなので、サブクラスでする処理ことは、ほとんど意味ないですね。

>>462
modal loopだけで、main evevt loopは駄目なようです


本当はこうすべきでしょうね
int main(..)
{
NSApplicationMain(..);
return 0; // ここには戻ってこないぞ
}
戻り値を返す時、applicationWillTerminate:内部でexit(..);

説明がNSApplicationMainにないのが悪いんだが。
あるいは、途中で仕様が変わったのかも。

いやもう、おかしいって。
464名称未設定:03/04/30 14:33 ID:gNcdv87c
>463
そういう仕様です。
異常終了は、適当な場所でexitしてください。


どうしても気に食わないのであれば、NSApplicationのrunをオーバーライドして、
メインのNSRunLoopが終了可能にしてください。
465名称未設定:03/04/30 14:34 ID:gNcdv87c
-(viod)run
{
NSAutoreleasePool *pool;

while( ! isEndLoop ) {
//
pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] runMode:NSEventTrackingRunLoopMode beforeDate:
[NSDate dateWithTimeIntervalSinceNow:0.01]];

[pool release];
}
}

-(void)exit:(int)inState;
{
/**** NOT thread safe *****/
isEndLoop = TRUE;
state = inState;
}

-(int)exitState { return state; }

int main(...)
{
int ret;
NSApp = [[YourApplicationClass alloc] init];

NSApplicationMain(...);
//
return [NSApp exitState];
}
466名称未設定:03/04/30 14:37 ID:gNcdv87c
ごめん、sage忘れた。
467名称未設定:03/04/30 17:29 ID:azR/4GRH
>>460
NSTextFieldのDelegateに
-(BOOL)control:(NSControl *)control textView:(NSTextView *)textView
doCommandBySelector:(SEL)command
てのを実装すれば似たようなことはできる。この中で

if(command==@selector(moveUp:)){
}else if(command==@selector(insertTab:)){
}else if(command==@selector(performKeyEquivalent:)){
}...

といった感じに処理する。keyDownは@selector(keyDown:)で取れるかな? 試してないけど。
で、横取りしたらYESを返し、スルーするならNOを返す。
468名称未設定:03/04/30 19:34 ID:ywjZpSlR
>>464
>そういう仕様です。
そうですか。
サンプルありがとう、でも動かなかった。
これでは Eventを受け付けないようで。

検索したら、[NSApp run]で何をやっているのか質問した人が
いて、回答にApple Sample Codeのglutに例があると。

それらを参考にしてterminate:処理も考慮してながら、
いろいろ試しても戻ってこないから、おかしいと思い(gdb)disas
したら、なんと!runを抜けたあとのNSApplicationMainの最後で
exitが呼ばれてた。
もう、笑ってしまいました。
469名称未設定:03/04/30 22:32 ID:3qU3BKds
>>468
>なんと!runを抜けたあとのNSApplicationMainの最後で
>exitが呼ばれてた。

ぐはっ!
NSApplicationのリファレンスのあのコードは嘘だったのか。
やられた。
470名称未設定:03/04/30 23:30 ID:Oi25Yza2
固定値のNSRangeを定数として扱いたくって、次のようにしたのですが
"initializer element is not constant"
というコンパイルエラーが出てしまってうまくいきません。
こういうことを実現したい時ってどうすればいいのでしょうか。

const NSRange range = NSMakeRange(1, 100);
@implementation Test
...
@end
471名称未設定:03/05/01 08:03 ID:mnnNqPbr
NSRangeは構造体です。
構造体を初期化するコードは以下のようになります。

const NSRange range = {1 , 100};
472名称未設定:03/05/01 08:19 ID:mvCRcF1/
>470

const NSRange range = {1,100};

あなたがお持ちの書籍の構造体の初期化に関する部分と
NSGeometry.hを見てください。

ただし、この書き方はAppleにより NSRange の定義が変えられたとき
コンパイル不能になる、もしくは意図しない動作をするようになるでしょう。
まあ、定義が変わることは、まずないでしょうけど。
473460:03/05/01 20:50 ID:AYrs/qnu
>>467

教えてくれてありがとう.
でも,私,Delegateあんまり詳しくないので,
もう少し,詳しく教えてくれませんか?

Delegateの作成とかがよくわかんないです.
で,作成したあとで,
-setDelegate:すればいいんですよね?

あと,横取りしたらYESとかスルーならNOとかも
ちょっとわかんないです.
よろしくおねがいします
474470:03/05/01 23:31 ID:b5yckfKM
>>471,472
ありがとうございました。おかげさまでうまくいきました。
C言語の勉強しなおしてきまつ・・・
475名称未設定:03/05/02 22:24 ID:Wk9TZQjV
Carbonから乗り移ろうとしています。
従来のToolBoxを用いたプログラミングだと
RunApplicationEventLoopやWaitNextEventを用いて自分でイベントループをまわしていましたが
Cocoaだとイベントループの部分はCocoaに任せる事になりますよね。

自分の場合、主にゲームを作るとき
main()→ゲーム画面の描画→イベントループ→描画→イベント...
というようにやっていたのですが
Cocoaだと自分でイベントループをまわせなくて困っています。
参考書を読んでも「イベントはCocoaが管理してくれるよーん」としか書いてない。
やはりスレッドを用意するべきなのか、Cocoaはゲームに向かないのか……
何か方法がありましたらお教えください。
476名称未設定:03/05/03 00:25 ID:OHvswuV9
>>475
NSTimerを使うんでは。
477476:03/05/03 00:34 ID:OHvswuV9
>>475
あといい忘れたけど、自分でイベントループをまわすこともできるよ。
NSApplicationのnextEventMatchingMask:untilDate:inMode:dequeue:とか。
でもこれでループするとNotificationとかが動かなくなったりするので、
currentRunLoopも自分で実行する必要があったような気が。
478名称未設定:03/05/03 00:42 ID:dd4GQNX/
フリー開発環境あるとかいうのに、ちょっとさっぱりじゃない?
小サーイ世界でアプリつくっては(以下略)
479名称未設定:03/05/03 05:26 ID:InjF+ARn
自前のイベントループはNSRunLoop使えってことになってた気が
使ったことないけど
480475:03/05/03 10:47 ID:kKEpC3P2
>>476
nextEventMatchingMaskでぐぐったら数件ヒットしました。
一応
? NSEvent *event;
while(1) {
event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate dateWithTimeIntervalSinceNow:1/60]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event) [NSApp sendEvent:event];
}
で無事にイベントループが行われました。
画像処理とあわせた時にどう動作するかわかりませんが。
ありがとうございました。
481名称未設定:03/05/03 13:13 ID:vjwV+NvF
Cocoaはやっぱり がずっと死んでますね。
復活しないんでしょうか。

興味のあるサンプルコード落とし損ねたままだった…。
482名称未設定:03/05/03 13:15 ID:gWar0X+G
本買え、本。
483476:03/05/03 15:00 ID:OHvswuV9
>>479
NSRunLoopはNSApplicationMain()を実行すると自動的に起動する。
んで、NSThreadで別スレッドを作ると起動してないNSRunLoopができる。
別スレッドでイベントハンドリングするなら自前で起動する必要あり。
NSRunLoop自体はtimerとかの入力ソースを管理、実行するメソッドしかない。

>>480
基本はNSTimerじゃないかな?
NSTimer *drawTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:view selector:@selector(display) userInfo:nil repeats:YES];
で描画とかを行って、
NSResponderの-keyDown:, -keyUp:をオーバライドするとか。

しかしゲームだったらnextEventMatchMask:...がよいか?
描画とかはwhileループ内で[view display]とかすれば良いだろう。
484名称未設定:03/05/03 17:57 ID:1Efb2Mo1
>>481

死んでるっていうか、消したんでしょ。サイト自体はやってますよ。
Topにインラインフレームで貼ってあったblogツールの日記が別サイトになって
通常のに戻った。

今はiTunesで再生中の曲を自分のサイトに表示するツールを更新中。
485名称未設定:03/05/03 20:14 ID:WAGz7de+
>>482
本買ったけど、さっぱり...
486名称未設定:03/05/04 21:00 ID:D13AZzoS
>やはりスレッドを用意するべきなのか、Cocoaはゲームに向かないのか……
と書いてありますが、スレッドってあまり使わない方が良いのですか?
487475:03/05/04 21:20 ID:fL39spbJ
自分がそう書いたのは今までスレッドにあまり関して試したことがなかったからで。
できるだけ、いままでのスタイルを変えずにプログラムしたかったんです。
誤解招いてスマソ
488名称未設定:03/05/05 00:33 ID:DsA4ncXp
>>487
あ、そういうことだったのかサンクス。

僕はまだいろいろとよくわかってない素人なんですが、
ループ回したら虹色のカーソルも回っちゃって
困ったなー、あーそうかなるほどスレッドかー、っていう感じだったので。
とりあえず動いてるみたいなので良かった良かった。
489名称未設定:03/05/05 02:20 ID:PMocT0kq
>>486
デュアルプロセッサを視野に入れないのならスレッド処理はあまりメリットがない
スレッド管理のオーバーヘッドもあるし排他処理とか同期の問題もある
デュアルプロセッサ搭載マシンならマルチスレッドにした方が処理が速くなるみたいだけど
そうでないならタイマーでメッセージを送った方が楽にコーディングできるよね
ディスクアクセスとかアイドル時間の長い処理をそこかしこに入れてるなら
マルチスレッド処理も有効かもしれないけど
490名称未設定:03/05/09 14:39 ID:S3w8cPun
外国語勉強のための聞き取りソフトを作成し、数秒のMP3ファイルを再生しているのですが、途中でとまることがよくあります。止まる場所などは一定しません。書き方がわるいのでしょうか。

Window には NSMovieView を貼り付け、Outlet名は sound にしています。

なお、10.2にバージョンアップする前は、問題なく再生できました。

- (void) openMovie : (NSString*) asFilePath
{
NSURL *urlMovie = [[[ NSURL alloc ] initFileURLWithPath : asFilePath ] autorelease ] ;
NSMovie *movie = [[[ NSMovie alloc ] initWithURL: urlMovie byReference : YES ] autorelease ] ;
[ sound setMovie : movie ];
}
491名称未設定:03/05/09 19:24 ID:fsuYUghz
>>490

10.2におけるNSMovieViewのバグです。

音声ファイルを再生するだけなら、QuickTimeの
APIを直接叩くか、NSSoundを利用してください。
(10.2のNSSoundはMP3も再生できるようになってます)
492名称未設定:03/05/10 02:56 ID:ii4r9XXY
>>491

ありがとうございました。おかげさまで、ちゃんと再生できるようになりました。
493名称未設定:03/05/11 02:49 ID:nCoMVCtm
NSMenu の-(void)setSubmenu: forItem:で設定すると
-(void)submenuAction:(id)senderが呼ばれるんだよね。

@interface MyMenu : NSMenu {}... 略
@interface MyMenuItem : NSMenuItem {}...

MyMenu* m_menu = [[MyMenu alloc] initWithTitle: @"MenuTest"];
MyMenu* menu1 = [[MyMenu alloc] initWithTitle: @"SubTest"];
MyMenuItem* subItem= [[MyMenuItem alloc] init];
[m_menu setSubmenu: menu1 forItem: subItem];

@implemention MyMenu
-(void)submenuAction:(id)sender {}
@end

submenuAction:が呼ばれない。
SUBメニューがオープンされるときにコールバックされると思うのだが違う?
494名称未設定:03/05/11 02:50 ID:nCoMVCtm
x implemention
o implementation
495名称未設定:03/05/12 20:45 ID:KTXKJCkJ
NSViewのインスタンスを動的に生成したいんですが、
上に乗っけたいコントロールの類はいちいちコード内で配置していかないとダメなんですかね?
ビューを複製することができればIBで作ったビューを複製してやればOKだと思うんですが、ビューはNSCopyingに準拠してないし。
なんか方法知りませんか?
496名称未設定:03/05/13 01:27 ID:ohU4DReE
>>495

IBで新規にnibファイルを作り、Viewとコントロールを配置しておいて、
+loadNibNamed:owner:でロードすれば良いのでは?
497495:03/05/13 04:00 ID:2IoPviAb
すいません、したいことをもっと明確に示すべきでした。
Tabの数が増えたり減ったりするTabViewで全てのTabに同じコントロールを乗せようと考えてたんです。
Tabの内容をコードでガリガリ書いてると分かりづらいなぁと思って、IBで書けたらいいなぁと思ってたところです。

View複製さえできれば、コントロール配置したNSViewをOutletで保持しといて、
NSView* newView = [templateView clone];
[tabitem setView: newView];
ってできると思うんですが。。。

やべ、もう寝ないと...
498名称未設定:03/05/13 07:34 ID:UL4Gjmyq
OmniWebの環境設定のプラグインで
インストールされているプラグインのリストが見られますが
(なんかCocoaGesturesまで見えているけど)
ああ言うロードされているバンドルのリストみたいなものは
どうやって所得するんでしょう?
499名称未設定:03/05/13 15:24 ID:9/HoAzNl
>>497
496の言う通りにやればできるんじゃない?
IBでウインドウの上にコントロールを配置しておき
+loadNibNamed:owner:でロードして
ビューのインスタンスを取得してタブビューにセットする
一緒にロードされたウインドウを解放するのを忘れないようにね
マルチドキュメント・アプリケーションの作り方を参考にするといい
あれはひとつの.nibから複数のウインドウを作って管理するアプリなんだから
.nibをロード→viewのインスタンスを取得→viewをretain→
windowをrelease→viewをタブにセット→( ゚Д゚)ウマー
という手順でいいと思う

>>498
動的にロードされたバンドルも静的にロードされたバンドルも
Objective-Cでは区別されていないじゃなかったか
どうしても取得したいならロード時に記録しておくか
objc_getClassListで全てのクラスのリストを取得してから
既知のクラスを取り除くってのはどうよ?
プラグインパスを取得してその都度数えるという方法もある
NSBundleでロードされたクラスはNSArrayに記録しておくのが普通だから
それを利用するのが一般的だけどね
500496:03/05/13 19:37 ID:ogfctm/W
>>499

ちょっと補足させていただくと、
IBでビューを作成するのにウインドウは必要ないですよ。
"CustomView"をパレットからドキュメントウインドウにDnDすれば
インスタンス化出来ますから。
501495:03/05/13 20:54 ID:2IoPviAb
できました!
ありがとうございました。
IBの"File's Owner"の意味がやっと正確に理解できました。
てっきり"File's Owner"==NSApplicationのインスタンスなのかと思ってました。

Viewが複製できないと思って、ちょっと「Cocoaの嫌なとこを見たな。。。」とか思ってたら、
もっとcoolな方法で解決していたとはさすが...
502名称未設定:03/05/17 15:39 ID:TNaiboK7
画像ビューワをつくったんですけど
Finderでこのアプリで開くのデフォルトにできないんですけど
どうすればいいのれすか?
503名称未設定:03/05/17 15:51 ID:g7wq4B5L
実物が無いから何とも言えないけど。
Project Builderでファイルタイプを指定している?
504502:03/05/17 16:07 ID:TNaiboK7
>>503
ファイルタイプってMIMEタイプかOSタイプのことですか?

info.plistのエントリの書類のタイプで
拡張子は指定していますけど
MIMEタイプとOSタイプは指定していません。
505名称未設定:03/05/17 22:10 ID:g7wq4B5L
LaunchServiceのキャッシュが壊れているカモ。
506名称未設定:03/05/18 12:27 ID:6rgw4rEV
厨です。
cocoa-javaでjava.awtやjava.swingは使えますか?
やってみてるんですが、Build failedしてしまいます。
507502:03/05/18 12:45 ID:jRJqhTtb
>>505
う〜ん…それらしいファイルを消してもダメですね。
とりあえずソースおさらししてみます。

http://www2.plala.or.jp/doidoi/macosx/PeeDeeeF.tar.gz

画像ビューワとか言いましたけどホントはPDFビューワです。
508名称未設定:03/05/18 14:25 ID:6pgqlOin
>>506
しょうだつやの
の本に書いて有る
509506:03/05/18 15:36 ID:6rgw4rEV
>>508 ありがとうございます
ちょうど手元にあったので見てみました。ら、少し書いてありました。
とにかくできることが分かり希望が持てました。

ところでご本人ですか?
510508:03/05/18 19:22 ID:MxB2asZW
>>509
その本持ってるから。
511名称未設定:03/05/18 19:25 ID:cpgvRlRx
>>509

呼び捨てやったけん思ったんかな。。

掌田先生のサイトにもいろいろ書いてあるよ。
512506:03/05/18 20:15 ID:6rgw4rEV
ところで>>511さんは佐賀の人ですか?
513名称未設定:03/05/18 20:36 ID:cpgvRlRx
佐賀ん人じゃなかばい。
514502:03/05/19 15:04 ID:AtS8k2O9
>>507
なんとか自己解決。
アプリケーションシグネチャをつけるとうまくいくようです。
むぅ〜登録せねば。
515山崎渉:03/05/22 04:59 ID:PYior5Bg
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
516名称未設定:03/05/24 23:30 ID:Shi0MeT+
http://www.ntt.com/shop/service/cocoa/index.html

なんとNTTの新サービスはcocoa対応らしい・・・NTTすげえぜ。技術力。
517名称未設定:03/05/24 23:50 ID:eck5OJ0k
〜● 〜●   〜●◎ 受精
http://homepage3.nifty.com/coco-nut/
518あぼーん:あぼーん
あぼーん
519名称未設定:03/05/30 06:25 ID:G/PNGWQ+
OSX10.2.6が動いているWebサーバー機があるんですけど、
cocoaアプリでPerlスクリプトみたいなことは出来ますか?

ユーザのリクエストに応えてHTMLファイルを動的に生成して出力するとか。
WebObjectなんかがそれっぽいかと思うんですけど、何せ高いしねー。
520名称未設定:03/05/30 07:17 ID:65rg5mpj
>>519
普通にUNIX用CGIアプリを書いて使えばいいんじゃない?
もしどうしてもCocoaフレームワークを使う必要があるなら
ターミナルアプリからCocoaフレームワークを使う方法もあったと思う
521名称未設定:03/05/30 07:24 ID:EDgCWht0
>>519
「Perlスクリプトみたいなこと」って、CGIのことか?
CocoaアプリじゃなくてFoundationToolじゃだめなん?
522519:03/05/30 08:31 ID:G/PNGWQ+
>>520,521
端的に言えば、
1、ProjectBuilderが使えて
2、Objective-cが使えて
3、Cocoaフレームワークが使えると便利かもしれない
という条件を備えた、CGIとして使えるアプリ(?)を作りたかったんです。

FoundationToolって、UNIXのコマンドラインですよね。
使ったことはないけど、もう少し調べてみるかな。サンクスでした。
523519:03/05/30 08:33 ID:G/PNGWQ+
×という条件を備えた、CGIとして使えるアプリ(?)を作りたかった

○という条件で、CGIとして使えるアプリが作れるかを調べたかった
524名称未設定:03/05/30 09:54 ID:1W/oNIqX
>523
AppKitを使わない。
CocoaFrameworkはAppKitを含むので、FoundationFramework単体でリンク。

どうしてもWeb上でGUI部品もFrameworkとして使いたければWebObjectを買いなさい。

以上。
525名称未設定:03/05/30 16:20 ID:X8kW7aMc
>>522

cgiはhtmlをテキストで返すコマンドラインアプリであればいいので、
Objective-Cでもまったく問題なく作れますよ。
新規プロジェクトからTool->Foundation Toolを選べばいけまふ。
526519:03/05/31 00:50 ID:aRcsPIqz
Foundation Toolを選んで出来た作ったコマンドラインアプリに「.cgi」の拡張子
をつけてSitesフォルダなどに入れ、それをブラウザから読み込めば実行できるんですか?

cocoaで初めてプログラミングを始めたので、標準出力とかイマイチ良く分かりませんが
がんばりまつ。ありがとう。
527名称未設定:03/05/31 08:26 ID:O6LPmrCc
>>526
とりあえずコマンドラインで動くものから作ってみたら
528名称未設定:03/05/31 09:58 ID:Sf6VpD/a
例えば @"1*(2+3)" といった NSString 文字列がある場合に、
この計算式の解を得る良い方法は無いでしょうか?
529名称未設定:03/05/31 12:08 ID:VdKa+9Gb
>528
http://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/2900/2923.html
へのレスを参照してみて下さい。
なんかいろいろと方法があってどれが一番良いかはよく分からんけど
530名称未設定:03/05/31 15:20 ID:Sf6VpD/a
>>529
ありがとうございます。
あまり簡単な方法は無いようですが、
スタックを使う方法を試してみて、
難しくてダメなら諦めて bc を使うことにします。
531名称未設定:03/06/02 17:24 ID:wwheiyOK
Cocoa+Javaしたいと思っている全くの初学者です。C関連の書籍は定番と言えるような本があがっていますが、Cocoa+Java方面でよい本があったらお教え頂けませんでしょうか。
Think Cでウインドウ出すのに挫折して幾星霜、web見ながらやってみたらウインドウがあっさりと出て。。。感動しました。
DevTools、昔は60万したって本当なんですか?
532名称未設定:03/06/02 19:12 ID:NBqm4pnR
>>513
いい本ないんだよね〜。とりあえず、この辺はいかが?
http://www.h5.dion.ne.jp/〜tuyano/X-Java-Tutor/
http://underwater.lab.nig.ac.jp/〜takaho/computer/osx/

おいらもCocoa-Javaでやってたんだけど、Objective-Cやったら
おもったより簡単だったので、OCで書き直すか思案中。

ちなみに昔60万はWebObjectsのことでは?
533名称未設定:03/06/02 19:13 ID:NBqm4pnR
>>532のは>>513へのレス。失礼。
534名称未設定:03/06/02 19:15 ID:NBqm4pnR
どうも俺は513が好きなようだ。ショボーン
535名称未設定:03/06/02 19:44 ID:wwheiyOK
>>532
> いい本ないんだよね〜。とりあえず、この辺はいかが?
> http://www.h5.dion.ne.jp/〜tuyano/X-Java-Tutor/
> http://underwater.lab.nig.ac.jp/〜takaho/computer/osx/
>
いいところ教えて頂きました、ありがとうございます。
#本買ってみようかな〜

> おいらもCocoa-Javaでやってたんだけど、Objective-Cやったら
> おもったより簡単だったので、OCで書き直すか思案中。
>
すごいですね、なんとかJavaを少しでも分かりたいです。

> ちなみに昔60万はWebObjectsのことでは?
そうなんですか、ありがとうです。
536名称未設定:03/06/02 22:35 ID:YJuUKbZi
機械の体がほしくて999で初心者スレからやってきました。

mac2年目の初心者です。
cocoaでソフトを作りたいのですが、参考になるお勧め本教えて下さい。
どんなソフトかというと、運転免許場とか医局の番号表示システムみたいな
感じです。フルスクリーンにできて、番号打って一度に何人分も表示できて、
その番号の人がブツを受け取ったら簡単に消せタリする、
そんなソフトを作りたいんですけど・・・・難しいっすかね?
いろんな言語とか精通しないとかけないっすか?
537名称未設定:03/06/02 22:45 ID:VlbB3c6B
自分はCocoaをはじめたときはamazonで
中村氏のMac OS X Cocoa プログラミングと
荻原氏のObjective-Cの本を購入。
入門はその2冊で、今はネット上の資料で開発しています。

あとそれぞれの言語に得意・不得意はありますが
実際に独自のソフトを作るとなると、関係するのは言語じゃなくて自分の技術とセンスだと自分は考えてます。
538名称未設定:03/06/03 17:41 ID:FeZsaDw7
>536,537

>中村氏のMac OS X Cocoa プログラミングと
>荻原氏のObjective-Cの本を購入。
俺もその二冊かな。
はじめは「Cocoaはヤッパリ」だったんだけどね。
ただしどれも基礎的なCおよびプログラムの知識(文法とかプログラムの制御とか)が必要なので注意。
そこらへんを知らずにいきなり買ってもわからんと思うよ。
>mac2年目の初心者です。
っていうことなんで一応。

ちなみにCのお勉強は・・・
http://homepage1.nifty.com/toshio-k/prog/c/
こんなのはどうかな?
ちゃんと読んでないけど結構丁寧に書いてるっぽい。
そんなの知っとるわ、というのであれば余計なお世話スマソ。
539538:03/06/03 17:45 ID:FeZsaDw7
>536
ちなみにその程度のソフトなら慣れれば二日もあれば作れる
と思う
540名称未設定:03/06/03 17:49 ID:JqiBoCY7
Cocoa の流儀を学ぶならヒレガス本も欠かせないと思うが。
541名称未設定:03/06/03 18:23 ID:Ga7VcSdP
中村本や萩原本の前に
「はじめてのC」とか「やさしいC」とか「かんたんなC」みたいなC言語の入門書を一冊よんどけよ。
542名称未設定:03/06/03 23:21 ID:Rw7pKKEA
結城本がいいよ。
543名称未設定:03/06/03 23:27 ID:YDNyciP7
何が良いんだかさっぱりですが、とりあえずCの言語が
分かんないといけないんでつね。。。cからはじまる恋物語でも
読んで勉強してきます。

初心者の俺でもこのソフトならかなり簡単な部類だよなぁッと思ってました。
頑張ってみます。
544名称未設定:03/06/04 21:03 ID:hlOYrlfe
以前までREALbasicを触っていました。
Rbの時、インターネットへの接続はSocketクラスを用意して、
PortとAddressを設定して、Writeメソッドで文字列のデータを送る。
とやっていました。
ドキュメント等見てCocoaではNSSocketPortを使うんだなぐらいまではわかりましたが、
NSSocketPortを見ても何がなんだかよくわからない状況です。
RbのSocketクラスのように行いたいのですが、ご説明願えますでしょうか。
545名称未設定:03/06/04 21:35 ID:BgUAWUkb
質問です。
NSTaskを使ってtarの自分用フロントエンドを作っていまして、
tarの場所を 
[aTask setLaunchPath:@"/usr/bin/tar"]
みたいな感じで指定しているのですが、
例えば、cocoaWgetのようにtarをアプリケーション内にバンドルするにはどうしたらよいのでしょうか。
御存じの方いましたらよろしくお願いします。
546名称未設定:03/06/04 21:45 ID:WgVb2pVw
/usr/bin/tar から引っこ抜いてきてファイルを追加すればいいんでないの?
547名称未設定:03/06/05 00:06 ID:tY8V3TTn
>>544
わたしもRbからの転向者です。初心者ですので、詳しいことはわかりませんが、
NSURLとNSURLHandle を使ってインターネットへ接続しています。

548名称未設定:03/06/05 00:21 ID:uq3nlk02
>>544

HTTPを介したデータの受信を行なうだけなら、
>>546の通りNSURLとNSURLHandleをクラスを
利用すれば出来ます。

その他のプロトコルを利用したい場合や、データの送信を行いたい場合は
C言語の領域に降りてSocketを作成する必要があります。
なお、作成したSocketはNSFileHandleクラスで扱うようにすると便利です。

NSSocketPortはちょっと特殊な用途に使うクラスなので、
とりあえず忘れてください。
549名称未設定:03/06/05 00:56 ID:7tSHTOFd
久しぶりにProjectBulderを立ち上げたのに、何も使えなくなってた。
「新規プロジェクト」→「CocoaApplication」を選んだだけのプロジェクトさえも
ビルド完了しません。こんなエラーで・・。

Compiling /Users/ユーザ/プロジェクト/プロジェクト_Prefix.h(5個のエラー)
 "/User/ユーザ/プロジェクト/プロジェクト_.Prefix.h:6"からインクルードされているファイル内
  "Foundation/Foundation.h : No such file or directory
他「No such file or directory」がいろいろ・・・。

 システムも再インストール(アーカイブインストールですが)したし、デべツールも
再インストールしたし、PB,IBの初期設定も捨てたし・・・万策尽きました。
 システムをクリーンインストールしたら解決するんですかねぇ。
550名称未設定:03/06/05 07:35 ID:aeSpNlll
>>544
HTTPやFTPを使うのならNSURLとNSURLHandle。
それ以外ならsmallsockets使えば出来る。多分。
http://smallsockets.sourceforge.net/
551549:03/06/05 11:00 ID:7tSHTOFd
解決しました。
デベツールのディスクイメージのチェックサム検証をスキップしてたのがいけなかった
みたいで、スキップしないでいるとDiskCopyが不正終了しました。
仕方ないのでDevToolをADCからもう一度ダウンロードしてインストールしたら復活!
インストール終了できても中身が壊れてるなんてこともあるんですね。意外だ。
552名称未設定:03/06/05 11:09 ID:slA/cPPY
>545
wgetと違ってtarを内蔵する意味はないと思うが・・・
単に方法を知りたいということであれば>546の通り
アイコンと同じようにプロジェクトにファイルを追加すれば良し
553名称未設定:03/06/05 11:55 ID:QDeLW3Pz
>>544
きっとJavaのほうが楽な予感。。
554名称未設定:03/06/05 23:19 ID:2wDtXBFu
>>547,548
ありがとうございます。NSSocketPortは違ったのですね。
NSURLとNSURLHandleについて調べてみます。

>>553
やっとObjective-Cに慣れてきたところなので、これ以上増えると頭がパンクしてしまいます
Javaの方もいつかさわってみたいです。
555名称未設定:03/06/06 13:33 ID:rT0yvc1i
AppleMailのような、虫眼鏡アイコンの検索オプションがついた検索フィールドを作り
たいと思い(NSTextFieldと一緒に)NSPopUpButtonを-setPullsDownして配置したの
ですが、このPopupButtonについてくるMenuItemに-setState:NSOnStateを送っても
チェックがついてくれません。

InterfaceBuilderでも、このMenuItemのインスペクタでは「State」がグレーアウト
してるし、やっぱりチェックマークをつけることはできないんでしょうか。
556名称未設定:03/06/06 21:14 ID:YuWDq+q3
遅レスすいません。

>546,552

ありがとうございます。NSBundleを使ってpathを指定してやればうまくいきそうです。
557名称未設定:03/06/06 22:50 ID:WSvgpba2
>555
本当にNSPopUpButtonなのかな?
Mailでは普通のNSButtonにメニューをくっつけてるのかも。
Mailのnibファイルはのぞいてみた?
(ちょっと見てみたんだけどnibファイルが多すぎてどこに入ってるのか分からんかった。
 ちなみにSafariのバックボタンはNSButtonのサブクラスになってる)

ところでMailは英語以外のnibファイルを開けないのはなぜだろう?
558名称未設定:03/06/06 22:59 ID:85f0ql6C
まあ、関係ないけどさ
Obj-Cに限らず、オブジェクト指向言語はひとつ理解(言語仕様じゃなくてオブジェクト指向そのものを)
すると、他の言語もほとんど問題なく学習できるよ。
JavaはベースがCだから特に楽なんじゃないかな。
559OC厨:03/06/07 13:26 ID:9kccQz8f
Cの入門書は一通り読みました。いまは中村氏のcocoa本を読んでいますが、
いまいち「オブジェクト」が解りません。
OCのオブジェクトはJAVAのそれとよく似ていると聞いたことがありますが、
JAVAの本も読んだ方がいいのでしょうか?

またオブジェクト初心者にも解るOCのオブジェクト解説のある書籍、
またはサイトがありましたら教えていたていただけないでしょうか?
よろしくお願いします。
560名称未設定:03/06/07 13:31 ID:xeIpC+8n
>>559
558も言ってるように、ひとつの言語でもやってる内にわかります。
ぱーっと世界が開けるように、わかります。
561555:03/06/07 13:42 ID:beqrgONE
>>557
恥ずかしながら、Mailみたいな機能を再現したいと思っていただけでNibは調べてませんでした。
NSButtonにメニューをくっつけると言うのもアリですか。
でも、Safariのボタンにはチェックを入れる必要がないのでNSPopUpButtonでもいけそ
うですけどねぇ。
もう少し、試行錯誤してみます。ありがとう。
562名称未設定:03/06/07 13:42 ID:e92/S+a9
中村本の次に読むとすれば荻原本かなぁ。
だんだん知識を塗り重ねて行くうちに
オブジェクト指向も分かるようになる気がする。
563名称未設定:03/06/07 14:40 ID:LXwTev9c
自分はHyperCard、REALbasicから始めたからオブジェクト指向ってのはおぼろげながらわかってた。
言葉で理解するよりも、経験を積み重ねていったほうがおのずとわかってくるとおもうよ

荻原氏のはなかなか重宝しています。中村氏のは一度読んで実践して終わりだったけど、
こっちだと何度も開くことになる。
564名称未設定:03/06/07 15:50 ID:aqfgDdb7
>561
Safariのボタンは「ボタン長押しでメニュー表示」のためにNSButtonのサブクラスにしてるんじゃないかな?

>559
俺はC++の本でオブジェクト指向を勉強したな。
C++自体は一通り本を読んだだけで実際には一度もプログラムを書かなかったけど、
オブジェクト指向という概念そのものは役に立った。
>562,563のいう通り最終的には経験が一番重要だけど、
最初はなんかしらの読み物で概念を知っておいた方が良いと思うよ。
それで全てを理解できるわけはないけど、これからどんなことをしようとしているのかくらいは分かってないと
いくら勉強しても身に付かないと思う。
565名称未設定:03/06/07 22:12 ID:A9i4i/FL
NSPipeについて御存知の方いませんか。

gzip -dc hoge.tar.gz | tar xf -

のようにコマンド間をパイプで繋ぎたいのですが、Appleのドキュメントを読んでもよく分かりません。。。
(tar xzf hogeをつかうのはなしで)

[task_Gzip setStandardOutput:aPipe];
として
[task_Tar setStandardInput:aPipe];
としてもダメでした。

NSFileHandleを使って標準入力をバッファから読み込めばうまく行くような気がするのですが、
うまくコードにする事が出来ませんでした。



/*この辺はやっぱりM$の方が(ry
ももう少しなんとか(ry */
566OC厨:03/06/07 22:31 ID:9kccQz8f
レスありがとうございます。

どうせならOCでオブジェクト指向が学べたら、と思ったのですが。
JAVAやC++なみに人口が増えないと書籍層が充実しないというところでしょうか。
Javaでオブジェクト指向入門をしたいと思います。
567名称未設定:03/06/07 22:34 ID:dwlJu85A
いや、だからさ
オブジェクト指向は「何々で学ぶ」ってもんじゃないんだって。
分からないうちはJavaだろうが何だろうが分からない。
568名称未設定:03/06/07 23:11 ID:t+oK0Ycu
>567
いやObj-Cの本(というかCocoa本)には「オブジェクトとは何か」という基本を説明している本がない現状では、
その部分をJAVAなりC++なりの本で学ぶのは大事だと思うよ。

>566
別にJAVAそのものを勉強する必要はないのでご注意を(もちろん勉強したって無駄じゃないけど)。
http://www5c.biglobe.ne.jp/〜ecb/java/java00.html
例えばここで4,6,7,8あたりをざっと目を通して終わりで良いんじゃないかな?
(このページを推称するわけじゃないよ、ぐぐったらそれらしいのが出てきただけ)
具体的なことはCocoaでソフトを作っているうちにだんだん分かってくるから心配はいらないと思う。

本当は0の0から(変数とはとか、オブジェクトとは、から)Cocoaを勉強できる本があるとベストなんだけどね
569名称未設定:03/06/07 23:41 ID:e92/S+a9
>>565
どうも NSPipe は少しでも大きいデータを流そうとすると極端に重くなるので、
中間ファイルを作ることを勧めます。
570565:03/06/08 00:25 ID:MeK+6oxv
>569
レスどうもです。

>どうも NSPipe は少しでも大きいデータを流そうとすると極端に重くなるので、

もしよければどのようにデータの受け渡しをするのか教えていただけませんか。
571名称未設定:03/06/08 02:01 ID:CYa6Vi2r
>>570
中間ファイルを用いる方法は面倒なことに気付いたので、
「自分ならこうする」という別の方法を書いてみます。

まず、以下の内容のシェルスクリプトを hoge.sh という名前で保存し、
それをプロジェクトに取り込む。
#!/bin/sh
gzip -dc $1 | tar xf -
exit 0

次に、以下の内容のメソッドを書く。
-(void)something:(NSString*)filename{
NSString *script=[[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"sh"];
NSString *archive=[filename stringByExpandingTildeInPath];
NSTask *task=[[[NSTask alloc] init] autorelease];

[task setCurrentDirectoryPath:[archive stringByDeletingLastPathComponent]];

[task setLaunchPath:@"/bin/sh"];
[task setArguments:[NSArray arrayWithObjects:script,archive,nil]];

[task launch];
[task waitUntilExit];
}

それで、このメソッドを呼んで引数として解凍したいファイルのパスを渡せばOK。
572OC厨:03/06/08 10:05 ID:G2ZEYfMM
>>568
良いサイトを紹介いただきありがとうございます、早速読んでいます。

>具体的なことはCocoaでソフトを作っているうちにだんだん分かってくるから心配はいらないと思う。
そう願います。なーんちゃって感覚でCocoa及びObjective-Cに慣れていきたいです。

>本当は0の0から(変数とはとか、オブジェクトとは、から)Cocoaを勉強できる本があるとベストなんだけどね
まさにそう思います。
573565:03/06/08 12:05 ID:MeK+6oxv
>571

とても詳しいレス有り難うございます。
早速ProjectoBuilderで作成してみたところうまく動作しました!

ただ、シェルスクリプトは引数に半角スペースや[、](中カッコ?)が入ると認識しない事に気が付きました(涙

ho(半角スペース)ge.tgzというファイルを用意して
ターミナルから
gzip -dc ho\ ge.tgz | tar xzf -
これは動作するんですが

上記hoge.shを利用してターミナルから
hoge.sh ho\ ge.tgzとすると

tar: Failed open to read on ho <No such file or directory>
gzip: compressed data not read from a terminal. Use -f to force decompression.
For help, type: gzip -h

となります。シェルスクリプトにエスケープシーケンスを認識させるにはどうしたらよいのでしょうか…


574名称未設定:03/06/08 13:12 ID:0L+H07wP
>>566
俺はOCの萩原本でオブジェクト思考理解したよ
要は内容を受継いで変更や拡張できる部品を集める形でつくる
よって変更、拡張、他のプロジェクトの再利用が用意
ってこと(違う?
575名称未設定:03/06/08 14:56 ID:rXNVgJxB
 
576568:03/06/08 15:34 ID:sQOSQfYR
>574
本当だ
荻原本にもオブジェクト指向の説明があったね。
>いやObj-Cの本(というかCocoa本)には「オブジェクトとは何か」という基本を説明している本がない現状では、
というのは俺の勘違い
スマソ
577名称未設定:03/06/08 15:59 ID:2AS1RLxn
>>573
hoge.sh を gzip -dc "$1" | tar xf - としてみては
578名称未設定:03/06/08 18:37 ID:AXrZKLX3
今さらかもしれんが、

>>565
NSTask *gzipTask = [[NSTask alloc] init];
NSTask *tarTask = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];

[gzipTask setStandardOutput:pipe];
[gzipTask setLaunchPath:@"/usr/bin/gzip"];
[gzipTask setArguments:[NSArray arrayWithObjects:@"-dc", @"hoge.tar.gz", nil]];
[tarTask setStandardInput:pipe];
[tarTask setLaunchPath:@"/usr/bin/tar"];
[tarTask setArguments:[NSArray arrayWithObjects:@"-xf", @"-", nil]];

[gzipTask launch];
[tarTask launch];
これでうまくいくと思うが。gzipTaskをlauchし忘れたとか。

終了を判定したい場合は、NSTaskDidTerminateNotificationが使える。
tarTaskの出力を利用したい場合はfileHandleから読むことになる。

>/*この辺はやっぱりM$の方が(ry
>ももう少しなんとか(ry */
具体的に聞きたい。ドキュメントのことか。

>>569
重くなるというのはどういうこと?
上記のコードでもそんなに差はなかったが(18MBくらいのファイルでターミナルと2、3秒の差)
[task waitUntilExit]で待つと他のイベントがハンドリングされないから?
579名称未設定:03/06/09 21:23 ID:Zd9NcuPh
Cocoaについて教えて下さい。

#import <Cocoa/Cocoa.h>
#import "MyClass1.h"
@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}

このように自作クラスのオブジェクトを他のクラスのインスタンス変数にしようとすると

parse error before "MyClass1"

とコンパイラにおこられるんですが、
NS〜というクラスのおぶじぇくとでないとインスタンス変数にはできないのでしょうか。
580名称未設定:03/06/09 21:39 ID:ZzrENAjQ
>>579
#import <Cocoa/Cocoa.h>
#import "MyClass1.h"

@class MyClass1;

@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}

としたらどうですか?
581579:03/06/10 17:35 ID:MT4H0P8v
>580


@interface AppContoller : NSObject
{
id anInstance;
}


このようにid型で宣言したらうまくいきました。
582名称未設定:03/06/10 20:18 ID:yYCfN7wD
>>581

id型にしてしまうと、MyClass1が持っていないメソッドを
anInstanceに送ってしまった際の警告が抑止されてしまうので、
おすすめできる方法ではありません。

#import <Cocoa/Cocoa.h>

@class MyClass1;

@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}

とするのが良いと思います。>>580に似ていますが、
#import "MyClass1.h"の宣言を削除しています。
ヘッダから削除したこの宣言は、かわりにAppContoller.mファイル
の方に書いておいてください。
583582:03/06/10 20:25 ID:yYCfN7wD
・ヘッダファイルでは自分のスーパークラスだけ#importする
・その他のクラスは@classディレクティブで宣言する
・@classディレクティブで宣言しておいたクラスのヘッダファイルは
実装ファイル(.m)で#importする

としておくと、ヘッダファイルの依存関係で悩まされることは
通常無いと思います。
584名称未設定:03/06/11 16:14 ID:wX/0F2JE
Objective-C Pocket Reference買っちゃった。
CocoaオンリーかとおもってたらGNU関係も対比して書いてるじゃん。
翻訳出るかな?これ。出たら友達に勧めよう。
585名称未設定:03/06/11 20:55 ID:YSUJ+Xir
JavaでCocoaアプリを作る時なんですけど、製作の過程はどのような感じになるの?
Javaの知識だけあればできるの?
それとも、あの英語だらけで調べるのも一苦労のマニュアルを見ながらでないと
作れないの?
586名称未設定:03/06/11 20:58 ID:2rjAjKWp
どのみち英語で苦労しなきゃならんと思われ
587名称未設定:03/06/11 21:00 ID:YSUJ+Xir
いやー、マイクロソフトの開発環境は日本語情報充実してたしなぁと思って。
JavaならObj-Cよりも日本語の情報で苦労しなくてすむかなと思ったんだけど
そういうもんじゃない、ってことですかね?
588名称未設定:03/06/11 21:01 ID:67/wKApX
ObjC使ってますが、だいたいはProjectBuilderに付属したリファレンスを見てやってます。
589名称未設定:03/06/11 21:03 ID:YSUJ+Xir
>>588
クラスライブラリが全部英語だとすごく疲れませんか?
僕は疲れます。
読み進むスピードが日本語の3分の1くらいになるし…
590名称未設定:03/06/11 21:41 ID:5+8tryGc
>>589
ここを利用してみれば?
http://www.oomori.com/cocoafw/index.html
参考にするといった程度だけど。
591名称未設定:03/06/11 21:56 ID:W5NOQIG6
>587
>JavaならObj-Cよりも日本語の情報で苦労しなくてすむかなと思ったんだけど
正解。
でもCocoaのリファレンスが全て英語なのでそこで苦労する。
JavaとObj-Cの情報の差なんて微々たるものだよ。
Obj-Cの情報なら荻原本で大体事足りるし。

>589
疲れる。
っていうか必要な部分を斜め読みするだけでまともに読んだことないな。
なんで後から「こんなクラスがあったのか!」って後悔すること多数。
あぽーもWin32からのポーティングガイドなんて訳してないで
Cocoaリファレンスを訳してほしいもんだ。
592名称未設定:03/06/11 23:04 ID:YSUJ+Xir
というより、本当に教えてほしい点は(出し惜しみしてたわけじゃなくて)
「Cocoaフレームワークの中でJavaのライブラリを使うだけ」なのか、
「Javaで組んだら勝手にCocoaアプリになる」のか、ってことかも。

つまりCocoaのお勉強が絶対条件として立っているなら、
別にjavaでもObj-Cでも一緒だなぁと思いますし。
言語仕様自体の違いなんて問題にならないから。
593名称未設定:03/06/11 23:46 ID:nVInKmba
>>592
>「Javaで組んだら勝手にCocoaアプリになる」
この辺がよく分からんが。

Pure Javaで組んだらPure Javaのモノが出来る。
Pure JavaでQtやGTKのネイティブアプリが出来る訳でないのと一緒で、
Pure JavaでCocoaアプリが出来る訳じゃない。

Objective-CでCocoaを使う事の利点はいざと言う時に
すぐにCarbonに降りて処理出来る事。
エイリアスの解決とかちょっと凝った事をしようとすると
Carbonが必要になる。

逆に、そんな些細な事は気にしないでCocoaの上だけで完結するなら
Javaにはガーベジコレクタが有るし
既存のクロスプラットフォームで優秀なライブラリが
公式、非公式に大量に存在する。特にXML関連はJavaが強い。

つっても、要求仕様に併せて自分の好きな方を選べばよろし。
Objective-CもJavaもよく似ているから
片方をある程度知っていればもう片方を勉強するのは
そんなに難しい事じゃないよ。

問題は、両者の似て非なる部分が微妙で混乱しがちな所か。
594名称未設定:03/06/12 01:32 ID:9EJS/9Na
cocoa javaならこれ
http://www.amazon.co.jp/exec/obidos/ASIN/4798003530/ref=sr_aps_b_/249-4965523-9500347
読んでからうんちく垂れれ
595名称未設定:03/06/12 01:39 ID:UTjBZJM1
>>594
へぇー、こんな本があったのか。
Cocoaはやっぱりとどっちが分かりやすいだろう…
596名称未設定:03/06/12 01:52 ID:9EJS/9Na
どっちがって、「別の本」だよ。内容的に。
あくまでJavaの本であり、Javaがわの視点から書かれてるから。
597名称未設定:03/06/12 02:37 ID:OrCJHHiY
>>595
この本買ったけどわりといいと思うな。前半Javaそのもの、後半Cocoaをからめて、ってかんじで
しょうか。まだ前半を少ししかよんでないけど。
「Cocoaはやっぱり」はObj-Cベースだと言う事もありJava系のものをさがしてたらコレがあって。
かなり易しく噛み砕いているので僕のような初学車でもいけるかなと思います。
598名称未設定:03/06/12 21:58 ID:UTjBZJM1
http://www.amazon.co.jp/exec/obidos/ASIN/4877780939/qid=1055422586/sr=1-2/ref=sr_1_2_2/249-6240115-4070723
Cocoa+Java―MacOS X 10.1対応版����MacOS ?ィプログラミング入門

これと>>594ならどっちのほうがいいと思いますか?
どっちかにしようと思ってるんですけど。
599名称未設定:03/06/12 23:42 ID:G7NEAu9z
>>598
Amazonにはレビューが付いてるだろ。レビューが無い本は売れてないとも読める
600名称未設定:03/06/12 23:44 ID:UTjBZJM1
>>599
この本、前のりビジョンにはいくつかレビューついてるんですよ
601名称未設定:03/06/13 22:20 ID:O6wb8MBr
ファイルのフルパスを表示する時に、本当のファイルネームでのパス
を放り込んだらローカライズされたパスに直してくれるクラスとかありますか?
602名称未設定:03/06/13 22:25 ID:pvegSkor
NSFileManagerのドキュメント内を探せ。
603名称未設定:03/06/13 22:35 ID:O6wb8MBr
-displayNameAtPathかと思ったけど、
これって返ってくるのがlastPathComponentだけみたいなんですが・・・。

/User/aaa/Documents/abc.jpgというフルパスを渡したら
/ユーザ/aaa/書類/abc.jpgというNSStringが返ってくるクラスはFileManagerにあります?
604名称未設定:03/06/13 22:41 ID:fIQIYpV+
そういう場合はアレだ。

どうせ6つぐらいしかないんだから
手 動 で
605名称未設定:03/06/13 22:46 ID:2yT3des3
森永
606名称未設定:03/06/13 22:55 ID:pvegSkor
>>603
だからちょっとは探せ。
607601:03/06/13 23:28 ID:O6wb8MBr
お騒がせしました。-componentsToDisplayForPathですね?
参考までに超意訳のリファレンスをのせときます。

componentsToDisplayForPath:
- (NSArray *)componentsToDisplayForPath:(NSString *)path

パスのコンポーネントを表すNSStirng(既にAutoreleaseされています)を要素とする
NSArrayを返します。このパスの要素は、ユーザが目にする形であらわされています。
(Finderやオープン・セーブダイアログ等におけるような)
このメソッドで得られるパスは、ファイル操作などに使用することはできない、ユーザに
表示するためだけのものです。

・・のはずなのに、なぜかnilしか返ってこない・・・。
608601:03/06/13 23:36 ID:O6wb8MBr
何度もすみません。解決しますた。
-componentsToDisplayForPathに渡すのは、今現在実際に当該ファイルが存在する
パスしか渡してはダメみたいです。以前に保存していたファイルパスを表示するという
場合には注意がいりますね。
609名称未設定:03/06/15 09:32 ID:gL/WGc+X
Cの関数からobjective-cの処理を呼び出す方法は無いのでしょうか?

objective-c側から普通のC関数の呼び出しは、そのまま記述できるのを
確認したんだけど。(self とかは使えないみたいだけど、それはまた別問題として、、)

具体的には、昔cでつくった処理からIBで作ったCocoaの表示処理を呼び出したいんです。
610名称未設定:03/06/15 09:38 ID:OkyjEh1b
CocoaもAPIはただの関数な訳で使えないことは無いと思うけど
Cocoaのクラスを呼び出すのは不可能だと思う。
611609:03/06/15 09:47 ID:gL/WGc+X
反応早!

すんません。 Cocoaというレベルでなくて言語仕様レベルの話なんです。
昔作った処理の再利用が目的なんで、うわっかぶせでobj-c とcの
橋渡しができればいいんです。

C++経由というのをいま探索中です。
612名称未設定:03/06/15 09:54 ID:OkyjEh1b
ん?
Cの関数内から呼び出したいだけで、別にCで作ってるわけではないのね?
んじゃあ、Obj-Cなんだったらそのまま呼び出せば普通に使えると思うんだけど。
613名称未設定:03/06/15 11:51 ID:DseHzMTf
ほれ

--- main.c ---
main() {PrintStrObj();}
----------------
gcc -c main.c

--- print.m ---
#import <Cocoa/Cocoa.h>
void PrintStrObj()
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
printf([[NSString stringWithString: @"Hello World!"] cString]);
[pool release];
}
---------------
gcc -c print.m

gcc -o p main.o print.o -framework Cocoa
614名称未設定:03/06/15 22:03 ID:yvDfhKw+
Cocoaはやっぱり のweb版ページ消えた?
615名称未設定:03/06/15 22:06 ID:kPFDhgUZ
だいぶ前に。
616名称未設定:03/06/19 19:54 ID:PnXyS1H+
#import <Cocoa/Cocoa.h>

int main(int argc, const char *argv[]){
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];


[pool release];

return 0;
}
みたいなのをコンパイルして実行すると、CFStringとかCFNumberなどのCF〜のメモリが解放されていないようなんですけどこれはなんなんでしょうか?
617名称未設定:03/06/20 00:25 ID:hPWAptZ1
>>616
>これはなんなんでしょうか?
どうやって検証したの?
認識が違っているかもしれないし、方法がわからないと誰にもわからない。
618名称未設定:03/06/20 00:30 ID:hPWAptZ1
ageついでに、
Cocoa.Frameworkってメモリーリークしているのかしていないのか
わからない所がある。
MallocDebug.appでみると、リークしまくりのようだが。
619名称未設定:03/06/20 00:35 ID:fU/oS9Tv
>>617
すいませんでした。
gcc main.m -framework Cocoa
とコンパイルしたものを
ObjectAlloc上で実行してみたところCurrentの所が0になっていないものが
たくさんあったんです。
620名称未設定:03/06/20 00:44 ID:hPWAptZ1
>>619
>ObjectAlloc
でわかるの???リークが!
621名称未設定:03/06/20 00:47 ID:fU/oS9Tv
あれっわかんないんですか?何か根本的に間違ってますか?
622名称未設定:03/06/20 01:33 ID:hPWAptZ1
>>621
main(){
char* p=malloc(10);
free(p);
return 0;
}
でfree()があるときとないとき比べても
システム内で使われたかどうか知らないが、
消えてないオブジェクトがある。
623名称未設定:03/06/20 01:47 ID:uQVPRV9+
Cocoa-JavaでServerSocketがうまく動かずに悩んでいます。
Threadを継承したクラスのrunメソッド内で、ServerSocketをnew、acceptしてSocketを取得できません。
tryでくくっているのですがExceptionはスローされず、servSock.accept()で止まっているようです。

ServerSocket servSock = new ServerSocket(listenerPort);
NSSystem.log("port=" + servSock.getLocalPort()); // ここまでは動いています
Socket sock = servSock.accept(); // ここから先の処理に進みません
NSSystem.log("remoteSockAddr=" + sock.getRemoteSocketAddress());

このacceptで止まった状態でアクセスすると
java.lang.NoSuchMethodError
at ServerThread.run(ServerThread.java:46)
上記のエラーが出ます。何かこの問題の原因がわかる方おられましたら助言よろしくお願いします。
原因をさぐるべくPureJavaで書いてみましたが同様の症状でした。
624623:03/06/20 01:55 ID:uQVPRV9+
追記です。
SHOEISHAのJavaゲームプログラミングを参考にしています。
(この本は推奨されないメソッドを使っている箇所がたくさんあるので気をつけてコーディングしています)
ポートは2357を使用しています。他のポートも試しましたが症状は変わりませんでした。
テスト段階で一回うまくいったような感じだったのですが
ポートを閉じる処理を忘れてからうまく動作しなくなったような感じがします。
記憶があいまいなので、もしかしたらうまく動いていたのは勘違いだったかもしれません。

この問題の解決が難しそうであればObj-Cで書き直すつもりでいますが
不馴れなためできればJavaで開発したいと思っています。
何卒よろしくお願い致します。
625名称未設定:03/06/20 03:29 ID:dn2gRYcx
>>616
それは多分、もともと解放されないオブジェクトだと思うのだが。
@"string"とかは解放されないNSStringのインスタンスでしょ?

>>623
たしかaccept()はそこで止まってアクセスを待つでしょ。
タイムアウトを設定すれば、時間切れで例外吐くようになるんじゃない?

626623:03/06/20 03:40 ID:uQVPRV9+
>>625
うおおレスありがとうございます!
んー、なるほど。たしかに止まってアクセスを待ってるような感じもします。
なんでNoSuchMethodErrorが出てるのかもうちっと調べてみます。
627名称未設定:03/06/20 12:15 ID:KydAHKyT
>616
CFStringなどはCFReleaseで解放しなければならない
ということではなくて?

>618
リークは0にはならないね。
俺は10KBくらいにおさまれば良しとしてる。
OSのバージョンが上がれば改善されるみたいだし。
10.1ではNSURLHandleとかリークしまくりだったけど
10.2になったら直ったよ。
628616:03/06/20 13:50 ID:VIGfGwZO
ご返事ありがとうございます。
>>627
自分で生成した覚えのないものなので一体なにを解放すればいいのかわらないんです。覚えがないのならば気にしなければいいのかもしれませんが...
>>625
というのはシステムが勝手に生成して解放しないオブジェクトがあるということでしょうか?

やはりObjectAllocを使って調べようとしているのが間違いなのかな。
629名称未設定:03/06/20 16:42 ID:UunQc/xh
>628
CFStringはNSStringの内部で使われてたりします。
NSStringのリリースし忘れでは?

確認ですが、NSAutoreleasePoolは、Javaのガベコレと同等物ではないことはご存知ですよね?
autoreleaseメッセージをオブジェクトに投げると、カレントプールに登録され、
カレントプールがリリースされるときに登録されたオブジェクトに対しreleaseメッセージを投げるだけです。
ですから、カレントループが解放されるときにretainCountが1でない場合、
retainCountが1減るだけで解放はされません。


> やはりObjectAllocを使って調べようとしているのが間違いなのかな。
普通の人はMallocDebugを使います。
630616:03/06/20 17:56 ID:OVVUvMlC
>>629
上に書いたようにNSAutoreleasePool以外に特にオブジェクトを生成していません。main()の中身はあっても無くても変化はありませんでした。
一応retainCountのことは理解しているつもりです。

MallocDebugはウィンドウアプリケーション(?)しか使えないのではないでしょうか?少なくともgcc main.m -framework Cocoaとしてできたa.outは選択できませんでした。
631名称未設定:03/06/20 18:20 ID:LblzhyXN
Qt/MacのGPLバージョンがでるらしいです

http://www.trolltech.com/
632名称未設定:03/06/20 18:35 ID:hPWAptZ1
>>630
>MallocDebugは
ループがないと動かない。

main()
{
....something code
while(1);
}

普通のアプリはイベントループがある。

MallocDebugではポインタの上書きしか検出されない、と思う。
ObjectAllocで見れる参照カウントがあるなら、Win32のデバッグ環境
のようにCheckPoint設定してダンプする関数があってもいいのにな。
ライブラリ自体がリークに関してあやしいのか。
633625:03/06/20 19:30 ID:dn2gRYcx
>>628
そういうこと。
例えばNSString *のなんとかNotificationとかがAppKitにはいっぱい定義されてたりするでしょ。
それらはNSStringのインスタンスとして扱えるけど、自分で生成する必要もないし、解放もしない。

それにClassオブジェクトだって解放されないでしょ。
たしか現時点ではBundleはロードできてもアンロードできないんじゃなかったっけ。
つまり実質的にはリークしてるってことだ。どうせページアウトされるし。
634名称未設定:03/06/22 18:45 ID:g7Z4HPlh
あの、現在テキストエディタらしきものを作っているのですが、分からない
点が有ります。だれか教えて下さい。

分からないのは『タブの長さの設定が可能なのかどうか?』ということのなの
ですが、現在は手動で t(タブ)を任意個のスペースで置き換えるようにして
います。現在うまく動作していますがこの為だけのコードが出てきてしまい、
体によくありません。

1、ファイル読み込み時にタブをスペースで置き換え
2、タブ入力時にスペースに置き換え
3、保存時に必要な箇所をタブに直す

というふうになりますが出来ればフレームワーク側でできないかな?
と思いまして。。。
635名称未設定:03/06/23 01:12 ID:3C938+Do
Cocoaはやっぱり!を読んで最近はじめた初心者ですが(Cとかはそれなりに)
ftpなどの対話的なインターフェイスを持つコマンドを、Aquaから
グラフィカルにそうさしつつ、ターミナルは開かないというような動作は
実現できますか?

Aquawget(だったかな)みたいなのを見てると、出来そうな気もするんですけど…

それと、Cocoa初級者むけのメーリングリストとかありましたら(ちゃんと生きてる奴)
教えてもらえると助かります。
636名称未設定:03/06/23 01:57 ID:P12MKax6
>>634
NSMutableParagraphStyleを用意して、NSTextTabをNSArrayに入れてsetTabStops:でセットする。
んでこのNSMutableParagraphStyleをNSTextStorageとかNSMutableAttributedStringにセットする。
たぶんこの方法でよいと思われる。

Attributeの名前とかはリファレンスのNSAttributedString Additionsとかに書いてあるのでそれを参考に。あとはパフォーマンスとかの問題があるかもしれないので色々実験してみて。

>>635
NSTaskで対話的なものもたぶんできると思う。NSTaskはプロセスを実行して、NSNotificationとかで読み込みを受け取ったりするので、そこらへんを調べてみては。
あとユーザーの入力はstandardInputで与えることになると思うので、NSPipeとかNSFileHandleを使用する。
そして扱うデータによってはNSDataとNSStringの変換とかでエンコーディングの知識が必要になるカモ。あと、文字列を解析する場合はNSScannerが便利。
NSTaskでできなければforkとか使うのかな?
637634:03/06/23 03:53 ID:CnYhIbCR
>>636
レスありがとうございます。
636の方法で方新は見えてきたのですが、NSTextTabの意味が
よく分かりません。今は時間がないのでテストできないのですが
後日調べてみます(よろしければおしえていただけないでしょうか?)。

面白くなりそうです!
638616:03/06/23 19:42 ID:a2k9m2bi
>>633
遅くなりましたがどうもありがとうございました。
objective-cだけの時には気にならなかったのですが、cと混ざったものを
書いているときになにか自分で解放し忘れてるものがあるのではと
思ったのでした。
639名称未設定:03/06/24 01:58 ID:x7GZiE7h
なんか昨日から、特定の?文を入れてリターンを押すと
オートインデントが利かないばかりか、tabを押してもタブが入らず、
何度も挑戦しているとかならずProjectBuilderが落ちるようになってしまって
ションボリックリンクなんだけど、これはもうDeveloper toolsの再インストールしかない?

といったところで、インストーラのパッケージを探してみたら、
なんかいつの間にかハードディスクの中から消えてる??
MDD867なんですが、インストーラはどこにあったか教えてもらえませんか?
640名称未設定:03/06/24 13:57 ID:sZOxojhs
>>639
とりあえずADCOnlineにでもなって(もしなってなかったらね)Dec2002と昨日でたDec2002用gcc3.3パッチとセットでDLしたら?

てかその前にpreferencesあたり疑ってみたりインデント外すなりしてみるとか。
Xcodeになってもインデントバグがあったりするとかなり鬱になりそうだけど(汗
641名称未設定:03/06/24 19:27 ID:Z3Jcgek/
すみません。CocoaJavaのNSImageについて質問なのですが
dissolveToPoint(NSPoint aPoint, float delta)ではOSXに付属のスクリーンセーバのような
なめらかな位置の移動はできないのでしょうか?
NSPointの各座標の値を1.234みたいな値にしても結果は1Pixelずつの移動でした。
なんか根本的な勘違いをしてますでしょうか?
642名称未設定:03/06/24 21:19 ID:x7GZiE7h
>>640
ウワァァン、最新版入れてもplist消してもやっぱりインデント設定を入れると落ちるよう
しょうがないからオートインデントなしで書くか…これじゃmiとあんましかわらんね

何が悪いのか皆目見当が付かないところもションボーリ
643名称未設定:03/06/24 21:51 ID:x7GZiE7h
あと、ついでに質問なんだけど…

オートインデントを切ったら、tabがスペースに変換されてインデントされるのは
これはどうしようもないことなんですか?
回避方法(tabをtabとして記録する)があれば教えてほしいのですが…

環境設定の「エディタでタブを使う」とか項目をいじってみてもどこが変わったのか
よく分かんないし…助けてくだされ
644名称未設定:03/06/25 00:09 ID:eB6ceTrH
>>643
うちはむしろスペースがtabに変わるなぁ。いったいどこの設定だろ
645644:03/06/25 00:39 ID:eB6ceTrH
>>643
「エディタでタブを使う」の設定はプロジェクトの個々のファイルごと
にも設定されてるようだ。cmd+iで情報パレット出してチェック入れれば
ちゃんとtabが入るよ。
646名称未設定:03/06/25 01:02 ID:HvJolIf0
>>645
ホントだ!
情報?ォクスコ!
647641:03/06/25 03:28 ID:lsrrhXEh
自己解決しました。
drawAtPoint,drawInRectを使用することでうまくいきました。
よくドキュメントを読んでから質問します、、、板汚しスマソ。
648641:03/06/25 15:12 ID:lsrrhXEh
現在勉強のためCocoaJavaで全画面表示のスライドショーを作っているのですが
OSXに標準のスクリーンセーバに比べて描画速度が遅くて困っています。
NSViewを継承、RunnableをimplementsしたClassを作成して
run()内の無限ループでdisplay()、sleep()を繰り返し処理をしています。
(具体的な描画処理はdisplay()の中で行っています。)
drawInRectの描画面積が広く、クロスフェードで透明度をつけるととても遅いです。
スリープを0にしても遅くてなめらかな動きになりません。
OSXのスクリーンセーバはとてもなめらかに動いてるので
何とか対処できるのではないかと思うのですが解決策が全くわかりません。
やはり全画面描画をするときはObj-cでNSOpenGLViewを使わなければならないのでしょうか?
全画面描画について何かアドバイスよろしくお願い致します。
649名称未設定:03/06/27 17:27 ID:XaJJBML+
練習で、NSTask から呼び出したコマンド(ls)の出力を、
ウィンドウに配置した NSTableView に表示するものを作ろうと思ったんですけど、
NSTableView にデータを表示させるにはどういう手順が必要なのかいまいち分かりません。

・NSTableDataSource を NSTableView のデータソースとして指定する
・おそらく tableView:setObjectValue:forTableColumun:row: でデータを書き込む

と言うところまでは分かるんですけど…
あれ、"(NSTableView *) tableView" がパラメータとして指定されてるということは
setDataSourceは必要ないということ?

ls の出力結果ということで、改行で区切られた文字列がダラダラと帰ってくるわけですけど、
これを配列に変換したものを、一気に書き込むなんてことはできるんでしょうか?
650名称未設定:03/06/27 17:46 ID:QrYouNyJ
>>649
NSTableView の DataSource に必要なのは
-(int)numberOfRowsInTableView:(NSTableView *)aTableView;
-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
この使い方は
http://homepage.mac.com/mkino2/cocoaProg/AppKit/NSTableView/NSTableView.html#setValue
このあたりを参照。

あとは、文字列を配列に変換するのに
-(NSArray *)componentsSeparatedByString:(NSString *)separator;
を使ったりすると吉。
651名称未設定:03/06/27 19:29 ID:OI+yaa6v
NSMutableDictionaryとNSMutableArrayで階層構造を作っているデータがあるんですが、
全データを丸ごとコピーして新しい辞書を作るにはどうすれば良いでしょうか。
dictionaryWithDictionary:では頂上しかコピーされないし、
再帰でごりごりとコピーするしかないんでしょうか?
あ、ファイルに書き出す、は無しでお願いします(ファイルに書き出せないデータを含むので)
652名称未設定:03/06/27 22:53 ID:XaJJBML+
>>650
うーん、この説明を読んでもさっぱりです…

たとえば myObject にアウトレットを作って、
tableView, tableColumn というアウトレットをそれぞれ
NSTableView, NSTableColumnに接続しますよね、
それでボタンをひとつ用意してそれに対してアクション run: を接続して、
その run: の中でテーブルにデータを入れたいと思ったら、
どのような操作が必要なんでしょうか?
653名称未設定:03/06/27 23:27 ID:9xWR5cni
>>652
ちょっと勘違いしているようで。
CocoaではオブジェクトがNSTableViewにデータを送って、表示するような方法は取ってないよ。
NSTableViewのほうから、「ここのカラムの何番目に表示するのは何よ?」って聞いてくるから、
オブジェクトは「表示するのは@"hoge"」とか返せば、その文字列が表示するって仕組み。
654名称未設定:03/06/27 23:52 ID:XaJJBML+
>>653
むむむ。そうすると、

NSTableView「行数はいくつなの?」 (numberOfRowsInTableView)
オブジェクト「5つだよ」(↑の戻り値)
NSTableView「じゃあじゃあ! hogeの3行目はなに?」(tableView:objectValueForTableColumn:row)
オブジェクト「hogehogeだよ」(↑の戻り値)

って感じですか?
なるほどそうなると、なぜオーバーライドするのかとか
なぜそのメソッドを使うのかとかが分かってきたような気が。
655名称未設定:03/06/28 21:48 ID:zr+eaerB
>654
マルチポスト
警告1
656名称未設定:03/06/28 22:17 ID:qafMDcD4
>>651
ファイルに書き出す一歩手前でコピーすれば良いんじゃないの。
NSCodingで一旦シリアライズしてしまうとか。
657名称未設定:03/06/29 02:11 ID:t58EgiAB
>>655
???
658名称未設定:03/06/29 02:20 ID:KT4lXhEQ
macosx-dev-jp にマルチポストしてないか?ってことでは。
659名称未設定:03/06/29 02:33 ID:t58EgiAB
しょうもな。
660651:03/06/29 21:53 ID:LocSjlbl
>656
ファイルに書き出す前の処理です。
NSCodingに対応していないオブジェクトを含んでいてそれをデータから排除したいわけです。
でもメインのデータをいじっちゃうとその後の動作に問題が起きるので、
丸ごと複製してそっちをいじってやろう、というわけで。
設計上の問題といわれればそれまでですが。
661名称未設定:03/06/29 22:58 ID:lHyYE8i9
>>655
この人可哀想…。
662名称未設定:03/06/29 23:57 ID:V4o6OgIx
>661
同情するなら金をくれ
663名称未設定:03/06/30 00:53 ID:k8jHSRl5
>>651
カテゴリを使っちゃうのはどうか。(ObjCだよね?)

@implementation NSObject (RecursiveCopy)
- (id)recursiveCopy {
  return [[self copy] autorelease];
}
@end

@implementation NSArray (RecursiveCopy)
- (id)recursiveCopy {
  NSEnumerator *enumerator = [self objectEnumerator];
  NSMutableArray *copy = [NSMutableArray array];
  id obj;
  while (obj = [enumerator nextObject]) {
    [obj addObject:[obj recursiveCopy]];
  }
  return obj;
}
@end

@implementation NSDictionary (RecursiveCopy)
以下略

こんな感じで。
でもこれってコピー用の再帰的な関数書くのとあんまり変わらんかもね。
あとinitWithDictionary:copyItems:ってのもあるけど。

664名称未設定:03/06/30 19:48 ID:FjvaEaIC
>663
レスサンクスです。

>でもこれってコピー用の再帰的な関数書くのとあんまり変わらんかもね。
こっちの方が再利用がきいてよりオブジェクト指向っぽいですね。
勉強にもなるしちょっとやってみます。
665名称未設定:03/06/30 22:05 ID:zRsGWYSY
Objective-Cの質問です。
あるクラス(モデル)のメソッドで、文字列を引数として受け取り、
処理の結果を文字列として返す関数を作ろうと思うんですけど、
この場合、関数の定義はどうするのが一般的に正しいですか?
このメソッドは常に外部のクラス(コントローラ)から呼ばれることが前提です。

- (NSString)hogehoge: (NSString)aString
{
(略)
return aString;
}
のようにすればいいのかな。

オブジェクト指向言語でのプログラミングはほとんど始めてなので
クラスを引数にする時はどうすればいいのかイマイチ分かってないんですけど。
return aString とやると、ポインタか実体かどっちが帰ってくるんですかね。
666名称未設定:03/06/30 22:39 ID:W5NghL+q
普通は
-(NSString*)hogehoge:(NSString*)aString
じゃないかと思うが。
667名称未設定:03/06/30 22:53 ID:mf6N3Mj6
ポインタじゃないの
668名称未設定:03/07/01 01:02 ID:5epRmT+B
>>666-667
ありがとー
その後、stringWithString とかの定義を見てたら何となく分かってきたよ

といったところでもうひとつ質問が…。
アホな質問ばかりでごめん…

クラスAとクラスBがあったとして、クラスBの中のメソッドXが、
(メソッドX内で作った)NSArrayのポインタを返すとします。
これをクラスAの中から呼び出す時は、
NSArray *hoge = [ classB methodX ];
とやるのか、それとも
NSArray *hoge = [ NSArray arrayWithArray: [ classB methodX ] ];
とやるのか、どっちなんでしょう?
もしメソッドXが返すインスタンスがそのまま解放されないとしたら、
クラスA側でわざわざ別のインスタンスを作るのは無駄なように思えるし…
669名称未設定:03/07/01 01:09 ID:o6aV7lpL
前者が正解だとは思うが。
>>668 は荻原本あたりで文法を学んだ方が良いかもしれない。
670名称未設定:03/07/01 01:40 ID:5epRmT+B
>>669
ということは、まったく別のクラスの内部にあるメソッド内でインスタンス化された
ローカルオブジェクトが、解放されないまま別のクラスから参照できる、って事?
どこで宣言、インスタンス化されたオブジェクトであっても、それ自体をrelease
しない限りはメモリ上に残り続けるってことで合ってますか?

そして、たとえばクラスBのインスタンス自体が解放された場合、その中の
メソッドXでインスタンス化されたオブジェクトは解放されずに残るのか、
それとも一緒に消えるのか、どっちなんでしょ?(もちろんautoreleaseしてない場合)

萩原本は購入予定には入ってるけど資金不足でしばらく無理…
671644:03/07/01 02:14 ID:a7lEmA6e
>>670
ほったらかしてれば残ります
672名称未設定:03/07/01 02:20 ID:o6aV7lpL
クラスBのインスタンスが解放されても
その中のメソッドXでインスタンス化されたオブジェクトは解放されずにメモリ上に残る。

クラスBが解放されてしまっているので、
たとえオブジェクトがメモリ上に残っていたとしてもアクセスできず、
メモリリークということになってしまうが。
673名称未設定:03/07/01 02:27 ID:o6aV7lpL
これらの違いが分かれば後は適当で良いような気もする。

@implementation B

-(NSArray*)hoge1{
NSArray *array=[[NSArray alloc] initWithObjects:@"a",nil];
return array;
}

-(NSArray*)hoge2{
NSArray *array=[[NSArray alloc] initWithObjects:@"a",nil];
[array release];
return array;
}

-(NSArray*)hoge3{
NSArray *array=[[[NSArray alloc] initWithObjects:@"a",nil] autorelease];
return array;
}

@end
674名称未設定:03/07/01 12:05 ID:5epRmT+B
>>673
それぞれの違いはだいたい分かる…はず。
autoreleaseは同じイベント処理内(もしくはarpが作られてから破棄されるまで)
はずっと保持されるってことでいいんですよね。
それに対して何も無しはずっと解放しない。
releaseがあるものはその場で解放されるのでnilが返される。

で、合ってますか?

あともうひとつだけ!質問ばっかりですいません
componentsSeparatedByStringを使って、改行で分けた文字列を作るには、
セパレータを 「@"\n"」 ってやるのは間違ってますか?
675名称未設定:03/07/01 16:35 ID:T0L0lxsW
ドラッグアンドドロップについて行き詰まってます。。。
NSViewにドラッグアンドドロップするのは出来たのですが、
NSCellにドラッグアンドドロップをしようとして、はたと立ち止まってしまいました。
NSView上にNSCellを複数配置してあって、それらの一つにFinderから
アイテムをドロップしたいのですが、どのように処理すれば良いのでしょうか?
676名称未設定:03/07/01 16:47 ID:u6msM7eZ
NSDraggingInfoのdraggingLocationメソッドでどこにdropされたか調べればよいのでは
677名称未設定:03/07/01 16:57 ID:DHrx7bSe
>>674
間違ってない。っていうか、プロジェクトを作って実験すればいいだけの話じゃん。
678名称未設定:03/07/01 17:01 ID:BmU2/ZsX
>>675
どのように処理すれば、の意味がよく分からん。
NSCellをオーバーライドすれば?
679名称未設定:03/07/01 17:14 ID:T0L0lxsW
わかりにくくてすいません。
NSViewにドラッグアンドドロップする時はNSViewのinitWithFrame中で
registerForDraggedTypes:メソッドを呼び、PboardTypeを登録しました。
その上で
(unsigned int)draggingEntered: (id) sender;
-(unsigned int)draggingUpdated: (id) sender;
-(void)draggingExited: (id) sender;
-(BOOL)prepareForDragOperation: (id) sender;
-(BOOL)performDragOperation: (id) sender;
-(void)concludeDragOperation: (id) sender;
を実装してドラッグアンドドロップできました。

こんどはそのView上に乗っているNSCellに対してもドロップ処理をしたいのです。
例えると、NSViewがFinderのウィンドウで、NSCellがファイルのアイコンです。
NSCellはマウスでつかんで移動できるようにしてあるので、NSViewにドラッグアンドドロップを
実装した時のように、NSCellに対しても上記のメソッド群を実装してやれば
OKかな、と思ったのですが、NSCellにはregisterForDraggedTypes:がありません。
それで、どうすればよいのかな分からなくなったのです。

長文すいません。
680名称未設定:03/07/01 17:18 ID:fZaKdqpP
>674
> releaseがあるものはその場で解放されるのでnilが返される。
これ違う。
勝手にniになってくれるわけない。
681名称未設定:03/07/01 19:02 ID:o6aV7lpL
>>674
後半
NSString *LF=[NSString stringWithCString:"\n"];
NSAttay *array=[hoge componentsSeparatedByString:LF];
みたいにするとか。
もっと良い方法があるかもしれない。
682677:03/07/01 19:53 ID:DHrx7bSe
>>681
あれ、@"\n"じゃ問題あり?
汗。
683名称未設定:03/07/01 19:58 ID:o6aV7lpL
@"\n" だと \n という文字列になってしまうし。

あと、>>682
×NSAttay
○NSArray
684名称未設定:03/07/01 19:59 ID:o6aV7lpL
ごめん、>>682 じゃなくて >>681
685名称未設定:03/07/01 20:13 ID:o6aV7lpL
そういえば、HMDT 本の概要が明らかになってますねぇ。
http://homepage.mac.com/mkino2/books/hmdt.html

Cocoa はやっぱり!や荻原本やヒレガス本などの
先行本の良いところを拾った感じになりそう。
686678:03/07/01 20:29 ID:051k1IPs
>>679
そっか、NSCellはNSViewのサブクラスじゃないもんね。
何も考えず適当なレスしてスマソ。
ちょっと調べてみます。
687名称未設定:03/07/01 20:33 ID:5epRmT+B
実験してみたら @"\n" でいけたよ
どうも他の部分でバスエラってるモヨリ
688名称未設定:03/07/01 21:14 ID:o6aV7lpL
試してみたら、@"\n" でいけますねぇ。
以前、同じ問題で悩んだ時には @"\n" で失敗したので、
>>681 の方法を使ってたんだけど。
689名称未設定:03/07/01 21:37 ID:5epRmT+B
ついでだからもひとつ…

同じクラス内の全てのメソッドが使える配列を作ろうとしたんですけど

@implementation Hoge
NSArray *aArray = [ NSArray array ];
- (IBAction)run:(id)sender.......

って感じにしてみたら、initializer elemant is not constant
って怒られてしまう。
メソッド内で同じものを宣言すると問題なく通るのだけど
何か基本的な間違いをしてますか?

それと、今作ってる練習用のプロジェクト(簡単なやつ)が
意味不明の場所でエラーを起こして落ちてしまうんですけど
どこかに上げたら誰か見てもらえませんか?
デバッガでトレースしてみてもやっぱり意味不明のところで落ちてるような。
690名称未設定:03/07/01 21:58 ID:T0L0lxsW
>>678
そうなんですよ。
私もNSCellがNSViewのサブクラスだったらいいなぁと思ってたんですが。。。
解決したら書き込みます。
もうちょっとドキュメントあさって見ます。
691名称未設定:03/07/01 22:07 ID:HPfpM43k
>>689
インスタンス変数でいいと思います。
@interface Hoge : NSObject {
NSArray* aArray;
}
...
そもそも変更不可の空Array作っても仕方がないのでは。。
こういうときはNSMutableArrayを使います。
692名称未設定:03/07/01 22:35 ID:u6msM7eZ
>690
NSViewはNSCellの座標を知ってるんだよね。
じゃないとマウスでつかんで移動とかできそうにないし。
だったら、NSViewから適当なNSCellに振り分けすればいいのでは?
NSViewの方にcellAtPoint:を実装、NSView・NSCell両方にNSDraggingDestinationの
メソッドを実装する。
たとえば、NSViewの方のprepareForDragOperation:はこんな感じかな。
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
NSPoint point = [sender draggingLocation];
NSCell *cell = [self cellAtPoint:point];
return [cell prepareForDragOperation:sender];
}
NSViewの方でregisterForDraggedTypes:を呼んでおけば、上のコードが呼ばれて
目的のcellのprepareForDragOperation:を呼ぶことができる。
693名称未設定:03/07/01 23:12 ID:5epRmT+B
>>691
あやや、失礼しますた。書き間違いです。

なんでこんなことがしたいかと言うと、
これ自体がNSTableDataSourceを内包しているので、
スタティック変数(じゃないけど)を参照してセルの内容を返す必要があるんですよ。
んで、あるボタンを押すとその内容が変化するので、その度に毎回NSArrayを
作っているとそのうちメモリが溢れるかなぁと思ったもんで。
694名称未設定:03/07/01 23:54 ID:5epRmT+B
ttp://www.kari.to/upload/source/d/0563.sit

ってことでこれがプロジェクトのディレクトリなんですけど。
余裕があったらぜひとも試して添削してみてくださいませませ。
695名称未設定:03/07/02 01:07 ID:cjlxSf/4
>>693
ソースまだ見てないけど、そういう場合は、
@interface Hoge : NSObject {
NSArray* dataArray;
}
で、
-(NSArray*)dataArray{
return dataArray;
}
-(void)setDataArray:(NSArray*)inArray{
if(dataArray) [dataArray release];
dataArray=[inArray retain];
}
みたいなアクセッサメソッドを作りそれを介して扱います。
deallocで[dataArray release]すればきっちり片付きます。
696名称未設定:03/07/02 01:38 ID:2AiJdzFN
>>695
??
最初のメソッドの意味が分かんないです。
この例のままだと、変なポインタ返しませんか?
もしかしたら役に立つかもしれないので教えてください。

よく考えたらNSMutableArrayを継承して、データソースのメソッドを持つ
専用のクラスを最初からインスタンス化しておくのが無難かもしれない…
697名称未設定:03/07/02 02:02 ID:+BXvG5zQ
>>594 のソースを見てみた。

・tableData はインスタンス変数にして -(void)awakeFromNib; の中などで初期化すれば良い
・RunTask クラスを nib ファイル内でインスタンス化する意図が不明
・listView の dataSource は nib ファイル内で指定すれば良いのに
・とにかく一回基本書を買って読んだ方が良い
698名称未設定:03/07/02 09:59 ID:2AiJdzFN
>>697
アドバイスありがとー
Cocoaはやっぱり!を読んだだけじゃぁナンニモワカンネーヨ!
ってとこですか。ぐふぅ

次のステップとしては、ヒレガス本か入門Cocoaか萩原本かHMDT本が
あると思いますけどどれがいいでしょうかね。
HMDT本はまだ出てないから候補から外すとしても。
699名称未設定:03/07/02 11:04 ID:vDGdMVpi
入門Cocoaは、他の本に書いてないことがちょこっとだけ載っているので、
ぱらぱらっと立ち読みすることにして、他のを全部買えばいいんじゃない。
どれにしようとか、考えてると結構時間の無駄だし。
700名称未設定:03/07/02 11:09 ID:2AiJdzFN
いや、金がないんですよ(萎)
現時点でもっとも実りが多そうな本がいいなぁと…
萩原本かな。
701名称未設定:03/07/02 13:24 ID:VFUUmN8k
ヒレガスだろ。
聞いてることはほとんど載ってるような・・・。

HMDTは発売後様子を見てから。
702名称未設定:03/07/02 23:42 ID:2AiJdzFN
>>701
萩原本立ち読みしてきたらすごく良さげだったんで、やっぱり両方ですかのう
合計で7000円くらいするよ…あふん
703名称未設定:03/07/03 02:20 ID:WA9nmxUi
たしかに萩原本は役に立つ。ちょっとしたリファレンスとしても重宝。
そこらへんHMDTに期待。テキスト処理なんかが詳しく書いてあるとかないとか。
ちなみに、Learning Cocoa -> 萩原本 -> Cocoaはやっぱり! -> ヒレガス本
-> Cocoa Programming の順で買った。
704名称未設定:03/07/03 20:26 ID:puvhRaL3
おこづかいが今、全部で1200円しかないんです。
でも1冊買うとしたら、どの本を買うと良いですか?
705名称未設定:03/07/03 20:28 ID:rHAQZ22W
かえませんw
706名称未設定:03/07/04 00:29 ID:03lNLZCC
おこづかい以外の金がある罠
707名称未設定:03/07/04 08:00 ID:AxSMkcXN
本当にそうなら図書館いってみい。
割と大きめの図書館なら大体おいてるし、無ければ「ない」と言えば、結構おいてくれる。
うちの近くの図書館もそんな感じで、妙にプログラム系の書籍が多いぞ。
708名称未設定:03/07/04 10:05 ID:q5MVtSOD
図書館なんて地方地方で事情が全然違う
自慢にもならんが、こっちの図書館には全部ない。
行く度にリクエスト用紙かいてくるが2年間ずっと無視
郷土関係のマイナーな本は山ほど買ってる見たいだけど、いらね
他の図書館から取り寄せてもらっても、貸し出し付加

・・・・・・・・・・・結局全部かいますた
709名称未設定:03/07/04 13:36 ID:ef+c7Q5Y
この前、LaoxMac管でアーロンの本買ったら、手あかで黒くなってやんの。ムカついたよ。
買う本決まってる時はアマゾンで買うと決心した。
710名称未設定:03/07/04 14:24 ID:wHC+BELI
>>709
ばかやろう、その本はなあ、みんなにもみくちゃにされながら
おまえに買われるその時をじっと待ち続けていたんだぞ!
711名称未設定:03/07/04 22:45 ID:+PhI4JgT
Amazonでも結局業者の倉庫から出てくるのできちゃない本はありマッスル。
もちろん書店でもみくちゃにされた本が返本されてたのを、ブックカバー換える前に
再出荷することもよくある。
712名称未設定:03/07/05 00:12 ID:zkMtTc1B
Cocoa/Javaでソフトを作っていたら以下のようなメッセージが
でるのですが、これの意味(日本語訳という意味ではなく、どう解釈したら
いいのか)がわかりません。どなたか教えて下さい。

2003-07-05 00:01:30.923 SampleProject[5964] *** _NSAutoreleaseNoPool(): Object 0x1ece520 of class NSCFDictionary autoreleased with no pool in place - just leaking

ちなみにいつ発生するかというと以下のような手順で発生します。
ウィンドウにはNSTextFieldとNSButtonが一つずつあります。

1、ボタンをクリック
2、アクションメソッドでちょっと時間のかかる処理を行う。
3、処理終了
4、この時点でウィンドウに対して何か(例えばフィールドに文字書いたり、
ボタン押したり etc)をすると上記エラーが発生する
713名称未設定:03/07/05 00:45 ID:CIikpcX/
>>711
そうなのか。(´・ω・`)ショボーン
714名称未設定:03/07/05 08:58 ID:RJNeLMy2
>712
Javaでこれが起こるってことはガベコレのバグかな?

これはObjCでNSAutoreleasePoolと言うクラスのインスタンスがないスレッド上で
autoreleseメッセージを送信したときにでるものです。
まあ、あえてJavaでいえばインスタンス変数にNULLをセットするようなものかな?

最初に書いたようにJavaの場合はガベコレが勝手にやってくれますので意識する必要はまったくないです。

どこかでプロジェクト一式晒してみるか、
Appleに”ガベコレがおかしいぞ!ゴルァ”メールを送るかしないとだめかも。



と思って調べてみたらCocoa/JavaにもNSAutoreleasePoolがあるのね。
いまいち必然性が分からない...

ってことで各スレッドごとにNSAutoreleasePoolのインスタンスを確保してください。
715686:03/07/05 11:16 ID:gnCL+1ww
>>690
ふと気がついたんだけど・・・
ドラッグ関係のメソッドってNSViewに実装されているわけではなくてNSDraggingDestinationプロトコルのものなんだよね。
(NSObjectで採用されている)
だからNSCellでregisterForDraggedTypes無しでもドラッグを受け入れられるのかも?
716712:03/07/05 18:40 ID:zkMtTc1B
>>714
レスありがとうございます。
NSAutoreleasePoolについて調べてみたものの解決しません。
NSAutoreleasePoolのドキュメントに以下のような方法で例の
エラーを回避できると書いてありました。

//--------------------------------Cocoa-Javaドキュメントより
int myPool = NSAutoreleasePool.push();

// Your code here

NSAutoreleasePool.pop(myPool);
//--------------------------------ここまで

しかし、これをどこに記述すれば良いのかがわかりません。
今回自分で新しいスレッドは生成していませんし、、、
とりあえずボタンをクリックされた時のアクションメソッドの最初で
push() して、このメソッドの最後でpop()してみましたが、駄目みたいです。
ほかにもいろいろ試してみましたがどれも解決しませんでした。
やはり、なんらかのバグなんでしょうか?(あまり簡単にバグだと思いたくない
んですよね)
717名称未設定:03/07/06 06:21 ID:bR3cImLu
gcc3.3インストールしても
ProjectBuilder-ターゲット-GCCコンパイラ指定でv3.1とv2.95.2しか選べない・・・
3.3をデフォルトで選ばれてるようにProjectBuilderを設定するにはどうすれば良いでしょうか?

(ふつうにビルドするとヘッダのバージョンについての警告がたくさんでてきて
3.3でビルドになってないっぽい。
ターゲット-詳細設定ビューでCC = /usr/bin/gcc-3.3
CPLUSPLUS = /usr/bin/g++-3.3
GCC_VERSION = 3.x
を追加するとPrefix headerの所で止まってビルドできない。
PREFIX_HEADER=
と、空白にすると
警告も出ず、「ビルドは問題なく完了しました」と表示される。)

718名称未設定:03/07/06 10:47 ID:hfQBuVMX
>>717
3.3の付属ドキュメント(PDF)に全部書いてある。
719名称未設定:03/07/07 10:33 ID:4QoCdxSu
マウスボタンを押していない時のView内のマウス座標が知りたいのですが、
取得できる座標は画面端からの座標だけなのでしょうか?
Viewやwindowはマウスボタンを押した時にしかわからないのでしょうか?

window1枚にNSView,CustomViewの2枚が乗っている状態です。
720名称未設定:03/07/07 10:34 ID:4QoCdxSu
もう一個objCの質問なのですが、音を出したいときこれではダメなようなのですが
どうしていいのか良くわかりません。任意のタイミングで効果音を出したいのですが。
a.h
@interface MyO : NSObject
{
NSSound* s;
}
@end
a.m
#import "a.h"
-(void)awakeFromNib
{
s = [NSSound soundNamed:@"Bang"];
}
b.h
@interface MyV : NSView
{
}
-(void)bangDraw(NSPoint *)p;
@end
b.m
#import "b.h"
#import "a.h"
-(void)bangDraw(NSPoint *)p
{
[s play];
}
@end
721名称未設定:03/07/07 11:03 ID:MtEB9sar
>>720
s = [ NSSound soundNamed:@"Bang" ];
[ s play ];
[ s release ];

を同じメソッド内で処理するようにしよう
722(´・ω・`)ショボーン:03/07/07 11:38 ID:4QoCdxSu
音を鳴らすことが多いので、playだけを別にしたかったのですが。
スミマセン。呼び出し方が解かってません
a.h
@interface MyO : NSObject
{
NSSound* s;
}
-(void)bangSound(int)playSoundNumber;
@end
a.m
#import "a.h"
-(void)bangSound(int)playSoundNumber
{
s = [NSSound soundNamed:@"Bang"];
[ s play ];
[ s release ];
}
b.h
@interface MyV : NSView
{
}
-(void)bangDraw(NSPoint *)p;
@end
b.m
#import "b.h"
#import "a.h"
-(void)bangDraw(NSPoint *)p
{
[bangSound 1 ];
}
@end
723名称未設定:03/07/07 11:52 ID:MtEB9sar
んじゃ、aとかbとかのサウンドの名前や通し番号を引数で渡すようにしたら
ちょっとは汎用性が高まるけれども。
724名称未設定:03/07/07 12:18 ID:dgRhmPVS
>>722
MyVからMyOのメソッドを呼び出そうとしている書き方が間違ってます。
その書き方では呼び出せません。
MyVのインスタンス変数に「MyO *myO;」とか保持させてちゃんと代入すれば、
[myO bangSound:1];
と呼び出せます。あるいは、
NSApplicationのdelegateに音を鳴らすメソッド書いておいて
[[NSApp delegate] bangSound:1];
とか。
あと、soundNamed:で作られたインスタンスは(最初からautorelease
されてるので)releaseしたら駄目。
逆に言うと、ずっと保持していたい場合はretainしなきゃ駄目。
725名称未設定:03/07/07 13:01 ID:Eo2xXSPg
>>722
わざわざMyOにsを持たせずにMyVで作成して保持すれば良いことだと思うが・・・

>>719
グローバル座標からViewの原点を引けば良いんじゃないの?
726(´・ω・`)ショボーン:03/07/07 13:25 ID:4QoCdxSu
+わざわざMyOにsを持たせずにMyVで作成して保持すれば良いことだと思うが・・・ >>Viewが2つあるんです。
+グローバル座標からViewの原点を引けば良いんじゃないの? >>ありがとうございます、調べてみます。
>>724 修正してみました。
a.h
@interface MyO : NSObject
{ NSSound* s; }
-(void)bangSound(int)playSoundNumber;
@end
a.m
#import "a.h"
-(void)bangSound(int)playSoundNumber
{
if (s != nil) {s = [NSSound soundNamed:@"Bang"]; }
[ s play ];
}
-dealloc { [s release]; [super dealloc]; }
b.h
#import "a.h"
@interface MyV : NSView
{ MyO *myO; }
-(void)bangDraw(NSPoint *)p;
@end
b.m
#import "b.h"
-(void)bangDraw(NSPoint *)p
{
if (myO == nil) myO=[MyO alloc];
[myO bangSound:1 ];
}
-dealloc { [myO release]; [super dealloc]; }
@end
あと、delegateも勉強中なので、試してみます。
727名称未設定:03/07/07 13:31 ID:s9qzJUP5
>719

> 取得できる座標は画面端からの座標だけなのでしょうか?
NSViewおよびNSWindowに変換メソッドがあります。
NSViewの場合スクリーンからの直接変換は出来ないようなのでいったんwindowメソッドでNSWindowを取ってきてNSWindowの座標に変換後、
convertPoint:fromView:メソッドでNSViewの座標に変換しなければいけません。
NSViewをカテゴライズして変換メソッドを実装してもいいでしょう。


カーソルの変更のような主導権がユーザー側にある場合は
http://developer.apple.com/documentation/Cocoa/Conceptual/BasicEventHandling/Tasks/HandlingMouseTracking.html
この辺。
でも、ファーストレスポンダーしか反応しないような書き方してるね。
728名称未設定:03/07/07 14:51 ID:dgRhmPVS
>>726
それじゃMyVごとにMyOのインスタンスがそれぞれ作られるんで、
>わざわざMyOにsを持たせずにMyVで作成して保持
するのと一緒。
「MyO→s, MyV, MyV」としたいのだろうが
「MyV→MyO→s, MyV→MyO→s」となっている罠
729名称未設定:03/07/07 15:22 ID:Eo2xXSPg
>726
>myO=[MyO alloc];
myO=[[MyO alloc] init]; ね

MyOに関しては>728の通り。
Cocoa的には
1.MyOをnib上でインスタンス化
2.MyVにMyOのアウトレットを追加
  IBOutlet id MyO;
3.nib上でMyVのアウトレットにMyOのインスタンスを接続
ってのがスマートかも。
730(´・ω・`)ショボーン:03/07/07 18:08 ID:4QoCdxSu
cocoaはさっぱりなんで、勉強になります。
>>727 ADCのDocument読んでコード書いてます。
>>728 そんな罠が(´・ω・`)
>>729 InterfaceBuilderでCreateInstanceすることにより、
コード側で[[MyO alloc] init]をなくせました。音も鳴ります。(`・ω・´)シャキ
しかし、初回だけ[s play]でファイル読み込み?で1秒ほど固まるようです。(´・ω・`)

a.h a.m >>726とおんなじ
b.h
#import "a.h"
@interface MyV : NSView
{
IBOutlet id myOutlet;
}
-(void)bangDraw(NSPoint *)p;
@end
b.m
#import "b.h"
-(void)bangDraw(NSPoint *)p
{
[myOutlet bangSound:1 ];
}
-(void)myAction(id)sender// なんとなくoutletとセットで作ってしまった。
{//どうやって呼び出すんだろう?
}
@end
詰まったらまた質問に来ます。ヨロシクお願いします。
731名称未設定:03/07/07 18:26 ID:d1rXyq3Y
>>730
awakeFromNibというメソッドを調べてみると吉
732(´・ω・`)ショボーン:03/07/08 16:11 ID:UxS+KAy+
>>731
初期処理で音データを一度読み込んでおくというふうに理解しましたが?調べてみます。
>>etc
実際のコードにおとす部分でイロイロ詰まってまして、、また来ます。
733名称未設定:03/07/12 00:15 ID:PMkH8mJ0
HMDTの本ってオンラインで予約できるサイトないのかな?
出版元のサイトにもトップページのコラム以外に情報のってないし・・・。
734名称未設定:03/07/12 00:49 ID:wlWAvniy
オンラインでないとダメなの?
735名称未設定:03/07/12 05:51 ID:L/wAtXpy
今さらCocoa本はいらん。
もうちょっと前なら欲しかったけど、、、
736名称未設定:03/07/12 10:58 ID:0loU3R92
>>735
じゃあ、おすすめの本とか勉強方とかを聞きたかったりして。
737名称未設定:03/07/12 12:06 ID:75/jyeLQ
>>733

表紙の画像はあるのにISBNコードも予価も書いてないし。。。
原稿が遅れてるんですかね?
20日に出版できるんだろうか。。

誤植いやだから初版は避けたいところだけど、
どうせMac関連の本だし第二版なんて出るのはいつの事やら。
Webで誤植フォローしてくれればいいんだけどね。
738735:03/07/12 20:47 ID:L/wAtXpy
>>736
う〜ん、お勧めかぁ。
俺が読んだのは『Jaca&Cocoaプログラミングバイブル』だけなんだよ。
あんまりお勧めはしないけど…。
基本的にドキュメント読んで、いろいろ試してれば分かるでしょ。
どの本読んでも内容は一緒に見える。

ただ、Obj-Cの勉強をしたいなら話は別かもね、俺はJava使いだから。
739名称未設定:03/07/13 07:43 ID:Cg6GJpXR
Cocoaはやっぱり!が復活age
http://www.big.or.jp/〜crane/cocoa/
740名称未設定:03/07/13 09:03 ID:jZAR8wd9
HMDTとの差別化に苦労してるな。
741名称未設定:03/07/13 12:03 ID:CBeln3F4
とあるクラスのソース内で、メソッドの中括弧の外で宣言した変数は
同一クラス内から自由に参照できますよね。

とすると、そのヘッダで、
@interface Hoge : NSObject
{
// この部分
}

ここで宣言した変数はどういうことになるんでしょうか?
外から見えるようになるんですか?
742名称未設定:03/07/14 02:33 ID:g5EsyC6X
>>739
を、ほんとだ。トップからはリンクなさそうだけど(つーかフレームのメニューが固定だから狭い画面なんで見落としてるかもしれんが)。
まだメインの記事は復活したわけじゃないし、740の言う通りHMDTとの差別化に苦労してるっぽいね。

今後どうやってくのかちと様子見(ほれ、PB(そのうちXcode)とIBの使い方はここ見れって言えるサイトに戻るといろいろと楽なんだが)。

#正直blogだけだとゴミ決定だったけど、これで見れるサイトに戻ったな。
743名称未設定:03/07/14 08:47 ID:p25DKQbX
>>741
1.メソッドの中括弧の外で宣言した変数
Cのスコープが適用されるのでグローバル扱いのハズ

2.@interfaceの中
objective-cには、
@public
@protected
@private
の予約語があります。
デフォルトは@protectedです。

744山崎 渉:03/07/15 10:12 ID:34L7LbqJ

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
745名称未設定:03/07/15 11:32 ID:C8aJ3Wyw
NSSoundで、曲と効果音を同時に鳴らせますか?
746山崎 渉:03/07/15 14:02 ID:34L7LbqJ

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
747名称未設定:03/07/15 21:40 ID:4N+pVtMv
良スレ保守ageぽ
748名称未設定:03/07/18 13:03 ID:Z0heQC/5
発売延期アゲ
749名称未設定:03/07/22 22:13 ID:DGhQ4uIZ
Cocoa環境で使える、質が良くてそこそこ高速な乱数生成は、どれを使うのがいいかな?
750名称未設定:03/07/22 23:00 ID:dhxy6CcW
>>749
C言語のsrand( time(NULL) )と、rand()関数使え。
751名称未設定:03/07/22 23:03 ID:DGhQ4uIZ
>>750
rand()なんて質の悪い関数使えないっす
752名称未設定:03/07/22 23:22 ID:dhxy6CcW
>>751
あそ。
そこまでの質を求めて何したいのかはわからんが、
MT法を使えばいい。
753名称未設定:03/07/22 23:29 ID:DGhQ4uIZ
なんで逆ギレされんのかわからん…
754名称未設定:03/07/22 23:30 ID:dhxy6CcW
いやキレてないわけで・・
755名称未設定:03/07/23 00:49 ID:mP07ShDE
というか、逆ギレの使い方が間違っているわけで・・
756名称未設定:03/07/23 21:01 ID:2jOSxer0
そもそも、そういう事を議論するスレではなくて・・・
757名称未設定:03/07/23 22:37 ID:qiSGLmR4
使用目的または評価方法について書かれていない限り
質がいいかどうかなんて他人に判断しようがない。
だから、一番お手軽なrand()を教えてくれたのに
「質の悪い」なんて言い返した751が悪い。

ちゃんとどの程度の質を求めているか書けばよし
758名称未設定:03/07/23 23:27 ID:kfucE81s
randを知らんプログラマーなんているのか
759名称未設定:03/07/23 23:36 ID:RkbW95qi
>>758
居るんじゃない?

というかこの話題もうそろそろやめたほうがいいでしょ。
760名称未設定:03/07/24 00:02 ID:dwFU6cl6
http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/69444
このへんのスレッドが参考になるかも
761名称未設定:03/07/24 02:09 ID:T/GnQOGB
WebKitSDKが落とせないなー。
762名称未設定:03/07/24 13:33 ID:OjXku3Nf
Japan以外なら落とせたー。
763名称未設定:03/07/24 14:41 ID:AQGdguy4
HappyMacintoshDevelopingTime買ってきたけど、読みにくいな。
C言語をマスターしてるのが前提なのにメモリのアドレスとか、ヘッダ
ファイルとは・・・、とか無駄な説明が多い。1〜3章は要らない。
校正も残念ながら不十分で、おかしな日本語や図の貼り忘れとかがある。
説明もあまり適切ではない。読むんなら4章以降でしょう。

ウェブサイトの方は簡潔なのにね。本だとむずかしいのかな?

764名称未設定:03/07/24 15:09 ID:Ml3EfHSH
読んでないから中身についてはなんとも言えないけど、
むしろ「プログラミングをやったことが無い人にも
読めるように作った」とか書かれていなかったっけ。
765名称未設定:03/07/24 16:42 ID:AQGdguy4
>>764
そうなんだけど、多分、そういう人が読んだら3章までで挫折すると
思うよ。それにObjective-Cを使うためにはCがわからなければ無理
だから、全くプログラムを組んだことがない人、ってことはありえない。
Cocoaの初心者という意味だと思う。

1〜3章は入れないほうが良かったと俺は思う。
766名称未設定:03/07/24 17:04 ID:de5d+QNZ
さすがにCの教科書はたくさんあるから、省いてもいいとは思うけど。

第2版は出ないだろうから、ミスはミスのままか……
作者のサイトでエラッタがでればいいか。
767名称未設定:03/07/24 17:05 ID:0CpBdAEu
>>763
で肝心のCocoa部分はどうよ?
768763:03/07/24 17:37 ID:AQGdguy4
>>767
まだ5章読んでるとこだから何とも言えんが、4章からはOK。
769名称未設定:03/07/24 20:05 ID:66kjK9M7
setDoubleAction: でダブルクリックの際の動作を指定してあるNSTableView に
addTableColumn: で動的に NSTableColumn を追加した場合、
追加した NSTableColumn の部分だけダブルクリックに反応しなくなるという問題で困っています。

恐らく、NSTableColumn を追加する際に何か設定を見落としているのだと思いますが、
それが何なのか分かりません。

この問題について、どなたか解決策をご存じの方はおられないでしょうか。

ちなみに、問題の生じているプロジェクトは以下のようになっています。
http://www.geocities.co.jp/SiliconValley-Bay/5171/tablecolumnsample.dmg.gz
770名称未設定:03/07/25 13:07 ID:n912CWwJ
>>769
NSTableColumnがeditableということはありませんか?
771名称未設定:03/07/25 15:20 ID:4xHRE/Dr
[tableColum setEditable:NO ]
で、入力側にDoubleClickを奪われなくなるなり。
772名称未設定:03/07/25 19:23 ID:12KaNJEU
>>770-771
まさにそれが原因でした。
何かに反応するには editable = YES だろうと勝手に理解していたのですが、
どうやら editable の意味を取り違えていたようです。
ありがとうございました。
773名称未設定:03/07/26 05:54 ID:vF4zZNxI
NSMenuあたりについて質問させて下さい。
今、サンプルでステータスバーのメニューにフォルダを登録して
メニューから任意のファイルやフォルダを開けるように
したいと思っています。

しかし、サブメニューを持つNSMenuItemはアクションを設定しても
実際にはアクションがおこりません。なぜなのでしょうか?

NSMenu rootMenu = new NSMenu();
NSMenuItem item1 = new NSMenuItem("item1", action, "");
NSMenu submenu = new NSMenu();
item1.setSubmenu(submenu);
submenu.addItem("item2", action, "");
submenu.addItem("item3", action, "");

こうするとitem1でアクションが起こりません。
なにか、間違っているのでしょうか?

あと、NSMenuItemの setMenu() と setSubmenu() の違い(意味?)が
よく分かりません。だれかご教授おねがいします。
774名称未設定:03/07/26 20:57 ID:78LIaaUj
>>773
通常は MenuItem を選択した場合に action が呼ばれるわけですが、
MenuItem に SubMenu のある場合は、
選択しても何もしないのが正しい挙動なのでは?

あと、NSMenuItem の
setMenu は親メニューを登録する場合に使い、
setSubMenu は子メニューを登録する場合に使うものではないでしょうか。
リファレンスでは setMenu は呼ばないように注意されていると思います。
775名称未設定:03/07/27 05:09 ID:b7ikz8RS
>>773
言いたいことはわかる。

>>774
>選択しても何もしないのが正しい挙動なのでは?

動的作成(というよりオンデマンド)メニューを作りたいからで、
サブメニューからアクション(コールバック)されてメニュー構築
をしたいということでしょう。

Obj-Cで試したことあるけどできないんだよ。
- (void)submenuAction:(id)sender;がコールバックされない。
ドキュメントでは、メニューがオープンされるとき呼ばれるとあるんだが。
たぶん、バグでしょう。分かる人いたら教えて!
他の人たちは、Carbonでやっているはず。
776名称未設定:03/07/27 12:45 ID:bmJ/CjZk
>>775
submenuAction:は使ったこと無いけど、メニューのオープンならNSMenuのupdateメソッドで拾える。
777名称未設定:03/07/27 14:44 ID:Sij2p2Pv
>>774-776
返事ありがとうございます。
なるほど、基本的には出来ないのが”仕様”ということですね。

>他の人たちは、Carbonでやっているはず。
そうなんですか、、Snardみたいなことをしたかったんですが、残念です。

でも、出来ない事が分かったので、別の方法を検討してみます。

重ね重ねサンクスです。
778名称未設定:03/07/28 00:10 ID:pga3ndQw
こういう場合普通、変動がある度にメニューを更新しておいて
プルダウンされる時には既に更新されたメニューにすり変わってるんではないのかな?

まあ、snardを知らないわけだが。
779名称未設定:03/07/28 00:11 ID:Co98QJ54
なぁ、macosx-dev-jpってやたらとスルーされる質問が多いと思わないかい?
780名称未設定:03/07/28 09:37 ID:cyqTWfTH
どんな質問?
スルーされた質問をコピペしてみ、解かることなら答えるよ。

ところで、macosx-dev-jpってどんな雰囲気なんさ?
781名称未設定:03/07/28 09:54 ID:Co98QJ54
いや、漏れの質問ってわけでもないけどさ、
答えられるだけの技量を持った人が少ないのかなぁ…
まぁ漏れは答えられないから黙ってるんだけどさ。

雰囲気としては、普通の技術系MLと同じような感じで大人しいですよ。
782名称未設定:03/07/28 11:23 ID:G+3ASjik
>>778
いや、普通はメニューバーのメニュー項目がクリックされた時に
メニューを再構築するんだと思う。その延長で、サブメニュー
のあるメニュー項目がクリックされた時に、再構築しようって
ことになったのだと推察。

最初にサブメニューも含めて再構築するしかないのではないか?
階層構造深くてそのタイミングで一気に再構築だと時間かかる
のであれば、778の言うようなやり方するか。
783名称未設定:03/07/28 14:15 ID:ISgAOCz3
>>782
質問者は単にフォルダ(=サブメニューあり項目)を選んだら
Finderで開きたいだけのような気もする
784名称未設定:03/07/28 14:34 ID:d3M3OIYK
>>781
雰囲気今は枯れてるのだが、一時期FinderのUIがどーのでフレーム湧きまくりでおおむね逃げちゃったんじゃないかな?>答えるような椰子。

そういう罠はある。ま、MLワチスレで確認してくれ。
785名称未設定:03/07/28 15:36 ID:Co98QJ54
>>784
技術系MLって、なぜかどこもそういう話題で荒れたり感情的になったりするよね。
個人への批判やたしなめの文章をML宛に送信したりとか。

実はアホが多いのかな。
786名称未設定:03/07/28 15:37 ID:IbnNhUdZ
>781
パスワドのことなら、あれ答えるのが難しい。
MacOSX的には「KeyChain使え」何だけどCocoaフレームワークに入ってないから薦めにくいんだよね。
しかも使い方覚えるまでが地獄だし。
かといって「DEC(crypt)使うのが普通」ってのもなんだかなあって思うし。
んでも「MD5ハッシュでもいいよ」って答えるのも違う気がするし。

っていうのを誰かポストしてくれればいいなーなんて夢想してみる。
787名称未設定:03/07/28 19:03 ID:cyqTWfTH
>786
夢想してないで、そのままMLに投げちゃえば良いべさ。
全員が均一なスキルを前提としたような、クロ−ズドなMLじゃないよね?
質問者の書かなかった行間を(勝手に)補完してみたり、派生する(技術的な)余談を振った方が
面白いと思うんだけど。

答える人を暗に固定していってしまうと、発言できる・できないの閾値が
自分のストレスになるよ。
ストレス溜めておくと、フレームが燃えた時に参加したくなるから(w
788名称未設定:03/07/28 20:30 ID:488YHtXW
>>783
正解です。
結局今のところフォルダを表すメニューの子メニューに
『***(フォルダ名)を開く』というメニューを持たせることにしました。
多少操作性が悪くなるけど。。。
789名称未設定:03/07/28 22:16 ID:xdxxBzdY
>>788
CarbonのChangeMenuItemAttributesで、kMenuItemAttrSubmenuParentChoosableを
指定やればできると思います。
ちょこっとやってみたところ成功しました。
ただ、今やってみたところ、nibファイルで作ったメニューには効くんですが、
プログラムで作成したメニューに対しては効きませんでした。。。なんで?

プログラムで作ったってのは、ステータスメニューアイテムを作成して
その中のメニュー項目にたいしてなんですが、なんで効かないんでしょう。。。

クリックできるメニューとできないメニューの表示区別が無いのに
>サブメニューのあるメニュー項目がクリックされた時
に選択されるというUIは、激しく気持ち悪い。

791名称未設定:03/07/29 01:30 ID:TGiN7Ls9
>>789
Carbonなら出来るみたいっすね。
俺、Carbonは全くわからないんすよ。
すいません。
とにかく、情報ありがとうございます。

>>790
そうですか?
いや、そうかもしれないっすね。あんまり考えた事無かったです。
でも、メニュー自体がディレクトリを表すので逆に直感的かな…と。
フォルダのアイコンをメニューにつけたら少しは気持ち悪さが
減りますか?(そういう問題じゃない?)
792名称未設定:03/07/29 20:24 ID:iLKEvWlm
HMDTの記事を参考にして、Cocoaアプリケーションにホットキーの機能を付けようと思うんですが、
HMDTの記事どおりにやっても、エラーが出てアプリケーションが起動しません。
targetの設定で作成したNSApplicationのサブクラスを主要クラスに設定し、
File's ownerのカスタムクラスも作成したNSApplicationのサブクラスに設定してあります。

エラーの内容に
Creating more than one Application
とあるので、どこかでNSApplicationを複数作成してしまっているようなのですが
コードを見直してもそのような記述はありません。

どなたか解決策をご存じの方はいらっしゃいませんでしょうか?
793名称未設定:03/07/29 20:55 ID:M6u2i2+d
HMDT の記事を参考にしたのであれば、
HMDT のサイトの BBS で直接聞いた方が早いんじゃないかと思うが。
794名称未設定:03/07/30 00:30 ID:dnhhDohr

>>792
「ホットキーを登録する」の記事のことだったら、その記事には
詳しい解説があって、
サンプルソースのプロジェクトまで置いてあるみたいだけど。

動いているコードがちゃんとあって、Macがエラーまで指摘しているのに
これで、まともな質問すらもできない奴の
「解決策」なんて、ひとつしか無いとおもわれ。

795名称未設定:03/07/30 00:39 ID:aSUw9N+E
"Learning Cocoa with Objective-C 2nd Edition"

初心者向けにイイよー。初版とはまるっきり別の本だ(w
796名称未設定:03/07/30 05:54 ID:ziA8N7Rf
>>794
もちろん解説も読みましたし、サンプルコードも見ました。
動いてるソースと自分のソースを比べて異なっているのはもちろん
自分のソースにはいろいろと他の処理が入っていることです。
その上で、"Creating more than one Application"というエラーが出るので、
上記のようにどこかでNSApplicationを複数作成してしまっているのでは?と推測しました。
作成したNSApplicationのサブクラスには-initや、+sharedAppliccationといったメソッドも
HMDTの通り、実装してあります。
一応どこかでNSApplicationの+sharedApplicationが呼ばれてしまってるのでは、と思い
カテゴリで自分の作成したNSAplicationのインスタンスを返すように
NSApplicationの+sharedApplicationを上書きしてあります。

自分の書いたコード中で明示的にNSApplicationを作製している箇所はないので
なぜなのか分からない、ということでこちらで質問させていただきました。
確かに長くなるので説明をはしょってあります。上記説明でもはしょってます。
>まともな質問すらもできない奴
で申し訳ない。
>「解決策」なんて、ひとつしか無いとおもわれ。
そう言われちゃしょうがない。

>>793
そうなんですが、こちらの方がいつも利用しているし、返答も早いだろうと思い
こちらに書き込みました。でもおっしゃる通りですね。
今あちらにポストするとマルチになるのでもうしばらく調べてみます。
もし、同じような箇所ではまった方いらっしゃったら情報いただけるとうれしいです。
797名称未設定:03/07/30 06:52 ID:RJThSSEm
NSApplication のサブクラスの +sharedApplication で
既にインスタンスを作成してある場合は改めて init を呼ばないようにしてあれば、
他の場所でいくら +sharedApplication を呼んだところで
"Creating more than one Application" が出るはずないと思うが。
798名称未設定:03/07/30 09:26 ID:GPlobAha
>792,796
インスタンス作ってる部分が被ってるだけだと思うが、、、正直質問が掴めん。

>795
推薦文でも書いてくれ
でも、初版と比較するから良くみえるんじゃねえの?


>794 
毒吐いてないで、アドバイスしてやれよ。

でも、
|他人からパクッったコードと自分のコードを混ぜたら動きませんでした。
|おれさまのコードは(漠然と)動いていたので悪くないです。
|何とかしてください。

っていう香具師を思い出したのは確かだけど(w
799名称未設定:03/07/30 09:35 ID:oDVr8HtE
>792
えーとHMDT見てないので適当に

> targetの設定で作成したNSApplicationのサブクラスを主要クラスに設定し、
> File's ownerのカスタムクラスも作成したNSApplicationのサブクラスに設定してあります。

この場合、

int main(int argc, char* argv[])
{
NSApp = [[AppsSubClass alloc] init];

.......
}

てのが必要だとADCのドキュメントに載ってた気がする。
800名称未設定:03/07/30 13:04 ID:tAMDdiy2
オブジェクトの解放に関する質問なんですが・・・
オブジェクトAの中でオブジェクトBを生成します。
オブジェクトBは一定時間待ってオブジェクトAのメソッドAを呼び出して任務終了です。
この場合オブジェクトBの生成時にretainしないでほったらかし
(というか[[[B alloc] init] autorelease])
にして、作業完了したら勝手にいなくなってほしいのですが、
どのようにすれば良いのでしょうか?
メソッドAでreleaseすれば良いわけですが何となくスマートじゃないような気がして。
やっぱ自分で自分をretain,releaseするのは反則なんですよね?
NSTimerなどはどのようになっているのでしょう?

ちなみに「一定時間待って」というのはあくまで例でして、NSTimerを使え、というのは無しでお願いします。
801名称未設定:03/07/30 15:05 ID:Qx5mIL/y
>>800
質問の意図が全然わからん。

AがBを作成し、
BはAを利用。
Bが作業完了したら、もういらない。
AはBを保持したくない。

ってことだね。Bの作業完了ってのはBのその作業をする
メッセージを呼ぶ奴が誰かいるわけだから、その作業を
要求したやつがリリースすればよいのではないかと思うが。

それと、その間EventLoopから抜けないのであれば、
NSAutoreleasePoolが開放されないから心配いらないし。

どっちにしろ、何がやりたいのかもう少し具体的に説明すれ。
802800:03/07/30 16:47 ID:0YSl6FwL
質問が抽象的すぎましたね、すみません。

えーとですね、BはGUIのコントローラです。
Aでボタンを押されるとパネルを表示して、ユーザがボタンを押したらAに連絡します。
ものすごく簡単に言えばアラートを表示してOKを押させるだけのクラスです。
もちろんAの中でやりゃすむ話ですが、いろいろ使いまわししたいので別クラスにしたわけです。
なもんでパネルを表示したらEventLoopから抜けてしまいます。

うーん、やっぱりAが保持すれば良いだけのことですかねえ?
パネルを表示するのを専用のクラスでなくてNSAppでやっているのが不思議だったんですが、
もしかしてそこら辺の事情もあるんでしょうか?
803名称未設定:03/07/30 21:43 ID:1TrZUxsX
>>802
用が済んだら勝手に居なくなるという動作で言えば、
autoreleaseしている時点で「いつか勝手に無くなります」。

それはイベント処理の終わり(デフォルト)かもしれないし、
自前で作ったARPを解放した時かもしれないけれど、
とにかくいつかは解放されます。
ということで、希望通りの動作をしていることになります。

もしもう使わないことが決定した時点で解放したいのなら、
autoreleaseを使わずに、[ [ B alloc ] init ]で生成して、
不要になった時点で自分でreleaseする必要があります。
ARPに登録したインスタンスをretainせずにreleaseした場合は
実行時にエラーが出ます。
具体的に言うとARPが解放された時点で、存在しないインスタンスを
解放しようとして怒られます。
804名称未設定:03/07/31 00:46 ID:1ZiDg8TA
返事が無いみたいだけど、>>802タンは理解してくれたかなぁ…?

オーナーシップ・ポリシーの考えに従うと、
オブジェクトを生成(alloc)した人(今回はオブジェクトA)が責任を持ってreleaseしないと
いけないことになっています。
だからAが生成したインスタンスBを、Aが解放するのはごく普通のことです。

その手間を省くのが、autoreleaseということです。
805名称未設定:03/07/31 01:22 ID:t2k0wxQA
>>802

NSDocument と Document Window のような関係の
NSDocument 側を生成&消滅させたいってことですね。

まずPanelはModeless Windowですか?
私の場合は、ControllerをPanelを定義するnibでインスタンス化
させてしまいます。そうすると生成&消滅するタイミングを気に
する必要がありません。この方法の欠点は、生成するだけの役割
のクラスがそのnibのFile's Ownerになってしまうってこと。

あとは、そのパネルの終了時のNotificationをクラスAなりNSApp
なりで受け取って、消滅させる。でもその場合にはそいつがクラス
Bのインスタンスを保持していないとだめか。

自分自身に終了ボタンが押された時に自分自身にreleaseか
autoreleaseを送りたくなりますね。

でも、それはクラスAが生成してクラスBが消滅させるっていう
のが嫌っぽい。誰もが納得する正解はちょっと思い付きません。
806802:03/07/31 11:02 ID:GnXX0/3M
レスありがとうございます。

>>803,804
オーナーシップポリシーは一応理解できているはずです。
現状はAでBをretainして、Bが作業完了してAを呼んだ時、Aがsenderをreleaseという方法でやっています。
ただAはBを生成して走らせるだけであとは完全にノータッチなのでもう少しスマートな方法は無いかな、と。

>>804
>NSDocument と Document Window のような関係の
>NSDocument 側を生成&消滅させたいってことですね。
うーん、このたとえでいうとむしろWindow側だと思いますが・・・
NSDocumentがまず存在してそいつがGUIを作るんですよね?

繰り返し気味ですが、目標はNSTimerです。
あいつはscheduledTimerWithTimeInterval...で作成すると、retainしなくてもちゃんとfireまで生きていて、repeats:NOであれば自動的に退場してくれます。
でもBは単純にautoreleaseしちゃうと、パネルを表示してユーザの反応待ちになった時点でイベントループから抜けてreleaseされてしまうので困っているんです。
NSTimerはいったいどうやっているんでしょうかね?

>自分自身に終了ボタンが押された時に自分自身にreleaseか
>autoreleaseを送りたくなりますね。
>でも、それはクラスAが生成してクラスBが消滅させるっていう
>のが嫌っぽい。誰もが納得する正解はちょっと思い付きません。
そうなんですよ。
なんか抜け道みたいなものがあるのかと思ったんですが・・・
無いようなら普通にAに解放してもらうことにします。
807806の続き:03/07/31 11:03 ID:GnXX0/3M
ちょっと話が前後してしまいますが・・・
>私の場合は、ControllerをPanelを定義するnibでインスタンス化
>させてしまいます。そうすると生成&消滅するタイミングを気に
>する必要がありません。この方法の欠点は、生成するだけの役割
>のクラスがそのnibのFile's Ownerになってしまうってこと。
これってFile's Ownerはautoreleaseしちゃうんですか?
で、宙ぶらりんになったControllerをNotificationを捕まえてreleaseするということでしょうか?
でもFile's OwnerをreleaseしちゃったらControllerも消えますよね・・・
Contorollerを生成するクラスを間に挟むのはどういう意図なんでしょうか?
私はControllerをPanelのnibのFile's Ownerにしていますが・・・

アルファベットばっかりでわけ分かんないですね。(^^;
808名称未設定:03/07/31 12:11 ID:ZhNM6pYt
>806
> 繰り返し気味ですが、目標はNSTimerです。
> あいつはscheduledTimerWithTimeInterval...で作成すると、retainしなくてもちゃんとfireまで生きていて、>repeats:NOであれば自動的に退場してくれます。

あれはちょっと違う。NSRunLoopが一枚かんでます。
内部的にどうなってるか詳しくは調べてはいませんが、

1,NSTimerインスタンスを生成。
2,カレントランループに1を登録。(ここまでがscheduledTimerWithTimeInterval...内)
3,カレントランループが時間に到達したNSTimerオブジェクトにfireを送信。
4,NSTimerオブジェクトがfire内でrepeatを調べ、NOなら自身をinvalidate。
5,カレントランループがinvalidateされたNSTimerオブジェクトをrelease。(っていうかNSArrayから削除してるだけかも)

ていう流れです。
NSTimerは自身をinvalidateするだけで実際に解放するのはNSRunLoopってことです。
(解放と言うかオーナーシップの放棄ね)
809名称未設定:03/07/31 12:36 ID:t2k0wxQA
>>807
>これってFile's Ownerはautoreleaseしちゃうんですか?

そうです。っていうか、File's Ownerは自分でreleaseしてしまいます。

>で、宙ぶらりんになったControllerをNotificationを捕まえてreleaseするということでしょうか?

で、Controllerはなんもしません。Notificationっていうのは別のアイディア。

>でもFile's OwnerをreleaseしちゃったらControllerも消えますよね・・・
>Contorollerを生成するクラスを間に挟むのはどういう意図なんでしょうか?
>私はControllerをPanelのnibのFile's Ownerにしていますが・・・

ちょっと、誤解されているようです。
MyFactoryClass/MyControllerを独自に作って、nib上には
File's Owner = MyFactoryClass/FirstResponder/Panel/MyController
があるようにします。MyControllerはIBのインスタンス化で作ったものです。

プログラム中からは[[MyFactoryClass alloc] init];して、
MyFactoryClass中でloadNIbNamed:owner:します。
Panel/Controller作ったら、MyFactoryClassはいらなくなるのでrelease。
nibで作ったインスタンスの廃棄処理はプログラム的には気にしなくて
よかったのですよね?だからControllerは必要な限り存在しているし
必要なくなったら破棄されるってことでやっています。

苦肉の策なのでもっと良い方法あれば私も変えたい。
810名称未設定:03/07/31 12:46 ID:6M7ykKQe
あの、盛り上がってるところ申し訳有りませんが、
質問させて下さい。

Cocoaアプリのinfo.plistのNSBGOnlyに1をセットすると
ドックにドックを表示せずに起動出来ますよね。
しかし、こうして起動したアプリケーションに対してキー入力
が出来ません。これはこういうものなのでしょうか?

例えばテキストフィールドに文字入力が出来ない。
Command + W でウィンドウが閉じない…等。

これは仕様なのでしょうか?
アプリケーションがアクティブにならないからキーイベントを
受け取れないというのであれば納得できるのですが、出来たら
受け取りたいです。良い方法は無いでしょうか?

それともバックグランドアプリで文字入力はタブー??
811名称未設定:03/07/31 13:29 ID:MA7IMief
>>795
そんなにがらっと変わったんだ。
初版買っちゃったんだよな〜。うかうかしてる間に日本語版とか出てるし(死
でもあんまたいした事なかったんだよね、あれは。

O'Reillyの新刊もそう考えるといいのかなぁ。
812名称未設定:03/07/31 13:31 ID:sXz6VM9t
>>810
NSUIElement
813806:03/07/31 17:59 ID:Z8iT+W5Z
>>808
ほほう、NSRunLoopが管理してたんですか。
勉強になりました。
そう特殊なことをやっているわけではないんですね。

>>809
>nibで作ったインスタンスの廃棄処理はプログラム的には気にしなくて
>よかったのですよね?
え、そうなんですか?
ウィンドウが閉じられたらnib上のインスタンスが全部解放されるとか?
(そういわれてみるといままでもそうだったのかな)
それならBをnibでインスタンス化しておいて、
FactoryClassを作成してすぐにautoreleaseで良いのかも。
作業が完了したら自分でパネルを閉じるので、
そこで(そのうち?)nib上のインスタンスは全部解放してもらえる、と。
よく分からないんで、あとでテストしてみます。
814名称未設定:03/07/31 21:36 ID:6M7ykKQe
>>812
サンクスコ!
最初クラス名かと思って探しちゃいました…。
思ってた事が出来ましたよ( ´Д⊂ .... メグスリ タゾ. ゴルァ゙
815名称未設定:03/07/31 21:59 ID:uAmd+BBO
>>813
>ウィンドウが閉じられたらnib上のインスタンスが全部解放されるとか?
Nibの読み込みにNSWindowControllerを使うとそうなる。
NSBundleから読み込むと自分で解放する必要有り。

……と、DevTool付属のドキュメントに有ったと思う。
816815:03/07/31 22:03 ID:uAmd+BBO
817名称未設定:03/07/31 22:38 ID:Z8iT+W5Z
>>815,816
おおー、なるほど。
そういうことでしたか。
WindowControllerはまだ良く分かってないんでちょっと読んでみます。
どうもです。
そういえばヒレガス本かなんかでもこれ説明されてるんですよね。
今度立ち読みしときまふ。
818名称未設定:03/08/01 00:11 ID:j+QpMnPT
>>815,816

ありがとん。自作プログラム修正しなくちゃ。
819名称未設定:03/08/01 16:50 ID:7B1ZjzpR
質問です。
ドロワーってユーザーが自由に大きさを変えられますが、これの大きさをAutoSave
するにはどうすればいいのでしょうか。
NSWindowの、-setFrameUsingNameみたいなのもないみたいですし・・。
820名称未設定:03/08/01 21:28 ID:y8unTgrE
AutoSaveは無理なんじゃないの?
自分で保存しようよ。
大した手間じゃないし。
821名称未設定:03/08/01 22:57 ID:MbBgXFR2
今JAVAでCocoa用のライブラリを作ろうとしてるんですけど、
ProjectBuilderでプロジェクトを作らずに普通にCocoaライブラリに
クラスパスを通してコンパイル-テスト(JUnit)を行うとコンパイルは普通に
通るのですが、テスト時に _NSAutoreleaseNoPool() エラーが多数出力されます。

それでもテストには成功するのですが、精神衛生上よろしくないっす。
多分正常な(Cocoaが内部的にやってくれている)処理を踏んでいないので
起こるのだと思われます。解決方法は無いものでしょうか?

どなたか、Cocoa-Javaライブラリを作った方いましたら体験談
が聞きたいっす。
822山崎 渉:03/08/02 02:06 ID:pAaIAblN
(^^)
823名称未設定:03/08/02 09:27 ID:ATjiMNLT
>>821
>通るのですが、テスト時に _NSAutoreleaseNoPool() エラーが多数出力されます。

よくわかりませんが、そのライブラリの入り口で
NSAutoreleasePool.push();
出口で
NSAutoreleasePool.pop();
してやればどうでしょうか?
824名称未設定:03/08/02 11:55 ID:9tDPnMYy
現在Macがインターネットに接続されているかどうか調べるにはどうしたら良いんでしょうか?
Cocoa、Carbonどっちでもいいんですが
825名称未設定:03/08/02 18:41 ID:09kWCvYP
>824

NSTaskでPingを使ってみたら?
826名称未設定:03/08/04 11:08 ID:JJk6Ww9z
以前は変数はメソッドの先頭で宣言でしなくてもエラーにならなかったのに、
いつの日からかparse error before '*' と出るようになりました。
NSString *string;
NSLog(@"test");
string = @"string";
は問題ないのに
NSLog(@"test");
NSString *string = @"string";
だとエラーになります。なぜだか分かる方いないでしょうか?
827名称未設定:03/08/04 11:29 ID:TiNF3m10
>>826
そういうもんです。

変数の宣言は必ずメソッドの最初でやるべき。
なぜと言われてもコンパイラのバージョンが挙がったからでないの?
別にNSLogの順番が変わったところで対した問題でも無し。
828826:03/08/04 11:40 ID:JJk6Ww9z
>>827
そういうもんなんですか... いつからこうなったんでしょう。
僕みたいな初心者が参考書を見ながらプログラムする時困るんじゃないだろか。
829名称未設定:03/08/04 12:07 ID:TiNF3m10
どこでも好き勝手なとこで変数がでっち上げられちゃうほうがよほど困るよ
Perlとかな
830名称未設定:03/08/04 12:16 ID:y4WqvXs7
>>827
> 変数の宣言は必ずメソッドの最初でやるべき。
この仕様もどうかと思うんだけどね・・
変数の宣言が集中しちゃってややこしくなっちゃう。
831名称未設定:03/08/04 12:25 ID:TiNF3m10
一時的に使う変数を最初に宣言するのが嫌なら、
その一時的に使うルーチンを別の処理単位に分けたほうがいいよ。
メモリの動的管理という意味からも、そのほうがいい。と、思う。
832名称未設定:03/08/04 15:02 ID:2KrYbm7N
>>825
gcc3.3 (Dec2002gccUpdater) 入れてない?
デフォルトコンパイラが gcc3.3 になってると、Project Builder が gcc2.95
を使うようになって、ISO C99 の拡張が無効になる、ということみたい。
とりあえず、
gcc_select 3
すればよい。詳しくはアップデータ付属のドキュメントを読む。
833名称未設定:03/08/04 20:18 ID:k7WfjE9d
>>830
メソッドの途中でしか使わない変数は、中括弧で囲ったブロックの中に閉じこめれば
いいと思うけどな。
下手に処理単位を分けると却って引数の受渡しでごちゃごちゃする怖れもあるし、
この方法が個人的には気にいってる。
834名称未設定:03/08/05 08:53 ID:10KRv2tD
>>824

TechNote 1145が参考になるかと思います。
原理はEntpointを作成してみて確認するという
無理矢理な方法で確認しています。

それか、System Configuration Frameworkのドキュメントを見て下さい。
原理はやっぱりDynamic Storeに有効なIP Addressを持つものが
あるかどうかを調べると言う、
やっぱり無理矢理だなあという方法を使っています。

Jaguarだとこれが限界ではないかと思います。
835824:03/08/06 13:06 ID:cLUQBlNu
>>825,834
レスサンクスです&遅レスすいません
ストレートに調べることはできないみたいですねえ。
API一発で調べられるのかと思ってたんですが・・・
何も考えずとりあえずつないでみるってのが一番手っ取り早いのかもしれませんね。
836名称未設定:03/08/06 16:18 ID:JFTNy68Y
"Learning Cocoa with Objective-C 2nd Edition"で勉強している所ですが、
初版と比べてやっぱりずいぶん分かりやすくなってますね。
Currency Converter Tutorialのくだりは初版ではわかりにくかったのが、
ずいぶん説明が整理されて、ワシのようなド素人でも
何とかなるレベルになってました。
英語で文献を読める人なら、お勧め、って感じです。
837名称未設定:03/08/08 22:58 ID:6SrqXNAY
838名称未設定:03/08/11 00:28 ID:zp5/eJSH
マルチウィンドウなアプリを作る場合にですね、
新しいウィンドウを動的にいくつも生成したいわけです。

この場合、Interface Builderではどのようにすれば、実現できますか?
同じnibファイルに新しいウィンドウとして作ると、最初からインスタンス化されたままに
なりますよね?

あと、他のアプリを覗いてたら、複数のnibファイルに別れてるんですけど、
これはどうやって読み込むんでしょうか?
839名称未設定:03/08/11 06:35 ID:Oj26dXoC
一般的な、ファイルの中身をウインドウに表示するものなら
プロジェクト新規作成時にDocument-basedを選べば良い。
840名称未設定:03/08/11 07:58 ID:8TwafDpy
>838
>あと、他のアプリを覗いてたら、複数のnibファイルに別れてるんですけど、
>これはどうやって読み込むんでしょうか?
NSBundleのloadNibNamed:owner:
841名称未設定:03/08/11 11:02 ID:zp5/eJSH
うーん、画像ビューワーなんですが、画像を表示するウィンドウの他に、
操作用のウィンドウ(これが本体)が必要なんですよ。

そういうのって Document-basedでいけるんですかね。
842名称未設定:03/08/11 11:44 ID:4y8SFX1s
NSWindowControllerのinitWithWindowNibName:のが適当じゃない?
843名称未設定:03/08/11 13:36 ID:Oj26dXoC
>操作用のウィンドウ(これが本体)
所謂、「インスペクタ」だと思っていいのかな?
MainMenu.nibでユーティリティウインドウを作ってもよさげな感じがするけど。
844名称未設定:03/08/11 16:44 ID:zp5/eJSH
>>842
それっぽいです。助かります。

>>843
そうかもしれませんけど、私にはそれが何か良く分かりません…どうもすいません。
ところで、Document-basedでのアプリの作り方がまるで分からないんですが
別に使わなくても出来そうな気もします。どうなんでしょう?
845名称未設定:03/08/11 17:06 ID:NZvMm39u
>>844
> 別に使わなくても出来そうな気もします。どうなんでしょう?
使わなくても出来るけど使ったほうが楽チン。
846名称未設定:03/08/11 17:41 ID:zp5/eJSH
うーん、HDMTやらよしきを見て見たんですけど、
今のところとりあえずQuickTime(OSかな?)が提供してくれてる画像ルーチンを
使えればいいので、Document-basedだとファイルタイプとか拡張子とか確認して登録するのが
面倒くさい分不利な気がしてきました。

ということで今回は普通のCocoaアプリとして作ったほうが面倒が少なそう…
847名称未設定:03/08/11 17:44 ID:4uyENI11
>846
QTが再生できる全フォーマット用のファイルタイプがあったはず!

でも忘れた(泣
848名称未設定:03/08/11 18:01 ID:zp5/eJSH
だ、ダメじゃん…w

どうでもいいけど、PICも展開できたらいいかなと思って
「PIC 稲妻展開」で検索したらX68kへの愛が感じられるテキストがヒットして
泣けてきましたよ。
849名称未設定:03/08/12 00:12 ID:lemn98gD
Interface Builderで、ウィンドウのサイズが一定より小さくならないんですが、
これはIBの仕様なのかOSの仕様なのかどっちなんでしょう?
この限界を突破してもっと小さいウィンドウを作りたいんですがどうすればいいですか?
850名称未設定:03/08/12 04:33 ID:3swArVMy
サイズの最小を変更しよう!
そうしよう!
851名称未設定:03/08/12 05:11 ID:LIY+RbFP
NSTextField に入っているのが、文字か数字(整数)か判別したいんですけど
決まったやり方みたいなのはあるのでしょうか?
今はintValueで返って来た値をみて、0が入っていた場合や
全角の数字が入っていた場合を始めに振り分けた上で判断するしかないのかな
と思っているのですが・・・
852名称未設定:03/08/12 06:49 ID:0XfSgYbZ
もっと良い方法があるだろうと思いつつも NSCharacterSet を使った方法。

-(BOOL)isIntegerString:(NSString*)string{
NSCharacterSet *set=[NSCharacterSet decimalDigitCharacterSet];
int i;

for (i=0;i<[string length];i++) {
if ([set characterIsMember:[string characterAtIndex:i]] == NO) return NO;
}

return YES;
}

NSCharacterSet の使い方がいまいち分からないです。
853名称未設定:03/08/12 07:04 ID:XNTyuzEO
>>851

NSScannerのscanInt:を使いましょう。
854名称未設定:03/08/12 07:22 ID:0XfSgYbZ
NSScanner の scanInt: だと、
例えば @"10a" といった文字列の場合に YES が返ってくるような気もしますが。
855853:03/08/12 08:10 ID:XNTyuzEO
>>854

YESが返ってきますね。失礼しました。
では、こんな方法でどうでしょう?
-(BOOL)isIntegerString:(NSString*)string{
NSCharacterSet *set=[NSCharacterSet decimalDigitCharacterSet];
NSScanner *scanner=[ NSScanner scannerWithString:string ];

if([ scanner scanCharactersFromSet:set intoString:nil ] && [ scanner isAtEnd ]) {
return YES;
} else {
return NO;
}
856名称未設定:03/08/12 10:15 ID:I+YZR2OA
>851
何をするために判別するのでしょう?
目的によって最適な方法は変わると思いますが。
857名称未設定:03/08/12 11:51 ID:lemn98gD
>>850
ありがとう。できました。

ところで、Project Builderについてなんですけど、
ClassesとOther Sourcesとあって、Interface Builderから作ったソースやヘッダは
Other Sourcesに置かれるんですが、じゃあClassesには何を置くとか、そういう使い分けは
基準はあるんですか?
858名称未設定:03/08/12 12:36 ID:Z1N1NXbr
>>857

たまたまでは?最後に選択したファイル/グループによって
その時々でファイルの作成場所は違っているようです。
859851:03/08/12 18:17 ID:HHx7bqnA
>>852, 855
ありがとうございます。そんな方法があったとは!
NSCharacterSetは、まったく気が付きませんでした。ドキュメント読み直さねば。

>>856
NSTextFieldの入力を見て、数字入力と文字入力の振り分けがしたいのです。
数字だった場合は、リストに登録してある番号に、その数があるかどうかを見て
あった場合は、その番号に対応する項目名を自動入力したいなーと。登録が
なかった場合は、エラーを返して入力を促します。
文字列だった場合は、リストに重複がないかを見て、新しい項目名だった場合は
追加登録するという流れです。
860名称未設定:03/08/12 18:54 ID:0XfSgYbZ
>>859
一つの TextField に複数の機能を持たせた場合、
画面はシンプルになりますが、頭の中は逆に混乱してしまうので、
そこらへんを検討された方が良いのではないかとも思います。
861名称未設定:03/08/12 21:33 ID:4hIyEcXi
>>859
そう言う用途なら単に最初の1文字が数字かどうかで分けても実用上問題ないと思うけど。
862名称未設定:03/08/12 21:40 ID:lemn98gD
>>867
えっ、そうですか?
PBから、適当なところをクリックして新しいファイルを作ると好きなところに置けますけど、
IBから(PBでMainMenu.nibをダブルクリック)だと今まではOther Sourcesにしか
ファイルが置かれたこと無いんですけど。
863名称未設定:03/08/13 01:29 ID:dO1suOK8
>>862
確認のため、今試したけどIBからソース書き出しする前に
Classグループを選択しておいたら、ちゃんとそこに書き出された。

環境は?こっちは10.2.6 + Jul 2002
864名称未設定:03/08/13 01:41 ID:potkRvDl
>>863
ありがとう、意味が分かりますた。
何となく常にResourcesを選択していた(多分main.mがあるから)のが、
間違いの始まりだったのか…
普通に考えたら、クラスの定義するファイルなんだからClassesに置くのが当たり前ですよね。
865名称未設定:03/08/13 02:31 ID:potkRvDl
と思ったら、Classesを選択してから書き出しても
やっぱりOther Sourcesに書き出される…なんでだ!?

こちらは 10.2.6 December 2002でおます。
結局生成してからClassesにドラッグしてまふ…
866名称未設定:03/08/13 06:59 ID:AAHCYJID
Cocoaでわからないことがあります。
・ファイルがエイリアスであるかどうかを判別する方法と、
・エイリアスだった場合、元ファイルのパス
誰かご教示下さい。
867名称未設定:03/08/13 07:34 ID:BXHerPj4
868名称未設定:03/08/13 07:56 ID:BXHerPj4
>>846
>Document-basedだとファイルタイプとか拡張子とか確認して登録するのが面倒くさい
NSDocumentを使わないアプリでもファイルタイプとか拡張子を登録しないと開けない
ので変わりはない。
何でも開ける設定にして自前で判断するにしても、NSImageで表示させるつもりなら、
NSApplicationのdelegateで

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
if([NSImageRep imageRepClassForFileType:[filename pathExtension]]){
[[NSDocumentController sharedDocumentController]
openDocumentWithContentsOfFile:fileName display:YES];
}
return YES;
}

とかすればDocument-basedで問題ない。なぜそんなにDocument-basedを嫌う
869名称未設定:03/08/13 15:38 ID:FOdqydDA
>>846,868
ドロップされたファイルを全部受け取りたいなら
ファイルタイプを"*"にしときゃいいだけだと思うが。

>なぜそんなにDocument-basedを嫌う
単にOSの仕組みを知らないだけだろう。
そもそもDocument-basedにしないと
DnDやファイルオープンダイアログでの
フィルタリングは効かないからな。
870866:03/08/13 18:14 ID:3/Oef21X
>>867 サンクスコ
871名称未設定:03/08/13 20:24 ID:GR0Rf7t5
> そもそもDocument-basedにしないと
> DnDやファイルオープンダイアログでの
> フィルタリングは効かないからな。

嘘。
NSOpenPanelを100回読め。
872851:03/08/14 03:24 ID:7jqNoBtb
>>860
ありがとうございます。そこが結構気になっている部分なんです。
ただ、同じ一つの項目を入力させるのに2つのフィールドがあるのも
混乱する所かなーと思って、とりあえず二種類作ってみることにしたのですが
いまだ結論は出ず。
873名称未設定:03/08/14 22:15 ID:XymbVs6B
NSOpenPanelのテストとして、こういうのを書いたんですけど、
なぜかファイルを選ぶとバスエラーで終了します。
キャンセルした場合は問題ない模様。
どこかおかしいところはある?

- (IBAction)openFile:(id)sender
{
NSOpenPanel *op = [NSOpenPanel openPanel];
int result;

result = [op runModalForDirectory:NSHomeDirectory() file:nil types:[NSImage imageFileTypes]];
NSLog(@"result = %@", result);
}
874名称未設定:03/08/14 22:22 ID:XymbVs6B
ごめん、NSLogのフォーマットを %@から%dにしたら直ったよ…
intにdescriptionなんて搭載されなかったよ…
875あぼーん:あぼーん
あぼーん
876名称未設定:03/08/16 19:17 ID:K0Oq6bvQ
いつもはMenuItemのactionに接続されてて、senderのtagを読み取って
処理を分けてるメソッドがあるんですけど、このメソッドをコードから使う方法って
ありますか?

コードから直にそのメソッドを呼び出したらsenderにtagがないことになるし、
かといって、NSMenuItemには「actionを送れ!」というメソッドもないみたいだし・・・。

おわかりの方がおられましたらお教え下さい。
877名称未設定:03/08/16 19:37 ID:6EbzeRpn
呼び出し元のオブジェクトに -(void)setTag:(int)value; と -(int)tag; を実装して
-(void)setTag:(int)value; で tag の値をセットした後で
sender に呼び出し元のオブジェクトを渡しつつ NSMenuItem の action メソッドを呼ぶとか。
878名称未設定:03/08/16 19:39 ID:2hOZdQ4k
>>876
-(IBAction)myAction:(id)sender{
//とかやって
[self myMessage:[sender tag]];
}

-(void)myMessage:(int)tag{
//直接こっちを呼べばいいのでは
}
879876:03/08/16 20:02 ID:K0Oq6bvQ
>>877,878

ありがとうございます。
どちらもなるほどー!といった感じです。解決策は一つではないと言うことですね。
ひとまずは>>878さんの方法でいってみることにします。ありがとうございました。
880名称未設定:03/08/17 00:03 ID:cA2KncTA
プログラミングなんて一度もやったことないおいらが
自分のオナニーのためだけに画像ビューアー作るよ!
881名称未設定:03/08/17 01:52 ID:niIZ1BXS
>>880
gangare!
882名称未設定:03/08/18 00:05 ID:QxQeZONZ
すいません、質問です。

ビユーのRect情報の取得なのですが、frameを使って取得すると、
実際のサイズより大きな情報を取得してきてしまいます。
やりたいのは実サイズの取得なのですが、どのメソッドを使えば良いのか、
探しましたが見つかりません。

インターフェースビルダーで言うところの、Layout Rectに相当する
情報です。よろしくお願いいたします。
883名称未設定:03/08/18 00:38 ID:7RxquvZG
bounds のこと?
884882:03/08/18 01:33 ID:QxQeZONZ
boudsだと、以前やった時はframeとサイズ的には同じ値を
返してきたので違うのです。
もしかして一発では無理なのかもしれないのですが、どうやれば
できるのかが分かりません。
885名称未設定:03/08/18 02:54 ID:SCMqRkkU
>>884
残るはvisibleRectかな
NSScrollViewに入ってるならdocumentVisibleRectやらNSClipViewのframeやら?
おいらもちゃんと理解してないですけど(´д`;)
886882,884:03/08/18 04:08 ID:QxQeZONZ
相手はNSButtonなのです。
ご紹介頂いたvisibleRectも以前試してみたところ撃沈でした。
NSScrollViewのdocumentVisibleRectやNSClipViewのframeは
相手がNSButtonなだけにダメそうです。
簡単なことのように思うのですが、なぜ一発呼び出しができないのか...
Cocoaってたまに理解に苦しむことがあります。
887名称未設定:03/08/18 09:04 ID:0rnO+OwB
>882
frameであってる。多分描画してある部分とのずれの話だと思うけど。。。

たとえば、IBでNSButtonを配置後、インスペクタのカスタムクラスを独自クラス(例えばCButton)に変更し、

@interface CButton : NSButton
@end

@implementation CButton
-(void)mouseDown:(NSEvent*)event
{
NSLog(@"Click!");
[super mouseDown:event];
}
@end

を実装してやって、ボタンの周囲をクリックしまくってみなはれ。
DevToolに入ってるPixel(だったっけ?)を起動してやると細かいところまで分かるよ。
888883:03/08/18 09:54 ID:U6ightR6
>>882
NSButtonのIBでいうLayout Rectなら、frameから12ずつ引けばいいんじゃない?
Layout Rectの数字はIBがボタンの影の部分とかの大きさを抜いて、
レイアウト用に出してる数字じゃなかったっけ?

間違ってたらスマソ
889名称未設定:03/08/21 18:38 ID:rLCFQVxz
IBのファイルみたいにファイルをバンドルにして保存したいのですがどうしたらいいのでしょう?
NSWorkspaceのisFilePackageAtPath:で判定はできるんですが、セットの方法が分かりません。
890名称未設定:03/08/21 22:17 ID:VLE3j2+x
>889

1,info.plistの書類のタイプで「ファイルパッケージ」にチェック。拡張子を指定。
2,NSFileWrapperを使う。この時ファイルネームに1,で指定した拡張子を使用する。

拡張子ではなくファイルタイプでも行けるかもしれませんが、試してません。
891名称未設定:03/08/21 22:55 ID:Oz1Jgrhf
NSImageViewで質問

1.setImageでNSImageを描画する
2.NSImageViewを別の場所へ動かす
3.setImageで別のNSImageを描画する

すると前(1)に描画したNSImageが残っているんです。
これを消すことはできないんでしょうか?
892名称未設定:03/08/21 23:01 ID:ZKzVSuK6
-(void)display; を呼んで強制的に再描画するとか。
893名称未設定:03/08/21 23:18 ID:Oz1Jgrhf
>>892
ありがとうございます。なんとかなりました。いや、NSWindow側とは。。。
NSImageViewもしくはNSImageの問題だと思って、ずっと「メモリの解放なのかな?」とかうんうん唸ってました
894名称未設定:03/08/21 23:21 ID:VLE3j2+x
>891
>1.setImageでNSImageを描画する

NSImageView* target; // 既に動かすViewが入っているとする。
[[target superview] setNeedsDisplayInRect:[target frame]];

>2.NSImageViewを別の場所へ動かす。
>3.setImageで別のNSImageを描画する

この順で。
895名称未設定:03/08/22 00:13 ID:OgneJbil
>>894さん、わざわざありがとうございます
実はJava使いなのでObj-Cの解釈が間違っていたらすみません

NSImageViewのスーパークラスであるNSView
その中に用意されているメソッドsetNeedsDisplayInRectを呼び出している

ってことだろうと解釈しました。
で、さっそくCocoaリファレンスを見て引数など確認。
さぁ、いざ使ってみるかな。。。。「シンボルが解釈できません」

なぜ?と思い本家appleDevelopersに行ってJava用リファレンスを見てみると、
「setNeedsDisplayInRectがない!!」
>>http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Java/Classes/NSView.html#//apple_ref/doc/j_ref/NSView

Java萎え〜。残念です。
>>894さん、親切にありがとうございました。
896名称未設定:03/08/22 00:40 ID:LTbImdDl
Javaでしたか。リファレンス見てみました。
Javaの場合多分こうなります。

terget.superview().setNeedDiplay( target.frame() );
897名称未設定:03/08/22 00:55 ID:OgneJbil
>>896
夜遅くなのにありがとうございます
target.setNeedsDisplay(target.frame());
でなんとか消えました。少し早くなったようです。
898889:03/08/22 10:40 ID:ThM6NSFw
>>890
サンクス!
Document Basedではないので書類のタイプ設定してもどういう風に使えばいいのかよく分かりませんが、それは自分で調べます。
899名称未設定:03/08/25 19:09 ID:ju0ihoQV
IBじゃなくてプログラムでアウトレットを設定するやりかたがわかりません!! Cocoaはやっぱりで昔解説されてたような気がするの ですがもう見られません!! すみませんが教えて下さい!!
900名称未設定:03/08/25 20:07 ID:qK6Ad3nC
Cocoaの大抵のクラスはsetXxxで
// Xxxはアウトレットの名前
行けたと思うけど。
901名称未設定:03/08/25 23:43 ID:7l9ov3oK
>>899
>アウトレットを設定

意味がわからない??
902>>899:03/08/26 00:07 ID:rV6cWmPM
クラスのヘッダファイルに

IBOutlet NSHogehoge *hoge;

を追加してやって、IBで読込んだらいいんじゃ?
903名称未設定:03/08/26 03:04 ID:FxHxecdd
萩原本に書いてるので立ち読みしてきたら?
904名称未設定:03/08/27 00:29 ID:Om2pRXft
どうも最近癖で
NSBeep(1);
と書いてしまう....
905名称未設定:03/08/27 00:32 ID:Om2pRXft
Cocoa ってゲーム作るときはやっぱ OpenGL 使うしかないの?
906名称未設定:03/08/29 06:32 ID:KuLaet3t
>>905
しかないってことはないけど(NSImageをぺたぺたやればグラフィックはできるし)、
OpenGLを使うのはいい方法なんじゃない?
2Dでもコーツイクストリームで高速そうだしー。
詳しい人の意見も聞きたいなあ。
907名称未設定:03/08/29 19:19 ID:g3UFcZWJ
RGBの画像データとグレースケールのアルファチャンネルデータがありまして、
この2つをプログラム内で合成したいのですが、どのような方法がありますでしょうか。
908名称未設定:03/08/29 20:49 ID:RY31j0Bk
GRBとAをGRBAにする。
909907:03/08/30 09:11 ID:dTk5i4WI
>908
それがわからないんです。>GRBとAをGRBAにする

RGB画像とアルファ画像をそれぞれNSImageに読み込んで
compositeメソッドで合成しようとしてるんですがうまくいきません(アルファ画像が白黒画像として解釈されてしまう)
なにか根本的に間違ってるんでしょうか。
910名称未設定:03/08/30 23:41 ID:ZaPdnmBR
ところでCocoaから気軽に使える正規表現ライブラリってないですか?今は
regex(3)を地道に使ってるけどやっぱNSStringを受けてくれる奴が欲しいです。
みんな自作してるのかな?
911名称未設定:03/08/31 00:17 ID:6hhW/fCE
Cocoaって、nibファイル無しでWIndowを描画するってできるんでしょうか。
できるのならメソッドの書き方を教えてください。
今、とあるソフトのプラグインを書いていて
そのプラグインからWindowを呼び出したいのです。
912名称未設定:03/08/31 01:01 ID:CbGq0nL6
>>910
AGRegx or MOKit
913名称未設定:03/08/31 01:15 ID:2wCslq7m
>>910
日本語の使える正規表現で困ってたけど、鬼車と自作ラッパーで
検索アプリ作れた。一度やってみなよ。
基本的な関数のみだけど、いろんな表現形式が使える。
修正BSDライセンスでGPLみたいなウィルス性はないし、フレームワークにして
思い切って公開してしまえば神になれる。
暇なきゃ必要な分ラップすればいいだけ。実用になる。
漢字コードもEUCとかUTF8とかShiftJISがあるからマジでお勧め。
914名称未設定:03/08/31 01:21 ID:Wpx5ewRW
>>911
ソフトのプラグインを書ける人が、どうしてこんな質問できるのかが知りたい。
915名称未設定:03/08/31 02:01 ID:6hhW/fCE
>>914

carbonならできるんだけどね。
Cocoaがわからんのですよ。
そんなに楽勝な事なのか・・鬱。
916915:03/08/31 02:08 ID:6hhW/fCE
じゃぁ、carbonで書けっていうことになりそうなんで
書いておきますが、Carbonでwindow描くと
ホストがcocoaだからなのか虹がぐるぐる回るもんで
cocoaで描くと上手く行くかなと思って聞いてます。
917名称未設定:03/08/31 03:25 ID:YH95XynT
>>915
CocoaのBundleプラグインならNib使えるんでは?
918名称未設定:03/08/31 06:06 ID:ZxK3gomO
>>913
そこまでやってるなら913が神になってくれ
919名称未設定:03/08/31 06:20 ID:O76O4pmJ
>>915
いわゆる荻原本に Interface Builder 使わない Window の作り方が書いてあったような。
920名称未設定:03/08/31 07:12 ID:cijs1LIB
>>915,919
荻原本には書いてあるね。

ざっくり言えば、
NSWindow *window = [[NSWindow alloc]
initWithContentRect:NSMakeRect(x, y, w, h)
styleMask:NSTitledWindowMask | ...
backing:NSBackingStoreBuffered defer:YES];
NSButton *button = [[[NSButton alloc]
initWithFrame:NSMakeRect(x, y, w, h)] autorelease];
[[window contentView] addSubView:button];
てな感じ。

まあ、nib から読み込むほうがスマートだとは思うけど...
921909:03/08/31 07:49 ID:OgP5ty3I
まだつまっています。
解答するのもアホらしい質問なのかも知れませんが、
どこか勉強できるサイト、あるいは書籍を教えていただけませんか…
922名称未設定:03/08/31 10:00 ID:YW6hofkM
>>907

具体的には、アルファチャンネル付きのNSBitmapImageRepを作成し、
bitmapDataメソッドでビットマップ情報を格納する領域の
ポインタを取得して、そこへRGBとアルファチャンネルの情報を
書きこんでいきます。
入力元の画像からBitmap情報を取り出すには、
NSBimapImageRepのinitWithData:メソッドでオブジェクトを
作成し、やはりbitmapDataメソッドでビットマップ領域の
ポインタを取得します。

作成したNSBitmapImageRepはNSImageにaddRepresentation:して
使います。

APIリファレンスの、NSBitmapImagRepの
initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerP
ixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:
メソッドの説明も参照してください。


だいぶ昔、英語サイトで画像合成のサンプルコードを見かけた事があるので、
それを見せられれば早いんだけど……。URL失念してしまいました。
923名称未設定:03/08/31 11:24 ID:2wCslq7m
>>918

    ,.-――――――――――――-、    ダメだっ…… オレはダメなんだ……
   /                     \    わかったんだよ……
   \                        l    オレには もう…… わかった…
     >、                    |
    /―`\、                    |     鬼車派には二種類ある…と
  /―――u \__              |
  ヽ ヽ二二ニニニヽ`ー-、_____           |  ラッパーを作って公開できる奴と
   n===〜=-、===============、      .|    それができない奴と・・・
   | |〉 i]   )   u     | |⌒`i    .|
   | |  └┐r'  u       | |⌒`|     .|  オレは…… そのダメな方……
  ./U u`ーし‐'     U   .l |(^) |      |   …ダメなんだ…
∠__ )  O ーU-、\.  .| .|___ノ     |
   <_____  ヽ   .Vヽ      |  どうしてもマイナスのイメージが拭えない…
     └┴┴┴┴`i  l  /  \     |      フレームワークを作ろうとしても……
      ┌┬┬┬rノ    /     \    |\  自作アプリでは一部のメソッドしか使わない姿がちらついて……
     匚 ̄ ̄ ̄ ̄u.   /       \/    どうしてフル機能のラッパーを作ることが出来ない………
      |   U  u    /       /      今も苦悶中………
        l_____/       /      もう自分の必要最低限を作るのでギリギリ……精一杯なんだ………
924名称未設定:03/08/31 11:55 ID:Vck73lXl
>>922
これは関係ないかな。
http://cocoa.mamasam.com/COCOADEV/2001/09/1/11010.php

適当に検索しただけなので、ちごてたらすまん。
925907=909:03/08/31 12:19 ID:OgP5ty3I
>>922,924

ありがとうございます!

NSImageRepresentationは勉強してませんでした。
早速勉強して参ります。
926915:03/08/31 14:06 ID:EcGR2iXP
みなさんレスどうもです。
荻原本買ってきます。
927名称未設定:03/08/31 17:46 ID:oNFM+YRd
>>910
遅レスだが、NSStringはUTF-8で値を持ってたと思うから、PCREにUTF-8オプションつけてコンパイルしたものがオススメ。
鬼車使ったことないから、どっちが良いとは言えないけど。
928名称未設定:03/09/01 08:25 ID:tv9M+3K2
>915
Nibから作らないとAquaにならなかったと思うが。

>917さんも書いてるけど、プラグインはBundle形式じゃないの?
929915:03/09/01 21:12 ID:mhCs1yO1
>>928
レスどうも。
CocoaBundleではなくて
ライブラリーっていう形式なんですよ。
(新規ターゲットから選べるやつ)

アイコンが"B"じゃなくて"L"になってます。

この形式でCocoa.hをincludeすると、obj-cに対応してないみたいで
コンパイルすると@とか[]の部分でエラーでまくりという状態で
今いろいろためしているところです。
昨日ためした限りでは、ライブラリーだとobj-cは対応してない様子です。

CocoaBandleとは、ライブラリーとはなんぞや?
というのを調べてみます。
930名称未設定:03/09/01 22:13 ID:0GgUF9oI
>>929
えーと、Project BuilderがObj-Cに対応したコンパイルを
行なってくれるかどうかは、ソースファイルの拡張子で決まっていたはず。

問題のソースファイルの拡張子が".c"になってませんか?
".m"またはC++を併用するなら".mm"に変更してください。
931名称未設定:03/09/01 22:57 ID:IbMeVQWB
>>929
ライブラリって本来Carbonオンリーぽいのだが、、
何のソフトのプラグインなのか示せば話がはやいかも
932915:03/09/01 23:41 ID:mhCs1yO1
>>ライブラリって本来Carbonオンリーぽいのだが、、

僕もそんな気がします。
ソフトは・・秘密にしておきますw
すいません。

>>930

mmにしてます。
エラーが出るのは上記問題のような気がします。

しかし、OSXのプログラミングはおもしろいですね〜

933915:03/09/02 01:15 ID:kZybqWeV
みなさんどうもです。
結果報告。

コンパイルに成功し、読み込みもうまく行きました。
windowの表示はできませんでしたが・・w
(表示しようとはしているようです。読み込み時HOSTが重くなりました。)

どうもwindow描画のメソッドがおかしいようなので
荻原本見て勉強します。

あと一歩〜
934名称未設定:03/09/03 22:02 ID:9WBe4EZj
>>907
どーしても分からんかったら自前でピクセル触ったら?
そっちのほうが早そう
935名称未設定:03/09/04 16:24 ID:D/ixHjRk
スレッドセーフなキューを作ってるんですが、排他制御の方法で困ってます。
キューは
enum {
queueIsEmpty,
queueHasSpace,
queueIsFull,
};
という3つの状態を持ってます。
状態が2つなら、NSConditionLockを使えば簡単に排他制御が出来るのですが、
3つの状態を持つ場合にどうやれば排他制御が出来るのかが分かりません。

キューの容量を変化可能にすればqueueIsFull状態を無くすことは出来ますが、
動作が重くなってしまうので出来るだけ避けたいです。

よろしくお願いします。
936名称未設定:03/09/04 16:40 ID:Mi9Yibzr
>>935
Lockを増やす
937935:03/09/04 20:04 ID:U2TVQR+M
>936
ありがとうございます。ちょっと考えてみます。

>935 ちょっと条件が足りなかったので付け加えます。

Queue* queue;
id data = [queue dequeue]; // queueIsEmptyならデータが入るまでwaitをかける。
と、
[queue enqueue:data]; // queueIsFullなら空きができるまでwaitをかける。
です。

よろしくお願いします。
938935:03/09/05 00:11 ID:d4S07o8T
>936
考えてみましたが、デッドロックが発生しない方法を思い付けませんでした。(泣
とりあえず、queueIsFull状態をなくして、キューがいっぱいのときは例外を投げてごまかすことにします。
このすれは毎日チェックしてますのでどなたか良い方法があれば教えて下さい。
939名称未設定:03/09/05 00:56 ID:KCe4m5Xn
個人的には、というか普通の人にとっては
「なんとかピーク版とかいうのはいいから、リリース版を出してほしいなぁ」
というのが、今望んでいることだったりする。

でもまだ開発調整中だったらごめんなさい。
開発版をsourceforgeではなく2chで議論することに疑問を感じるところではあるけど…
940名称未設定:03/09/05 01:01 ID:KCe4m5Xn
Cocomonarスレと間違えた。
941名称未設定:03/09/05 01:40 ID:ezIjTJMK
t
942a beginner:03/09/05 09:50 ID:BA/i6WJ9
IBでカーボンアプリも作成できる様ですが
それはクラシック環境でも動くのでしょうか?

よろしくお願いします。
943a beginner:03/09/05 09:53 ID:BA/i6WJ9
追伸:
ココアでクラシックで動くアプリがいちから作れるか、ということです。
944935:03/09/05 12:38 ID:BOUxdYER
>943
残念ながらCocoaはクラシック環境では動きません。
Carbonで作成したとしてもProject BuilderがCFMバイナリを生成できませんので、
やはりクラシック環境での動作は出来ません。
古いCodeWarrior等を使ってCFMバイナリを作れば
Nib+Carbonでかつクラシック環境で動作するアプリケーションが作成可能です。
(最新のCodeWarrioirはMach-Oバイナリしか生成できません)
945a beginner:03/09/05 18:09 ID:BA/i6WJ9
>>944
丁寧なレスありがとうございます。
クラシック用アプリの開発環境は現行ではREALBasicぐらいということでしょうか。
946名称未設定:03/09/06 01:09 ID:VHHJOKZJ
>>944
> 最新のCodeWarrioirはMach-Oバイナリしか生成できません
間違い。
http://www.metrowerks.com/MW/Develop/Desktop/Macintosh/Professional/mac9
947:03/09/06 02:31 ID:AT0Bahd7
ながーい計算を途中中断するのに、データを一時保存したいのだが
アプリケーション独自形式のデータをファイルに書き出す方法を
だれか教えて。
入門書だと、ドキュメントベースにしてテキストを出し入れする
例題ばっかで、document.nibが無い例が無い。
ググッてみても、さっぱりわからん。

デバッグのことを考えて、テキストコメントとデータで
セーブデータを作るつもりなんだけど
変にCocoaにコダワリすぎ?
948名称未設定:03/09/06 02:54 ID:sLyZd4pI
NSDataにしてwriteToFile
949:03/09/06 03:48 ID:AT0Bahd7
NSArchiverでNSDataを生成すると書いてあるのを見たけどちんぷんかんぷん


たった今までNSDataはNSDocumentの継承だと勘違いしていた、、、
調べなおしてみます。
Cocoaはやっぱりワカンネー
950名称未設定:03/09/06 09:14 ID://38hyxl
>>949
セーブデータを格納するオブジェクトを作って、
それにNSCodingプロトコルを実装させる。

ここが参考になるかと。
ttp://www.stripe-net.jp/cocoa/cocoa/foundation3/foundation3-2.html
951944:03/09/06 09:20 ID:2vqBcRYB
>946
指摘ありがとう。
http://www.metrowerks.co.jp/Products/Desktop/MacXE.html
これが最新版だと思ってた。機能限定版だったのね。
952名称未設定:03/09/08 02:35 ID:oYdQ9pyG
cocoaで画像の変形をしたいのですが。良いサンプルコードは無いでしょうか。
サンプルコードさえあれば後は自学自習しますんで
953名称未設定:03/09/08 02:39 ID:CXbuqi0Z
画像の変形って?
フーリエ変換とかでいいの?
954952:03/09/08 02:41 ID:oYdQ9pyG
追記
アフィン変換で、例えば台形をした画像を、正方形に変形する事はできるのでしょうか?
955952:03/09/08 02:50 ID:oYdQ9pyG
>>953
フーリエ変換でということは、画像の周波数成分から特定の値をとるとか
フォトショップのフィルタみたいなってことですかね?

フォトショップの編集メニューにある自由変形みたいなことがしたいのです。
956名称未設定:03/09/08 02:51 ID:R+3AwMjP
>>952
むしろ、台形かどうかを判定する方が難しいような。
変形は簡単にできるけど。

http://developer.apple.com/samplecode/Sample_Code/Cocoa/Transformed_Image.htm
957952:03/09/08 03:32 ID:oYdQ9pyG
>>956
ありがとうございます
ソース見てみます。
958:03/09/09 00:58 ID:+nwA3XPk
>948,950
Thanxすこしだけ進んだけど、やっぱり詰まってしまった。

たとえば、任意バイナリを読むときに
1:unsigned char Buffer[1024];
2:NSData* Data1 = [[[NSData alloc] autorelease] initWithContentsOfFile: [ openPanel filename ] ];
3:[Data1 getBytes:Buffer length:1024];
とか、いきなり読み込んで、
データをゴニョゴニョしてから書き戻そうとしてるんだけど。
4:NSData *Data2=[NSData alloc];
5:[Data2 initWithBytes:Buffer length:1024];
6:[Data2 writeToFile:[ @"~/xxx" stringByExpandingTildeInPath] atomically:YES]
で、書き込みがうまく行かない
6のところでBAD_ACCESSになってしまう???
あと、3の所でファイルサイズの分だけコピーするにはどうしたらよいのでしょ?
959名称未設定:03/09/09 02:05 ID:pZuWLBw7
>>958
5でinit...の返り値を受け取ってないよ(NSDataはクラスクラスタ)。

>あと、3の所でファイルサイズの分だけコピーするにはどうしたらよいのでしょ?
- [NSData length]でバイト数がわかる。
てか、NSMutableDataで読み込んで、[NSMutableData mutableBytes]使えば?
960名称未設定:03/09/09 02:14 ID:HE6It75g
画像ビューワを作ろうと思ったんですが、最大化ボタンを押した時に

・画像サイズに合わせたサイズになる
・画面サイズ以上に大きくはならない

という動作をさせようと思うんですけど、画像のサイズはともかく、
画面のサイズはどうやって入手したら良いんでしょうか?
961名称未設定:03/09/09 03:22 ID:oKY8amQK
[ @"〜/xxx" stringByExpandingTildeInPath]

文字列定数にメッセージ・・・んなら、いっそのことパスをまんま書いちゃえば
962名称未設定:03/09/09 03:24 ID:oKY8amQK
>>960
NSRect screenRect = [[NSScreen mainScreen] frame];
963名称未設定:03/09/09 08:11 ID:iK3vNGeB
>958
>NSData* Data1 = [[[NSData alloc] autorelease] initWithContentsOfFile: [ openPanel filename ] ];
[[[hoge alloc] autorelease] init]ってありなの?
特別な理由が無ければ[[[hoge alloc] init] autorelease]が安全かと。

4,5もNSData *Data2=[[NSData alloc] initWithBytes:Buffer length:1024];
とするべき
964名称未設定:03/09/09 09:00 ID:KiEjpc+9
>958

>963に関して。
前半はまあ、ありではあるよね。ただし、オートリリースされないけど。
でも後半は完全にダメだよね。

例えばこういう実装もありなのよ。
-(id)init
{
[self release]; // 自分自身を解放。
return [[MySubClass alloc] init]; // サブクラスのインスタンスを返す。
}

NSDataとかNSStringとかのクラスクラスタは上の様にinit...で
必ず自分のサブクラスのインスタンスを返します。
ですから、必ずinit...メッセージの返値を受け取らなくてはいけません。

2,の場合は、init...で解放される一時インスタンスに対してオートリリースをかけて、
実際に使用されるインスタンスにはオートリリースが掛かってませんから、リークします。
965名称未設定:03/09/09 12:34 ID:UgRW6Y9u
>>961

~/xxxは実行時までどのように展開されるか決まりません。
だからパスをまんま書くことはできません。
966:03/09/09 12:41 ID:SN5jR2wm
ありがとうございます。
>963,964
2:NSData* Data1 = [[[[NSData alloc] init] autorelease] initWithContentsOfFile: [ openPanel filename ] ];
3:[Data1 getBytes:Buffer length:[Data1 length]];
4:NSData *Data2;
5:Data2 = [[NSData alloc] initWithBytes:Buffer length:[Data1 length]];
6:[Data2 writeToFile:[ @"~/xxx" stringByExpandingTildeInPath] atomically:YES]
こんな修正で、データを読んでから書き戻すのに成功しました。
正しいのかどうか自信無いです。

>961
とりあえず手持ちのiMacとPowerBookでアカウント名が違うのに対応したつもりだたのだです。

>959
> てか、NSMutableDataで読み込んで、[NSMutableData mutableBytes]使えば?
Buffer変数の型をMutableDataにするということでしょうか?
MutabaleDataにファイル読み込むときもNSData経由ですよね?

あと、プロジェクトがだんだn大きくなってくると、buildに異様に時間がかかるように
なってきました。今のMac(G3-400)には荷が重いようです。
ProjectBuilderにG4の効果はありますか?部屋が狭いんで、iBookG3-900くらいで
手をうちたいのですが。(H"が刺さらんか)
967名称未設定:03/09/09 13:40 ID:at1cWoqC
iBookだHDDが確かATA33なんでビルドが遅く感じるかも。
PowerBookにしる。
968967:03/09/09 13:41 ID:at1cWoqC
×iBookだHDDが
○iBookだとHDDが
969名称未設定:03/09/09 14:22 ID:KiEjpc+9
>966

> 2:NSData* Data1 = [[[[NSData alloc] init] autorelease] initWithContentsOfFile: [ openPanel ilename ] ];
こうじゃなくて
NSData* Data1 = [[[NSData alloc] initWithContentsOfFile: [ openPanel ilename ] ] autorelease];
こうだべ。理解できなかった?

> とりあえず手持ちのiMacとPowerBookでアカウント名が違うのに対応したつもりだたのだです。
NSString *NSHomeDirectory();
を使うように。

> MutabaleDataにファイル読み込むときもNSData経由ですよね?
NSMutableDataはNSDataのサブクラスじゃ!
つうことです。
970Kusakabe Youichi:03/09/09 23:01 ID:aGXZMgFL
今だ!970ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄    (´´
  ヘ_ヘ   )      (´⌒(´
ミ ・ ・ ミ   )   (´⌒(´
(  ° )〜≡≡≡(´⌒;;;≡≡≡
   ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
971名称未設定:03/09/09 23:45 ID:pN8SOKiO
Cocoa関連検索してたら出てきたんだが、この考え方って正しいの?
ttp://www.fastwave.gr.jp/diarysrv/trinity/200309a.html#20030909-2
972名称未設定:03/09/10 01:25 ID:Y8g7Iah+
>>971
「動的確保したメモリブロックはfreeで必ず解放せよ」って言いたいのかな?

/*
MLでこの話題が出ると果てしなく荒れ続けるよなw
メモリブロックからOSの実装まで発展して不毛極まりない論争になる。
これと双璧を成す起爆剤トピックが「fopen後は必ずfclose」
*/

973名称未設定:03/09/10 01:46 ID:3gJ2qtrW
>>971
AutoreleasePoolは{}による変数のスコープとは別のオブジェクトのライフタイムのスコープを導入する。メソッドの戻り値をautoreleaseすることによって、一時的なオブジェクトを気兼ねなく返すことができる。

- (id) method {
id result = [[[MyObj alloc] init] autorelease];
[result ...];
return result; //result変数はここで破棄されるが、オブジェクトは生きてることが保証される
}

id pool = [[NSAutoreleasePool alloc] init];
id result = [obj method];
[result ...];
[pool release]; //ここまでresultは生きてる

これに関連してObjective-Cでメソッドの戻り値のオーナーシップはcopyみたいに指示がない場合、どれもautoreleaseされてると考えるべき。

C++のスタック上のオブジェクトはポインタとして関数に渡すときに危険。
{
int x;
obj->setPtr(&x);
} //*xのポイント先が破棄される。このあとにobjがsetPtrで設定されたポインタを参照しようとすると不定
C++で楽にメモリ管理するなら↓みたいなのがいいと思う。
http://www.borland.co.jp/qanda/lang/l0003025.html

ってこんな感じであってる?
974名称未設定:03/09/10 02:36 ID:Ipd3Rmyd
>971
導入部は別に間違ってないと思う。
オーナーシップに関する理解がなければ簡単にリークしちゃうと思う。

メソッドの戻り値のオーナに関して明記されてないとあるが実はキチンと明記されている。
ここ
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_4_section_2.html

#ここには>966氏が理解してない +alloc... と -init... が不可分であることもきちんと明記されている。

御覧の通りこれはObjective-Cのお勉強の資料です。
彼はObjective-Cのお勉強もしっかりやらずにうんちく垂れてるわけですね。
975974:03/09/10 02:49 ID:Ipd3Rmyd
って、ちょっとまて。
>966氏はよく見たらすごいことやってるな。
NSDataを確保して、初期化して、自動解放して、初期化したわけか。。。
ここまできたら、もう一回自動解放してみるのがいいかも。。。
976名称未設定:03/09/10 14:31 ID:HRQvxoap
>>971

自分が生成したオブジェクトは自分で削除する。

自分が生成したのでないオブジェクトをランループを超えて
保持し続けたいのであれば、retainする。

retain(かalloc)したオブジェクトのreleaseは忘れない。
retainしていない(かallocしていない)オブジェクトはreleaseしない。

自分でreleaseできない場合や他のオブジェクトなどへ渡す場合には
autoreleaseする。

つまり、他のオブジェクトメソッドの返り値で受け取ったオブジェクトは
factoryメソッドなどの明示されている場合を除き、autoreleaseされて
いると思ってつかう。

このサイトの作者はまだオーナー湿布ポリシーを理解していない。
977名称未設定:03/09/10 16:48 ID:neWZY+QA
ちょっと前にmacosx-dev-jpMLに出てたけど、
オブジェクトはかならず
myObj=[[[Obj alloc] init] autorelease];
で確保して、
欲しくなったら必ずretain、releaseするっていうのが
よく分かってない人(例えば>971氏)には分かりやすいんじゃないか?

分かればそんな難しいもんじゃないんだけどね。
978名称未設定:03/09/10 18:05 ID:IcsQ4bO0
問題の本質を理解しましょう。
JavaにはGCがあるし、C++ではスタックオブジェクトやスマート
ポインタを使えばオブジェクトの廃棄は自動的に行われる。
これに対しAutoreleasePoolを使った手動参照カウントはプログ
ラマが考えて参照カウントを調整しないといけない。
> 自分が生成したオブジェクトは自分で削除する。
> 分かればそんな難しいもんじゃないんだけどね。
はJava/C++の自動廃棄に比べてミスの危険が常に付きまとう。
AutoreleasePoolはお手軽だけど古くさい仕組みだということ
979名称未設定
皆さん>>978に対しては冷静な対応をお願いします。
(できれば反応しないのが安全かと)