1 :
名称未設定 :
02/11/10 19:18 ID:Q0GVS7Jy
あぼーん
3 :
名称未設定 :02/11/10 20:26 ID:FTCD2p+F
4 :
:02/11/10 21:45 ID:SfOoV9YF
ていうか、関連スレを人任せな1にも問題があるかと…
あぼーん
>>1 お疲れ〜
でも、前スレにリンクが貼れなかったのが残念
7 :
名称未設定 :02/11/11 01:21 ID:eTPFWQHf
8 :
◆ftPf.M4w3U :02/11/11 17:02 ID:3CNSm3S7
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を軽く超えている罠。
12 :
9 :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は、抽象メソッドを呼び出したっていう
意味で、普通はコンパイル段階でエラーになるはず。
一度クラスファイルを全部削除して再コンパイルをかけた方が
いいんじゃないかな。
めったに出ないなら、すでに問題が解消されているような気もするけど。
上のエラーの方は、それだけじゃちっともわかんないので、
まずは地道にデバッグして落ちている箇所を特定しましょう。
19 :
13 :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
おまえら英語を母国語のごとく使えるんですか。そうですか うらやますいです。
22 :
15 :02/11/16 21:38 ID:THE4kyr1
お返事ありがとさんです。
>>16 やっぱり一つ目のエラーはメモリ関連ですよね。
まさかjavaやっててメモリ関連のエラーを受けるとは・・・、とほほ。
>>18 いまから目を凝らして落ちてる場所を探します。
そういえばテーブルの描画周りが怪しい、ドキュメントにも
『このメソッドは気をつけろ』ってのがあったしなぁ。
ちょっとやっつけちゃいますね。
23 :
15 :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
胸、でか!
30 :
10 :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を使えば、自分のコードに問題が
あるのか、それともフレームワークのキャッシュなのか分かるよ。
33 :
25 :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関連のプログラミング本も安くゲットできるチャンスかも。
38 :
35 :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 > 黒い三角のボタンを押すと隠れていた項目がにょきっと出てくる
> インターフェースを作りたいんと思っているのですが、
これをやるには自分で作るしかないと思われ
調べてもどうしても分からないんだったら諦めたほうが吉
45 :
36 :02/11/25 22:35 ID:PyISHp7r
>>38 あくまでもNSUserDefaultsがやることはデフォルト値を保存するということだけで
チェックボックスのON,OFFを自動的に感知して保存するわけではありません。
もしそれをしたいのならばチェックボックスのActionを他のインスタンスに設定して、
その都度BOOL値を保存する必要があります。
あとは、もう少し予算があれば本を買うことをお勧めします。
荻原本やヒレガス本あたりが基礎を高めるのにはいいと思います。
46 :
38 :02/11/25 22:50 ID:FwBGxRRY
>>45 ありがとうございます。Actionまわりを設定したら上手く保存出来たようです。
>荻原本やヒレガス本あたり
分かりました、良いと評判のヒレガス本を買ってみます。
47 :
名称未設定 :02/11/26 15:32 ID:95oFXXL9
48 :
41 :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 ありがとうございました。
おかげであきらめる決心が付きました・・・
別のやり方でやりたいと思います。
53 :
47 :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
56 :
54 :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に表示させても日本語だけ文字化けしちゃうのよね。 で、エンコードする必要があるとは思うんだけど、どうすれば良いのでしょうか。 誰かお助けを。 説明が下手でごめんなさい。
58 :
57 :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
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
83 :
名称未設定 :02/12/03 17:03 ID:86kTXrtx
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
そのへんはメソッド名をぐぐるで検索すればたいていどこかの誰かがサンプル書いていると思うが。 英語サイト行かないとわからないときもあるけど。
92 :
85 :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
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
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を処理するの
なら、こちらをどうぞ。
100 :
100 :02/12/09 02:09 ID:oRWuzLq0
XMLServiceってDOMだけなの?
101 :
警戒宣言 :02/12/11 02:23 ID:WjsHSuKs
念入りすぎるほど 保守。
そしてさらに保守。
103 :
警戒宣言 :02/12/12 00:41 ID:OzDkU41w
解除。 危機は去った。スレ違いスマソ
>>100 ちょうどHMDTにその情報載ったよ。
DOMでもSAXでも無いけど両方に似たようなのがあるらしい。
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って使えるんですか?
一応スレ違いでは無いと思うのでここに書かせてもらいました。
>>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 の位置はどのへん?
112 :
108 :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
風呂釜。これ。
VisualC++で書いてデバッグしてMacでコンパイル&リリース これ最強(SDLを使う時)
ココハココアスレ
CocoaGesturesってどう言う仕組みで動いているんですか?
消えて欲しくないから保守! かといって今ここで聞きたいことも無いし。。 だれか話題提供プリーズ。 まぁ、まったりしてていいけどネ。∞
>>122 CW最新版の割れ物は何処にありますか?
分からない・・・・。ゴメンヨ
デベロッパツールが新しくなったので皆さん気合い入れて落としましょうw
を、ほんとだ。 自動インデントを有効にするとぼろぼろおちるの なおってるかなぁ
300メガでかい
新しいのって日本語ローカライズ対応してる?
130 :
名称未設定 :02/12/21 00:47 ID:xXHMzR+o
アクセス拒否られるなぁ。落とせないよー。
>>130 パスワードの期限が切れてるんじゃない?
#定期的に新しくするのって面倒。
134 :
名称未設定 :02/12/22 00:10 ID:0D51mckv
本当にAppleは日本語開発者に冷たいな。 つか、やる気ないだろ?
雑誌の画面写真でしか見た事ないけど、NEXTSTEP時代のPBには クラスやメソッドの解説が日本語になってたよね?
あれはキヤノンががんばってたんでは?
最近ようやくtech notesのCocoa物が翻訳されてるのみて、を〜やっときたか〜って感じでしたが。Cocoaで翻訳されてるのは2個しかない罠(藁。 てか日本人の開発者ってCarbonとかしかやっとらんと思われてるんだろーか? tech notesもQ&AもCarbon絡みとかQT絡みばっかだよねぇ。 CocoaのDiscoverOPENSTEPは今のCocoa入門のPDFより出来がいいからあのままでいいけど(をい。 AppKitとFoundationKitのReferenceとっとと翻訳しろ〜〜〜(><)
リファレンスの翻訳よりむしろ、逆引き系のドキュメントが欲しい。 InsideMacにあって、Cocoaのドキュメントにないのはそこだよ。と りあえず英語のままでかまわんから‥
139 :
名称未設定 :02/12/23 00:30 ID:3O1qjF8Q
Windowsとのソフトの量の差の原因はこれか…。
ユーザ数の差だろう...
シェアの差は開発者の人数の差でもあるからなあ
142 :
名称未設定 :02/12/24 22:45 ID:YZLUCAKe
ただのユーザだったけど、プログラミングに興味が出た、って人物が 英語の壁で玉砕のケースが多いモヨリ。 Windowsには、酷評されつつも安易で使いやすいVBがあるし。
プロジェクトビルダーとか付ける位なら教科書位出してくれてもいいのに。 中途半端。
各国版の、って事ね。せめて主要国の。
新しいデベツールで フルスクリーンになるアプリを実行して終了すると メニューバーの表示がおかしくのは折れだけですか?
146 :
:02/12/25 11:04 ID:25KUSDdK
>>143 ProjectBuilderないと魅力半減。
教科書がほしいなら本で買ってもいいのでは。
さいきんcocoa本が増え始めたようだよ 日本語の
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アプリを完成させてる罠
ハア?
底なし沼とは具体的に何を指しているん?
調べる力が力尽きるほど調べても調べても調べ尽くせない調べのことでは?
157 :
:02/12/31 02:37 ID:1XWAiJ80
MFCとくらべたら、Cocoaのほうが洗練されてるよね。 でも、.NETと比べたらあやしいところかなぁ。
.NETよりJavaのほうがイイって本当?
159 :
:02/12/31 03:25 ID:1XWAiJ80
やっぱCちゃんと勉強してからじゃないとObjective-Cはキツイかな
C自体はさほど難しい言語じゃないんだけど、 Obj-Cの解説書ってプログラマーならアタリマエに知ってるんだろう的 用語が連発するんでちょっと難しくないですか。
162 :
:02/12/31 15:57 ID:1XWAiJ80
Objective-Cがはじめてのプログラミング言語という人向けの 本が無いのですな。だれかかきましょう:-) そういえば、阪大は(むかしは?)1年のときにObjective-Cを ならったとかどうとか。そのときの教科書の流出とかないのかな。
うん。 こないだC解説してるページ見て(void)とかすらやっと理解した。 載ってないんだもん。 と言う訳で今日アマゾンにC(C言語プログラミング" ハーベイ・M. ダイテル )と萩原本を注文しました。
萩原本は良いよ。初学者向けかどうかちょっとわからないけど、 Objective-CでCocoaプログラム書くつもりなら、いずれは参考にな るときがくるでしょう。 といいつつ、本心では、メモリ管理をほとんど気にしなくていい言 語の方が初学者には向いてるんじゃないかと思う。どのくらい本気 なのかとか、目的にもよるが・・・
165 :
:02/12/31 23:17 ID:1XWAiJ80
>>164 萩原本はいいですな。うんうん。
わたしもメモリ管理気にしない言語のほうがいいかな〜と思ったのですが、
最初は不便な環境でいろいろ考える習慣をつけたほうがいいので、
ちょうど Objective-C くらいがいいのかも。
#うちの学校では B1 前期で scheme やって、後期に C をやるのですが、
#なにもわかってないくせに C ってつかえね〜とか言う厨が....
メモリ管理しなくていい言語なんてあるんすか。 参考になります押忍。 スレ中前述の様にObje本はせいぜい中級者向け(萩原本)迄しか無いのがつらい。
168 :
名称未設定 :03/01/01 18:34 ID:7KUkRcR3
え!! PerlがCocoaに使えるんですか?ていってもどういう意味なのかわからない程度の素人なんですが。 普段Perlはテキスト処理用のスクリプトとして使ってます。
富豪的、っていうより RubyやJavaみたいにメモリ管理の面倒(ガベージコレクションとか) みてくれる言語のほうが初学者には楽、ていう意味だと思ったんだけど。
171 :
170 :03/01/02 00:00 ID:V0oTkhiy
172 :
163 :03/01/03 03:54 ID:hWNCnpWQ
まだこない。発送は当日にされたらしいが、 ペリカンって正月休みだっけ? と、発送スパンをメモしとく。
サービスを提供するアプリを作りたいんですが、 例えば サービスメニューから呼び出す ↓ 提供側のアプリでユーザーが何か操作をして、 「終了」ボタンが押される ↓ 呼び出した側で結果が挿入される みたいな事をやりたい時はどうすればいいのでしょうか?
174 :
173 :03/01/03 23:27 ID:nk3C7Fqb
age
175 :
名称未設定 :03/01/04 02:09 ID:5zdvt1wZ
>>173 すいません、いってることがよく分からないのですが。。。
サービスメニューっていうのはアプリケーションメニュー(アプリケーション名
がついたメニュー)の中の『サービス』の項のことでいいの?
なにか具体的な例が欲しいな。
176 :
172 :03/01/04 08:32 ID:LQxVcN6Q
昨日朝9時頃C本到着。 と止めようかと思ったけどそれでもスレ汚しメモ。
177 :
173 :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の相互依存度によって柔軟に対応することに
なるのでしょうな。
180 :
178 :03/01/05 04:48 ID:oiKOy1Xw
>>179 レスありがとうございます。
なるほど確かにそうですね。
プログラムは常に柔軟にってことですね。
依存度は低め(決して0ではないですが)なので分けてやってみます。
今紙にオブジェクトの依存関係を書いてみたんですがうまくやれば
きれいにまとまりそうです。
がんばってみますね。
それにしても『プログラムを書く』ということと『アプリケーションを作る』
っていうのは二つの間に壁がありますね。必死で勉強します。
少なくともsafariのソースを読んで意味が理解出来る位になりたい・・
182 :
名称未設定 :03/01/09 00:06 ID:dvmn6aeG
183 :
名称未設定 :03/01/16 02:39 ID:89tBpTdi
ある文字列をEUCに変換したいのですが、 NSString *str = @"あいうえお"; NSData *dat = [str dataUsingEncoding:NSJapaneseEUCStringEncoding]; これでEUCのNSData型にして、そのあとNSStringに戻す方法は どうしたらいいのでしょうか? また、エンコードの方法はこの方法であっているでしょうか?
>>183 そこまで分かっているなら、
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
を使えばいいことも推測できそうなものですが。
直接Cocoaでなくてあれなんですが。 みなさんプロジェクトのバックアップとかってどうしてるんですか? 今んとこソーズいじる前に必ずtar.gzで丸ごと保存してるんですが、 何かいい方法あります?
187 :
185 :03/01/16 23:16 ID:IxtFqHx0
189 :
185 :03/01/17 10:54 ID:lcNODBLM
ちと疑問に思ったんですが、一つのリポジトリにたいして 複数のプロジェクトをIMPORTしてもいいんですか? それともプロジェクトごとにリポジトリを作るの? 間抜けすぎる質問らしく解答を見つけられない...
190 :
:03/01/17 11:04 ID:LipkprQm
>>189 別に問題ないのではないか。
#なにが問題なのかわからん・・・。
191 :
185 :03/01/17 12:08 ID:lcNODBLM
>>190 即レスありがとう。
疑問氷解。
>#なにが問題なのかわからん・・・。
反省。
192 :
188 :03/01/17 14:47 ID:iae4P0gQ
>>189 俺も全く同じことでつまずいた。
>>188 にあるサイトにそこらへんのことが少し書いてありますよ。
193 :
185 :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ちっくな話題でなくすんませんでした。
terminalでCVSROOT(とCVS_RSH)を設定してから、 cvs loginして openでPBを蹴ってやればリモートCVSも使えるよ。 ssh使ってる場合はパスフレーズ無しにしないとだめだけど。
ProjectBuilderって'\'(円記号)の表示できなくない? C言語の勉強をしてみよう!と思って教本買ってきたんだけど いきなりつまづいてしまった。 #include<stdio.h> int main() { printf("\\"); return 0; } だと、←バックスラッシュがぽつんと表示される。
>>196 \と¥の関係について
もうちょっと勉強しよう!
というかなんで\でなくて¥でないと
ダメなんですか?
プロジェクトビルダーでコード入れてるだけでやたらと落ちまくる 人ってどれくらいいるのか? オレは作業できんくらい落ちまくる。 一文字入れて落ち、一行入れたと思ったら落ち、改行できたと思ったら 落ちる。騙し騙しやってるけど、みなさんもそんな感じですか?
>>197 >プロジェクトビルダーでコード入れてるだけでやたらと落ちまくる
>人ってどれくらいいるのか?
>>127 をよく読もう。
199 :
名称未設定 :03/01/18 18:16 ID:MRKdqgWl
200げっちゅ
Project BuilderからできるCVS操作って限られてるなぁ。 ( ひ と り ご と だ す )
202 :
名称未設定 :03/01/19 21:05 ID:fU25KtyI
おいっ! いまフジテレビでcocoa特集やってるぞ!見れ見れ!
2の煽りが消されてんじゃん。ワラタのに。
>>202 分かってはいてもちょっと見ちゃったよ。(w
鶴薗さんフレーム使うの止めて下さい。
206 :
名称未設定 :03/01/22 02:51 ID:4maCModN
『Cocoaはさっぱり!』よ永遠に。 age そういえばCocoa/JavaでFrameworkを作りたいんですけど headerとかが必要らしいけどどうすればいいのかなぁ? 自分用にカスタムビューをいっぱい作ってフレームワークにしたら 便利だと思ったんですけど…。
テキストエディタを半透明にすることができない。 黒背景&半透明のターミナルが気に入っているので同じようなものを作ろうと思ったんだが、 NSTextViewのAtributesからBackgroundのopacityをいじっても透過するようにならない。 下地のNSeWindowにはカラーをいじる項目はないし、どうしたらいいのだろう・・・
>>207 とりあえずNSWIndowを透明にするなら
window.setBackground( NSColor.clearColor() );
window.setOpeque( false );
setHasShadow( true );
でいける。(Javaでごめん、何となく分かるでしょう
ちょっと時間がなくて半透明まで書けない。
ごめんよ、でももし参考になれば。。。
あれ?2重書き込み? 重ね重ね、ごめん。
210 :
207 :03/01/22 12:26 ID:1+Qkm5Xj
>>208 ありが?ォ。
具体的にはNSwindowのクラスをインスタンス化して
アウトレットをNSWindowに接続、
で、呪文を唱えると言うことなのだろうか。。
昼間はもう時間がないので今夜試してみます。
>>210 NSWindowをサブクラス化。
setBackground、setOpequeをオーバーライド。
IB
クラスのヘッダファイルを読み込み。
ウインドウのカスタムクラスを変える。
212 :
山崎渉 :03/01/23 02:20 ID:Kx2M+3Qk
(^^)
213 :
208 :03/01/23 07:01 ID:wK5RAK5s
214 :
207 :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: はドキュメント読んでみてもよく分からない・・・
215 :
207 :03/01/24 00:01 ID:lHQMFngz
∧||∧ ( ⌒ ヽ ∪ ノ U U
216 :
207 :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のクラスに見つからなかったので、 何か良い方法をご存じの方はご教示願えませんでしょうか。
ふつうに一文字ずつ調べてコロンに変換すればいいだけでは?
220 :
218 :03/01/26 23:26 ID:O+/ffiFw
>>219 その方法も考えたのですが、
起動しているディスクの名前を調べる方法が分からないので
断念してしまいました。
221 :
218 :03/01/26 23:37 ID:O+/ffiFw
あ、NSStringに格納されているのは /Users/hoge/Desktop/というパスの決め打ちではなく、 実際にはどんなパスなのか不確定な場合です。
222 :
名称未設定 :03/01/26 23:44 ID:rEUgqX0Y
起動ディスクの名前を調べる方法? AppleScriptで「StartupDisk」を使って名前を調べるってのはダメかな。 そこだけAppleScriptでテキストファイルに書き出すように組んで 起動時にいったん呼び出すとか、できないかな。
223 :
218 :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は全く触ったことがないので、もっとスマートな方法があるかもしれませんが、 とりあえず解決した方法を報告しておきます。 長文申し訳ありません。
そういえばUNIX流パスからFSSpecへ変換するコードを QuickTimeのサンプルの一部としてどこかで見た記憶がある Cocoaで取得したパスをFSSpecしか受付けないQuickTimeに 渡す方法として紹介されていた気がする FSSpecが得られたらFSMakeFSSpecを繰り返せばいいんだけど スマートじゃないやり方だなあ それに長いファイル名だと名前の末尾がおかしくなっちゃうかもね
HTMLの読み込み方を説明してるページって無いでしょうか。
#include <stdio.h> main() { FILE *fp = fopen("index.html", "r"); }
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が返ってきます。 何かやり忘れていることがあるのでしょうか。知恵をお貸し下さい..。
>>233 tableViewがnilなんじゃない?
>>233 tableViewがnilなんじゃない?
>>233 メニューにDeleteっていれてEquivを\Dにするのはダメ?
簡単だけど。。
237 :
名称未設定 :03/02/03 01:01 ID:V9mQ7ebK
>>234 ありがとうございます!確かにtableViewがnil(0x0)になってました。
さて・・なんでnilになってるんだろう・・。
tableViewからIBでMyResponderにつないでるのになー・・・なんかすごい初歩的な所で間違ってそうだな・・。
>>236 なるほど、そういうのもアリですね。確かに簡単!
できればdelキーだけで消去できた方が自然な操作かなーと思いますが、どうしても無理だった時に使わせていただきます。
Cocoaといえば ケントデリカット
239 :
235 :03/02/03 01:29 ID:Zlq3gph/
二重カキコスマヌ
>>233 tableViewがスペルミスってるか、
IBでMyResponderインスタンスを作ってるのに自分でallocしてるとか。
ぬるぽExceptionがでないことの弊害か。
240 :
236 :03/02/03 02:25 ID:1DSE6VJD
>>233 氏
別にメニューにこだわってるわけじゃないけど、メニューにキー登録すれば
delキーでもメニューでも同じ動作が出来るから俺は好き。
いや、アプリの特性にもよるし、今求められてる答えじゃないから気に
しないでおくんなまし。
241 :
名称未設定 :03/02/03 20:23 ID:GA7OTv+E
これからcocoaをやろうかと思います。 参考書を買おうと思うんですが、中村本とアーロンヒレガスとではどっちがいいですか?
>>241 個人的にヒレガス本を勧めます。こっちのほうがきちんと解説していると思います。
ただこれを読むには最低限のC言語とオブジェクト指向の知識が必要です。ご注意を。
243 :
230 :03/02/03 21:24 ID:geaLcjev
>>231 ,232
どうもありがとう!
Omni のライブラリを調べてみます。
>>242 ありがとうございました。
C言語なら分かりますがオブジェクト指向ってのは分かりませんが、ヒレガスにします。
245 :
233,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かな。
246 :
236 :03/02/04 01:38 ID:RBgOtZQ6
247 :
名称未設定 :03/02/04 22:13 ID:+MMCD9Ww
Cocoaと直接関係ないかもしれないけど,MacOS Xってコマンドラインツールって 結構あるじゃないですか.UNIXの.で,その中の対話形式になっているツールを CocoaのGUIで制御したいのですが,(フロントエンドですね)入力待ち状態になっ ているコマンドラインツールに,どうやってGUIからコマンドを入力するんですか? 例えばrm -iってやると,yesかnoを聞いてきますよね.その時yesなりnoなりを どうやってrmに渡したら良いのか... (rm -fしろというのはなしでおねがいします.あくまで例なので.)
>>247 パイプを使って標準入力に流し込みます。
CocoaはやっぱりのPerlスクリプトを実行するが参考になると思います。
waitUntilExitを使わず、performSelector:afterDelay:;なんかをつかって
標準出力をパイプを使って読み込んで、
必要であればパイプを使って標準入力に書き込む
という手順でしょう。
>>247 > (rm -fしろというのはなしでおねがいします.あくまで例なので.)
rm -i hoge | yes :)
>>248 ????????????.??????????????,Perl?????
???????????????.???????????????
???????,????????rm -i????,???ftp??????
??,??????????????????,????????.
fp = popen("rm -i hoge.txt", "w" );
fwrite( fp, "yes" );
?????C???????,???????????????????.
>>249 ????????????.
???,???yes?rm -i??????????????????,
??????????...(???????????)
251 :
250 :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の標準出力を流し込もうとしているので,
ちがうと思うのですが...(実際できませんでしたし)
>>251 fwrite( fp, "yes" );
これはまちがいですね.
fprintf( fp, "yes" );
でした.すみません
ほっしゅ
>>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
255 :
254 :03/02/07 23:32 ID:7wMX8TxP
化けたが伝えたいことは分かるだろう。。。
質問です。 NSArrayのリファレンスを読んでいたのですが、- indexOfObject:メソッドは 配列中の要素にisEqual:を送る事で「引き数の物と一致しているか」を判断する、とありました。 また、- indexOfObjectIdenticalTo:メソッドは、id値を頼りに一致しているかどうかの判定を行う、 とありました。 ところで、荻原本によるとisEqual:は「同じポインタを持つ物は等しいと見なす」とあります。 となると、結局上記の2つのメソッド- indexOfObject:と- indexOfObjectIdenticalTo:は、両方とも オブジェクトへのポインタを頼りに「一致しているかどうかの判定」を行っているように見えます。 両者のメソッドは、一体何が違うのでしょうか?
Obj-Cはわからないから詳しくは分からないけど >isEqual:は「同じポインタを持つ物は等しいと見なす」 っていうのがなんか違う気がする。 isEqualってメソッドなんだよね(それさえもわからない。。)。 だからじぶんでisEqualを実装すれば実際には違うオブジェクト (ポインタの異なるオブジェクト)でも同じとみなすことが出来る。 って事じゃない? ごめん、説明下手で。
オブジェクトが同じ値であることと同じ物であることは違う。 オブジェクト指向プログラミングの本には必ず書かれている 基本概念なので調べてみましょう。
「原則として」と書いてあるじゃん
260 :
256 :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:は単にポインタを参照しているだけでは無い事が解りました。 ヒントを下さって、どうもありがとうございました。
261 :
256 :03/02/08 06:57 ID:nZBs88YL
ところで、手元にあるヒレガス本を読み返してみると、isEqual:は やっぱり「ポインタが同じである場合」と書いてありました。 が、「例えばNSStringは(中略)このメソッドをオーバーライドしている」とありました。 上記の実験で使ったNSNumberも、どうやら同じようにオーバーライドしていたようです。 当初私もisEqual:に変更を加えているのでは、と思ったのですが、ところが、 NSStringやNSNumber(NSValue)のヘッダを見てみても、オーバーライドしたとは 明示されていませんでした。これが私が混乱した元になってしまったようです。 お騒がせしてすみませんでした。
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.
263 :
251 :03/02/08 20:01 ID:jKIPEwj2
>>254 コードまで書いていただいてありがとうございます.
そうか,パイプを入出力用に2つ作らないといけないわけですね.
そして入力を検知するまでループで待ち(ここがポイントかな?),
それから出力用のパイプにデータを流し込む.
ちょっと今は試せないのですが,分かりました.
しかし,世の中のコマンドラインツールのフロントエンドって,
みんなこういうことしてるんですかね.結構大変そう.
264 :
名称未設定 :03/02/08 21:54 ID:k+NDFvP8
オンラインのURLをそのままHTML表示したりはできますかね?
>>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 キーを捕まえるところまではできています。 でも、メニューの生成・表示方法がわかりません。
[view menu]; ってやるとか? なるかどうかは知らん。
269 :
266 :03/02/09 22:32 ID:BA69j0bx
>>268 それっぽいのができるかも! ありがとー。
270 :
256 :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も、おそらくこのような拡張を行っていたんですね。
勉強になりました
>>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を取得します。
関係ないけど、(NSObjectみたいな)ベースクラスのオブジェクト比較メソッドは 「常に真を返す」という実装である方が論理的に整合性が取れる、つう話が JavaHouseで出ていたな。
>>272 その話、理由を聞かないとなんとも言えないが、わけのわかってない
人が言っただけのこと?
それともJavaHouseで複数の識者に支持されるような説得力のある話?
URLキボン
271ニハゲドウ 世界観を知った上で、現象を見て理解を確認するのはいいけど、 現象から理解しようとしすぎない方がいい。 とくに基本哲学的なところは。。。
>>272 それ、俺も気になる。
もしその話なかで根拠になるものが書いてあったら教えてほしいです。。
もしくはURLが。。
276 :
256 :03/02/11 22:18 ID:kNLtXHAM
>>270 ああ、おかげでやっとisEqual:のリファレンスにあった
"This method defines what it means for an instance to be equal."の現す真意が理解できました。
確かにおっしゃる通りで、各クラスとも「同一と判定してほしい条件」は異なるはずで、時にはそれが
ポインタであったり(同じメモリ空間に格納された『同じもの』)、時にはNSStringやNSNumberに
代表されるような「表現している値」(あくまで『たまたま値が等しいだけ』)の場合がありますものね。
(しかも、状況によってはその都度判定条件を変える必要に迫られる可能性もあるでしょうし)。
それに「ポインタの比較 == 値の比較」としか表現できない状況も確かにありそうです。
//メソッドしか持たないオブジェクトの場合、こうするしかありませんよね。
で、isEqual:というのは「このクラスではこういう条件や状況で『同じ』と判定して欲しいなあ」を
定義するメソッドである、という訳なのですね。御丁寧にどうもありがとうございました。
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 ;
}
としたんですがうまくいきません。ご教授お願いいたします。
279 :
278 :03/02/13 15:09 ID:YVSvw8xP
void HelloWorld(int e){ this.i = i ; } ↓ void HelloWorld(int e){ this.i = e ; } でした。すみません。
Obj-Cはわからんけど >id e = [[NSClassFromString(@"java.util.HelloWorld") alloc] init : 5] ; この行はおかしくない? HelloWorldはjava.utilパッケージに入ってなよね。 予想だと[ java.util.HelloWorld >> HelloWorld ]じゃないかな? 試してみてよ。
281 :
278 :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)により終了しました。 となり例外処理されてしまいます。
使ったことないからよく知らんけど、Java Setup の関数を使うんじゃねーの?
283 :
280 :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
日本語は無いのか?
ところでJavaBridgeって積極的に使って良いの? TopicsのとこにはLegacyってなってるけど。 かわりにJNIを使うことになると思うんだけど。 どっかにJavaBridgeよりJNIを使えって書いてあったかな? JNIのほうがめんどくさそうだが。
286 :
280 :03/02/15 01:32 ID:26ywk9jx
>>284 分からない。
パッと見はなさそう。
あったら俺も見たい。
287 :
278 :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にあります。
288 :
278 :03/02/16 11:15 ID:diyOpGVW
必要に応じてJavaReactor.javaの冒頭を変更してださい。 import com.apple.cocoa.foundation.*; import com.apple.cocoa.application.*;
守君参上
こそ〜り保守中
堂々と保守!
292 :
名称未設定 :03/02/22 14:01 ID:rZwK672+
あの・・10.2になってから(もしくはQT6になってからだったかも)NSMovieViewでのMPEG2再生がうまくいかないことないですか? 自作のアプリでNSMovieViewを使ってMpeg2再生してたら1分ほど再生した所で止まる(内部的には再生されているみたいだけど、音声も映像も止まる)ようになっちゃって、解決できません・・・。 ためしにWindowにMovieViewを貼っただけのテストアプリを作ったり、Cocoaはやっぱり!のサンプルアプリを見てみたりしたんですが、やっぱりこれも止まる。 解決できてるよ!という人がいたらご助言願いますー。
293 :
292 :03/02/22 15:11 ID:rZwK672+
ああ、よく考えたらMPEG2再生できるようになったのはQT6からか。 としたら、止まるようになったのは10.2にしてからだなぁ、きっと。 今さっき、システムの再インストして確認したけどやっぱり止まりました。うちだけじゃないですよね?
294 :
名称未設定 :03/02/22 17:02 ID:T31Zl/+7
>>292 確かに止まりますねえ。(Cocoaはやっぱり!のMoviePlay2で確認)
296 :
292 :03/02/22 23:39 ID:rZwK672+
>>292 ああ、10.2で止まるのって私だけじゃなかったんだ…。
うちではMP3を再生していても止まってしまいます。
私はしょうがないので「Cocoaはやっぱり! 出張版」を
参考にしてQuickTimeを直接呼び出して対処したんですが、
これだとモーダルダイアログの表示中に再生が一時停止して
しまうんですよね…。
細くとも長く生きてほしいから保守に一票
299 :
292 :03/02/24 23:25 ID:cL6Sq5AD
>>297 QuickTimeを直接呼び出すって言うのは、何をすれば良いんですか?
再生をstartするところだけQuickTimeを使えば良いのでしょうか。
300 :
297 :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);
301 :
292 :03/02/25 22:49 ID:Ld3tJhfj
うむむー、StartMovie()で再生開始してみたんですけど、やっぱし止まります・・。 別の問題があるのかなぁ?
302 :
297 :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とされる、という解釈するんですかね?
>>303 たぶんそゆこと。
俺、ObjC知らないけど…。
あれ、アスタリスクがつくのってポインタなんだっけ(Cではそうだよね)?
ってか、Cocoa-Javaって制約大きいよなぁ。
勉強しようかなぁ。
時間ないなぁ。
独り言です…
>>303 NSSavaPanelについては良く知らんけど、
左辺のsavePanelはただの変数名。で、変数名の前のNSSavePanel *ってのは、
「この変数はNSSavePanelクラスのインスタンスを格納するための変数ですよ」という事を
『コンパイラに明示する』ために書いてあるものなんだ。だから、べつに:
id savePanel = [ NSSavePanel savePanel ];
としても特に問題は無いよ。
/*正確には『NSSavaPanelのオブジェクトのポインタを格納するための変数だと明示する』事。*/
/*試しに"NSString *savePanel"としてみよう。コンパイラが文句言うと思う*/
という訳でNSSavePanel *savePanel = [ NSSavePanel savePanel ]; という行は、
「NSSavePanelクラスのインスタンスを格納する予定である変数savePanelを宣言し、
そこに [ NSSavePanel savePanel ] の結果(返り値)を代入して変数を初期化する」って意味になるよ。
結果として、変数savePanelにNSSavePanelのインスタンスが代入されるみたいだね。
>>304 Javaが解るならObjective-Cなんて楽勝でしょう。
ヒレガス本あたり買ってみては?
>>306 ん〜、やってみようかな?
マックでソフト作るならこれからObj-Cが必須な気もするし。。
ちょっと今はWebアプリの勉強をしなくちゃいけないからその次かな?
とりあえずObj-cを読めるようにはならないとなぁ。
AppleのサンプルもほとんどObj-Cだし。
ちょっとしたら初めて見ますわ。
308 :
303 :03/03/02 12:33 ID:sIDGxSpd
>>305 あ、なるほど。「id savePanel =」と考えると見慣れた構文ですね
バッチシ理解できました。Thxです。
クラスからインスタンスの生成、というと
[ MyClass alloc ] init ];
と初期化とセットで考えてしまうのですが、
この場合[ NSSavePanel savePanel ]で生成された
インスタンス(右辺のsavePanel)は生成後自動的に初期化されているですか?
「cocoaはやっぱり」のキッチンタイマーでも
tmKitchen = [ NSTimer scheduledTimerWithTimeInterval: ...... ];
と alloc している部分は見当たらず・・・
ここもしかしてクラス固有の特性を理解していないのかもしれませんが
309 :
303 :03/03/02 12:37 ID:sIDGxSpd
ちと今頭の中混乱中なので妙な事書いてたら突っ込んでください(涙
>>308 インスタンスを生成するクラスメソッドは原則として
初期化とAutoreleaseまでやってくれることになってます。
なので、
[ NSSavePanel savePanel ];
というのは
[ [ [ NSSavePanel alloc ] init ] autorelease ];
と読みかえることが出きます。
311 :
名称未設定 :03/03/02 14:34 ID:YV6rGazc
突然もうしわけないが・・・ 前スレが985という半端な数字でおわっているのは?
>>311 気付いたら落ちちゃったんですよ( ´Д⊂
313 :
311 :03/03/02 22:15 ID:YV6rGazc
>>312 ご説明ありがとう。私超厨房で、dat落ちとか知らなかった。
とてもいいスレです。いま前スレを読んでまして、参加できる
日を楽しみにしてます。
>>313 既に参加してるじゃないですか?
とてものんびり進行してるのでたまに顔出して下さいな。
315 :
303 :03/03/02 23:22 ID:sIDGxSpd
>>310 おお、先の件と2点分かっただけで目の前で霞んでいたものが
晴れてきた気分。多謝、多謝です。
>>308 同じインスタンスを使い回してたりとか。
>tmKitchen = [ NSTimer scheduledTimerWithTimeInterval: ...... ];
この場合はちょっとちがうかな。
NSTimerはNSRunLoopに登録しないと機能しないんです。
で、上のメソッドを呼ぶとインスタンスを生成させた後、カレントランループに
そのインスタンスを登録して、それを返してくれる。
単純なビルダーパターンみたいなもんですね。
317 :
xxx :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
大工
学生…、そろそろクビだけどね…。
323 :
320 :03/03/09 01:29 ID:+PqwrKw6
324 :
名称未設定 :03/03/09 17:08 ID:msa+sHAS
初歩的なことだと思うんですが、さっぱりわからないのでおまいら誰か教えてください。 htmlソースからリンクを抜き出そうとした時、 例えば <a HREF="xxx.html"> の部分を探して xxx.html の部分を抜き出したい時、 <a HREF=" や "> を検索しようとすると、@"<a HREF=""、@"">" となってしまってうまくいきませぬ。 " を含む文字列を記述するにはどうしたらいいのでしょうか?
�バックスラッシュ+"でできると思う。
>>325 激しく感謝!!
やっと先に進めます。ありがとう!
NSOutlineView で、Safari のブックマークみたいに Column に 色をつけたいのだが、どうしたら良いのでしょう? やはり NSTableView を継承するのが良いのでしょうか?
"Safari のブックマークみたいに Column に色をつけたい"というのが良く分からないが、 NSOutlineViewの - (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item; あたりがヒントになるかもしれない。
IrDAを使いたいんですが資料のあるところ知りませんか?
330 :
329 :03/03/12 01:53 ID:U+AUWkbk
331 :
保守 :03/03/15 07:58 ID:4pQJTuAp
ていうかOSXでIrDAてつかえるんか?
Object-Cでフォルダを作るのってどうしたらいいのですか。 NSFileManagerあたりがクサイと探していますがさっぱり見つかりません。
いや、ごめんなさい。NSFileManagerそのものを探してるわけではなくて。 フォルダの作り方がさっぱり。
337 :
名称未設定 :03/03/17 11:34 ID:vwFLfm0V
あのー、intをNSStringに変換するのってどうすればいいんでしょう? 思いっきり初心者質問で申し訳ナイス
>>337 [[NSNumber numberWithInt:int]stringValue]
隠れ保守神
Object-Cなんですが、 ある作業がちゃんと完了するのを待ってから先へ進ませる、ということはできますか? たとえば何かの動作中に、作業状況をTextFieldに逐一表示したい場合とか...
保守
すみません、つい最近Cocoaプログラミングに手を出したんですが FileMergerの使い方がよく分かりません。 ◆やったこと ・クラスを作成していくつかアウトレットやアクションを作成 ・生成したソースファイルにコードを書いてコンパイル ・その後クラスにアウトレットを追加したのでもう一度関連ファイルを生成 ・ここでFileMergerが立ち上がるけどよく分からないのでセーブして終了 ・ソースがまっちろに!うわーん クラスを変更した結果増えた行に関しては(ヘッダファイル)、 問題なく追加されているんですが、新しいほうのファイルにない 行があるファイルは全部消えて置き換わってるんです。 正しいマージの仕方を教えてください。
>>343 ・その後クラスにアウトレットを追加したのでもう一度関連ファイルを生成
・ここでFileMergerが立ち上がるけどよく分からないのでセーブして終了
ここが問題。
一旦生成した Hoge というクラスに Outlet や Action を追加するには、
クラスの Hoge.h と Hoge.m ファイルに IBOutlet や IBAction のコードを書くだけでOK。
そして、その Outlet や Action とコントロール部品を接続するには、
Hoge.h ファイルを Interface Builder の
Classes > Read Hoge.h メニューで読み込んでから接続する。
要はインターフェースビルダーから書き出し(クリエイト)すると まっさらなひな形がプロジェクトビルダーで上書きされるんです だから今まで書いたコードがまっさらに。 だから逆にプロジェクトビルダーのほうでアウトレット等書き込んでやって それをインターフェースビルダーに読み込ませてコントロール等と 結線する、と。 どんなコードを追加したらいいかは最初にクリエイトしたひな形で だいたい想像つくでしょ?
OS.Xになったことに伴ってCocoaに触りはじめています。 Toolbox の GetKeys のように、キー入力の状態を取得したいのですが、 他にフレームワークを追加するみたいで、行き詰まっています。 どなたかご存じの方がいらっしゃいましたら、ぜひ教えて下さい。
347 :
346 :03/03/23 21:00 ID:UR167USc
あぁ、すいません。書き込んだ後すぐにCarbon.frameworkが見つかりました。
>>344 ,345
助かりました! それが正しい(?)方法なんですね。
ところでもう一つ凄く初歩的な質問があるんですが…
"nil"ってなんですか? NULLのこと?
Cocoaはやっぱりのwebの例に
NSTimer *tmKitchen= nil;
ってありますけど、意味も分からずにそのまま書いてます。
349 :
名称未設定 :03/03/23 23:37 ID:fNMMXLs6
しばらく見ない間にずいぶん初心者にやさしいスレになったな。
もともとさっぱりな人たちが助け合うスレだから。
初心者排除したらこのスレはすぐに落ちちゃいます。
スレッドについてわかりやすく解説してるところはないですか? NSThreadは読みましたが、実際どういうものなのかがわかりませぬ。
javaのスレッド解説サイトとかで感じをつかむとか...
自分は荻原 剛志氏の著書で理解できました。<NSThread
もしかして、javaでDeterminateなNSProgressIndicator は動かないのだろうか...
357 :
353 :03/03/28 21:45 ID:GvA0+xOO
>>354-355 サンクスコ。あちきは中村本の弟子なもんで...
プログラムがはじめてでもわかりやすい本だったけど、
やっぱりその分踏み込みは浅めですね。
荻原本とかもう一冊買おうかなあ(それとも立ち読みか)
>>357 技術書の立ち読みは個人的には好かんな。
まぁ、知りたいことがすでに絞り込んであるなら立ち読みもありだけど
できるだけ全体を通して理解した方が力にはなるよな。
本はいくら読んでも損はしないぞ。
特に入門本を買った時は間違いなく踏み込んだ本が必要。
説教じみてきたな。。。
スレッドに関しては
>>354 氏が言うようにjava系の解説を読むと
理解しやすいかも?
ガンバレ
359 :
353 :03/03/28 23:24 ID:GvA0+xOO
>>358 いやあ、何かと春は物入りなもんで高い本にはなかなか手が出ないザンスよ。
Cocoaから始めたので未だにJAVAは機械語にしか見えないし...
とりあえずいろいろ実際動かして試してみよかな。
そう? Javaも独自の部分を除けばCに似てると思うけど。
361 :
358 :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の値って保持されないですかね?
364 :
363 :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が必要。
変数とオブジェクトのインスタンスを分けて考えることと、
オブジェクトオーナーシップを理解することなどが必要かと。
366 :
363 :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変数に溜め込んで最後に「連続したデータとして」吐き出す、という考えです。
本家 Cocoaはやっぱり が404... 本買って読めって事?
369 :
365 :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];
}
とかでいいんじゃないかな?
370 :
363 :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
PithってSafariと完璧に連動してるけど、あれってどうやってるんだろ。 どこの何を読んでるの?
AppleScriptでアイドルハンドラで数秒ごとにウインドウ監視してればできそう。
375 :
名称未設定 :03/04/05 12:00 ID:R0KODGis
>>375 いきなり
> 世界で最も美しいGUI、"Motif"
とは驚きだ。
…つーかそいつ、犬糞erじゃないの?
>行数にして僅かに66行(空行含む)。 >Windowsで同じ事をすると倍近くのコードを書かねばなりません。 >MacintoshでCarbonやToolBoxを使った日にはさらに倍以上のコードを書くハメになります。 ナニモ シラナイノニ エラソウナコトイウナ!
Cocoaだったら20行でいけるわな。
いや、あれだけならInterface builderで(ry というか行数どうのこうのより、CocoaのCの字も知らないのに バカにしているのが許せん。
>>375 Mac批判してるだけでドザって思い込むのはやめたほうがいいぞ。
どう見てもドザじゃないし・・・。
OSXも使っててそれでもMotifがいいって言ってるんだから
価値観の合わない人とは関わらないのが吉。
ま、知らない方が彼にとっては幸せだよ。 微笑しながら見守ってあげましょう。
て、いうか、例としてあげているCのコード、ダサ過ぎ。 BeOSのアプリケーションのソースを見せてやりたい。(←をいっ!
383 :
名称未設定 :03/04/05 22:54 ID:asYB7vUe
384 :
名称未設定 :03/04/05 23:13 ID:mrX8GlKK
マッカーに過ぎたる物は余りないが、敢えて言うなら Interface Builderだな。これはいい。
>>375 ワラタ
かなり電波入ってるなぁw
でも、彼の頁のファイルダイアログ批評には激しく同意。
386 :
名称未設定 :03/04/06 02:33 ID:cbA9GWNr
しかし、 Interface Builderみたいなものって、CUIの世界からGUIの世界に移ったとき、 開発環境としていちばんはじめに用意されるべき物だったような気がするんだが。
>>385 電波にしてはまだまだ弱い気がするけど、ただ若いだけというか。
ていうかファイルダイアログってリサイズできたのか。
388 :
名称未設定 :03/04/06 02:51 ID:cbA9GWNr
>>385 電波っていうか、たんに自分の好きなものをマンセーしてるだけだな・・・
モーオタのファンサイトと同レベルかな。
cocoaの保存ダイアログのカラム表示は好きだけどなあ、
でもイマイチ整頓しきれていない感はあるな
最近使った項目とかを全部一つのプルダウンに押し込んだのはどうだろう? それと、上の階層のフォルダに上がりにくくなった。 スレ違いだけど。
390 :
名称未設定 :03/04/06 03:05 ID:cbA9GWNr
プルダウンは、ブラウザのブックマークを意識してるのかも。 ブラウザのブックマークは一つのプルダウンの中に入ってるからね。 慣れてないと、わかりにくい。 上の階層に上がるのは、カラム表示なら下のハンドルを掴んでうごかすだけのような。
いつになく盛り上がってますな。
Cocoaから大分離れてきたが…… たしかにOS.9からXに移行した時 一番使いにくかったのがファイルダイアログかな。(iBookだったし) 最近はPowerBook買って1280*854までスクリーンが広くなったから そんなに苦じゃなくなったけど。
IEじゃないと見れないな。
インラインフレーム使ってる
>>394 気付かずCaminoでみて何もないのかと思った。
397 :
名称未設定 :03/04/07 13:42 ID:619o4sfV
Cocoaなひとなのに、SafariやCaminoで見られないサイトを作るのは何かの嫌がらせ?
tp://ch.kitaguni.tv/u/120/ あんま Cocoa と Blog は関係無さげ。 MovableType 流行ってるね。tDiary とかWiki も。
Blogがじゃなくて、デベロッパな人がIE以外で自分のページを確認してないってのはどうなのよと。
>>399 Webデザイナーだったら激しく問い詰めてやるところだが
デベロッパだったら別にかまわないんじゃないの?
といいつつ400ゲット
401 :
名称未設定 :03/04/08 14:23 ID:CSfncauk
別にWindowsのデベロッパだったらわからなくもないが、Cocoaの書籍を書いているのにSafariやCaminoで読めないサイトを作るのは不思議だなぁーと。 なんか嫌な事でも有ったのか?
Safariは未完成かつバグ持ちだから、 Safariに合わせて作るわけにもいかんでしょ。
403 :
名称未設定 :03/04/08 21:29 ID:CSfncauk
いや。Safariにあわせてじゃなくて、IEだろうがNetscapeだろうがOperaだろうがw3mだろうがって意味。 SafariとCaminoだと、blogの存在すらわかんないじゃん。
だからそんなこと知らんってばよ。 ちゃんとHTMLにさえ準拠してないブラウザが悪い。
ソースを見たところ、HTMLの方が不完全だったけど… 実験段階のblogらしいし、あんまり拘ってないのかな。 たぶんiframeのurl属性を""でくくってないから、 一部のブラウザで表示されないんじゃないんかなぁ?
407 :
406 :03/04/08 22:16 ID:B+W1wavS
と思ったけど、表示されない原因はまた違うみたい。 なんで表示されないんだろう。
409 :
406 :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さん。その箇所なおして再アップロードしといてください。
PBで\nとしても改行されないのは なんとかならないんでしょうか。 バックスラッシュいちいちコピペしてるんですが。
プログラミング自体初めてな俺、 いままさに
>412 スクリプトを米国にして、Option+\でバックスラッシュが入力できます。
>>414 できました。
ありがとうございました。
よくわからんけど CocoaとSafariとどう関係するんだ? CocoaフレームワークにSafariに関するクラスとかメソッドでもあるの?
417 :
名称未設定 :03/04/09 16:38 ID:YJvsqjsE
Interface Builderで作成したアプリケーションの パッケージ内のファイル、特に画像ファイルを見れなく する方法てないですか? ゲームなんかだと簡単に見られたく無い画像とかあるので。
>>416 CocoaフレームワークとSafariは直接関係ないだろう
一部ではWebKitフレームワークがアツいようだが
>>417 独自フォーマットに汁
PNGでプライベートチャンク使うとか
ビットマップをシーザー暗号でエンコードするとか
TableViewのデータソースで悩んでます。 中村本だとデータソースにはNSMutableArrayを使うんですが、 NSCellを使ったりする方法もあるようで、 テーブルの項目の中に画像を使おうとするとそのほうがいいのかなあ。 なんだか根本的なことがわかってないような気もしますが、どなたかアドバイスキボンヌ!
>>419 要はアイコン付きリストを表示させたいのか?
NSTableViewじゃなくてNSOutlineViewの場合だけど……
俺はNSBrowserCellを使った
NSCellを継承してオリジナルのクラスを実装した場合に比べて
何もしないでもAQUAのアピアランスに沿ってくれるので楽
NSOutlineViewのExampleを改造したので
データそのものはNSObjectを継承したFileSystemItemクラスに持たせた
それとデータを保持するクラスとデータソースは別だぞ
うーん、よくわからないのはテーブルのひとつひとつのセルの中には何を表示できるのか?ってことナンス。 普通だとNSStringやらNSNumberやらでつが、ここにNSCellを返せばいいのか、 はたまたNSImageを直接ぶちこんでもいいのだろうか、とか。 >それとデータを保持するクラスとデータソースは別だぞ あっ、そうですた。
分からなければ実際にコードを書いて実験したみたらどうだろうか? その方が理解も進むぞ。
NSImageは既に失敗しますた。NSCellはどうにもうまくいかず。
424 :
420 :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 その例はアイコンとテキストを同じ 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 の型を指定するためのものにすぎない。
>>426 おお、なんとなく理解できる!w
とりあえず試してみます(・∀・)
428 :
420 :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からの流用...
>>428 そう!そうなんでつ!まさにこれ!
しばらくこのコードを研究します!サンクスコ!
なるほど。どちらもCellに画像をセットして返すのは同じで、そのタイミングが違うわけですねー。 なんだが別の部分でうまく動かなくなってまだうちでは成功してないわけですが(;´Д`)
よく考えたら、 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
>432 丁度テーブルで簡単にイメージを表示する方法をさがしてました。 参考にさせていただきました。ありがとうございます。 あー。快適です。 よいスレなのに人がいなくて寂しいのでage。 すいません。
自分の作ったソフトを公開する場合に、 そのソフトに付けるアイコンはどうやって調達されてますか? デフォルトのままだと気が抜けたような感じだし、 自分でアイコンを作るのは絵心が無いので無理だしで、 どうも困ったものです。
>>434 確かに Mac OS X になってアイコンの解像度が上がってから
というもの、自作アプリのアイコンを自作するのが極端に難しく
なった気がするなー(絵心のない人は特に)
「描く」という発想を捨て、デジカメで撮った写真を素材に
それを加工するという方針でいってはどうでしょう?
結構人の作ったアイコンを使ってるソフトってあるけど、 あれはちゃんと了解をとってるのかな?結構みんなパクリ?
デジカメで撮った写真を元にするのはアリかもしれませんが、 何のソフトのアイコンか分からないとダメなので、 最終的には絵心というかセンスの問題ですねぇ。 それを考えると絵心のある他の人に作ってもらうというのが無難かもしれません。 ただ、他の人に作ってもらうのも難しいのですが。
写真をそのまま使ったJeditは激しくかっこわるかったぞ。
440 :
山崎渉 :03/04/17 15:31 ID:6I5vRaG+
(^^)
ググっても駄目だったので、お聞きしたいんですが, アプリがクラッシュした時のCrash reportってどうやってみるんですか? 自作アプリが、ふとした拍子に落ちるんですが,原因が分かりません。 再現性もなし。 とりあえずCrash reportでもよめば何か分かるのかな,と思いまして。
>>441 ~/Library/Logs/CrashReporter/アプリ名.crash.log をダブルクリックしる!
あ、すんません。書き方が悪かった。 そのログの見方がわからないんです。。。 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:] あたりでクラッシュしてるんかいな、と見当を付けてるんですが。 違いますかねぇ...
>443 まさにそういう事かと。 その辺りのオブジェクトのメモリ確保とかに問題あるんじゃない? というか自作アプリならProjectBuilderからデバッグモードで起動させた方が手っ取り早いと思う。
>443 ごく単純に考えればsetImage:に渡しているオブジェクトが解放されているせいかと。
>>445 どんぴしゃです。
おはずかしい。。。
思いっきりsetimage:にわたすオブジェクトを他のところで解放してました。
NSDictionaryにパスと一緒にsetObject:forKeyしてたんですが、
その後ですぐ[image release];してました。
はぁー。。。
ありがとうございました。
Objective-Cでゲーム作ろうとしているのですが、 ゲームの画面を表示するView,GameViewを用意し Thread走らせて、その中で画像のオフスクリーンへの描画 そしてそれが終わったらGameView対してdisplayを渡すという風にしたのですが、 (GameViewはオフスクリーンをView内に表示するだけ) どうも動作が重く、画面更新もちゃんと行われません。 しかし、Timerを使うとちゃんと快適に動いてくれます。 やっぱりTimerを使ったほうがいいのかな。そうするとゲーム自体のコードが複雑になってしまう; 誰か助けて。
448 :
山崎渉 :03/04/20 04:23 ID:ZHDoPsUy
∧_∧ ( ^^ )< ぬるぽ(^^)
449 :
447 :03/04/20 18:25 ID:M4PLzZ0q
?自己解決しました。 ウェイトをかけなかったために、動作に負担がかかってしまったみたいです。 ?TickCountを使って30FPS程度に抑えたらスムーズに動きました。
空age(゚д゚)ウマー
Prefix headerって何の為にあるのでしょうか?消しても大丈夫っぽいけど・・・
コンパイルが速くなるんじゃないかな。たぶん。
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; }
ステータス返す値としてmainの戻り値を使わなければいいという話じゃなくって?
457 :
名称未設定 :03/04/29 22:27 ID:BcLcx+5r
>>456 >ステータス返す値としてmainの戻り値を使わなければいい
それも不思議なんです。
Cocoaにそれらしい関数がないようですが、どこからでも exit(number);
で終わらしていいということでしょうか。
exitで返さなくても、戻り値を返すための変数を呼び出し側で用意しておいて、 そこに値を放り込んで勝手に終了するとかいろいろ方法はあるでそ
459 :
名称未設定 :03/04/29 23:38 ID:BcLcx+5r
>>458 意味がわからない。
本題はNSApplicationMain( )から戻ってこないということなんですが。。。
フックとか、戻り値をセットする関数とか、mainのreturnに返ってくる
関数あります?
NextStepもそうなのかな。
これは、もしかして、バグ?
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:を上書きとかになるけど、よくないよなー。
>>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にないのが悪いんだが。
あるいは、途中で仕様が変わったのかも。
いやもう、おかしいって。
>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]; }
ごめん、sage忘れた。
>>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が呼ばれてた。
もう、笑ってしまいました。
>>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
NSRangeは構造体です。 構造体を初期化するコードは以下のようになります。 const NSRange range = {1 , 100};
>470 const NSRange range = {1,100}; あなたがお持ちの書籍の構造体の初期化に関する部分と NSGeometry.hを見てください。 ただし、この書き方はAppleにより NSRange の定義が変えられたとき コンパイル不能になる、もしくは意図しない動作をするようになるでしょう。 まあ、定義が変わることは、まずないでしょうけど。
473 :
460 :03/05/01 20:50 ID:AYrs/qnu
>>467 教えてくれてありがとう.
でも,私,Delegateあんまり詳しくないので,
もう少し,詳しく教えてくれませんか?
Delegateの作成とかがよくわかんないです.
で,作成したあとで,
-setDelegate:すればいいんですよね?
あと,横取りしたらYESとかスルーならNOとかも
ちょっとわかんないです.
よろしくおねがいします
474 :
470 :03/05/01 23:31 ID:b5yckfKM
>>471 ,472
ありがとうございました。おかげさまでうまくいきました。
C言語の勉強しなおしてきまつ・・・
Carbonから乗り移ろうとしています。 従来のToolBoxを用いたプログラミングだと RunApplicationEventLoopやWaitNextEventを用いて自分でイベントループをまわしていましたが Cocoaだとイベントループの部分はCocoaに任せる事になりますよね。 自分の場合、主にゲームを作るとき main()→ゲーム画面の描画→イベントループ→描画→イベント... というようにやっていたのですが Cocoaだと自分でイベントループをまわせなくて困っています。 参考書を読んでも「イベントはCocoaが管理してくれるよーん」としか書いてない。 やはりスレッドを用意するべきなのか、Cocoaはゲームに向かないのか…… 何か方法がありましたらお教えください。
476 :
名称未設定 :03/05/03 00:25 ID:OHvswuV9
477 :
476 :03/05/03 00:34 ID:OHvswuV9
>>475 あといい忘れたけど、自分でイベントループをまわすこともできるよ。
NSApplicationのnextEventMatchingMask:untilDate:inMode:dequeue:とか。
でもこれでループするとNotificationとかが動かなくなったりするので、
currentRunLoopも自分で実行する必要があったような気が。
478 :
名称未設定 :03/05/03 00:42 ID:dd4GQNX/
フリー開発環境あるとかいうのに、ちょっとさっぱりじゃない? 小サーイ世界でアプリつくっては(以下略)
自前のイベントループはNSRunLoop使えってことになってた気が 使ったことないけど
480 :
475 :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
本買え、本。
483 :
476 :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]とかすれば良いだろう。
>>481 死んでるっていうか、消したんでしょ。サイト自体はやってますよ。
Topにインラインフレームで貼ってあったblogツールの日記が別サイトになって
通常のに戻った。
今はiTunesで再生中の曲を自分のサイトに表示するツールを更新中。
>やはりスレッドを用意するべきなのか、Cocoaはゲームに向かないのか…… と書いてありますが、スレッドってあまり使わない方が良いのですか?
487 :
475 :03/05/04 21:20 ID:fL39spbJ
自分がそう書いたのは今までスレッドにあまり関して試したことがなかったからで。 できるだけ、いままでのスタイルを変えずにプログラムしたかったんです。 誤解招いてスマソ
>>487 あ、そういうことだったのかサンクス。
僕はまだいろいろとよくわかってない素人なんですが、
ループ回したら虹色のカーソルも回っちゃって
困ったなー、あーそうかなるほどスレッドかー、っていう感じだったので。
とりあえず動いてるみたいなので良かった良かった。
>>486 デュアルプロセッサを視野に入れないのならスレッド処理はあまりメリットがない
スレッド管理のオーバーヘッドもあるし排他処理とか同期の問題もある
デュアルプロセッサ搭載マシンならマルチスレッドにした方が処理が速くなるみたいだけど
そうでないならタイマーでメッセージを送った方が楽にコーディングできるよね
ディスクアクセスとかアイドル時間の長い処理をそこかしこに入れてるなら
マルチスレッド処理も有効かもしれないけど
外国語勉強のための聞き取りソフトを作成し、数秒の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 ]; }
>>490 10.2におけるNSMovieViewのバグです。
音声ファイルを再生するだけなら、QuickTimeの
APIを直接叩くか、NSSoundを利用してください。
(10.2のNSSoundはMP3も再生できるようになってます)
>>491 ありがとうございました。おかげさまで、ちゃんと再生できるようになりました。
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メニューがオープンされるときにコールバックされると思うのだが違う?
x implemention o implementation
NSViewのインスタンスを動的に生成したいんですが、 上に乗っけたいコントロールの類はいちいちコード内で配置していかないとダメなんですかね? ビューを複製することができればIBで作ったビューを複製してやればOKだと思うんですが、ビューはNSCopyingに準拠してないし。 なんか方法知りませんか?
>>495 IBで新規にnibファイルを作り、Viewとコントロールを配置しておいて、
+loadNibNamed:owner:でロードすれば良いのでは?
497 :
495 :03/05/13 04:00 ID:2IoPviAb
すいません、したいことをもっと明確に示すべきでした。 Tabの数が増えたり減ったりするTabViewで全てのTabに同じコントロールを乗せようと考えてたんです。 Tabの内容をコードでガリガリ書いてると分かりづらいなぁと思って、IBで書けたらいいなぁと思ってたところです。 View複製さえできれば、コントロール配置したNSViewをOutletで保持しといて、 NSView* newView = [templateView clone]; [tabitem setView: newView]; ってできると思うんですが。。。 やべ、もう寝ないと...
OmniWebの環境設定のプラグインで インストールされているプラグインのリストが見られますが (なんかCocoaGesturesまで見えているけど) ああ言うロードされているバンドルのリストみたいなものは どうやって所得するんでしょう?
>>497 496の言う通りにやればできるんじゃない?
IBでウインドウの上にコントロールを配置しておき
+loadNibNamed:owner:でロードして
ビューのインスタンスを取得してタブビューにセットする
一緒にロードされたウインドウを解放するのを忘れないようにね
マルチドキュメント・アプリケーションの作り方を参考にするといい
あれはひとつの.nibから複数のウインドウを作って管理するアプリなんだから
.nibをロード→viewのインスタンスを取得→viewをretain→
windowをrelease→viewをタブにセット→( ゚Д゚)ウマー
という手順でいいと思う
>>498 動的にロードされたバンドルも静的にロードされたバンドルも
Objective-Cでは区別されていないじゃなかったか
どうしても取得したいならロード時に記録しておくか
objc_getClassListで全てのクラスのリストを取得してから
既知のクラスを取り除くってのはどうよ?
プラグインパスを取得してその都度数えるという方法もある
NSBundleでロードされたクラスはNSArrayに記録しておくのが普通だから
それを利用するのが一般的だけどね
500 :
496 :03/05/13 19:37 ID:ogfctm/W
>>499 ちょっと補足させていただくと、
IBでビューを作成するのにウインドウは必要ないですよ。
"CustomView"をパレットからドキュメントウインドウにDnDすれば
インスタンス化出来ますから。
501 :
495 :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でこのアプリで開くのデフォルトにできないんですけど どうすればいいのれすか?
実物が無いから何とも言えないけど。 Project Builderでファイルタイプを指定している?
504 :
502 :03/05/17 16:07 ID:TNaiboK7
>>503 ファイルタイプってMIMEタイプかOSタイプのことですか?
info.plistのエントリの書類のタイプで
拡張子は指定していますけど
MIMEタイプとOSタイプは指定していません。
LaunchServiceのキャッシュが壊れているカモ。
506 :
名称未設定 :03/05/18 12:27 ID:6rgw4rEV
厨です。 cocoa-javaでjava.awtやjava.swingは使えますか? やってみてるんですが、Build failedしてしまいます。
507 :
502 :03/05/18 12:45 ID:jRJqhTtb
508 :
名称未設定 :03/05/18 14:25 ID:6pgqlOin
509 :
506 :03/05/18 15:36 ID:6rgw4rEV
>>508 ありがとうございます
ちょうど手元にあったので見てみました。ら、少し書いてありました。
とにかくできることが分かり希望が持てました。
ところでご本人ですか?
510 :
508 :03/05/18 19:22 ID:MxB2asZW
>>509 呼び捨てやったけん思ったんかな。。
掌田先生のサイトにもいろいろ書いてあるよ。
512 :
506 :03/05/18 20:15 ID:6rgw4rEV
佐賀ん人じゃなかばい。
514 :
502 :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+
517 :
名称未設定 :03/05/24 23:50 ID:eck5OJ0k
あぼーん
519 :
名称未設定 :03/05/30 06:25 ID:G/PNGWQ+
OSX10.2.6が動いているWebサーバー機があるんですけど、 cocoaアプリでPerlスクリプトみたいなことは出来ますか? ユーザのリクエストに応えてHTMLファイルを動的に生成して出力するとか。 WebObjectなんかがそれっぽいかと思うんですけど、何せ高いしねー。
>>519 普通にUNIX用CGIアプリを書いて使えばいいんじゃない?
もしどうしてもCocoaフレームワークを使う必要があるなら
ターミナルアプリからCocoaフレームワークを使う方法もあったと思う
>>519 「Perlスクリプトみたいなこと」って、CGIのことか?
CocoaアプリじゃなくてFoundationToolじゃだめなん?
522 :
519 :03/05/30 08:31 ID:G/PNGWQ+
>>520 ,521
端的に言えば、
1、ProjectBuilderが使えて
2、Objective-cが使えて
3、Cocoaフレームワークが使えると便利かもしれない
という条件を備えた、CGIとして使えるアプリ(?)を作りたかったんです。
FoundationToolって、UNIXのコマンドラインですよね。
使ったことはないけど、もう少し調べてみるかな。サンクスでした。
523 :
519 :03/05/30 08:33 ID:G/PNGWQ+
×という条件を備えた、CGIとして使えるアプリ(?)を作りたかった ○という条件で、CGIとして使えるアプリが作れるかを調べたかった
>523 AppKitを使わない。 CocoaFrameworkはAppKitを含むので、FoundationFramework単体でリンク。 どうしてもWeb上でGUI部品もFrameworkとして使いたければWebObjectを買いなさい。 以上。
>>522 cgiはhtmlをテキストで返すコマンドラインアプリであればいいので、
Objective-Cでもまったく問題なく作れますよ。
新規プロジェクトからTool->Foundation Toolを選べばいけまふ。
526 :
519 :03/05/31 00:50 ID:aRcsPIqz
Foundation Toolを選んで出来た作ったコマンドラインアプリに「.cgi」の拡張子 をつけてSitesフォルダなどに入れ、それをブラウザから読み込めば実行できるんですか? cocoaで初めてプログラミングを始めたので、標準出力とかイマイチ良く分かりませんが がんばりまつ。ありがとう。
>>526 とりあえずコマンドラインで動くものから作ってみたら
例えば @"1*(2+3)" といった NSString 文字列がある場合に、 この計算式の解を得る良い方法は無いでしょうか?
>>529 ありがとうございます。
あまり簡単な方法は無いようですが、
スタックを使う方法を試してみて、
難しくてダメなら諦めて bc を使うことにします。
Cocoa+Javaしたいと思っている全くの初学者です。C関連の書籍は定番と言えるような本があがっていますが、Cocoa+Java方面でよい本があったらお教え頂けませんでしょうか。 Think Cでウインドウ出すのに挫折して幾星霜、web見ながらやってみたらウインドウがあっさりと出て。。。感動しました。 DevTools、昔は60万したって本当なんですか?
どうも俺は513が好きなようだ。ショボーン
>>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のことでは?
そうなんですか、ありがとうです。
機械の体がほしくて999で初心者スレからやってきました。 mac2年目の初心者です。 cocoaでソフトを作りたいのですが、参考になるお勧め本教えて下さい。 どんなソフトかというと、運転免許場とか医局の番号表示システムみたいな 感じです。フルスクリーンにできて、番号打って一度に何人分も表示できて、 その番号の人がブツを受け取ったら簡単に消せタリする、 そんなソフトを作りたいんですけど・・・・難しいっすかね? いろんな言語とか精通しないとかけないっすか?
自分はCocoaをはじめたときはamazonで 中村氏のMac OS X Cocoa プログラミングと 荻原氏のObjective-Cの本を購入。 入門はその2冊で、今はネット上の資料で開発しています。 あとそれぞれの言語に得意・不得意はありますが 実際に独自のソフトを作るとなると、関係するのは言語じゃなくて自分の技術とセンスだと自分は考えてます。
>536,537
>中村氏のMac OS X Cocoa プログラミングと
>荻原氏のObjective-Cの本を購入。
俺もその二冊かな。
はじめは「Cocoaはヤッパリ」だったんだけどね。
ただしどれも基礎的なCおよびプログラムの知識(文法とかプログラムの制御とか)が必要なので注意。
そこらへんを知らずにいきなり買ってもわからんと思うよ。
>mac2年目の初心者です。
っていうことなんで一応。
ちなみにCのお勉強は・・・
http://homepage1.nifty.com/toshio-k/prog/c/ こんなのはどうかな?
ちゃんと読んでないけど結構丁寧に書いてるっぽい。
そんなの知っとるわ、というのであれば余計なお世話スマソ。
539 :
538 :03/06/03 17:45 ID:FeZsaDw7
>536 ちなみにその程度のソフトなら慣れれば二日もあれば作れる と思う
Cocoa の流儀を学ぶならヒレガス本も欠かせないと思うが。
中村本や萩原本の前に 「はじめてのC」とか「やさしいC」とか「かんたんなC」みたいなC言語の入門書を一冊よんどけよ。
結城本がいいよ。
何が良いんだかさっぱりですが、とりあえずCの言語が 分かんないといけないんでつね。。。cからはじまる恋物語でも 読んで勉強してきます。 初心者の俺でもこのソフトならかなり簡単な部類だよなぁッと思ってました。 頑張ってみます。
以前までREALbasicを触っていました。 Rbの時、インターネットへの接続はSocketクラスを用意して、 PortとAddressを設定して、Writeメソッドで文字列のデータを送る。 とやっていました。 ドキュメント等見てCocoaではNSSocketPortを使うんだなぐらいまではわかりましたが、 NSSocketPortを見ても何がなんだかよくわからない状況です。 RbのSocketクラスのように行いたいのですが、ご説明願えますでしょうか。
質問です。 NSTaskを使ってtarの自分用フロントエンドを作っていまして、 tarの場所を [aTask setLaunchPath:@"/usr/bin/tar"] みたいな感じで指定しているのですが、 例えば、cocoaWgetのようにtarをアプリケーション内にバンドルするにはどうしたらよいのでしょうか。 御存じの方いましたらよろしくお願いします。
/usr/bin/tar から引っこ抜いてきてファイルを追加すればいいんでないの?
>>544 わたしもRbからの転向者です。初心者ですので、詳しいことはわかりませんが、
NSURLとNSURLHandle を使ってインターネットへ接続しています。
>>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の初期設定も捨てたし・・・万策尽きました。 システムをクリーンインストールしたら解決するんですかねぇ。
551 :
549 :03/06/05 11:00 ID:7tSHTOFd
解決しました。 デベツールのディスクイメージのチェックサム検証をスキップしてたのがいけなかった みたいで、スキップしないでいるとDiskCopyが不正終了しました。 仕方ないのでDevToolをADCからもう一度ダウンロードしてインストールしたら復活! インストール終了できても中身が壊れてるなんてこともあるんですね。意外だ。
>545 wgetと違ってtarを内蔵する意味はないと思うが・・・ 単に方法を知りたいということであれば>546の通り アイコンと同じようにプロジェクトにファイルを追加すれば良し
>>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」がグレーアウト してるし、やっぱりチェックマークをつけることはできないんでしょうか。
遅レスすいません。 >546,552 ありがとうございます。NSBundleを使ってpathを指定してやればうまくいきそうです。
>555 本当にNSPopUpButtonなのかな? Mailでは普通のNSButtonにメニューをくっつけてるのかも。 Mailのnibファイルはのぞいてみた? (ちょっと見てみたんだけどnibファイルが多すぎてどこに入ってるのか分からんかった。 ちなみにSafariのバックボタンはNSButtonのサブクラスになってる) ところでMailは英語以外のnibファイルを開けないのはなぜだろう?
まあ、関係ないけどさ Obj-Cに限らず、オブジェクト指向言語はひとつ理解(言語仕様じゃなくてオブジェクト指向そのものを) すると、他の言語もほとんど問題なく学習できるよ。 JavaはベースがCだから特に楽なんじゃないかな。
559 :
OC厨 :03/06/07 13:26 ID:9kccQz8f
Cの入門書は一通り読みました。いまは中村氏のcocoa本を読んでいますが、 いまいち「オブジェクト」が解りません。 OCのオブジェクトはJAVAのそれとよく似ていると聞いたことがありますが、 JAVAの本も読んだ方がいいのでしょうか? またオブジェクト初心者にも解るOCのオブジェクト解説のある書籍、 またはサイトがありましたら教えていたていただけないでしょうか? よろしくお願いします。
>>559 558も言ってるように、ひとつの言語でもやってる内にわかります。
ぱーっと世界が開けるように、わかります。
561 :
555 :03/06/07 13:42 ID:beqrgONE
>>557 恥ずかしながら、Mailみたいな機能を再現したいと思っていただけでNibは調べてませんでした。
NSButtonにメニューをくっつけると言うのもアリですか。
でも、Safariのボタンにはチェックを入れる必要がないのでNSPopUpButtonでもいけそ
うですけどねぇ。
もう少し、試行錯誤してみます。ありがとう。
中村本の次に読むとすれば荻原本かなぁ。 だんだん知識を塗り重ねて行くうちに オブジェクト指向も分かるようになる気がする。
自分はHyperCard、REALbasicから始めたからオブジェクト指向ってのはおぼろげながらわかってた。 言葉で理解するよりも、経験を積み重ねていったほうがおのずとわかってくるとおもうよ 荻原氏のはなかなか重宝しています。中村氏のは一度読んで実践して終わりだったけど、 こっちだと何度も開くことになる。
>561 Safariのボタンは「ボタン長押しでメニュー表示」のためにNSButtonのサブクラスにしてるんじゃないかな? >559 俺はC++の本でオブジェクト指向を勉強したな。 C++自体は一通り本を読んだだけで実際には一度もプログラムを書かなかったけど、 オブジェクト指向という概念そのものは役に立った。 >562,563のいう通り最終的には経験が一番重要だけど、 最初はなんかしらの読み物で概念を知っておいた方が良いと思うよ。 それで全てを理解できるわけはないけど、これからどんなことをしようとしているのかくらいは分かってないと いくら勉強しても身に付かないと思う。
NSPipeについて御存知の方いませんか。 gzip -dc hoge.tar.gz | tar xf - のようにコマンド間をパイプで繋ぎたいのですが、Appleのドキュメントを読んでもよく分かりません。。。 (tar xzf hogeをつかうのはなしで) [task_Gzip setStandardOutput:aPipe]; として [task_Tar setStandardInput:aPipe]; としてもダメでした。 NSFileHandleを使って標準入力をバッファから読み込めばうまく行くような気がするのですが、 うまくコードにする事が出来ませんでした。 /*この辺はやっぱりM$の方が(ry ももう少しなんとか(ry */
566 :
OC厨 :03/06/07 22:31 ID:9kccQz8f
レスありがとうございます。 どうせならOCでオブジェクト指向が学べたら、と思ったのですが。 JAVAやC++なみに人口が増えないと書籍層が充実しないというところでしょうか。 Javaでオブジェクト指向入門をしたいと思います。
いや、だからさ オブジェクト指向は「何々で学ぶ」ってもんじゃないんだって。 分からないうちはJavaだろうが何だろうが分からない。
>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を勉強できる本があるとベストなんだけどね
>>565 どうも NSPipe は少しでも大きいデータを流そうとすると極端に重くなるので、
中間ファイルを作ることを勧めます。
570 :
565 :03/06/08 00:25 ID:MeK+6oxv
>569 レスどうもです。 >どうも NSPipe は少しでも大きいデータを流そうとすると極端に重くなるので、 もしよければどのようにデータの受け渡しをするのか教えていただけませんか。
>>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。
572 :
OC厨 :03/06/08 10:05 ID:G2ZEYfMM
>>568 良いサイトを紹介いただきありがとうございます、早速読んでいます。
>具体的なことはCocoaでソフトを作っているうちにだんだん分かってくるから心配はいらないと思う。
そう願います。なーんちゃって感覚でCocoa及びObjective-Cに慣れていきたいです。
>本当は0の0から(変数とはとか、オブジェクトとは、から)Cocoaを勉強できる本があるとベストなんだけどね
まさにそう思います。
573 :
565 :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 となります。シェルスクリプトにエスケープシーケンスを認識させるにはどうしたらよいのでしょうか…
>>566 俺はOCの萩原本でオブジェクト思考理解したよ
要は内容を受継いで変更や拡張できる部品を集める形でつくる
よって変更、拡張、他のプロジェクトの再利用が用意
ってこと(違う?
576 :
568 :03/06/08 15:34 ID:sQOSQfYR
>574 本当だ 荻原本にもオブジェクト指向の説明があったね。 >いやObj-Cの本(というかCocoa本)には「オブジェクトとは何か」という基本を説明している本がない現状では、 というのは俺の勘違い スマソ
>>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]で待つと他のイベントがハンドリングされないから?
Cocoaについて教えて下さい。 #import <Cocoa/Cocoa.h> #import "MyClass1.h" @interface AppContoller : NSObject { MyClass1 *anInstance; } このように自作クラスのオブジェクトを他のクラスのインスタンス変数にしようとすると parse error before "MyClass1" とコンパイラにおこられるんですが、 NS〜というクラスのおぶじぇくとでないとインスタンス変数にはできないのでしょうか。
>>579 #import <Cocoa/Cocoa.h>
#import "MyClass1.h"
@class MyClass1;
@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}
としたらどうですか?
581 :
579 :03/06/10 17:35 ID:MT4H0P8v
>580 @interface AppContoller : NSObject { id anInstance; } このようにid型で宣言したらうまくいきました。
>>581 id型にしてしまうと、MyClass1が持っていないメソッドを
anInstanceに送ってしまった際の警告が抑止されてしまうので、
おすすめできる方法ではありません。
#import <Cocoa/Cocoa.h>
@class MyClass1;
@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}
とするのが良いと思います。
>>580 に似ていますが、
#import "MyClass1.h"の宣言を削除しています。
ヘッダから削除したこの宣言は、かわりにAppContoller.mファイル
の方に書いておいてください。
583 :
582 :03/06/10 20:25 ID:yYCfN7wD
・ヘッダファイルでは自分のスーパークラスだけ#importする ・その他のクラスは@classディレクティブで宣言する ・@classディレクティブで宣言しておいたクラスのヘッダファイルは 実装ファイル(.m)で#importする としておくと、ヘッダファイルの依存関係で悩まされることは 通常無いと思います。
Objective-C Pocket Reference買っちゃった。 CocoaオンリーかとおもってたらGNU関係も対比して書いてるじゃん。 翻訳出るかな?これ。出たら友達に勧めよう。
JavaでCocoaアプリを作る時なんですけど、製作の過程はどのような感じになるの? Javaの知識だけあればできるの? それとも、あの英語だらけで調べるのも一苦労のマニュアルを見ながらでないと 作れないの?
どのみち英語で苦労しなきゃならんと思われ
いやー、マイクロソフトの開発環境は日本語情報充実してたしなぁと思って。 JavaならObj-Cよりも日本語の情報で苦労しなくてすむかなと思ったんだけど そういうもんじゃない、ってことですかね?
ObjC使ってますが、だいたいはProjectBuilderに付属したリファレンスを見てやってます。
>>588 クラスライブラリが全部英語だとすごく疲れませんか?
僕は疲れます。
読み進むスピードが日本語の3分の1くらいになるし…
>587 >JavaならObj-Cよりも日本語の情報で苦労しなくてすむかなと思ったんだけど 正解。 でもCocoaのリファレンスが全て英語なのでそこで苦労する。 JavaとObj-Cの情報の差なんて微々たるものだよ。 Obj-Cの情報なら荻原本で大体事足りるし。 >589 疲れる。 っていうか必要な部分を斜め読みするだけでまともに読んだことないな。 なんで後から「こんなクラスがあったのか!」って後悔すること多数。 あぽーもWin32からのポーティングガイドなんて訳してないで Cocoaリファレンスを訳してほしいもんだ。
というより、本当に教えてほしい点は(出し惜しみしてたわけじゃなくて) 「Cocoaフレームワークの中でJavaのライブラリを使うだけ」なのか、 「Javaで組んだら勝手にCocoaアプリになる」のか、ってことかも。 つまりCocoaのお勉強が絶対条件として立っているなら、 別にjavaでもObj-Cでも一緒だなぁと思いますし。 言語仕様自体の違いなんて問題にならないから。
>>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
>>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系のものをさがしてたらコレがあって。
かなり易しく噛み砕いているので僕のような初学車でもいけるかなと思います。
599 :
名称未設定 :03/06/12 23:42 ID:G7NEAu9z
>>598 Amazonにはレビューが付いてるだろ。レビューが無い本は売れてないとも読める
>>599 この本、前のりビジョンにはいくつかレビューついてるんですよ
601 :
名称未設定 :03/06/13 22:20 ID:O6wb8MBr
ファイルのフルパスを表示する時に、本当のファイルネームでのパス を放り込んだらローカライズされたパスに直してくれるクラスとかありますか?
NSFileManagerのドキュメント内を探せ。
603 :
名称未設定 :03/06/13 22:35 ID:O6wb8MBr
-displayNameAtPathかと思ったけど、 これって返ってくるのがlastPathComponentだけみたいなんですが・・・。 /User/aaa/Documents/abc.jpgというフルパスを渡したら /ユーザ/aaa/書類/abc.jpgというNSStringが返ってくるクラスはFileManagerにあります?
そういう場合はアレだ。 どうせ6つぐらいしかないんだから 手 動 で
605 :
名称未設定 :03/06/13 22:46 ID:2yT3des3
森永
607 :
601 :03/06/13 23:28 ID:O6wb8MBr
お騒がせしました。-componentsToDisplayForPathですね? 参考までに超意訳のリファレンスをのせときます。 componentsToDisplayForPath: - (NSArray *)componentsToDisplayForPath:(NSString *)path パスのコンポーネントを表すNSStirng(既にAutoreleaseされています)を要素とする NSArrayを返します。このパスの要素は、ユーザが目にする形であらわされています。 (Finderやオープン・セーブダイアログ等におけるような) このメソッドで得られるパスは、ファイル操作などに使用することはできない、ユーザに 表示するためだけのものです。 ・・のはずなのに、なぜかnilしか返ってこない・・・。
608 :
601 :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の表示処理を呼び出したいんです。
CocoaもAPIはただの関数な訳で使えないことは無いと思うけど Cocoaのクラスを呼び出すのは不可能だと思う。
611 :
609 :03/06/15 09:47 ID:gL/WGc+X
反応早! すんません。 Cocoaというレベルでなくて言語仕様レベルの話なんです。 昔作った処理の再利用が目的なんで、うわっかぶせでobj-c とcの 橋渡しができればいいんです。 C++経由というのをいま探索中です。
ん? Cの関数内から呼び出したいだけで、別にCで作ってるわけではないのね? んじゃあ、Obj-Cなんだったらそのまま呼び出せば普通に使えると思うんだけど。
ほれ --- 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版ページ消えた?
だいぶ前に。
#import <Cocoa/Cocoa.h> int main(int argc, const char *argv[]){ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; [pool release]; return 0; } みたいなのをコンパイルして実行すると、CFStringとかCFNumberなどのCF〜のメモリが解放されていないようなんですけどこれはなんなんでしょうか?
>>616 >これはなんなんでしょうか?
どうやって検証したの?
認識が違っているかもしれないし、方法がわからないと誰にもわからない。
618 :
名称未設定 :03/06/20 00:30 ID:hPWAptZ1
ageついでに、 Cocoa.Frameworkってメモリーリークしているのかしていないのか わからない所がある。 MallocDebug.appでみると、リークしまくりのようだが。
>>617 すいませんでした。
gcc main.m -framework Cocoa
とコンパイルしたものを
ObjectAlloc上で実行してみたところCurrentの所が0になっていないものが
たくさんあったんです。
>>619 >ObjectAlloc
でわかるの???リークが!
あれっわかんないんですか?何か根本的に間違ってますか?
>>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で書いてみましたが同様の症状でした。
624 :
623 :03/06/20 01:55 ID:uQVPRV9+
追記です。 SHOEISHAのJavaゲームプログラミングを参考にしています。 (この本は推奨されないメソッドを使っている箇所がたくさんあるので気をつけてコーディングしています) ポートは2357を使用しています。他のポートも試しましたが症状は変わりませんでした。 テスト段階で一回うまくいったような感じだったのですが ポートを閉じる処理を忘れてからうまく動作しなくなったような感じがします。 記憶があいまいなので、もしかしたらうまく動いていたのは勘違いだったかもしれません。 この問題の解決が難しそうであればObj-Cで書き直すつもりでいますが 不馴れなためできればJavaで開発したいと思っています。 何卒よろしくお願い致します。
>>616 それは多分、もともと解放されないオブジェクトだと思うのだが。
@"string"とかは解放されないNSStringのインスタンスでしょ?
>>623 たしかaccept()はそこで止まってアクセスを待つでしょ。
タイムアウトを設定すれば、時間切れで例外吐くようになるんじゃない?
626 :
623 :03/06/20 03:40 ID:uQVPRV9+
>>625 うおおレスありがとうございます!
んー、なるほど。たしかに止まってアクセスを待ってるような感じもします。
なんでNoSuchMethodErrorが出てるのかもうちっと調べてみます。
>616 CFStringなどはCFReleaseで解放しなければならない ということではなくて? >618 リークは0にはならないね。 俺は10KBくらいにおさまれば良しとしてる。 OSのバージョンが上がれば改善されるみたいだし。 10.1ではNSURLHandleとかリークしまくりだったけど 10.2になったら直ったよ。
628 :
616 :03/06/20 13:50 ID:VIGfGwZO
ご返事ありがとうございます。
>>627 自分で生成した覚えのないものなので一体なにを解放すればいいのかわらないんです。覚えがないのならば気にしなければいいのかもしれませんが...
>>625 というのはシステムが勝手に生成して解放しないオブジェクトがあるということでしょうか?
やはりObjectAllocを使って調べようとしているのが間違いなのかな。
>628 CFStringはNSStringの内部で使われてたりします。 NSStringのリリースし忘れでは? 確認ですが、NSAutoreleasePoolは、Javaのガベコレと同等物ではないことはご存知ですよね? autoreleaseメッセージをオブジェクトに投げると、カレントプールに登録され、 カレントプールがリリースされるときに登録されたオブジェクトに対しreleaseメッセージを投げるだけです。 ですから、カレントループが解放されるときにretainCountが1でない場合、 retainCountが1減るだけで解放はされません。 > やはりObjectAllocを使って調べようとしているのが間違いなのかな。 普通の人はMallocDebugを使います。
630 :
616 :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
>>630 >MallocDebugは
ループがないと動かない。
main()
{
....something code
while(1);
}
普通のアプリはイベントループがある。
MallocDebugではポインタの上書きしか検出されない、と思う。
ObjectAllocで見れる参照カウントがあるなら、Win32のデバッグ環境
のようにCheckPoint設定してダンプする関数があってもいいのにな。
ライブラリ自体がリークに関してあやしいのか。
633 :
625 :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、保存時に必要な箇所をタブに直す というふうになりますが出来ればフレームワーク側でできないかな? と思いまして。。。
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とか使うのかな?
637 :
634 :03/06/23 03:53 ID:CnYhIbCR
>>636 レスありがとうございます。
636の方法で方新は見えてきたのですが、NSTextTabの意味が
よく分かりません。今は時間がないのでテストできないのですが
後日調べてみます(よろしければおしえていただけないでしょうか?)。
面白くなりそうです!
638 :
616 :03/06/23 19:42 ID:a2k9m2bi
>>633 遅くなりましたがどうもありがとうございました。
objective-cだけの時には気にならなかったのですが、cと混ざったものを
書いているときになにか自分で解放し忘れてるものがあるのではと
思ったのでした。
なんか昨日から、特定の?文を入れてリターンを押すと オートインデントが利かないばかりか、tabを押してもタブが入らず、 何度も挑戦しているとかならずProjectBuilderが落ちるようになってしまって ションボリックリンクなんだけど、これはもうDeveloper toolsの再インストールしかない? といったところで、インストーラのパッケージを探してみたら、 なんかいつの間にかハードディスクの中から消えてる?? MDD867なんですが、インストーラはどこにあったか教えてもらえませんか?
>>639 とりあえずADCOnlineにでもなって(もしなってなかったらね)Dec2002と昨日でたDec2002用gcc3.3パッチとセットでDLしたら?
てかその前にpreferencesあたり疑ってみたりインデント外すなりしてみるとか。
Xcodeになってもインデントバグがあったりするとかなり鬱になりそうだけど(汗
すみません。CocoaJavaのNSImageについて質問なのですが dissolveToPoint(NSPoint aPoint, float delta)ではOSXに付属のスクリーンセーバのような なめらかな位置の移動はできないのでしょうか? NSPointの各座標の値を1.234みたいな値にしても結果は1Pixelずつの移動でした。 なんか根本的な勘違いをしてますでしょうか?
>>640 ウワァァン、最新版入れてもplist消してもやっぱりインデント設定を入れると落ちるよう
しょうがないからオートインデントなしで書くか…これじゃmiとあんましかわらんね
何が悪いのか皆目見当が付かないところもションボーリ
あと、ついでに質問なんだけど… オートインデントを切ったら、tabがスペースに変換されてインデントされるのは これはどうしようもないことなんですか? 回避方法(tabをtabとして記録する)があれば教えてほしいのですが… 環境設定の「エディタでタブを使う」とか項目をいじってみてもどこが変わったのか よく分かんないし…助けてくだされ
>>643 うちはむしろスペースがtabに変わるなぁ。いったいどこの設定だろ
645 :
644 :03/06/25 00:39 ID:eB6ceTrH
>>643 「エディタでタブを使う」の設定はプロジェクトの個々のファイルごと
にも設定されてるようだ。cmd+iで情報パレット出してチェック入れれば
ちゃんとtabが入るよ。
647 :
641 :03/06/25 03:28 ID:lsrrhXEh
自己解決しました。 drawAtPoint,drawInRectを使用することでうまくいきました。 よくドキュメントを読んでから質問します、、、板汚しスマソ。
648 :
641 :03/06/25 15:12 ID:lsrrhXEh
現在勉強のためCocoaJavaで全画面表示のスライドショーを作っているのですが OSXに標準のスクリーンセーバに比べて描画速度が遅くて困っています。 NSViewを継承、RunnableをimplementsしたClassを作成して run()内の無限ループでdisplay()、sleep()を繰り返し処理をしています。 (具体的な描画処理はdisplay()の中で行っています。) drawInRectの描画面積が広く、クロスフェードで透明度をつけるととても遅いです。 スリープを0にしても遅くてなめらかな動きになりません。 OSXのスクリーンセーバはとてもなめらかに動いてるので 何とか対処できるのではないかと思うのですが解決策が全くわかりません。 やはり全画面描画をするときはObj-cでNSOpenGLViewを使わなければならないのでしょうか? 全画面描画について何かアドバイスよろしくお願い致します。
練習で、NSTask から呼び出したコマンド(ls)の出力を、 ウィンドウに配置した NSTableView に表示するものを作ろうと思ったんですけど、 NSTableView にデータを表示させるにはどういう手順が必要なのかいまいち分かりません。 ・NSTableDataSource を NSTableView のデータソースとして指定する ・おそらく tableView:setObjectValue:forTableColumun:row: でデータを書き込む と言うところまでは分かるんですけど… あれ、"(NSTableView *) tableView" がパラメータとして指定されてるということは setDataSourceは必要ないということ? ls の出力結果ということで、改行で区切られた文字列がダラダラと帰ってくるわけですけど、 これを配列に変換したものを、一気に書き込むなんてことはできるんでしょうか?
NSMutableDictionaryとNSMutableArrayで階層構造を作っているデータがあるんですが、 全データを丸ごとコピーして新しい辞書を作るにはどうすれば良いでしょうか。 dictionaryWithDictionary:では頂上しかコピーされないし、 再帰でごりごりとコピーするしかないんでしょうか? あ、ファイルに書き出す、は無しでお願いします(ファイルに書き出せないデータを含むので)
>>650 うーん、この説明を読んでもさっぱりです…
たとえば myObject にアウトレットを作って、
tableView, tableColumn というアウトレットをそれぞれ
NSTableView, NSTableColumnに接続しますよね、
それでボタンをひとつ用意してそれに対してアクション run: を接続して、
その run: の中でテーブルにデータを入れたいと思ったら、
どのような操作が必要なんでしょうか?
>>652 ちょっと勘違いしているようで。
CocoaではオブジェクトがNSTableViewにデータを送って、表示するような方法は取ってないよ。
NSTableViewのほうから、「ここのカラムの何番目に表示するのは何よ?」って聞いてくるから、
オブジェクトは「表示するのは@"hoge"」とか返せば、その文字列が表示するって仕組み。
>>653 むむむ。そうすると、
NSTableView「行数はいくつなの?」 (numberOfRowsInTableView)
オブジェクト「5つだよ」(↑の戻り値)
NSTableView「じゃあじゃあ! hogeの3行目はなに?」(tableView:objectValueForTableColumn:row)
オブジェクト「hogehogeだよ」(↑の戻り値)
って感じですか?
なるほどそうなると、なぜオーバーライドするのかとか
なぜそのメソッドを使うのかとかが分かってきたような気が。
655 :
名称未設定 :03/06/28 21:48 ID:zr+eaerB
>654 マルチポスト 警告1
>>651 ファイルに書き出す一歩手前でコピーすれば良いんじゃないの。
NSCodingで一旦シリアライズしてしまうとか。
macosx-dev-jp にマルチポストしてないか?ってことでは。
しょうもな。
660 :
651 :03/06/29 21:53 ID:LocSjlbl
>656 ファイルに書き出す前の処理です。 NSCodingに対応していないオブジェクトを含んでいてそれをデータから排除したいわけです。 でもメインのデータをいじっちゃうとその後の動作に問題が起きるので、 丸ごと複製してそっちをいじってやろう、というわけで。 設計上の問題といわれればそれまでですが。
661 :
名称未設定 :03/06/29 22:58 ID:lHyYE8i9
>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:ってのもあるけど。
>663 レスサンクスです。 >でもこれってコピー用の再帰的な関数書くのとあんまり変わらんかもね。 こっちの方が再利用がきいてよりオブジェクト指向っぽいですね。 勉強にもなるしちょっとやってみます。
Objective-Cの質問です。 あるクラス(モデル)のメソッドで、文字列を引数として受け取り、 処理の結果を文字列として返す関数を作ろうと思うんですけど、 この場合、関数の定義はどうするのが一般的に正しいですか? このメソッドは常に外部のクラス(コントローラ)から呼ばれることが前提です。 - (NSString)hogehoge: (NSString)aString { (略) return aString; } のようにすればいいのかな。 オブジェクト指向言語でのプログラミングはほとんど始めてなので クラスを引数にする時はどうすればいいのかイマイチ分かってないんですけど。 return aString とやると、ポインタか実体かどっちが帰ってくるんですかね。
普通は -(NSString*)hogehoge:(NSString*)aString じゃないかと思うが。
ポインタじゃないの
>>666-667 ありがとー
その後、stringWithString とかの定義を見てたら何となく分かってきたよ
といったところでもうひとつ質問が…。
アホな質問ばかりでごめん…
クラスAとクラスBがあったとして、クラスBの中のメソッドXが、
(メソッドX内で作った)NSArrayのポインタを返すとします。
これをクラスAの中から呼び出す時は、
NSArray *hoge = [ classB methodX ];
とやるのか、それとも
NSArray *hoge = [ NSArray arrayWithArray: [ classB methodX ] ];
とやるのか、どっちなんでしょう?
もしメソッドXが返すインスタンスがそのまま解放されないとしたら、
クラスA側でわざわざ別のインスタンスを作るのは無駄なように思えるし…
前者が正解だとは思うが。
>>668 は荻原本あたりで文法を学んだ方が良いかもしれない。
>>669 ということは、まったく別のクラスの内部にあるメソッド内でインスタンス化された
ローカルオブジェクトが、解放されないまま別のクラスから参照できる、って事?
どこで宣言、インスタンス化されたオブジェクトであっても、それ自体をrelease
しない限りはメモリ上に残り続けるってことで合ってますか?
そして、たとえばクラスBのインスタンス自体が解放された場合、その中の
メソッドXでインスタンス化されたオブジェクトは解放されずに残るのか、
それとも一緒に消えるのか、どっちなんでしょ?(もちろんautoreleaseしてない場合)
萩原本は購入予定には入ってるけど資金不足でしばらく無理…
671 :
644 :03/07/01 02:14 ID:a7lEmA6e
クラスBのインスタンスが解放されても その中のメソッドXでインスタンス化されたオブジェクトは解放されずにメモリ上に残る。 クラスBが解放されてしまっているので、 たとえオブジェクトがメモリ上に残っていたとしてもアクセスできず、 メモリリークということになってしまうが。
これらの違いが分かれば後は適当で良いような気もする。 @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
>>673 それぞれの違いはだいたい分かる…はず。
autoreleaseは同じイベント処理内(もしくはarpが作られてから破棄されるまで)
はずっと保持されるってことでいいんですよね。
それに対して何も無しはずっと解放しない。
releaseがあるものはその場で解放されるのでnilが返される。
で、合ってますか?
あともうひとつだけ!質問ばっかりですいません
componentsSeparatedByStringを使って、改行で分けた文字列を作るには、
セパレータを 「@"\n"」 ってやるのは間違ってますか?
ドラッグアンドドロップについて行き詰まってます。。。 NSViewにドラッグアンドドロップするのは出来たのですが、 NSCellにドラッグアンドドロップをしようとして、はたと立ち止まってしまいました。 NSView上にNSCellを複数配置してあって、それらの一つにFinderから アイテムをドロップしたいのですが、どのように処理すれば良いのでしょうか?
NSDraggingInfoのdraggingLocationメソッドでどこにdropされたか調べればよいのでは
>>674 間違ってない。っていうか、プロジェクトを作って実験すればいいだけの話じゃん。
>>675 どのように処理すれば、の意味がよく分からん。
NSCellをオーバーライドすれば?
わかりにくくてすいません。 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:がありません。 それで、どうすればよいのかな分からなくなったのです。 長文すいません。
>674 > releaseがあるものはその場で解放されるのでnilが返される。 これ違う。 勝手にniになってくれるわけない。
>>674 後半
NSString *LF=[NSString stringWithCString:"\n"];
NSAttay *array=[hoge componentsSeparatedByString:LF];
みたいにするとか。
もっと良い方法があるかもしれない。
682 :
677 :03/07/01 19:53 ID:DHrx7bSe
@"\n" だと \n という文字列になってしまうし。
あと、
>>682 ×NSAttay
○NSArray
686 :
678 :03/07/01 20:29 ID:051k1IPs
>>679 そっか、NSCellはNSViewのサブクラスじゃないもんね。
何も考えず適当なレスしてスマソ。
ちょっと調べてみます。
実験してみたら @"\n" でいけたよ どうも他の部分でバスエラってるモヨリ
試してみたら、@"\n" でいけますねぇ。
以前、同じ問題で悩んだ時には @"\n" で失敗したので、
>>681 の方法を使ってたんだけど。
ついでだからもひとつ… 同じクラス内の全てのメソッドが使える配列を作ろうとしたんですけど @implementation Hoge NSArray *aArray = [ NSArray array ]; - (IBAction)run:(id)sender....... って感じにしてみたら、initializer elemant is not constant って怒られてしまう。 メソッド内で同じものを宣言すると問題なく通るのだけど 何か基本的な間違いをしてますか? それと、今作ってる練習用のプロジェクト(簡単なやつ)が 意味不明の場所でエラーを起こして落ちてしまうんですけど どこかに上げたら誰か見てもらえませんか? デバッガでトレースしてみてもやっぱり意味不明のところで落ちてるような。
>>678 そうなんですよ。
私もNSCellがNSViewのサブクラスだったらいいなぁと思ってたんですが。。。
解決したら書き込みます。
もうちょっとドキュメントあさって見ます。
>>689 インスタンス変数でいいと思います。
@interface Hoge : NSObject {
NSArray* aArray;
}
...
そもそも変更不可の空Array作っても仕方がないのでは。。
こういうときはNSMutableArrayを使います。
>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:を呼ぶことができる。
>>691 あやや、失礼しますた。書き間違いです。
なんでこんなことがしたいかと言うと、
これ自体がNSTableDataSourceを内包しているので、
スタティック変数(じゃないけど)を参照してセルの内容を返す必要があるんですよ。
んで、あるボタンを押すとその内容が変化するので、その度に毎回NSArrayを
作っているとそのうちメモリが溢れるかなぁと思ったもんで。
>>693 ソースまだ見てないけど、そういう場合は、
@interface Hoge : NSObject {
NSArray* dataArray;
}
で、
-(NSArray*)dataArray{
return dataArray;
}
-(void)setDataArray:(NSArray*)inArray{
if(dataArray) [dataArray release];
dataArray=[inArray retain];
}
みたいなアクセッサメソッドを作りそれを介して扱います。
deallocで[dataArray release]すればきっちり片付きます。
>>695 ??
最初のメソッドの意味が分かんないです。
この例のままだと、変なポインタ返しませんか?
もしかしたら役に立つかもしれないので教えてください。
よく考えたらNSMutableArrayを継承して、データソースのメソッドを持つ
専用のクラスを最初からインスタンス化しておくのが無難かもしれない…
>>594 のソースを見てみた。
・tableData はインスタンス変数にして -(void)awakeFromNib; の中などで初期化すれば良い
・RunTask クラスを nib ファイル内でインスタンス化する意図が不明
・listView の dataSource は nib ファイル内で指定すれば良いのに
・とにかく一回基本書を買って読んだ方が良い
>>697 アドバイスありがとー
Cocoaはやっぱり!を読んだだけじゃぁナンニモワカンネーヨ!
ってとこですか。ぐふぅ
次のステップとしては、ヒレガス本か入門Cocoaか萩原本かHMDT本が
あると思いますけどどれがいいでしょうかね。
HMDT本はまだ出てないから候補から外すとしても。
入門Cocoaは、他の本に書いてないことがちょこっとだけ載っているので、 ぱらぱらっと立ち読みすることにして、他のを全部買えばいいんじゃない。 どれにしようとか、考えてると結構時間の無駄だし。
いや、金がないんですよ(萎) 現時点でもっとも実りが多そうな本がいいなぁと… 萩原本かな。
ヒレガスだろ。 聞いてることはほとんど載ってるような・・・。 HMDTは発売後様子を見てから。
>>701 萩原本立ち読みしてきたらすごく良さげだったんで、やっぱり両方ですかのう
合計で7000円くらいするよ…あふん
たしかに萩原本は役に立つ。ちょっとしたリファレンスとしても重宝。 そこらへんHMDTに期待。テキスト処理なんかが詳しく書いてあるとかないとか。 ちなみに、Learning Cocoa -> 萩原本 -> Cocoaはやっぱり! -> ヒレガス本 -> Cocoa Programming の順で買った。
おこづかいが今、全部で1200円しかないんです。 でも1冊買うとしたら、どの本を買うと良いですか?
かえませんw
おこづかい以外の金がある罠
本当にそうなら図書館いってみい。 割と大きめの図書館なら大体おいてるし、無ければ「ない」と言えば、結構おいてくれる。 うちの近くの図書館もそんな感じで、妙にプログラム系の書籍が多いぞ。
図書館なんて地方地方で事情が全然違う 自慢にもならんが、こっちの図書館には全部ない。 行く度にリクエスト用紙かいてくるが2年間ずっと無視 郷土関係のマイナーな本は山ほど買ってる見たいだけど、いらね 他の図書館から取り寄せてもらっても、貸し出し付加 ・・・・・・・・・・・結局全部かいますた
この前、LaoxMac管でアーロンの本買ったら、手あかで黒くなってやんの。ムカついたよ。 買う本決まってる時はアマゾンで買うと決心した。
>>709 ばかやろう、その本はなあ、みんなにもみくちゃにされながら
おまえに買われるその時をじっと待ち続けていたんだぞ!
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)をすると上記エラーが発生する
>>711 そうなのか。(´・ω・`)ショボーン
>712 Javaでこれが起こるってことはガベコレのバグかな? これはObjCでNSAutoreleasePoolと言うクラスのインスタンスがないスレッド上で autoreleseメッセージを送信したときにでるものです。 まあ、あえてJavaでいえばインスタンス変数にNULLをセットするようなものかな? 最初に書いたようにJavaの場合はガベコレが勝手にやってくれますので意識する必要はまったくないです。 どこかでプロジェクト一式晒してみるか、 Appleに”ガベコレがおかしいぞ!ゴルァ”メールを送るかしないとだめかも。 と思って調べてみたらCocoa/JavaにもNSAutoreleasePoolがあるのね。 いまいち必然性が分からない... ってことで各スレッドごとにNSAutoreleasePoolのインスタンスを確保してください。
715 :
686 :03/07/05 11:16 ID:gnCL+1ww
>>690 ふと気がついたんだけど・・・
ドラッグ関係のメソッドってNSViewに実装されているわけではなくてNSDraggingDestinationプロトコルのものなんだよね。
(NSObjectで採用されている)
だからNSCellでregisterForDraggedTypes無しでもドラッグを受け入れられるのかも?
716 :
712 :03/07/05 18:40 ID:zkMtTc1B
>>714 レスありがとうございます。
NSAutoreleasePoolについて調べてみたものの解決しません。
NSAutoreleasePoolのドキュメントに以下のような方法で例の
エラーを回避できると書いてありました。
//--------------------------------Cocoa-Javaドキュメントより
int myPool = NSAutoreleasePool.push();
// Your code here
NSAutoreleasePool.pop(myPool);
//--------------------------------ここまで
しかし、これをどこに記述すれば良いのかがわかりません。
今回自分で新しいスレッドは生成していませんし、、、
とりあえずボタンをクリックされた時のアクションメソッドの最初で
push() して、このメソッドの最後でpop()してみましたが、駄目みたいです。
ほかにもいろいろ試してみましたがどれも解決しませんでした。
やはり、なんらかのバグなんでしょうか?(あまり簡単にバグだと思いたくない
んですよね)
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= と、空白にすると 警告も出ず、「ビルドは問題なく完了しました」と表示される。)
>>717 3.3の付属ドキュメント(PDF)に全部書いてある。
マウスボタンを押していない時のView内のマウス座標が知りたいのですが、 取得できる座標は画面端からの座標だけなのでしょうか? Viewやwindowはマウスボタンを押した時にしかわからないのでしょうか? window1枚にNSView,CustomViewの2枚が乗っている状態です。
もう一個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
>>720 s = [ NSSound soundNamed:@"Bang" ];
[ s play ];
[ s release ];
を同じメソッド内で処理するようにしよう
音を鳴らすことが多いので、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
んじゃ、aとかbとかのサウンドの名前や通し番号を引数で渡すようにしたら ちょっとは汎用性が高まるけれども。
>>722 MyVからMyOのメソッドを呼び出そうとしている書き方が間違ってます。
その書き方では呼び出せません。
MyVのインスタンス変数に「MyO *myO;」とか保持させてちゃんと代入すれば、
[myO bangSound:1];
と呼び出せます。あるいは、
NSApplicationのdelegateに音を鳴らすメソッド書いておいて
[[NSApp delegate] bangSound:1];
とか。
あと、soundNamed:で作られたインスタンスは(最初からautorelease
されてるので)releaseしたら駄目。
逆に言うと、ずっと保持していたい場合はretainしなきゃ駄目。
>>722 わざわざMyOにsを持たせずにMyVで作成して保持すれば良いことだと思うが・・・
>>719 グローバル座標からViewの原点を引けば良いんじゃないの?
+わざわざ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も勉強中なので、試してみます。
>>726 それじゃMyVごとにMyOのインスタンスがそれぞれ作られるんで、
>わざわざMyOにsを持たせずにMyVで作成して保持
するのと一緒。
「MyO→s, MyV, MyV」としたいのだろうが
「MyV→MyO→s, MyV→MyO→s」となっている罠
>726 >myO=[MyO alloc]; myO=[[MyO alloc] init]; ね MyOに関しては>728の通り。 Cocoa的には 1.MyOをnib上でインスタンス化 2.MyVにMyOのアウトレットを追加 IBOutlet id MyO; 3.nib上でMyVのアウトレットにMyOのインスタンスを接続 ってのがスマートかも。
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
詰まったらまた質問に来ます。ヨロシクお願いします。
>>730 awakeFromNibというメソッドを調べてみると吉
>>731 初期処理で音データを一度読み込んでおくというふうに理解しましたが?調べてみます。
>>etc
実際のコードにおとす部分でイロイロ詰まってまして、、また来ます。
HMDTの本ってオンラインで予約できるサイトないのかな? 出版元のサイトにもトップページのコラム以外に情報のってないし・・・。
オンラインでないとダメなの?
今さらCocoa本はいらん。 もうちょっと前なら欲しかったけど、、、
>>735 じゃあ、おすすめの本とか勉強方とかを聞きたかったりして。
>>733 表紙の画像はあるのにISBNコードも予価も書いてないし。。。
原稿が遅れてるんですかね?
20日に出版できるんだろうか。。
誤植いやだから初版は避けたいところだけど、
どうせMac関連の本だし第二版なんて出るのはいつの事やら。
Webで誤植フォローしてくれればいいんだけどね。
738 :
735 :03/07/12 20:47 ID:L/wAtXpy
>>736 う〜ん、お勧めかぁ。
俺が読んだのは『Jaca&Cocoaプログラミングバイブル』だけなんだよ。
あんまりお勧めはしないけど…。
基本的にドキュメント読んで、いろいろ試してれば分かるでしょ。
どの本読んでも内容は一緒に見える。
ただ、Obj-Cの勉強をしたいなら話は別かもね、俺はJava使いだから。
HMDTとの差別化に苦労してるな。
とあるクラスのソース内で、メソッドの中括弧の外で宣言した変数は 同一クラス内から自由に参照できますよね。 とすると、そのヘッダで、 @interface Hoge : NSObject { // この部分 } ここで宣言した変数はどういうことになるんでしょうか? 外から見えるようになるんですか?
>>739 を、ほんとだ。トップからはリンクなさそうだけど(つーかフレームのメニューが固定だから狭い画面なんで見落としてるかもしれんが)。
まだメインの記事は復活したわけじゃないし、740の言う通りHMDTとの差別化に苦労してるっぽいね。
今後どうやってくのかちと様子見(ほれ、PB(そのうちXcode)とIBの使い方はここ見れって言えるサイトに戻るといろいろと楽なんだが)。
#正直blogだけだとゴミ決定だったけど、これで見れるサイトに戻ったな。
>>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
発売延期アゲ
Cocoa環境で使える、質が良くてそこそこ高速な乱数生成は、どれを使うのがいいかな?
>>749 C言語のsrand( time(NULL) )と、rand()関数使え。
>>750 rand()なんて質の悪い関数使えないっす
>>751 あそ。
そこまでの質を求めて何したいのかはわからんが、
MT法を使えばいい。
なんで逆ギレされんのかわからん…
いやキレてないわけで・・
というか、逆ギレの使い方が間違っているわけで・・
そもそも、そういう事を議論するスレではなくて・・・
使用目的または評価方法について書かれていない限り 質がいいかどうかなんて他人に判断しようがない。 だから、一番お手軽なrand()を教えてくれたのに 「質の悪い」なんて言い返した751が悪い。 ちゃんとどの程度の質を求めているか書けばよし
randを知らんプログラマーなんているのか
>>758 居るんじゃない?
というかこの話題もうそろそろやめたほうがいいでしょ。
WebKitSDKが落とせないなー。
Japan以外なら落とせたー。
HappyMacintoshDevelopingTime買ってきたけど、読みにくいな。 C言語をマスターしてるのが前提なのにメモリのアドレスとか、ヘッダ ファイルとは・・・、とか無駄な説明が多い。1〜3章は要らない。 校正も残念ながら不十分で、おかしな日本語や図の貼り忘れとかがある。 説明もあまり適切ではない。読むんなら4章以降でしょう。 ウェブサイトの方は簡潔なのにね。本だとむずかしいのかな?
読んでないから中身についてはなんとも言えないけど、 むしろ「プログラミングをやったことが無い人にも 読めるように作った」とか書かれていなかったっけ。
>>764 そうなんだけど、多分、そういう人が読んだら3章までで挫折すると
思うよ。それにObjective-Cを使うためにはCがわからなければ無理
だから、全くプログラムを組んだことがない人、ってことはありえない。
Cocoaの初心者という意味だと思う。
1〜3章は入れないほうが良かったと俺は思う。
さすがにCの教科書はたくさんあるから、省いてもいいとは思うけど。 第2版は出ないだろうから、ミスはミスのままか…… 作者のサイトでエラッタがでればいいか。
768 :
763 :03/07/24 17:37 ID:AQGdguy4
>>767 まだ5章読んでるとこだから何とも言えんが、4章からはOK。
>>769 NSTableColumnがeditableということはありませんか?
[tableColum setEditable:NO ] で、入力側にDoubleClickを奪われなくなるなり。
>>770-771 まさにそれが原因でした。
何かに反応するには editable = YES だろうと勝手に理解していたのですが、
どうやら editable の意味を取り違えていたようです。
ありがとうございました。
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() の違い(意味?)が よく分かりません。だれかご教授おねがいします。
>>773 通常は MenuItem を選択した場合に action が呼ばれるわけですが、
MenuItem に SubMenu のある場合は、
選択しても何もしないのが正しい挙動なのでは?
あと、NSMenuItem の
setMenu は親メニューを登録する場合に使い、
setSubMenu は子メニューを登録する場合に使うものではないでしょうか。
リファレンスでは setMenu は呼ばないように注意されていると思います。
>>773 言いたいことはわかる。
>>774 >選択しても何もしないのが正しい挙動なのでは?
動的作成(というよりオンデマンド)メニューを作りたいからで、
サブメニューからアクション(コールバック)されてメニュー構築
をしたいということでしょう。
Obj-Cで試したことあるけどできないんだよ。
- (void)submenuAction:(id)sender;がコールバックされない。
ドキュメントでは、メニューがオープンされるとき呼ばれるとあるんだが。
たぶん、バグでしょう。分かる人いたら教えて!
他の人たちは、Carbonでやっているはず。
>>775 submenuAction:は使ったこと無いけど、メニューのオープンならNSMenuのupdateメソッドで拾える。
>>774-776 返事ありがとうございます。
なるほど、基本的には出来ないのが”仕様”ということですね。
>他の人たちは、Carbonでやっているはず。
そうなんですか、、Snardみたいなことをしたかったんですが、残念です。
でも、出来ない事が分かったので、別の方法を検討してみます。
重ね重ねサンクスです。
こういう場合普通、変動がある度にメニューを更新しておいて プルダウンされる時には既に更新されたメニューにすり変わってるんではないのかな? まあ、snardを知らないわけだが。
なぁ、macosx-dev-jpってやたらとスルーされる質問が多いと思わないかい?
どんな質問? スルーされた質問をコピペしてみ、解かることなら答えるよ。 ところで、macosx-dev-jpってどんな雰囲気なんさ?
いや、漏れの質問ってわけでもないけどさ、 答えられるだけの技量を持った人が少ないのかなぁ… まぁ漏れは答えられないから黙ってるんだけどさ。 雰囲気としては、普通の技術系MLと同じような感じで大人しいですよ。
>>778 いや、普通はメニューバーのメニュー項目がクリックされた時に
メニューを再構築するんだと思う。その延長で、サブメニュー
のあるメニュー項目がクリックされた時に、再構築しようって
ことになったのだと推察。
最初にサブメニューも含めて再構築するしかないのではないか?
階層構造深くてそのタイミングで一気に再構築だと時間かかる
のであれば、778の言うようなやり方するか。
>>782 質問者は単にフォルダ(=サブメニューあり項目)を選んだら
Finderで開きたいだけのような気もする
>>781 雰囲気今は枯れてるのだが、一時期FinderのUIがどーのでフレーム湧きまくりでおおむね逃げちゃったんじゃないかな?>答えるような椰子。
そういう罠はある。ま、MLワチスレで確認してくれ。
>>784 技術系MLって、なぜかどこもそういう話題で荒れたり感情的になったりするよね。
個人への批判やたしなめの文章をML宛に送信したりとか。
実はアホが多いのかな。
>781 パスワドのことなら、あれ答えるのが難しい。 MacOSX的には「KeyChain使え」何だけどCocoaフレームワークに入ってないから薦めにくいんだよね。 しかも使い方覚えるまでが地獄だし。 かといって「DEC(crypt)使うのが普通」ってのもなんだかなあって思うし。 んでも「MD5ハッシュでもいいよ」って答えるのも違う気がするし。 っていうのを誰かポストしてくれればいいなーなんて夢想してみる。
>786 夢想してないで、そのままMLに投げちゃえば良いべさ。 全員が均一なスキルを前提としたような、クロ−ズドなMLじゃないよね? 質問者の書かなかった行間を(勝手に)補完してみたり、派生する(技術的な)余談を振った方が 面白いと思うんだけど。 答える人を暗に固定していってしまうと、発言できる・できないの閾値が 自分のストレスになるよ。 ストレス溜めておくと、フレームが燃えた時に参加したくなるから(w
>>783 正解です。
結局今のところフォルダを表すメニューの子メニューに
『***(フォルダ名)を開く』というメニューを持たせることにしました。
多少操作性が悪くなるけど。。。
>>788 CarbonのChangeMenuItemAttributesで、kMenuItemAttrSubmenuParentChoosableを
指定やればできると思います。
ちょこっとやってみたところ成功しました。
ただ、今やってみたところ、nibファイルで作ったメニューには効くんですが、
プログラムで作成したメニューに対しては効きませんでした。。。なんで?
プログラムで作ったってのは、ステータスメニューアイテムを作成して
その中のメニュー項目にたいしてなんですが、なんで効かないんでしょう。。。
クリックできるメニューとできないメニューの表示区別が無いのに >サブメニューのあるメニュー項目がクリックされた時 に選択されるというUIは、激しく気持ち悪い。
>>789 Carbonなら出来るみたいっすね。
俺、Carbonは全くわからないんすよ。
すいません。
とにかく、情報ありがとうございます。
>>790 そうですか?
いや、そうかもしれないっすね。あんまり考えた事無かったです。
でも、メニュー自体がディレクトリを表すので逆に直感的かな…と。
フォルダのアイコンをメニューにつけたら少しは気持ち悪さが
減りますか?(そういう問題じゃない?)
HMDTの記事を参考にして、Cocoaアプリケーションにホットキーの機能を付けようと思うんですが、 HMDTの記事どおりにやっても、エラーが出てアプリケーションが起動しません。 targetの設定で作成したNSApplicationのサブクラスを主要クラスに設定し、 File's ownerのカスタムクラスも作成したNSApplicationのサブクラスに設定してあります。 エラーの内容に Creating more than one Application とあるので、どこかでNSApplicationを複数作成してしまっているようなのですが コードを見直してもそのような記述はありません。 どなたか解決策をご存じの方はいらっしゃいませんでしょうか?
HMDT の記事を参考にしたのであれば、 HMDT のサイトの BBS で直接聞いた方が早いんじゃないかと思うが。
>>792 「ホットキーを登録する」の記事のことだったら、その記事には
詳しい解説があって、
サンプルソースのプロジェクトまで置いてあるみたいだけど。
動いているコードがちゃんとあって、Macがエラーまで指摘しているのに
これで、まともな質問すらもできない奴の
「解決策」なんて、ひとつしか無いとおもわれ。
"Learning Cocoa with Objective-C 2nd Edition" 初心者向けにイイよー。初版とはまるっきり別の本だ(w
>>794 もちろん解説も読みましたし、サンプルコードも見ました。
動いてるソースと自分のソースを比べて異なっているのはもちろん
自分のソースにはいろいろと他の処理が入っていることです。
その上で、"Creating more than one Application"というエラーが出るので、
上記のようにどこかでNSApplicationを複数作成してしまっているのでは?と推測しました。
作成したNSApplicationのサブクラスには-initや、+sharedAppliccationといったメソッドも
HMDTの通り、実装してあります。
一応どこかでNSApplicationの+sharedApplicationが呼ばれてしまってるのでは、と思い
カテゴリで自分の作成したNSAplicationのインスタンスを返すように
NSApplicationの+sharedApplicationを上書きしてあります。
自分の書いたコード中で明示的にNSApplicationを作製している箇所はないので
なぜなのか分からない、ということでこちらで質問させていただきました。
確かに長くなるので説明をはしょってあります。上記説明でもはしょってます。
>まともな質問すらもできない奴
で申し訳ない。
>「解決策」なんて、ひとつしか無いとおもわれ。
そう言われちゃしょうがない。
>>793 そうなんですが、こちらの方がいつも利用しているし、返答も早いだろうと思い
こちらに書き込みました。でもおっしゃる通りですね。
今あちらにポストするとマルチになるのでもうしばらく調べてみます。
もし、同じような箇所ではまった方いらっしゃったら情報いただけるとうれしいです。
NSApplication のサブクラスの +sharedApplication で 既にインスタンスを作成してある場合は改めて init を呼ばないようにしてあれば、 他の場所でいくら +sharedApplication を呼んだところで "Creating more than one Application" が出るはずないと思うが。
>792,796 インスタンス作ってる部分が被ってるだけだと思うが、、、正直質問が掴めん。 >795 推薦文でも書いてくれ でも、初版と比較するから良くみえるんじゃねえの? >794 毒吐いてないで、アドバイスしてやれよ。 でも、 |他人からパクッったコードと自分のコードを混ぜたら動きませんでした。 |おれさまのコードは(漠然と)動いていたので悪くないです。 |何とかしてください。 っていう香具師を思い出したのは確かだけど(w
>792 えーとHMDT見てないので適当に > targetの設定で作成したNSApplicationのサブクラスを主要クラスに設定し、 > File's ownerのカスタムクラスも作成したNSApplicationのサブクラスに設定してあります。 この場合、 int main(int argc, char* argv[]) { NSApp = [[AppsSubClass alloc] init]; ....... } てのが必要だとADCのドキュメントに載ってた気がする。
オブジェクトの解放に関する質問なんですが・・・ オブジェクトAの中でオブジェクトBを生成します。 オブジェクトBは一定時間待ってオブジェクトAのメソッドAを呼び出して任務終了です。 この場合オブジェクトBの生成時にretainしないでほったらかし (というか[[[B alloc] init] autorelease]) にして、作業完了したら勝手にいなくなってほしいのですが、 どのようにすれば良いのでしょうか? メソッドAでreleaseすれば良いわけですが何となくスマートじゃないような気がして。 やっぱ自分で自分をretain,releaseするのは反則なんですよね? NSTimerなどはどのようになっているのでしょう? ちなみに「一定時間待って」というのはあくまで例でして、NSTimerを使え、というのは無しでお願いします。
>>800 質問の意図が全然わからん。
AがBを作成し、
BはAを利用。
Bが作業完了したら、もういらない。
AはBを保持したくない。
ってことだね。Bの作業完了ってのはBのその作業をする
メッセージを呼ぶ奴が誰かいるわけだから、その作業を
要求したやつがリリースすればよいのではないかと思うが。
それと、その間EventLoopから抜けないのであれば、
NSAutoreleasePoolが開放されないから心配いらないし。
どっちにしろ、何がやりたいのかもう少し具体的に説明すれ。
802 :
800 :03/07/30 16:47 ID:0YSl6FwL
質問が抽象的すぎましたね、すみません。 えーとですね、BはGUIのコントローラです。 Aでボタンを押されるとパネルを表示して、ユーザがボタンを押したらAに連絡します。 ものすごく簡単に言えばアラートを表示してOKを押させるだけのクラスです。 もちろんAの中でやりゃすむ話ですが、いろいろ使いまわししたいので別クラスにしたわけです。 なもんでパネルを表示したらEventLoopから抜けてしまいます。 うーん、やっぱりAが保持すれば良いだけのことですかねえ? パネルを表示するのを専用のクラスでなくてNSAppでやっているのが不思議だったんですが、 もしかしてそこら辺の事情もあるんでしょうか?
>>802 用が済んだら勝手に居なくなるという動作で言えば、
autoreleaseしている時点で「いつか勝手に無くなります」。
それはイベント処理の終わり(デフォルト)かもしれないし、
自前で作ったARPを解放した時かもしれないけれど、
とにかくいつかは解放されます。
ということで、希望通りの動作をしていることになります。
もしもう使わないことが決定した時点で解放したいのなら、
autoreleaseを使わずに、[ [ B alloc ] init ]で生成して、
不要になった時点で自分でreleaseする必要があります。
ARPに登録したインスタンスをretainせずにreleaseした場合は
実行時にエラーが出ます。
具体的に言うとARPが解放された時点で、存在しないインスタンスを
解放しようとして怒られます。
返事が無いみたいだけど、
>>802 タンは理解してくれたかなぁ…?
オーナーシップ・ポリシーの考えに従うと、
オブジェクトを生成(alloc)した人(今回はオブジェクトA)が責任を持ってreleaseしないと
いけないことになっています。
だからAが生成したインスタンスBを、Aが解放するのはごく普通のことです。
その手間を省くのが、autoreleaseということです。
>>802 NSDocument と Document Window のような関係の
NSDocument 側を生成&消滅させたいってことですね。
まずPanelはModeless Windowですか?
私の場合は、ControllerをPanelを定義するnibでインスタンス化
させてしまいます。そうすると生成&消滅するタイミングを気に
する必要がありません。この方法の欠点は、生成するだけの役割
のクラスがそのnibのFile's Ownerになってしまうってこと。
あとは、そのパネルの終了時のNotificationをクラスAなりNSApp
なりで受け取って、消滅させる。でもその場合にはそいつがクラス
Bのインスタンスを保持していないとだめか。
自分自身に終了ボタンが押された時に自分自身にreleaseか
autoreleaseを送りたくなりますね。
でも、それはクラスAが生成してクラスBが消滅させるっていう
のが嫌っぽい。誰もが納得する正解はちょっと思い付きません。
806 :
802 :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に解放してもらうことにします。
ちょっと話が前後してしまいますが・・・ >私の場合は、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ってことです。 (解放と言うかオーナーシップの放棄ね)
>>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は必要な限り存在しているし
必要なくなったら破棄されるってことでやっています。
苦肉の策なのでもっと良い方法あれば私も変えたい。
あの、盛り上がってるところ申し訳有りませんが、 質問させて下さい。 Cocoaアプリのinfo.plistのNSBGOnlyに1をセットすると ドックにドックを表示せずに起動出来ますよね。 しかし、こうして起動したアプリケーションに対してキー入力 が出来ません。これはこういうものなのでしょうか? 例えばテキストフィールドに文字入力が出来ない。 Command + W でウィンドウが閉じない…等。 これは仕様なのでしょうか? アプリケーションがアクティブにならないからキーイベントを 受け取れないというのであれば納得できるのですが、出来たら 受け取りたいです。良い方法は無いでしょうか? それともバックグランドアプリで文字入力はタブー??
>>795 そんなにがらっと変わったんだ。
初版買っちゃったんだよな〜。うかうかしてる間に日本語版とか出てるし(死
でもあんまたいした事なかったんだよね、あれは。
O'Reillyの新刊もそう考えるといいのかなぁ。
813 :
806 :03/07/31 17:59 ID:Z8iT+W5Z
>>808 ほほう、NSRunLoopが管理してたんですか。
勉強になりました。
そう特殊なことをやっているわけではないんですね。
>>809 >nibで作ったインスタンスの廃棄処理はプログラム的には気にしなくて
>よかったのですよね?
え、そうなんですか?
ウィンドウが閉じられたらnib上のインスタンスが全部解放されるとか?
(そういわれてみるといままでもそうだったのかな)
それならBをnibでインスタンス化しておいて、
FactoryClassを作成してすぐにautoreleaseで良いのかも。
作業が完了したら自分でパネルを閉じるので、
そこで(そのうち?)nib上のインスタンスは全部解放してもらえる、と。
よく分からないんで、あとでテストしてみます。
>>812 サンクスコ!
最初クラス名かと思って探しちゃいました…。
思ってた事が出来ましたよ( ´Д⊂ .... メグスリ タゾ. ゴルァ゙
>>813 >ウィンドウが閉じられたらnib上のインスタンスが全部解放されるとか?
Nibの読み込みにNSWindowControllerを使うとそうなる。
NSBundleから読み込むと自分で解放する必要有り。
……と、DevTool付属のドキュメントに有ったと思う。
816 :
815 :03/07/31 22:03 ID:uAmd+BBO
>>815 ,816
おおー、なるほど。
そういうことでしたか。
WindowControllerはまだ良く分かってないんでちょっと読んでみます。
どうもです。
そういえばヒレガス本かなんかでもこれ説明されてるんですよね。
今度立ち読みしときまふ。
>>815 ,816
ありがとん。自作プログラム修正しなくちゃ。
819 :
名称未設定 :03/08/01 16:50 ID:7B1ZjzpR
質問です。 ドロワーってユーザーが自由に大きさを変えられますが、これの大きさをAutoSave するにはどうすればいいのでしょうか。 NSWindowの、-setFrameUsingNameみたいなのもないみたいですし・・。
AutoSaveは無理なんじゃないの? 自分で保存しようよ。 大した手間じゃないし。
今JAVAでCocoa用のライブラリを作ろうとしてるんですけど、 ProjectBuilderでプロジェクトを作らずに普通にCocoaライブラリに クラスパスを通してコンパイル-テスト(JUnit)を行うとコンパイルは普通に 通るのですが、テスト時に _NSAutoreleaseNoPool() エラーが多数出力されます。 それでもテストには成功するのですが、精神衛生上よろしくないっす。 多分正常な(Cocoaが内部的にやってくれている)処理を踏んでいないので 起こるのだと思われます。解決方法は無いものでしょうか? どなたか、Cocoa-Javaライブラリを作った方いましたら体験談 が聞きたいっす。
822 :
山崎 渉 :03/08/02 02:06 ID:pAaIAblN
(^^)
>>821 >通るのですが、テスト時に _NSAutoreleaseNoPool() エラーが多数出力されます。
よくわかりませんが、そのライブラリの入り口で
NSAutoreleasePool.push();
出口で
NSAutoreleasePool.pop();
してやればどうでしょうか?
現在Macがインターネットに接続されているかどうか調べるにはどうしたら良いんでしょうか? Cocoa、Carbonどっちでもいいんですが
>824 NSTaskでPingを使ってみたら?
以前は変数はメソッドの先頭で宣言でしなくてもエラーにならなかったのに、 いつの日からかparse error before '*' と出るようになりました。 NSString *string; NSLog(@"test"); string = @"string"; は問題ないのに NSLog(@"test"); NSString *string = @"string"; だとエラーになります。なぜだか分かる方いないでしょうか?
>>826 そういうもんです。
変数の宣言は必ずメソッドの最初でやるべき。
なぜと言われてもコンパイラのバージョンが挙がったからでないの?
別にNSLogの順番が変わったところで対した問題でも無し。
828 :
826 :03/08/04 11:40 ID:JJk6Ww9z
>>827 そういうもんなんですか... いつからこうなったんでしょう。
僕みたいな初心者が参考書を見ながらプログラムする時困るんじゃないだろか。
どこでも好き勝手なとこで変数がでっち上げられちゃうほうがよほど困るよ Perlとかな
>>827 > 変数の宣言は必ずメソッドの最初でやるべき。
この仕様もどうかと思うんだけどね・・
変数の宣言が集中しちゃってややこしくなっちゃう。
一時的に使う変数を最初に宣言するのが嫌なら、 その一時的に使うルーチンを別の処理単位に分けたほうがいいよ。 メモリの動的管理という意味からも、そのほうがいい。と、思う。
>>825 gcc3.3 (Dec2002gccUpdater) 入れてない?
デフォルトコンパイラが gcc3.3 になってると、Project Builder が gcc2.95
を使うようになって、ISO C99 の拡張が無効になる、ということみたい。
とりあえず、
gcc_select 3
すればよい。詳しくはアップデータ付属のドキュメントを読む。
>>830 メソッドの途中でしか使わない変数は、中括弧で囲ったブロックの中に閉じこめれば
いいと思うけどな。
下手に処理単位を分けると却って引数の受渡しでごちゃごちゃする怖れもあるし、
この方法が個人的には気にいってる。
>>824 TechNote 1145が参考になるかと思います。
原理はEntpointを作成してみて確認するという
無理矢理な方法で確認しています。
それか、System Configuration Frameworkのドキュメントを見て下さい。
原理はやっぱりDynamic Storeに有効なIP Addressを持つものが
あるかどうかを調べると言う、
やっぱり無理矢理だなあという方法を使っています。
Jaguarだとこれが限界ではないかと思います。
835 :
824 :03/08/06 13:06 ID:cLUQBlNu
>>825 ,834
レスサンクスです&遅レスすいません
ストレートに調べることはできないみたいですねえ。
API一発で調べられるのかと思ってたんですが・・・
何も考えずとりあえずつないでみるってのが一番手っ取り早いのかもしれませんね。
"Learning Cocoa with Objective-C 2nd Edition"で勉強している所ですが、 初版と比べてやっぱりずいぶん分かりやすくなってますね。 Currency Converter Tutorialのくだりは初版ではわかりにくかったのが、 ずいぶん説明が整理されて、ワシのようなド素人でも 何とかなるレベルになってました。 英語で文献を読める人なら、お勧め、って感じです。
837 :
名称未設定 :03/08/08 22:58 ID:6SrqXNAY
マルチウィンドウなアプリを作る場合にですね、 新しいウィンドウを動的にいくつも生成したいわけです。 この場合、Interface Builderではどのようにすれば、実現できますか? 同じnibファイルに新しいウィンドウとして作ると、最初からインスタンス化されたままに なりますよね? あと、他のアプリを覗いてたら、複数のnibファイルに別れてるんですけど、 これはどうやって読み込むんでしょうか?
一般的な、ファイルの中身をウインドウに表示するものなら プロジェクト新規作成時にDocument-basedを選べば良い。
>838 >あと、他のアプリを覗いてたら、複数のnibファイルに別れてるんですけど、 >これはどうやって読み込むんでしょうか? NSBundleのloadNibNamed:owner:
うーん、画像ビューワーなんですが、画像を表示するウィンドウの他に、 操作用のウィンドウ(これが本体)が必要なんですよ。 そういうのって Document-basedでいけるんですかね。
NSWindowControllerのinitWithWindowNibName:のが適当じゃない?
>操作用のウィンドウ(これが本体) 所謂、「インスペクタ」だと思っていいのかな? MainMenu.nibでユーティリティウインドウを作ってもよさげな感じがするけど。
>>842 それっぽいです。助かります。
>>843 そうかもしれませんけど、私にはそれが何か良く分かりません…どうもすいません。
ところで、Document-basedでのアプリの作り方がまるで分からないんですが
別に使わなくても出来そうな気もします。どうなんでしょう?
>>844 > 別に使わなくても出来そうな気もします。どうなんでしょう?
使わなくても出来るけど使ったほうが楽チン。
うーん、HDMTやらよしきを見て見たんですけど、 今のところとりあえずQuickTime(OSかな?)が提供してくれてる画像ルーチンを 使えればいいので、Document-basedだとファイルタイプとか拡張子とか確認して登録するのが 面倒くさい分不利な気がしてきました。 ということで今回は普通のCocoaアプリとして作ったほうが面倒が少なそう…
>846 QTが再生できる全フォーマット用のファイルタイプがあったはず! でも忘れた(泣
だ、ダメじゃん…w どうでもいいけど、PICも展開できたらいいかなと思って 「PIC 稲妻展開」で検索したらX68kへの愛が感じられるテキストがヒットして 泣けてきましたよ。
Interface Builderで、ウィンドウのサイズが一定より小さくならないんですが、 これはIBの仕様なのかOSの仕様なのかどっちなんでしょう? この限界を突破してもっと小さいウィンドウを作りたいんですがどうすればいいですか?
サイズの最小を変更しよう! そうしよう!
NSTextField に入っているのが、文字か数字(整数)か判別したいんですけど 決まったやり方みたいなのはあるのでしょうか? 今はintValueで返って来た値をみて、0が入っていた場合や 全角の数字が入っていた場合を始めに振り分けた上で判断するしかないのかな と思っているのですが・・・
もっと良い方法があるだろうと思いつつも 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 の使い方がいまいち分からないです。
>>851 NSScannerのscanInt:を使いましょう。
NSScanner の scanInt: だと、 例えば @"10a" といった文字列の場合に YES が返ってくるような気もしますが。
855 :
853 :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;
}
>851 何をするために判別するのでしょう? 目的によって最適な方法は変わると思いますが。
>>850 ありがとう。できました。
ところで、Project Builderについてなんですけど、
ClassesとOther Sourcesとあって、Interface Builderから作ったソースやヘッダは
Other Sourcesに置かれるんですが、じゃあClassesには何を置くとか、そういう使い分けは
基準はあるんですか?
>>857 たまたまでは?最後に選択したファイル/グループによって
その時々でファイルの作成場所は違っているようです。
859 :
851 :03/08/12 18:17 ID:HHx7bqnA
>>852 , 855
ありがとうございます。そんな方法があったとは!
NSCharacterSetは、まったく気が付きませんでした。ドキュメント読み直さねば。
>>856 NSTextFieldの入力を見て、数字入力と文字入力の振り分けがしたいのです。
数字だった場合は、リストに登録してある番号に、その数があるかどうかを見て
あった場合は、その番号に対応する項目名を自動入力したいなーと。登録が
なかった場合は、エラーを返して入力を促します。
文字列だった場合は、リストに重複がないかを見て、新しい項目名だった場合は
追加登録するという流れです。
>>859 一つの TextField に複数の機能を持たせた場合、
画面はシンプルになりますが、頭の中は逆に混乱してしまうので、
そこらへんを検討された方が良いのではないかとも思います。
>>859 そう言う用途なら単に最初の1文字が数字かどうかで分けても実用上問題ないと思うけど。
>>867 えっ、そうですか?
PBから、適当なところをクリックして新しいファイルを作ると好きなところに置けますけど、
IBから(PBでMainMenu.nibをダブルクリック)だと今まではOther Sourcesにしか
ファイルが置かれたこと無いんですけど。
>>862 確認のため、今試したけどIBからソース書き出しする前に
Classグループを選択しておいたら、ちゃんとそこに書き出された。
環境は?こっちは10.2.6 + Jul 2002
>>863 ありがとう、意味が分かりますた。
何となく常にResourcesを選択していた(多分main.mがあるから)のが、
間違いの始まりだったのか…
普通に考えたら、クラスの定義するファイルなんだからClassesに置くのが当たり前ですよね。
と思ったら、Classesを選択してから書き出しても やっぱりOther Sourcesに書き出される…なんでだ!? こちらは 10.2.6 December 2002でおます。 結局生成してからClassesにドラッグしてまふ…
866 :
名称未設定 :03/08/13 06:59 ID:AAHCYJID
Cocoaでわからないことがあります。 ・ファイルがエイリアスであるかどうかを判別する方法と、 ・エイリアスだった場合、元ファイルのパス 誰かご教示下さい。
>>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を嫌う
>>846 ,868
ドロップされたファイルを全部受け取りたいなら
ファイルタイプを"*"にしときゃいいだけだと思うが。
>なぜそんなにDocument-basedを嫌う
単にOSの仕組みを知らないだけだろう。
そもそもDocument-basedにしないと
DnDやファイルオープンダイアログでの
フィルタリングは効かないからな。
870 :
866 :03/08/13 18:14 ID:3/Oef21X
> そもそもDocument-basedにしないと > DnDやファイルオープンダイアログでの > フィルタリングは効かないからな。 嘘。 NSOpenPanelを100回読め。
872 :
851 :03/08/14 03:24 ID:7jqNoBtb
>>860 ありがとうございます。そこが結構気になっている部分なんです。
ただ、同じ一つの項目を入力させるのに2つのフィールドがあるのも
混乱する所かなーと思って、とりあえず二種類作ってみることにしたのですが
いまだ結論は出ず。
NSOpenPanelのテストとして、こういうのを書いたんですけど、 なぜかファイルを選ぶとバスエラーで終了します。 キャンセルした場合は問題ない模様。 どこかおかしいところはある? - (IBAction)openFile:(id)sender { NSOpenPanel *op = [NSOpenPanel openPanel]; int result; result = [op runModalForDirectory:NSHomeDirectory() file:nil types:[NSImage imageFileTypes]]; NSLog(@"result = %@", result); }
ごめん、NSLogのフォーマットを %@から%dにしたら直ったよ… intにdescriptionなんて搭載されなかったよ…
あぼーん
876 :
名称未設定 :03/08/16 19:17 ID:K0Oq6bvQ
いつもはMenuItemのactionに接続されてて、senderのtagを読み取って 処理を分けてるメソッドがあるんですけど、このメソッドをコードから使う方法って ありますか? コードから直にそのメソッドを呼び出したらsenderにtagがないことになるし、 かといって、NSMenuItemには「actionを送れ!」というメソッドもないみたいだし・・・。 おわかりの方がおられましたらお教え下さい。
呼び出し元のオブジェクトに -(void)setTag:(int)value; と -(int)tag; を実装して -(void)setTag:(int)value; で tag の値をセットした後で sender に呼び出し元のオブジェクトを渡しつつ NSMenuItem の action メソッドを呼ぶとか。
>>876 -(IBAction)myAction:(id)sender{
//とかやって
[self myMessage:[sender tag]];
}
-(void)myMessage:(int)tag{
//直接こっちを呼べばいいのでは
}
879 :
876 :03/08/16 20:02 ID:K0Oq6bvQ
>>877 ,878
ありがとうございます。
どちらもなるほどー!といった感じです。解決策は一つではないと言うことですね。
ひとまずは
>>878 さんの方法でいってみることにします。ありがとうございました。
プログラミングなんて一度もやったことないおいらが 自分のオナニーのためだけに画像ビューアー作るよ!
882 :
名称未設定 :03/08/18 00:05 ID:QxQeZONZ
すいません、質問です。 ビユーのRect情報の取得なのですが、frameを使って取得すると、 実際のサイズより大きな情報を取得してきてしまいます。 やりたいのは実サイズの取得なのですが、どのメソッドを使えば良いのか、 探しましたが見つかりません。 インターフェースビルダーで言うところの、Layout Rectに相当する 情報です。よろしくお願いいたします。
bounds のこと?
884 :
882 :03/08/18 01:33 ID:QxQeZONZ
boudsだと、以前やった時はframeとサイズ的には同じ値を 返してきたので違うのです。 もしかして一発では無理なのかもしれないのですが、どうやれば できるのかが分かりません。
>>884 残るはvisibleRectかな
NSScrollViewに入ってるならdocumentVisibleRectやらNSClipViewのframeやら?
おいらもちゃんと理解してないですけど(´д`;)
886 :
882,884 :03/08/18 04:08 ID:QxQeZONZ
相手はNSButtonなのです。 ご紹介頂いたvisibleRectも以前試してみたところ撃沈でした。 NSScrollViewのdocumentVisibleRectやNSClipViewのframeは 相手がNSButtonなだけにダメそうです。 簡単なことのように思うのですが、なぜ一発呼び出しができないのか... Cocoaってたまに理解に苦しむことがあります。
>882 frameであってる。多分描画してある部分とのずれの話だと思うけど。。。 たとえば、IBでNSButtonを配置後、インスペクタのカスタムクラスを独自クラス(例えばCButton)に変更し、 @interface CButton : NSButton @end @implementation CButton -(void)mouseDown:(NSEvent*)event { NSLog(@"Click!"); [super mouseDown:event]; } @end を実装してやって、ボタンの周囲をクリックしまくってみなはれ。 DevToolに入ってるPixel(だったっけ?)を起動してやると細かいところまで分かるよ。
888 :
883 :03/08/18 09:54 ID:U6ightR6
>>882 NSButtonのIBでいうLayout Rectなら、frameから12ずつ引けばいいんじゃない?
Layout Rectの数字はIBがボタンの影の部分とかの大きさを抜いて、
レイアウト用に出してる数字じゃなかったっけ?
間違ってたらスマソ
IBのファイルみたいにファイルをバンドルにして保存したいのですがどうしたらいいのでしょう? NSWorkspaceのisFilePackageAtPath:で判定はできるんですが、セットの方法が分かりません。
>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が残っているんです。 これを消すことはできないんでしょうか?
-(void)display; を呼んで強制的に再描画するとか。
>>892 ありがとうございます。なんとかなりました。いや、NSWindow側とは。。。
NSImageViewもしくはNSImageの問題だと思って、ずっと「メモリの解放なのかな?」とかうんうん唸ってました
>891 >1.setImageでNSImageを描画する NSImageView* target; // 既に動かすViewが入っているとする。 [[target superview] setNeedsDisplayInRect:[target frame]]; >2.NSImageViewを別の場所へ動かす。 >3.setImageで別のNSImageを描画する この順で。
Javaでしたか。リファレンス見てみました。 Javaの場合多分こうなります。 terget.superview().setNeedDiplay( target.frame() );
>>896 夜遅くなのにありがとうございます
target.setNeedsDisplay(target.frame());
でなんとか消えました。少し早くなったようです。
898 :
889 :03/08/22 10:40 ID:ThM6NSFw
>>890 サンクス!
Document Basedではないので書類のタイプ設定してもどういう風に使えばいいのかよく分かりませんが、それは自分で調べます。
899 :
名称未設定 :03/08/25 19:09 ID:ju0ihoQV
IBじゃなくてプログラムでアウトレットを設定するやりかたがわかりません!! Cocoaはやっぱりで昔解説されてたような気がするの ですがもう見られません!! すみませんが教えて下さい!!
Cocoaの大抵のクラスはsetXxxで // Xxxはアウトレットの名前 行けたと思うけど。
>>899 >アウトレットを設定
意味がわからない??
クラスのヘッダファイルに IBOutlet NSHogehoge *hoge; を追加してやって、IBで読込んだらいいんじゃ?
萩原本に書いてるので立ち読みしてきたら?
どうも最近癖で NSBeep(1); と書いてしまう....
Cocoa ってゲーム作るときはやっぱ OpenGL 使うしかないの?
>>905 しかないってことはないけど(NSImageをぺたぺたやればグラフィックはできるし)、
OpenGLを使うのはいい方法なんじゃない?
2Dでもコーツイクストリームで高速そうだしー。
詳しい人の意見も聞きたいなあ。
RGBの画像データとグレースケールのアルファチャンネルデータがありまして、 この2つをプログラム内で合成したいのですが、どのような方法がありますでしょうか。
GRBとAをGRBAにする。
909 :
907 :03/08/30 09:11 ID:dTk5i4WI
>908 それがわからないんです。>GRBとAをGRBAにする RGB画像とアルファ画像をそれぞれNSImageに読み込んで compositeメソッドで合成しようとしてるんですがうまくいきません(アルファ画像が白黒画像として解釈されてしまう) なにか根本的に間違ってるんでしょうか。
ところでCocoaから気軽に使える正規表現ライブラリってないですか?今は regex(3)を地道に使ってるけどやっぱNSStringを受けてくれる奴が欲しいです。 みんな自作してるのかな?
Cocoaって、nibファイル無しでWIndowを描画するってできるんでしょうか。 できるのならメソッドの書き方を教えてください。 今、とあるソフトのプラグインを書いていて そのプラグインからWindowを呼び出したいのです。
913 :
名称未設定 :03/08/31 01:15 ID:2wCslq7m
>>910 。
日本語の使える正規表現で困ってたけど、鬼車と自作ラッパーで
検索アプリ作れた。一度やってみなよ。
基本的な関数のみだけど、いろんな表現形式が使える。
修正BSDライセンスでGPLみたいなウィルス性はないし、フレームワークにして
思い切って公開してしまえば神になれる。
暇なきゃ必要な分ラップすればいいだけ。実用になる。
漢字コードもEUCとかUTF8とかShiftJISがあるからマジでお勧め。
>>911 ソフトのプラグインを書ける人が、どうしてこんな質問できるのかが知りたい。
>>914 carbonならできるんだけどね。
Cocoaがわからんのですよ。
そんなに楽勝な事なのか・・鬱。
916 :
915 :03/08/31 02:08 ID:6hhW/fCE
じゃぁ、carbonで書けっていうことになりそうなんで 書いておきますが、Carbonでwindow描くと ホストがcocoaだからなのか虹がぐるぐる回るもんで cocoaで描くと上手く行くかなと思って聞いてます。
>>915 CocoaのBundleプラグインならNib使えるんでは?
>>913 そこまでやってるなら913が神になってくれ
>>915 いわゆる荻原本に Interface Builder 使わない Window の作り方が書いてあったような。
>>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 から読み込むほうがスマートだとは思うけど...
921 :
909 :03/08/31 07:49 ID:OgP5ty3I
まだつまっています。 解答するのもアホらしい質問なのかも知れませんが、 どこか勉強できるサイト、あるいは書籍を教えていただけませんか…
>>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失念してしまいました。
>>918 ,.-――――――――――――-、 ダメだっ…… オレはダメなんだ……
/ \ わかったんだよ……
\ l オレには もう…… わかった…
>、 |
/―`\、 | 鬼車派には二種類ある…と
/―――u \__ |
ヽ ヽ二二ニニニヽ`ー-、_____ | ラッパーを作って公開できる奴と
n===〜=-、===============、 .| それができない奴と・・・
| |〉 i] ) u | |⌒`i .|
| | └┐r' u | |⌒`| .| オレは…… そのダメな方……
./U u`ーし‐' U .l |(^) | | …ダメなんだ…
∠__ ) O ーU-、\. .| .|___ノ |
<_____ ヽ .Vヽ | どうしてもマイナスのイメージが拭えない…
└┴┴┴┴`i l / \ | フレームワークを作ろうとしても……
┌┬┬┬rノ / \ |\ 自作アプリでは一部のメソッドしか使わない姿がちらついて……
匚 ̄ ̄ ̄ ̄u. / \/ どうしてフル機能のラッパーを作ることが出来ない………
| U u / / 今も苦悶中………
l_____/ / もう自分の必要最低限を作るのでギリギリ……精一杯なんだ………
>>922 ,924
ありがとうございます!
NSImageRepresentationは勉強してませんでした。
早速勉強して参ります。
926 :
915 :03/08/31 14:06 ID:EcGR2iXP
みなさんレスどうもです。 荻原本買ってきます。
>>910 遅レスだが、NSStringはUTF-8で値を持ってたと思うから、PCREにUTF-8オプションつけてコンパイルしたものがオススメ。
鬼車使ったことないから、どっちが良いとは言えないけど。
>915 Nibから作らないとAquaにならなかったと思うが。 >917さんも書いてるけど、プラグインはBundle形式じゃないの?
929 :
915 :03/09/01 21:12 ID:mhCs1yO1
>>928 レスどうも。
CocoaBundleではなくて
ライブラリーっていう形式なんですよ。
(新規ターゲットから選べるやつ)
アイコンが"B"じゃなくて"L"になってます。
この形式でCocoa.hをincludeすると、obj-cに対応してないみたいで
コンパイルすると@とか[]の部分でエラーでまくりという状態で
今いろいろためしているところです。
昨日ためした限りでは、ライブラリーだとobj-cは対応してない様子です。
CocoaBandleとは、ライブラリーとはなんぞや?
というのを調べてみます。
>>929 えーと、Project BuilderがObj-Cに対応したコンパイルを
行なってくれるかどうかは、ソースファイルの拡張子で決まっていたはず。
問題のソースファイルの拡張子が".c"になってませんか?
".m"またはC++を併用するなら".mm"に変更してください。
>>929 ライブラリって本来Carbonオンリーぽいのだが、、
何のソフトのプラグインなのか示せば話がはやいかも
932 :
915 :03/09/01 23:41 ID:mhCs1yO1
>>ライブラリって本来Carbonオンリーぽいのだが、、
僕もそんな気がします。
ソフトは・・秘密にしておきますw
すいません。
>>930 mmにしてます。
エラーが出るのは上記問題のような気がします。
しかし、OSXのプログラミングはおもしろいですね〜
933 :
915 :03/09/02 01:15 ID:kZybqWeV
みなさんどうもです。 結果報告。 コンパイルに成功し、読み込みもうまく行きました。 windowの表示はできませんでしたが・・w (表示しようとはしているようです。読み込み時HOSTが重くなりました。) どうもwindow描画のメソッドがおかしいようなので 荻原本見て勉強します。 あと一歩〜
>>907 どーしても分からんかったら自前でピクセル触ったら?
そっちのほうが早そう
935 :
名称未設定 :03/09/04 16:24 ID:D/ixHjRk
スレッドセーフなキューを作ってるんですが、排他制御の方法で困ってます。 キューは enum { queueIsEmpty, queueHasSpace, queueIsFull, }; という3つの状態を持ってます。 状態が2つなら、NSConditionLockを使えば簡単に排他制御が出来るのですが、 3つの状態を持つ場合にどうやれば排他制御が出来るのかが分かりません。 キューの容量を変化可能にすればqueueIsFull状態を無くすことは出来ますが、 動作が重くなってしまうので出来るだけ避けたいです。 よろしくお願いします。
937 :
935 :03/09/04 20:04 ID:U2TVQR+M
>936 ありがとうございます。ちょっと考えてみます。 >935 ちょっと条件が足りなかったので付け加えます。 Queue* queue; id data = [queue dequeue]; // queueIsEmptyならデータが入るまでwaitをかける。 と、 [queue enqueue:data]; // queueIsFullなら空きができるまでwaitをかける。 です。 よろしくお願いします。
938 :
935 :03/09/05 00:11 ID:d4S07o8T
>936 考えてみましたが、デッドロックが発生しない方法を思い付けませんでした。(泣 とりあえず、queueIsFull状態をなくして、キューがいっぱいのときは例外を投げてごまかすことにします。 このすれは毎日チェックしてますのでどなたか良い方法があれば教えて下さい。
個人的には、というか普通の人にとっては 「なんとかピーク版とかいうのはいいから、リリース版を出してほしいなぁ」 というのが、今望んでいることだったりする。 でもまだ開発調整中だったらごめんなさい。 開発版をsourceforgeではなく2chで議論することに疑問を感じるところではあるけど…
Cocomonarスレと間違えた。
t
IBでカーボンアプリも作成できる様ですが それはクラシック環境でも動くのでしょうか? よろしくお願いします。
追伸: ココアでクラシックで動くアプリがいちから作れるか、ということです。
944 :
935 :03/09/05 12:38 ID:BOUxdYER
>943 残念ながらCocoaはクラシック環境では動きません。 Carbonで作成したとしてもProject BuilderがCFMバイナリを生成できませんので、 やはりクラシック環境での動作は出来ません。 古いCodeWarrior等を使ってCFMバイナリを作れば Nib+Carbonでかつクラシック環境で動作するアプリケーションが作成可能です。 (最新のCodeWarrioirはMach-Oバイナリしか生成できません)
>>944 丁寧なレスありがとうございます。
クラシック用アプリの開発環境は現行ではREALBasicぐらいということでしょうか。
947 :
び :03/09/06 02:31 ID:AT0Bahd7
ながーい計算を途中中断するのに、データを一時保存したいのだが アプリケーション独自形式のデータをファイルに書き出す方法を だれか教えて。 入門書だと、ドキュメントベースにしてテキストを出し入れする 例題ばっかで、document.nibが無い例が無い。 ググッてみても、さっぱりわからん。 デバッグのことを考えて、テキストコメントとデータで セーブデータを作るつもりなんだけど 変にCocoaにコダワリすぎ?
NSDataにしてwriteToFile
949 :
び :03/09/06 03:48 ID:AT0Bahd7
NSArchiverでNSDataを生成すると書いてあるのを見たけどちんぷんかんぷん たった今までNSDataはNSDocumentの継承だと勘違いしていた、、、 調べなおしてみます。 Cocoaはやっぱりワカンネー
951 :
944 :03/09/06 09:20 ID:2vqBcRYB
cocoaで画像の変形をしたいのですが。良いサンプルコードは無いでしょうか。 サンプルコードさえあれば後は自学自習しますんで
画像の変形って? フーリエ変換とかでいいの?
954 :
952 :03/09/08 02:41 ID:oYdQ9pyG
追記 アフィン変換で、例えば台形をした画像を、正方形に変形する事はできるのでしょうか?
955 :
952 :03/09/08 02:50 ID:oYdQ9pyG
>>953 フーリエ変換でということは、画像の周波数成分から特定の値をとるとか
フォトショップのフィルタみたいなってことですかね?
フォトショップの編集メニューにある自由変形みたいなことがしたいのです。
957 :
952 :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の所でファイルサイズの分だけコピーするにはどうしたらよいのでしょ?
>>958 5でinit...の返り値を受け取ってないよ(NSDataはクラスクラスタ)。
>あと、3の所でファイルサイズの分だけコピーするにはどうしたらよいのでしょ?
- [NSData length]でバイト数がわかる。
てか、NSMutableDataで読み込んで、[NSMutableData mutableBytes]使えば?
画像ビューワを作ろうと思ったんですが、最大化ボタンを押した時に ・画像サイズに合わせたサイズになる ・画面サイズ以上に大きくはならない という動作をさせようと思うんですけど、画像のサイズはともかく、 画面のサイズはどうやって入手したら良いんでしょうか?
[ @"〜/xxx" stringByExpandingTildeInPath] 文字列定数にメッセージ・・・んなら、いっそのことパスをまんま書いちゃえば
>>960 NSRect screenRect = [[NSScreen mainScreen] frame];
>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]; とするべき
>958 >963に関して。 前半はまあ、ありではあるよね。ただし、オートリリースされないけど。 でも後半は完全にダメだよね。 例えばこういう実装もありなのよ。 -(id)init { [self release]; // 自分自身を解放。 return [[MySubClass alloc] init]; // サブクラスのインスタンスを返す。 } NSDataとかNSStringとかのクラスクラスタは上の様にinit...で 必ず自分のサブクラスのインスタンスを返します。 ですから、必ずinit...メッセージの返値を受け取らなくてはいけません。 2,の場合は、init...で解放される一時インスタンスに対してオートリリースをかけて、 実際に使用されるインスタンスにはオートリリースが掛かってませんから、リークします。
>>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"が刺さらんか)
iBookだHDDが確かATA33なんでビルドが遅く感じるかも。 PowerBookにしる。
968 :
967 :03/09/09 13:41 ID:at1cWoqC
×iBookだHDDが ○iBookだとHDDが
>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のサブクラスじゃ! つうことです。
今だ!970ゲットォォォォ!!  ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´ ヘ_ヘ ) (´⌒(´ ミ ・ ・ ミ ) (´⌒(´ ( ° )〜≡≡≡(´⌒;;;≡≡≡  ̄ ̄ (´⌒(´⌒;; ズザーーーーーッ
971 :
名称未設定 :03/09/09 23:45 ID:pN8SOKiO
>>971 「動的確保したメモリブロックはfreeで必ず解放せよ」って言いたいのかな?
/*
MLでこの話題が出ると果てしなく荒れ続けるよなw
メモリブロックからOSの実装まで発展して不毛極まりない論争になる。
これと双璧を成す起爆剤トピックが「fopen後は必ずfclose」
*/
>>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 ってこんな感じであってる?
975 :
974 :03/09/10 02:49 ID:Ipd3Rmyd
って、ちょっとまて。 >966氏はよく見たらすごいことやってるな。 NSDataを確保して、初期化して、自動解放して、初期化したわけか。。。 ここまできたら、もう一回自動解放してみるのがいいかも。。。
>>971 自分が生成したオブジェクトは自分で削除する。
自分が生成したのでないオブジェクトをランループを超えて
保持し続けたいのであれば、retainする。
retain(かalloc)したオブジェクトのreleaseは忘れない。
retainしていない(かallocしていない)オブジェクトはreleaseしない。
自分でreleaseできない場合や他のオブジェクトなどへ渡す場合には
autoreleaseする。
つまり、他のオブジェクトメソッドの返り値で受け取ったオブジェクトは
factoryメソッドなどの明示されている場合を除き、autoreleaseされて
いると思ってつかう。
このサイトの作者はまだオーナー湿布ポリシーを理解していない。
ちょっと前にmacosx-dev-jpMLに出てたけど、 オブジェクトはかならず myObj=[[[Obj alloc] init] autorelease]; で確保して、 欲しくなったら必ずretain、releaseするっていうのが よく分かってない人(例えば>971氏)には分かりやすいんじゃないか? 分かればそんな難しいもんじゃないんだけどね。
問題の本質を理解しましょう。 JavaにはGCがあるし、C++ではスタックオブジェクトやスマート ポインタを使えばオブジェクトの廃棄は自動的に行われる。 これに対しAutoreleasePoolを使った手動参照カウントはプログ ラマが考えて参照カウントを調整しないといけない。 > 自分が生成したオブジェクトは自分で削除する。 > 分かればそんな難しいもんじゃないんだけどね。 はJava/C++の自動廃棄に比べてミスの危険が常に付きまとう。 AutoreleasePoolはお手軽だけど古くさい仕組みだということ
皆さん
>>978 に対しては冷静な対応をお願いします。
(できれば反応しないのが安全かと)