Cocoaはさっぱり!version:2
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名称未設定
02/11/10 19:18ID:Q0GVS7Jyオリジナルを作ろうと思ったら、全然その先に進めない人集まれ!
親切なプログラマーさんが暇なときだけ教えてくれる(かも?)
前スレ
http://pc.2ch.net/test/read.cgi/mac/1007632025/l50
関連スレは>>2-20までには
0002あぼーん
NGNG0005あぼーん
NGNG0007名称未設定
02/11/11 01:21ID:eTPFWQHf不備があったら誰か補って下さい。
関連スレ
Macでプログラミング{2}
http://pc.2ch.net/test/read.cgi/mac/1025998843
◆◆◆◆◆◆MacでJava◆◆◆◆◆◆
http://pc.2ch.net/test/read.cgi/mac/991194610
前スレ発
Cocoaでメーラー作るよ
http://pc.2ch.net/test/read.cgi/mac/1035386838
関連サイト
Cocoaはやっぱり!
http://www.big.or.jp/%7Ecrane/cocoa/
HAPPY Macintosh Developing TIME!
http://homepage.mac.com/mkino2/
Cocoa Developer Documentation
http://developer.apple.com/techpubs/macosx/Cocoa/CocoaTopics.html
(開発ツールをインストールすれば、/Developer/Documentation/Cocoa/CocoaTopics.html に同様の資料がある)
0008 ◆ftPf.M4w3U
02/11/11 17:02ID:3CNSm3S7乙
0009名称未設定
02/11/13 00:12ID:T0KM6e2H『フリーのテキストエディタです、使って下さい』
っていうのはもういいよ。
↑たまに見かけるんだよね。
SimpleTextにも満たないエディタは必要ないよ。
練習のためならいいと思うけど。。。
>>1
御吊
0010名称未設定
02/11/13 22:03ID:eDc4xtay疑問点が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です。
0013名称未設定
02/11/16 12:55ID:d66nvhZZNSTimerの項のソースを作成し、ビルドすると
?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メソッドがうまく認識されていないような気もしますが、何が悪いのかさっぱり
分かりません。とほほ。
アドバイスをお願いします。
0014名称未設定
02/11/16 13:15ID:4spgFSNh× scheduledTimerWithTimeInterval:target:selector:userinfo:repeats
○ scheduledTimerWithTimeInterval:target:selector:userInfo:repeats
user"I"nfo
Iが大文字です。
メソッドはヘッダからコピペしたほうが安全。
あと、警告を信じる。
0015名称未設定
02/11/16 16:42ID:THE4kyr1二つほど謎のエラーがおきます。
『***はシグナル 10(SIGBUS)により終了しました。』
『abstractMethodError』
というエラーなんですけど(二つ目はめったに出てこないので記憶が曖昧で
す)どちらも特定の場面で出てくるわけではなく、たまに(恐らく処理が重いとき)出てきます。
処理が重いといっても全然たいしたことないはずですし、どうしていいのかわかりません。
だれか原因について思い付く方はいらっしゃいませんか?
0016名称未設定
02/11/16 19:01ID:uvqdPQmj推測だけど、最初のがメモリ関係、次がそのまま、インプリメント
されてないメソッド、抽象クラスなどのメソッドを呼び出した、
ってことでないの? Javaは詳しくないけど。
ところで、まさか、そのプログラムで他人のサーバに
つないでないだろうね(w
0017名称未設定
02/11/16 19:16ID:LBGGcBgjいいところないですかね。
普通のC言語なら掃いて捨てるほど出てきますが。
0018名称未設定
02/11/16 19:29ID:V79Ufrn7AbstractMethodErrorは、抽象メソッドを呼び出したっていう
意味で、普通はコンパイル段階でエラーになるはず。
一度クラスファイルを全部削除して再コンパイルをかけた方が
いいんじゃないかな。
めったに出ないなら、すでに問題が解消されているような気もするけど。
上のエラーの方は、それだけじゃちっともわかんないので、
まずは地道にデバッグして落ちている箇所を特定しましょう。
001913
02/11/16 19:45ID:d66nvhZZあ、全然気が付きませんでした。
実は去年からずっとここで悩んで止まってたんです。
目、悪すぎ>俺
やっと次に進めます。本当にありがとう!
0020名称未設定
02/11/16 19:46ID:HR986RqX0021名称未設定
02/11/16 20:08ID:UPY/awzrうらやますいです。
002215
02/11/16 21:38ID:THE4kyr1>>16
やっぱり一つ目のエラーはメモリ関連ですよね。
まさかjavaやっててメモリ関連のエラーを受けるとは・・・、とほほ。
>>18
いまから目を凝らして落ちてる場所を探します。
そういえばテーブルの描画周りが怪しい、ドキュメントにも
『このメソッドは気をつけろ』ってのがあったしなぁ。
ちょっとやっつけちゃいますね。
002315
02/11/16 22:42ID:THE4kyr1今気付いたことなんですけど、どんなにクラスファイルを全削除 -> リコンパイル
してもコンパイルエラーが出ません。なのにjava.lang.AbstractMethodErrorは
しっかりでます。
具体的にはテーブルやボタン等をひたすら連続でクリックすると出てきます。
しかも[Abstract ~~~~]が出た後にシグナル10で落ちます。
シグナル10はメモリ関連ということで俺が悪いのでしょうけど、[Abstract ~~ ]は
どうもよくわかりません。
同じようなことに出くわしたことある人っていませんか、いませんよね。
がんばってみます。
delegate関係なのかなぁ??
0024どざ
02/11/17 14:53ID:AoXQp0yzそんな貴方にMSDN!
殆ど日本語になっている。
Windowsはいいぞ・・
でも最新情報を見る際はアチラ語が必要罠。
Cocoaは例え日本語でも楽でない気がする。
資料多すぎ。
今は皆そうか・・
0025名称未設定
02/11/17 18:53ID:JuIOHsrq一行もコードを書いていないdocument-based applicationで
ウインドウを閉じたり出したりしてるだけで
どんどん常駐メモリサイズ増えていくんですけど
どうすればいいですか?
0026名称未設定
02/11/17 21:03ID:AoXQp0yzたぶんcacheだと思うが・・
OSXでは掴んだら他が苦しみだす迄離さないのが多い噂。
余裕がある限り浪費しまくるらしい。
詳細は知らんので後は何方か頼む。
0029名称未設定
02/11/18 03:04ID:yMpybPUr003010
02/11/18 14:26ID:mGA7yCj/あ、どうもです。
リンク先見てみたけどどうもそこはCocoa-javaの話みたいでjavaはさっぱりなわたしには
ちょとよくわからないけど、どうやら画像の判別はしていないようでした。
もうちょっと勉強してみます。どうもありがとうございました。
0031名称未設定
02/11/18 14:54ID:E9r0CerXJavaは良く分らんが、クラスクラスタが抽象クラスのオブジェクトを返してるんじゃないのか?
hoge = new NSArray();
hoge,count();
とか。
>>25
- setReleasedWhenClosed:(BOOL)flag;
- (BOOL) isReleasedWhenClosed;
この辺じゃねーの?
0032名称未設定
02/11/18 22:22ID:HJP2ChSKはは、思わず笑っちゃったよ。
DevツールのObjectAllocを使えば、自分のコードに問題が
あるのか、それともフレームワークのキャッシュなのか分かるよ。
003325
02/11/19 19:00ID:JgIxcG4+0034名称未設定
02/11/23 14:09ID:SFJs1zUE0035名称未設定
02/11/23 15:05ID:BArg2VmUあと、Cocoaはやっぱり!のP110〜の「環境設定の読み込みと保存」とか読んでTextFieldにデフォルト値から文字列を読み込む方法は分かったんですけど、チェックボックスのデフォルト値を保存したりする方法ってどうすればいいんでしょう?
0036名称未設定
02/11/23 15:45ID:fkVOFMwB個人的にはどっちでもいいような気がします。
自信はありませんけど・・・
>チェックボックスのデフォルト値を保存したりする方法ってどうすればいいんでしょう?
- setBool:forKey: や
- boolForKey:
を使いましょう。
あと少しでもいいですからAppleのリファレンス読んでみて下さい。
英語ですが大体のことはここで分かります。
0037名称未設定
02/11/23 18:46ID:ck8YguLDMac関連のプログラミング本も安くゲットできるチャンスかも。
003835
02/11/24 16:35ID:JE4xLmZrどうも、ありがとうございます。
早速試していますが、デフォルト値を定義して上手く.plistに書き込むところまで
は成功しましたが、変更が保存されません。。
例えばデフォルトではチェックボックスをONにしてあるものをOFFにしても
その変更が繁栄されない、という感じです。
保存は(Cocoaはやっぱりの例を拝借して)こんな感じ↓でやってます。
[ defaults setBool : obj1 forKey : @"obj1" ];
>あと少しでもいいですからAppleのリファレンス読んでみて下さい。
リファレンス、苦労してます。あれ読んでも具体的にどう書けば良いのかが掴めず。。
0039名称未設定
02/11/25 15:45ID:LN3mpiqD>例えばデフォルトではチェックボックスをONにしてあるものをOFFにしても
>その変更が繁栄されない
これは、通常プログラマの仕事であって、フレームワークの仕事ではない。
>Cocoaはやっぱり!のP110(略)
多分この本には、サンプルコードだけではなく、
サンプルコードのこの部分はこう言うことをしている、という説明がついてるはずだ。
説明には、自動的に設定が反映されると書いてあったのか?
日本語も読めないのか?
0040名称未設定
02/11/25 18:14ID:5/1W17Xm0041名称未設定
02/11/25 19:03ID:nd6BCjh+これは可能なのでしょうか。
0042名称未設定
02/11/25 19:45ID:FwBGxRRY0043名称未設定
02/11/25 20:00ID:5yltS0rr黒い三角のボタンを押すと隠れていた項目がにょきっと出てくる
インターフェースを作りたいんと思っているのですが、
これって、Cocoaだと、どうやってやればいいのでしょうか。
調べてもどうしても分からないので、
ご存知の方がいらっしゃったら教えてください。
0044名称未設定
02/11/25 22:16ID:PyISHp7r> 黒い三角のボタンを押すと隠れていた項目がにょきっと出てくる
> インターフェースを作りたいんと思っているのですが、
これをやるには自分で作るしかないと思われ
調べてもどうしても分からないんだったら諦めたほうが吉
004536
02/11/25 22:35ID:PyISHp7rあくまでもNSUserDefaultsがやることはデフォルト値を保存するということだけで
チェックボックスのON,OFFを自動的に感知して保存するわけではありません。
もしそれをしたいのならばチェックボックスのActionを他のインスタンスに設定して、
その都度BOOL値を保存する必要があります。
あとは、もう少し予算があれば本を買うことをお勧めします。
荻原本やヒレガス本あたりが基礎を高めるのにはいいと思います。
004638
02/11/25 22:50ID:FwBGxRRYありがとうございます。Actionまわりを設定したら上手く保存出来たようです。
>荻原本やヒレガス本あたり
分かりました、良いと評判のヒレガス本を買ってみます。
0047名称未設定
02/11/26 15:32ID:95oFXXL9できるよ。
データソースの
tableView:objectValueForTableColumn:row:
このへん。
>>43
Carbon in Cocoaになると思う。
http://developer.apple.com/techpubs/macosx/Essentials/AquaHIGuidelines/AHIGControls/Disclosure_Triangles.html
このへんと
http://developer.apple.com/techpubs/mac/HIGOS8Guide/thig-24.html
このへんと、
http://developer.apple.com/techpubs/macosx/Carbon/HumanInterfaceToolbox/AppManager/appearancemanager.html
http://developer.apple.com/techpubs/macos8/HumanInterfaceToolbox/ControlManager/controlmanager.html
このへん。
GrafPtrはNSQuickDrawViewから、
WindowRefはNSWindowから持ってこれる。
004841
02/11/26 16:17ID:CoVbHzGjレスありがとう。
Formatterを使ってNSAttributedStringのインスタンスを作ってやれば
いいのかな。
0049名称未設定
02/11/26 21:45ID:aez694eC英語ペラペラなの?
やっぱ英語勉強した方がいいのかな・・
0050名称未設定
02/11/26 22:28ID:/bkrNtOS英語解説ページ読むのに英語ペラペラは関係なし。
必要なのは、
中卒程度の英語力+コンピュータ用語語彙+英和辞書
0051名称未設定
02/11/26 22:33ID:8v4+pZj2005347
02/11/27 08:48ID:mjJgJ9yQ私の英語力は、話せません、聞き取れません、書けません、辞書があれば何とか読める程度です。
リア厨、リア工時代は何とか及第点を取れる、もしくは頭を下げて及第点をもらう程度でした。今思うとめちゃ悔やまれる。
こう言うのを読むときは、gooかexciteの辞書ページ開いてます。
専門分野の解説での長文翻訳は意味不明な日本語にしてくれるので逆効果です。
これでも専門用語を知っていれば何とかなります。
意味が分らない専門用語は英単語のままでもgoogleの日本語限定の検索で結構引っかかりますし、
それでも分らなかったら、無理やりカタカナにして検索すると言う手もあります。
私の場合、専門用語を覚えるのはもちろん日本語の解説書でです。
正直MacOSXPBあたりの時のCocoaは五里霧中状態でした。
NeXTSTEP,openstep関連のページを検索したり、MacTech Magagineを掘り出してきてラプソディー関連を読んでみたり...
やっと何とか使えるようになってからドドドと日本語の解説書が出てきた時は泣きました。
まあ、何とかなるもんなんで、一度読んでみて下さい。
0054名称未設定
02/11/27 11:45ID:TOo99iKJしまいます。どんな原因が考えられるでしょうか。
ウィンドウを切り替えたときに、背面にまわったウィンドウの表示がおか
しくなります。調べてみると、rectの値がアップデートするべきviewのもの
と違ってしまっています。こんなことってあるのでしょうか。
0055名称未設定
02/11/27 15:10ID:mjJgJ9yQ>調べてみると、rectの値がアップデートするべきviewのもの
>と違ってしまっています。
これが、Viewのframeの値と違ってると言うのなら、そういうものです。
アップデート対象部分だけがrectに入ってきます。
もし違うのであれば、
http://developer.apple.com/bugreporter/
これかなあ。でも英語だしねえ。
005654
02/11/27 17:47ID:C2HfZNRJどうもありがとうございます。勘違いしてました。
[self bounds]を使って正常になりました。
正しくないのは私の頭の方でした。
0057名称未設定
02/11/28 01:08ID:o34aQNfCCStringに入ってる文字列をStringにして、んでTextViewとかに表示させたいんだけど、
日本語が入ってる場合文字化けしちゃうんだけどどうすればいいのかな。
[ textView ?setString:[ NSString stringWithCString: CStr ]];
例えばこんな感じでtextViewに表示させても日本語だけ文字化けしちゃうのよね。
で、エンコードする必要があるとは思うんだけど、どうすれば良いのでしょうか。
誰かお助けを。
説明が下手でごめんなさい。
005857
02/11/28 03:20ID:o34aQNfC0059名称未設定
02/11/28 08:21ID:tV4du4koNSDataを介します。
NSData* shift_jis_Str = [NSData dataWithBytes:CStr length:strlen(CStr)];
NSString* string = [[NSString alloc] initWithData:shift_jis_Str encoding:NSShiftJISStringEncoding];
0060名称未設定
02/11/28 12:05ID:pAol6nz1charCString[] = "てすと";
[ textView setString: [NSString stringWithCString:CString] ];
で問題なく日本語いけたけどなあ。(OS10.2.2)
0061名称未設定
02/11/28 20:25ID:CnBW/6Az0062名称未設定
02/11/29 04:35ID:R37yFDByNSAppleScriptでもいいんだけど、やっぱりローレベルの方がいいなと。
(かといってCarbonはわからない…)
0063名称未設定
02/11/29 15:53ID:rkUwweRh素直に NSAppleScript 使えばいいのに。なんで駄目なの?
つーかローレベルってCarbonのことじゃない、この場合。
それともMachのメッセージ通信のこと?
0064名称未設定
02/11/29 18:44ID:BvlS5AIB0066名称未設定
02/11/29 21:00ID:tx7QvZFD0067名称未設定
02/11/30 04:52ID:Cjq7zlyuやればいろんなことが出来るよ。
俺も最初は『情報少なっ!』って思ったけどやってるうちに普通のことが普通に
出来るようになってた。(どんな言語や環境でもそんなもんだろ)
最初にちょっと苦労しておけば後が楽ですよ。
(って言っても読まないやつは読まないんだろうなぁ <- リファレンスのこと)
0068中学英語で質問してみる。
02/11/30 11:05ID:1Ta223gVI set menu invisible and tried to change window mask.
But window mask cannot change except for initialization.
0069厨学生
02/11/30 11:20ID:t1lfE8e8メニューを不可視に設定して窓の覆いを変えてみますた。
しかし、初期化せずに窓の覆いを変更することはできませんでつ。
0070名称未設定
02/11/30 14:15ID:ez6+CgxVADC reference より
An NSWindow's style is set when the object is initialized. Once set, it can't be changed.
ここまで
0071名称未設定
02/11/30 21:10ID:gcdL/i+9あー、サンプルコードついてるといいね。ADC行って適当なサンプルないか
探してくるより楽でいいや。Tell Usしてみる?
0072名称未設定
02/11/30 22:47ID:KDCTJISn書き方というか、その辺かと。
リファレンスとか読んでも、何が出来る、ってのは分かるんだけど、
あとは「書式」と「返り値」とか書かれてるだけで、
具体的にどういう感じに書けば良いのかがさっぱり掴めないんだよね。
リファレンスだけじゃなくて、「Cocoaはやっぱり!」も書き方同じだし。
「で? どう書けばいいのよ?」みたいな。
分かってる人には分かるかもしれないけど、あれって、いわゆる
プログラマー的慣用表現なの?
初心者にはやっぱり分かりづらいと思うけどなぁ。
0073名称未設定
02/11/30 22:56ID:hlh3YJMpテンプレートプロジェクトに少しずつ書き加える。
又はサンプルコードを少しずつ書き換える。
8bitBASIC時代からこの点は変わらないと思う。
0074名称未設定
02/11/30 23:20ID:xXTQZHxOReferenceだけじゃなくて下のほうのProgramming Topicsも読んでそれをいってる?
サンプルコードもProgramming TopicsのTasksにあると思うが。
0075名称未設定
02/11/30 23:26ID:lbtRXp8c文章の意味を考えるところでいったん思考がとぎれる感じでやりにくいわな。
0076名称未設定
02/11/30 23:35ID:GjV2W5ux0077名称未設定
02/12/01 06:06ID:mJVog20L俺も思う。
>>72
いまから勉強をはじめる初心者には分かりづらくても仕方がないでしょ。
だって何も知らないんだから。
>>73の言う通り一つずつ試して納得していくしかないよ。
なんでもいいからアプリケーションって呼べるものを作ってみるといいよ。
その過程で必要なことを学ぶしかない。
0078名称未設定
02/12/01 11:27ID:Lj9NcLaf0080名称未設定
02/12/02 20:04ID:vpa25MiQNSWindowのサブクラスを作って、- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag
で初期化する。
InterfaceBuilder上では、このサブクラスを指定する。
0081名称未設定
02/12/03 11:39ID:hZcL6gkc0082名称未設定
02/12/03 16:40ID:tDZUDA3f俺も読みたい。だれか,たのむ。
008410.1.5
02/12/05 16:38ID:gY14st/y英語になった。
0085名称未設定
02/12/06 20:58ID:pJLljC0s下記のような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>
0086名称未設定
02/12/06 22:31ID:Kh6J19bk├KeyString-2─hoge
├KesyString-3─1
├KeyString-3─hoge
├KeyString-4─true
└KeyString-5─true
となっているようだがツッコミを入れといた方がいいのか?
0087名称未設定
02/12/07 03:11ID:VT9rZAZvmacのプログラマー?
0088名称未設定
02/12/07 03:12ID:06x21qQG0089名称未設定
02/12/07 08:10ID:2VVR0iYR0090名称未設定
02/12/07 11:41ID:pOVnGu3L分かる気がする。
やりたいことを実現するメソッドは見つかった。そいつの引数も分かった。
しかし、その引数のオブジェクトはどこから調達してくるの?
おれが用意しているオブジェクトからどうやってとってくるの?
みたいな堂々回り。
またやりたいことと用意されているメソッドの機能レベルが違うと
探すこと自体がたいへんだしね。
もっとも、これはクラスライブラリの全容を知らないからだけど(^^;;
0091名称未設定
02/12/07 14:04ID:Rv/fl+c0英語サイト行かないとわからないときもあるけど。
009285
02/12/07 14:21ID:bHIIFNMTそうなんです.そのようにネストされている場合の
Keyの取り方が分からないのです.
KeyString-1のvalueを取ってきて,valueを再び
NSDictionaryにして,allKeysでKeyを取る.
といったことしか思い付かないのですが,それしか
ないのでしょうか?
0093名称未設定
02/12/08 19:20ID:zAei9Sp0PDF版ならAcrobatで栞を目次代わりに使えるので便利。
0094名称未設定
02/12/08 20:41ID:QlUwYw4vhttp://www.microsoft.com/japan/msdn/library/
http://developer.apple.com/
の下を探したのですけど日本語のが見当たりません。
0095名称未設定
02/12/08 20:58ID:VuYRBze7オライリーがイイ仕事してる。本をかいな。
アップルジャパンは昔からその手の情報の翻訳はほとんどダメだ。やってない。
0096名称未設定
02/12/08 22:10ID:zAei9Sp0・・いやマジで。
>>95
AdobeやRealやNewTekなどもSDK資料は英語。
OracleはDBの付属資料は流石に翻訳されているが
ApplicationServerSDKは未翻訳だった;今はどうか?
資料ローカライズでMSに張り合えるのはIBM位か・・
0097名称未設定
02/12/08 22:38ID:7ymdFHGd公式で翻訳されている文献はあんまりない
http://developer.apple.com/ja/techpubs/
Cocoaのリファレンスの翻訳ならばここ
http://www.oomori.com/cocoafw/index.html
0098名称未設定
02/12/08 22:51ID:pCWmqpCjつか、そもそもMSと違って、売りっぱなしが基本姿勢だから、
活用の為の資料提供なんかする会社じゃないっての(藁
釣った魚に餌は与えないっつーか…。
0099名称未設定
02/12/09 00:38ID:EWG83ZBeFoundationのみですませるなら、そうなりますね。
Core FoundationのXML Serviceを使えば、Tree構造として
展開、アクセスできるから、複雑な構造のXMLを処理するの
なら、こちらをどうぞ。
0100100
02/12/09 02:09ID:oRWuzLq00101警戒宣言
02/12/11 02:23ID:WjsHSuKs保守。
0102名称未設定
02/12/11 18:22ID:gZWMy9lt0103警戒宣言
02/12/12 00:41ID:OzDkU41w危機は去った。スレ違いスマソ
0105名称未設定
02/12/12 17:37ID:cb9F24RT0106名称未設定
02/12/12 19:12ID:i36lFTButtp://homepage.mac.com/mkino2/
0107名称未設定
02/12/13 00:26ID:GEb3wLMf0108名称未設定
02/12/13 02:29ID:SFIkYX1xHMDT(>>105,106参照)でやり方が書いてあるんだけど全くObj-Cが
分からないので理解が追い付きません。
それでも必死で読み続けてみて分かったことはCarbon Eventを使うということのみ。。
そもそもJavaからCarbonって使えるんですか?
一応スレ違いでは無いと思うのでここに書かせてもらいました。
0109名称未設定
02/12/13 15:14ID:zT151Epi全てのXMLパーサがDOMかSAXかじゃないと駄目だと思っているのかよ。
>>108
Core FoundationはObjective-Cじゃない。
C++でもない。ただのCだ。
つーか、Cocoaじゃない。
JavaでXMLを扱いたければJAXP使え。
HDMTにも書いてあるけど今のCFXMLは
XMLパーサとしては原始的すぎて不完全。
システムに標準で付いてくるから
CarbonやObjective-Cで即使えるってのが利点。
0110名称未設定
02/12/13 20:11ID:JyhG0V93流行のXMLでこの体たらくは、まさにMicrosoftとAppleの技術力格差を象徴してるな。
0111名称未設定
02/12/13 20:28ID:Q1sivQp60112108
02/12/14 02:31ID:1IIcBngU反応さんくす。
>Core FoundationはObjective-Cじゃない。
>C++でもない。ただのCだ。
っていうのはつまり
『自分でCとJavaの橋渡しをしなさい』
ってこと?
了解です。
0113名称未設定
02/12/14 02:48ID:ZMKB0U/X0114名称未設定
02/12/14 10:31ID:1Re06XJ0了解したんなら余計なお世話かもしれが…
Javaでプログラム書くんなら、素直にJavaで書かれたXMLパーザを
使えばいいじゃん、と >>109 は言ってる。
0115名称未設定
02/12/14 12:16ID:yvQkSo920116名称未設定
02/12/14 15:09ID:1UHjsgj30117名称未設定
02/12/14 15:15ID:cjstDqhD0118名称未設定
02/12/14 15:18ID:tjtGusRQこれ最強(SDLを使う時)
0119名称未設定
02/12/14 15:37ID:1Re06XJ00120名称未設定
02/12/15 15:59ID:KzOJ/Uqg0122名称未設定
02/12/18 23:34ID:5nVxa2G+かといって今ここで聞きたいことも無いし。。
だれか話題提供プリーズ。
まぁ、まったりしてていいけどネ。∞
0124名称未設定
02/12/20 04:48ID:vKzqlyjj0126名称未設定
02/12/20 16:58ID:tgbMO7Wq0127名称未設定
02/12/20 17:05ID:jM3eTAIc自動インデントを有効にするとぼろぼろおちるの
なおってるかなぁ
0128名称未設定
02/12/20 22:29ID:Va/6rg+s0129名称未設定
02/12/20 23:00ID:IHLxfHGg0130名称未設定
02/12/21 00:47ID:xXHMzR+o0133名称未設定
02/12/21 19:30ID:SQXJVlOrhttp://developer.apple.com/tools/macosxtools.html#breadcrumb
を見る限りは無いみたいだな。
個人的にはスクリプトエディタの新バージョンβに興味あり。
0134名称未設定
02/12/22 00:10ID:0D51mckvつか、やる気ないだろ?
0135名称未設定
02/12/22 13:48ID:rexa71Qwクラスやメソッドの解説が日本語になってたよね?
0136名無しさん@Emacs
02/12/22 15:29ID:WAow/daK0137名称未設定
02/12/22 16:01ID:ubMHsN0Yてか日本人の開発者ってCarbonとかしかやっとらんと思われてるんだろーか?
tech notesもQ&AもCarbon絡みとかQT絡みばっかだよねぇ。
CocoaのDiscoverOPENSTEPは今のCocoa入門のPDFより出来がいいからあのままでいいけど(をい。
AppKitとFoundationKitのReferenceとっとと翻訳しろ〜〜〜(><)
0138名称未設定
02/12/22 21:50ID:f9UAkvm2InsideMacにあって、Cocoaのドキュメントにないのはそこだよ。と
りあえず英語のままでかまわんから‥
0139名称未設定
02/12/23 00:30ID:3O1qjF8Q0140名称未設定
02/12/23 00:39ID:vLosFQ0u0141名称未設定
02/12/24 00:45ID:C8SMmhAk0142名称未設定
02/12/24 22:45ID:YZLUCAKe英語の壁で玉砕のケースが多いモヨリ。
Windowsには、酷評されつつも安易で使いやすいVBがあるし。
0143名称未設定
02/12/25 02:50ID:RYOVzj/X中途半端。
0144名称未設定
02/12/25 02:51ID:RYOVzj/X0145名称未設定
02/12/25 03:46ID:D/CIxqsoフルスクリーンになるアプリを実行して終了すると
メニューバーの表示がおかしくのは折れだけですか?
ProjectBuilderないと魅力半減。
教科書がほしいなら本で買ってもいいのでは。
0147名称未設定
02/12/25 21:37ID:mPpb3QIm0148名称未設定
02/12/28 11:18ID:4kFcyKqB0149名称未設定
02/12/29 02:29ID:alltZCeg内容が結構重複してんだよな。
0151名称未設定
02/12/29 09:23ID:GKyK1UDq個人的には本がすぐに出ないことが幸いしたような気がする。
そろそろまとまった内容のCocoa本が見たいけどね。
0152名称未設定
02/12/30 23:28ID:ngMA608/ドザはMFCアプリを完成させてる罠
0153名称未設定
02/12/30 23:46ID:c/SVydmr0155名称未設定
02/12/31 01:19ID:TMgO2I0o0156名称未設定
02/12/31 01:26ID:kFoGGNld0158名称未設定
02/12/31 02:58ID:5U3cQxzv価値観による
0160名称未設定
02/12/31 12:58ID:MZ8v8kXZ0161名称未設定
02/12/31 13:14ID:IssqW5mCObj-Cの解説書ってプログラマーならアタリマエに知ってるんだろう的
用語が連発するんでちょっと難しくないですか。
本が無いのですな。だれかかきましょう:-)
そういえば、阪大は(むかしは?)1年のときにObjective-Cを
ならったとかどうとか。そのときの教科書の流出とかないのかな。
0163名称未設定
02/12/31 22:13ID:MZ8v8kXZこないだC解説してるページ見て(void)とかすらやっと理解した。
載ってないんだもん。
と言う訳で今日アマゾンにC(C言語プログラミング" ハーベイ・M. ダイテル )と萩原本を注文しました。
0164名称未設定
02/12/31 23:13ID:Zmfhjh1xObjective-CでCocoaプログラム書くつもりなら、いずれは参考にな
るときがくるでしょう。
といいつつ、本心では、メモリ管理をほとんど気にしなくていい言
語の方が初学者には向いてるんじゃないかと思う。どのくらい本気
なのかとか、目的にもよるが・・・
萩原本はいいですな。うんうん。
わたしもメモリ管理気にしない言語のほうがいいかな〜と思ったのですが、
最初は不便な環境でいろいろ考える習慣をつけたほうがいいので、
ちょうど Objective-C くらいがいいのかも。
#うちの学校では B1 前期で scheme やって、後期に C をやるのですが、
#なにもわかってないくせに C ってつかえね〜とか言う厨が....
0166名称未設定
03/01/01 02:43ID:FB0kK2l3参考になります押忍。
スレ中前述の様にObje本はせいぜい中級者向け(萩原本)迄しか無いのがつらい。
0167名称未設定
03/01/01 13:06ID:zJdSzk0e押忍!
なんつーか「富豪的プログラミングで構わないならば」メモリ管理
を気にしなくてよい言語ってことです。いっぱいあるよ、
Java Ruby Python Perl Scheme lisp ...。
Java, Ruby, Python, Perlあたりは、その気があればCocoa
のプログラミングに使えるみたい。
Cocoaプログラミングに使えそうな言語へのリンク
ttp://www.fscript.org/links.htm
富豪的プログラミング
ttp://www.csl.sony.co.jp/person/masui/fugo.html
0168名称未設定
03/01/01 18:34ID:7KUkRcR3PerlがCocoaに使えるんですか?ていってもどういう意味なのかわからない程度の素人なんですが。
普段Perlはテキスト処理用のスクリプトとして使ってます。
0169名称未設定
03/01/01 23:08ID:KJRrImHURubyやJavaみたいにメモリ管理の面倒(ガベージコレクションとか)
みてくれる言語のほうが初学者には楽、ていう意味だと思ったんだけど。
0170名称未設定
03/01/01 23:53ID:oVRtSIEpCamelBone (perl)
ttp://camelbone.sourceforge.net/
RubyCocoa (ruby)
ttp://rubycocoa.sourceforge.net/
PyObjc (python)
ttp://pyobjc.sourceforge.net/
0171170
03/01/02 00:00ID:V0oTkhiyCamelBones (perl)
ttp://camelbones.sourceforge.net/
0172163
03/01/03 03:54ID:hWNCnpWQペリカンって正月休みだっけ?
と、発送スパンをメモしとく。
0173名称未設定
03/01/03 23:27ID:nk3C7Fqb例えば
サービスメニューから呼び出す
↓
提供側のアプリでユーザーが何か操作をして、
「終了」ボタンが押される
↓
呼び出した側で結果が挿入される
みたいな事をやりたい時はどうすればいいのでしょうか?
0174173
03/01/03 23:27ID:nk3C7Fqb0175名称未設定
03/01/04 02:09ID:5zdvt1wZすいません、いってることがよく分からないのですが。。。
サービスメニューっていうのはアプリケーションメニュー(アプリケーション名
がついたメニュー)の中の『サービス』の項のことでいいの?
なにか具体的な例が欲しいな。
0176172
03/01/04 08:32ID:LQxVcN6Qと止めようかと思ったけどそれでもスレ汚しメモ。
0177173
03/01/04 13:45ID:JsoTqK/7具体的もなにも、そのまんまなんですが……
例えば
TextEdit側でテキストを選択して、
サービスメニューから「キーワードに色付け」を呼び出す
↓
色付けサービスを提供するアプリで、
キーワードを指定して行くと同じ文字列に色がついていく。
キーワード全部に色が付いたらユーザーが「色付けを終了」を押す
↓
TextEditに色付けの終わったリッチテキストが挿入される
て感じですが。
色んなCocoaの入門書を読んでみても、
サービスの提供にユーザーが介入しないサンプルばっかりで困ってます。
0178名称未設定
03/01/05 02:10ID:oiKOy1Xw一つのウィンドウの中でビューをころころ変える時ってあるじゃないですか。
例えば10個のNSViewがある時にそれをプログラム側で
NSWindow.setContentView(view1)みたいにやりますよね。
その時に各ビューにいろいろなコントローラ(ボタンとか)があるとアクション
を受け取るクラスが必要になります。みなさんだったらこの受け取り側のクラス
を一つにしますか?それとも複数(例えば各ビューごと)に分けますか?
もちろん時と場合によるんでしょうけど、いままで自分は一つのクラスで
やってたんですけどビューが多くなるとあらゆる処理が混ざっちゃって。。
分けるのもありかなぁって思ったんですよ。
オブジェクト指向的には分けるのが当たり前な気もするのですが・・・。
どうでしょうか?
Objective-C的にはCategoryでわけておくのもいいでしょうか。
結局、Viewの相互依存度によって柔軟に対応することに
なるのでしょうな。
0180178
03/01/05 04:48ID:oiKOy1Xwレスありがとうございます。
なるほど確かにそうですね。
プログラムは常に柔軟にってことですね。
依存度は低め(決して0ではないですが)なので分けてやってみます。
今紙にオブジェクトの依存関係を書いてみたんですがうまくやれば
きれいにまとまりそうです。
がんばってみますね。
それにしても『プログラムを書く』ということと『アプリケーションを作る』
っていうのは二つの間に壁がありますね。必死で勉強します。
0181名称未設定
03/01/08 19:34ID:LIvgpbkk0182名称未設定
03/01/09 00:06ID:dvmn6aeGその説明では、何も判りません。
0183名称未設定
03/01/16 02:39ID:89tBpTdiNSString *str = @"あいうえお";
NSData *dat = [str dataUsingEncoding:NSJapaneseEUCStringEncoding];
これでEUCのNSData型にして、そのあとNSStringに戻す方法は
どうしたらいいのでしょうか?
また、エンコードの方法はこの方法であっているでしょうか?
0184名称未設定
03/01/16 09:10ID:oo03MoCLそこまで分かっているなら、
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding
を使えばいいことも推測できそうなものですが。
0185名称未設定
03/01/16 21:33ID:IxtFqHx0みなさんプロジェクトのバックアップとかってどうしてるんですか?
今んとこソーズいじる前に必ずtar.gzで丸ごと保存してるんですが、
何かいい方法あります?
0186名称未設定
03/01/16 21:58ID:oo03MoCLCVSを使うのがおすすめ。
http://www.a2zsd.co.jp/~a2zsd217/book/cvs/book1.html
コマンドラインからレポジトリを用意して、プロジェクトをIMPORTしておけば、
あとはProjcet Builderから差分を確認したり元に戻したりすることが簡単にできます。
0187185
03/01/16 23:16ID:IxtFqHx0早速試してみました。
ちとこむずかしくて手こずりましたがなんとか導入できました。
んでも実際のプログラム以前にCVSに手こずる罠。。。
ちなみに教えていただいたページ以外にもCVSで検索してみたんですが
ttp://www.linkclub.or.jp/~tumibito/soft-an/cvs/cvs-man/cvs-ja_toc.html
(これって、DevelopToolsでインストールされるCVSのドキュメントの翻訳?)
ここもとても参考になりました。
とにかく186さん、ありがとうございます!
0188名称未設定
03/01/17 04:52ID:iae4P0gQいままで何となくCVSに手を出しそびれていた俺に踏み出す勇気をくれた
お二人さん『アリガトウ』
俺も今夢中でttp://kahori.com/j-cvsbook/j-cvsbook.htmlを読んでた。
まだまだ実用的なことはできないけどがんばるよ。
0189185
03/01/17 10:54ID:lcNODBLM複数のプロジェクトをIMPORTしてもいいんですか?
それともプロジェクトごとにリポジトリを作るの?
間抜けすぎる質問らしく解答を見つけられない...
別に問題ないのではないか。
#なにが問題なのかわからん・・・。
0193185
03/01/17 16:52ID:+NX+CZKg重ね重ねありがとうございます。
読んでて分からんところは今に分かるだろうと、
思いっきり飛ばし読みしてます。
ついでにCVSググってて、こんなん見つけました。
ttp://www.sente.ch/software/cvl/
CVL is a graphical user interface to CVS most often used commands.
以上、Cocoaちっくな話題でなくすんませんでした。
0194名称未設定
03/01/17 18:15ID:HweL1539cvs loginして
openでPBを蹴ってやればリモートCVSも使えるよ。
ssh使ってる場合はパスフレーズ無しにしないとだめだけど。
0195名称未設定
03/01/18 07:00ID:giUYiAl2C言語の勉強をしてみよう!と思って教本買ってきたんだけど
いきなりつまづいてしまった。
#include<stdio.h>
int main()
{
printf("\\");
return 0;
}
だと、←バックスラッシュがぽつんと表示される。
0197名称未設定
03/01/18 16:12ID:ALrZXQoJ人ってどれくらいいるのか? オレは作業できんくらい落ちまくる。
一文字入れて落ち、一行入れたと思ったら落ち、改行できたと思ったら
落ちる。騙し騙しやってるけど、みなさんもそんな感じですか?
0198名称未設定
03/01/18 17:00ID:3WVxlwou>プロジェクトビルダーでコード入れてるだけでやたらと落ちまくる
>人ってどれくらいいるのか?
>>127をよく読もう。
0199名称未設定
03/01/18 18:16ID:MRKdqgWl小春日和のような人
0200名称未設定
03/01/18 18:43ID:Hl9LmSa+0201名称未設定
03/01/19 00:02ID:qkoizFWS( ひ と り ご と だ す )
0202名称未設定
03/01/19 21:05ID:fU25KtyIいまフジテレビでcocoa特集やってるぞ!見れ見れ!
0203名称未設定
03/01/19 21:19ID:WKI8D/qq0205名称未設定
03/01/20 18:22ID:t2BhBQWd0206名称未設定
03/01/22 02:51ID:4maCModNage
そういえばCocoa/JavaでFrameworkを作りたいんですけど
headerとかが必要らしいけどどうすればいいのかなぁ?
自分用にカスタムビューをいっぱい作ってフレームワークにしたら
便利だと思ったんですけど…。
0207名称未設定
03/01/22 10:58ID:1+Qkm5Xj黒背景&半透明のターミナルが気に入っているので同じようなものを作ろうと思ったんだが、
NSTextViewのAtributesからBackgroundのopacityをいじっても透過するようにならない。
下地のNSeWindowにはカラーをいじる項目はないし、どうしたらいいのだろう・・・
0208名称未設定
03/01/22 11:40ID:4maCModNとりあえずNSWIndowを透明にするなら
window.setBackground( NSColor.clearColor() );
window.setOpeque( false );
setHasShadow( true );
でいける。(Javaでごめん、何となく分かるでしょう
ちょっと時間がなくて半透明まで書けない。
ごめんよ、でももし参考になれば。。。
0209名称未設定
03/01/22 11:41ID:4maCModN重ね重ね、ごめん。
0210207
03/01/22 12:26ID:1+Qkm5Xjありが�。
具体的にはNSwindowのクラスをインスタンス化して
アウトレットをNSWindowに接続、
で、呪文を唱えると言うことなのだろうか。。
昼間はもう時間がないので今夜試してみます。
0211名称未設定
03/01/22 14:10ID:JQ+stKB+NSWindowをサブクラス化。
setBackground、setOpequeをオーバーライド。
IB
クラスのヘッダファイルを読み込み。
ウインドウのカスタムクラスを変える。
0212山崎渉
03/01/23 02:20ID:Kx2M+3Qk0214207
03/01/23 23:58ID:WDG0Ml0l#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: はドキュメント読んでみてもよく分からない・・・
0215207
03/01/24 00:01ID:lHQMFngz∧||∧
( ⌒ ヽ
∪ ノ
U U
0216207
03/01/24 02:40ID:lHQMFngz#import "MyWindow.h"
@implementation MyWindow
-(void)awakeFromNib
{
[self setBackgroundColor:[NSColor clearColor]];
[self setOpaque:FALSE];
}
@end
こんな感じ。いろいろ教えてくれてどうもありがとう。
ようやく眠れる・・・
0217名称未設定
03/01/26 18:59ID:IzKleeOY0218名称未設定
03/01/26 23:09ID:O+/ffiFw/Users/hoge/Desktop/
というUNIX式のパスを
Maciintosh HD:Users:hoge:Desktop:
というMac式のパスに変換する方法は無いものでしょうか。
ざっと調べた限りでは該当する機能がCocoaのクラスに見つからなかったので、
何か良い方法をご存じの方はご教示願えませんでしょうか。
0219名称未設定
03/01/26 23:20ID:rEUgqX0Y0221218
03/01/26 23:37ID:O+/ffiFw/Users/hoge/Desktop/というパスの決め打ちではなく、
実際にはどんなパスなのか不確定な場合です。
0222名称未設定
03/01/26 23:44ID:rEUgqX0YAppleScriptで「StartupDisk」を使って名前を調べるってのはダメかな。
そこだけAppleScriptでテキストファイルに書き出すように組んで
起動時にいったん呼び出すとか、できないかな。
0223218
03/01/27 22:14ID: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は全く触ったことがないので、もっとスマートな方法があるかもしれませんが、
とりあえず解決した方法を報告しておきます。
長文申し訳ありません。
0224名称未設定
03/01/28 04:41ID:O6299JZgQuickTimeのサンプルの一部としてどこかで見た記憶がある
Cocoaで取得したパスをFSSpecしか受付けないQuickTimeに
渡す方法として紹介されていた気がする
FSSpecが得られたらFSMakeFSSpecを繰り返せばいいんだけど
スマートじゃないやり方だなあ
それに長いファイル名だと名前の末尾がおかしくなっちゃうかもね
0225名称未設定
03/01/28 15:40ID:VStRHzrc0226名称未設定
03/01/28 16:17ID:NgRJ+NNumain() { FILE *fp = fopen("index.html", "r"); }
0227名称未設定
03/01/30 01:38ID:RAb1dDyE質問の意味が若干曖昧なのですが、
「サーバに接続してデータをダウンロードしたい」という意味であれば、
NSURL *url=[NSURL URLWithString:@"http://www.apple.co.jp/index.html"];
NSData *data=[url resourceDataUsingCache:NO];
といった感じで実現できます。
0228名称未設定
03/01/30 21:21ID:GOsOyZ0Pttp://www.midi.co.jp/objc0.html
こんなんじゃないのか?
これだと読み込めないけど
0229名称未設定
03/01/31 00:55ID:jSuCPtPgOmniHTMLはどうよ。
0230名称未設定
03/01/31 03:28ID:nWV7f5Kl文中に wordA か wordB があったら
そこだけ別の処理をしたいです。
0231名称未設定
03/01/31 10:36ID:7ArxHJrsちょっと調べてないから分からないけど多分
自分で組むしか無いんじゃない。
perlで組めば難しくはないよね。
0232名称未設定
03/02/01 01:11ID:8bNReTRBCocoaの標準ではできないっぽいけど、
>>229のURLにあるOmniFoundation フレームワークには
正規表現ライブラリがあるみたいだから、
それを試してみるというのはどうでしょう。
0233名称未設定
03/02/02 23:40ID:ohzM6UCC前に、NSResponderのサブクラスを作って、tableViewに
[tableView setNextResponder:myResponder]
を送ってmyResponderでキーイベントを処理すればいい、っていう事が書いてあったんでこの通りにしました。
(ついでに[MyResponder setNextResponder:[tableView superview]も入れました。不要ですか?)
その結果、キーイベントを拾えるようにはなったのですが、このサブクラス中では[tableView selectedRow]の結果はいつも0しか返ってきません。おかしいなーと思い、試験的に
[tableView selectRow:3]
した直後に-selectedRowを送ってもやはり0が返ってきます。
何かやり忘れていることがあるのでしょうか。知恵をお貸し下さい..。
0237名称未設定
03/02/03 01:01ID:V9mQ7ebKありがとうございます!確かにtableViewがnil(0x0)になってました。
さて・・なんでnilになってるんだろう・・。
tableViewからIBでMyResponderにつないでるのになー・・・なんかすごい初歩的な所で間違ってそうだな・・。
>>236
なるほど、そういうのもアリですね。確かに簡単!
できればdelキーだけで消去できた方が自然な操作かなーと思いますが、どうしても無理だった時に使わせていただきます。
0238名称未設定
03/02/03 01:20ID:VAtApCIAケントデリカット
0239235
03/02/03 01:29ID:Zlq3gph/>>233
tableViewがスペルミスってるか、
IBでMyResponderインスタンスを作ってるのに自分でallocしてるとか。
ぬるぽExceptionがでないことの弊害か。
0240236
03/02/03 02:25ID:1DSE6VJD別にメニューにこだわってるわけじゃないけど、メニューにキー登録すれば
delキーでもメニューでも同じ動作が出来るから俺は好き。
いや、アプリの特性にもよるし、今求められてる答えじゃないから気に
しないでおくんなまし。
0241名称未設定
03/02/03 20:23ID:GA7OTv+E参考書を買おうと思うんですが、中村本とアーロンヒレガスとではどっちがいいですか?
0242名称未設定
03/02/03 20:37ID:4QHl9ldJ個人的にヒレガス本を勧めます。こっちのほうがきちんと解説していると思います。
ただこれを読むには最低限のC言語とオブジェクト指向の知識が必要です。ご注意を。
0245233,237
03/02/04 00:28ID:F8EYt14Kありがとう、答えは後者でした。
実はオブジェクト指向なるものが分かってない可能性が高いようで・・・(汗)
ばっちり動作しました。Cocoaって面白いですね〜。
後に続く人のために、今回やった方法を書いときます。
(1)メインのコントローラーオブジェクト(mainController)のアウトレットにIBでインスタンス化したmyResponderを接続
(2)mainControllerの - awakeFromNibで
[tableView setNextResponder:myResponder]と
[myResponder setNextResponder:[tableView superview]]
を送る。
(3)myResponderの - keyDownメソッドで、押されたキーのキーコードを調べて、Delキーだったら[mainController deleteItemOfTableView(メソッド名は適当)]を送る。
(4) ( ゚Д゚)ウマー
かなり洗練されてなさそうだけど、とりあえず動いてるのでOKかな。
0247名称未設定
03/02/04 22:13ID:+MMCD9Ww結構あるじゃないですか.UNIXの.で,その中の対話形式になっているツールを
CocoaのGUIで制御したいのですが,(フロントエンドですね)入力待ち状態になっ
ているコマンドラインツールに,どうやってGUIからコマンドを入力するんですか?
例えばrm -iってやると,yesかnoを聞いてきますよね.その時yesなりnoなりを
どうやってrmに渡したら良いのか...
(rm -fしろというのはなしでおねがいします.あくまで例なので.)
0248名称未設定
03/02/04 23:56ID:/Om4uQADパイプを使って標準入力に流し込みます。
CocoaはやっぱりのPerlスクリプトを実行するが参考になると思います。
waitUntilExitを使わず、performSelector:afterDelay:;なんかをつかって
標準出力をパイプを使って読み込んで、
必要であればパイプを使って標準入力に書き込む
という手順でしょう。
0250名称未設定
03/02/05 20:35ID:MfIzGyu1????????????.??????????????,Perl?????
???????????????.???????????????
???????,????????rm -i????,???ftp??????
??,??????????????????,????????.
fp = popen("rm -i hoge.txt", "w" );
fwrite( fp, "yes" );
?????C???????,???????????????????.
>>249
????????????.
???,???yes?rm -i??????????????????,
??????????...(???????????)
0251250
03/02/05 20:38ID:MfIzGyu1>>248
レスありがとうございます.紹介していただいたサンプルは,Perlスクリプト
が常に標準入力待ち状態ですよね.それだとたしかにうまくパイプで
いけそうですが,先にしめしましたrm -iだったり,例えばftpだったりする
場合,いつもいつも入力待ち状態ではないので,うまくいきません.
fp = popen("rm -i hoge.txt", "w" );
fwrite( fp, "yes" );
ベタベタなCですみませんが,このようなかんじのコードを書いています.
>>249
レスありがとうございます.
えーと,それはyesにrm -iの標準出力を流し込もうとしているので,
ちがうと思うのですが...(実際できませんでしたし)
0252250,251
03/02/06 21:36ID:UYOxbH3Tfwrite( fp, "yes" );
これはまちがいですね.
fprintf( fp, "yes" );
でした.すみません
0253名称未設定
03/02/07 21:39ID:bNgyiqZA0254名称未設定
03/02/07 23:30ID:7wMX8TxP-(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
0255254
03/02/07 23:32ID:7wMX8TxP0256名称未設定
03/02/08 01:04ID:4RKC1CegNSArrayのリファレンスを読んでいたのですが、- indexOfObject:メソッドは
配列中の要素にisEqual:を送る事で「引き数の物と一致しているか」を判断する、とありました。
また、- indexOfObjectIdenticalTo:メソッドは、id値を頼りに一致しているかどうかの判定を行う、
とありました。
ところで、荻原本によるとisEqual:は「同じポインタを持つ物は等しいと見なす」とあります。
となると、結局上記の2つのメソッド- indexOfObject:と- indexOfObjectIdenticalTo:は、両方とも
オブジェクトへのポインタを頼りに「一致しているかどうかの判定」を行っているように見えます。
両者のメソッドは、一体何が違うのでしょうか?
0257名称未設定
03/02/08 01:49ID:nc13ukt6>isEqual:は「同じポインタを持つ物は等しいと見なす」
っていうのがなんか違う気がする。
isEqualってメソッドなんだよね(それさえもわからない。。)。
だからじぶんでisEqualを実装すれば実際には違うオブジェクト
(ポインタの異なるオブジェクト)でも同じとみなすことが出来る。
って事じゃない?
ごめん、説明下手で。
0258名称未設定
03/02/08 02:48ID:25lWZyO8オブジェクト指向プログラミングの本には必ず書かれている
基本概念なので調べてみましょう。
0259名称未設定
03/02/08 04:23ID:PjXD2qHV0260256
03/02/08 06:27ID: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:は単にポインタを参照しているだけでは無い事が解りました。
ヒントを下さって、どうもありがとうございました。
0261256
03/02/08 06:57ID:nZBs88YLやっぱり「ポインタが同じである場合」と書いてありました。
が、「例えばNSStringは(中略)このメソッドをオーバーライドしている」とありました。
上記の実験で使ったNSNumberも、どうやら同じようにオーバーライドしていたようです。
当初私もisEqual:に変更を加えているのでは、と思ったのですが、ところが、
NSStringやNSNumber(NSValue)のヘッダを見てみても、オーバーライドしたとは
明示されていませんでした。これが私が混乱した元になってしまったようです。
お騒がせしてすみませんでした。
0262名称未設定
03/02/08 10:03ID:qe15kRor理解する上で重要なので、おざなりな理解で済ませない方がいいよ。
素直に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.
0263251
03/02/08 20:01ID:jKIPEwj2コードまで書いていただいてありがとうございます.
そうか,パイプを入出力用に2つ作らないといけないわけですね.
そして入力を検知するまでループで待ち(ここがポイントかな?),
それから出力用のパイプにデータを流し込む.
ちょっと今は試せないのですが,分かりました.
しかし,世の中のコマンドラインツールのフロントエンドって,
みんなこういうことしてるんですかね.結構大変そう.
0264名称未設定
03/02/08 21:54ID:k+NDFvP80265248,254
03/02/08 23:39ID:RHwyfaZZこのループはただ削除対象ファイルがなくなるまで回してるだけです。
実際にこのような処理をして、コマンドラインツールからの出力が遅れると
GUIの処理が全くされないので虹が回りはじめます。
で、performSelector:afterDelay:;とかを使えばどうですかということです。
-(void)hoge {
if( タスクからの出力がある ) {
出力にあわせて処理
}
if( まだ処理が残っている) {
[self performSelector:_cmd afterDelay:0.0];
}
}
みたいなことをやればGUIに処理が回りますので虹は回りません。
もちろんスレッドを使ってもいいですけど。
0266名称未設定
03/02/09 05:30ID:0I2KfkjLコンテキストメニューを表示させるにはどうしたらいいですか?
sendEvent で F1 キーを捕まえるところまではできています。
でも、メニューの生成・表示方法がわかりません。
0267名称未設定
03/02/09 10:02ID:rBb3Vu6yってやるとか?
なるかどうかは知らん。
0268名称未設定
03/02/09 14:39ID:OynYE/8Mttp://infoatmackers.jp/cocoa/programming/programming19.html
でコンテキストメニューについて書かれてるみたいだね
0270256
03/02/10 02:40ID:+aF+n49+確かにその通りです。が、今まで訳に自信が無く、敬遠していました。
英和辞典と格闘しながら読んでみて、自分なりに実験を繰り返していましたが、
"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も、おそらくこのような拡張を行っていたんですね。
勉強になりました
0271名称未設定
03/02/10 21:29ID:Dew/Ojimなんとなく、微妙な理解の仕方のような気がする・・・
"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を取得します。
0272名称未設定
03/02/10 22:41ID:a9ihwh+e「常に真を返す」という実装である方が論理的に整合性が取れる、つう話が
JavaHouseで出ていたな。
0273名称未設定
03/02/11 02:05ID:j79c6DbTその話、理由を聞かないとなんとも言えないが、わけのわかってない
人が言っただけのこと?
それともJavaHouseで複数の識者に支持されるような説得力のある話?
URLキボン
0274名称未設定
03/02/11 02:13ID:j79c6DbT世界観を知った上で、現象を見て理解を確認するのはいいけど、
現象から理解しようとしすぎない方がいい。
とくに基本哲学的なところは。。。
0276256
03/02/11 22:18ID:kNLtXHAMああ、おかげでやっとisEqual:のリファレンスにあった
"This method defines what it means for an instance to be equal."の現す真意が理解できました。
確かにおっしゃる通りで、各クラスとも「同一と判定してほしい条件」は異なるはずで、時にはそれが
ポインタであったり(同じメモリ空間に格納された『同じもの』)、時にはNSStringやNSNumberに
代表されるような「表現している値」(あくまで『たまたま値が等しいだけ』)の場合がありますものね。
(しかも、状況によってはその都度判定条件を変える必要に迫られる可能性もあるでしょうし)。
それに「ポインタの比較 == 値の比較」としか表現できない状況も確かにありそうです。
//メソッドしか持たないオブジェクトの場合、こうするしかありませんよね。
で、isEqual:というのは「このクラスではこういう条件や状況で『同じ』と判定して欲しいなあ」を
定義するメソッドである、という訳なのですね。御丁寧にどうもありがとうございました。
0277名称未設定
03/02/11 22:20ID:8DblXC2fひろみちゅが言ったんだよ。おれは納得した。
http://java-house.jp/ml/archive/j-h-b/046630.html#body
http://java-house.jp/ml/archive/j-h-b/047452.html#body
0278名称未設定
03/02/13 15:05ID:YVSvw8xPhttp://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 ;
}
としたんですがうまくいきません。ご教授お願いいたします。
0279278
03/02/13 15:09ID:YVSvw8xP↓
void HelloWorld(int e){ this.i = e ; }
でした。すみません。
0280名称未設定
03/02/14 06:12ID:YLK143md>id e = [[NSClassFromString(@"java.util.HelloWorld") alloc] init : 5] ;
この行はおかしくない?
HelloWorldはjava.utilパッケージに入ってなよね。
予想だと[ java.util.HelloWorld >> HelloWorld ]じゃないかな?
試してみてよ。
0281278
03/02/14 20:53ID:LnD46CMV#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)により終了しました。
となり例外処理されてしまいます。
0282名称未設定
03/02/14 21:13ID:selVPrLv0283280
03/02/14 22:50ID:YLK143md>>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
ずいぶん奥深くにあるなぁ。
0284名称未設定
03/02/14 23:32ID:OuEkm7oo0285名称未設定
03/02/15 00:05ID:Ac1Y59aiTopicsのとこにはLegacyってなってるけど。
かわりにJNIを使うことになると思うんだけど。
どっかにJavaBridgeよりJNIを使えって書いてあったかな?
JNIのほうがめんどくさそうだが。
0287278
03/02/16 11:12ID:diyOpGVWtp://members.blackbox.net/a/programs/
のJava/ObjC-example for Cocoaにあります。
0288278
03/02/16 11:15ID:diyOpGVWimport com.apple.cocoa.foundation.*;
import com.apple.cocoa.application.*;
0289名称未設定
03/02/19 13:36ID:AJv6KGuf0290名称未設定
03/02/21 09:04ID:1xBXzSNJ0291名称未設定
03/02/22 00:14ID:Sgmn5d2E0292名称未設定
03/02/22 14:01ID:rZwK672+自作のアプリでNSMovieViewを使ってMpeg2再生してたら1分ほど再生した所で止まる(内部的には再生されているみたいだけど、音声も映像も止まる)ようになっちゃって、解決できません・・・。
ためしにWindowにMovieViewを貼っただけのテストアプリを作ったり、Cocoaはやっぱり!のサンプルアプリを見てみたりしたんですが、やっぱりこれも止まる。
解決できてるよ!という人がいたらご助言願いますー。
0293292
03/02/22 15:11ID:rZwK672+としたら、止まるようになったのは10.2にしてからだなぁ、きっと。
今さっき、システムの再インストして確認したけどやっぱり止まりました。うちだけじゃないですよね?
0294名称未設定
03/02/22 17:02ID:T31Zl/+7確かに止まりますねえ。(Cocoaはやっぱり!のMoviePlay2で確認)
0296292
03/02/22 23:39ID:rZwK672+「MacMovieTV」
http://www.vector.co.jp/soft/mac/art/se197681.html
でも止まりませんでした。Cocoaだけの不具合なのかな・・。
0297名称未設定
03/02/23 11:07ID:A2MIrTF6ああ、10.2で止まるのって私だけじゃなかったんだ…。
うちではMP3を再生していても止まってしまいます。
私はしょうがないので「Cocoaはやっぱり! 出張版」を
参考にしてQuickTimeを直接呼び出して対処したんですが、
これだとモーダルダイアログの表示中に再生が一時停止して
しまうんですよね…。
0298名称未設定
03/02/24 22:02ID:y8x3g38E0299292
03/02/24 23:25ID:cL6Sq5ADQuickTimeを直接呼び出すって言うのは、何をすれば良いんですか?
再生をstartするところだけQuickTimeを使えば良いのでしょうか。
0300297
03/02/25 01:57ID:DyErNNd5そういうことです。
実際のコードはこんな感じです。
#import <QuickTime/QuickTime.h>
NSMovie *movie;
Movie qtmovie;
EnterMovies();
movie = [ [ NSMovie alloc ] initWithURL:aURL byReference:YES ];
qtmovie = [ movie QTMovie ];
StartMovie(qtmovie);
0301292
03/02/25 22:49ID:Ld3tJhfj別の問題があるのかなぁ?
0302297
03/02/26 20:57ID:gQBzciJDあ、私は音さえ鳴れば良かったのでNSMovieViewには
MovieをセットせずにStartMovie()を実行してます。
なので、映像も表示させたい場合は他にも処理を
付け加える必要があると思います。
0303名称未設定
03/03/01 13:54ID:kRnIXCQg中村本List4-3で出てくる
NSSavePanel *savePanel = [ NSSavePanel savePanel ];
の意味するところですが、右辺(?)のNSSavePanelクラスに
クラスメソッド+savePanelを送った結果、戻り値の
インスタンスが左辺のNSSavePanelクラスのインスタンスである
savePanelとされる、という解釈するんですかね?
0304名称未設定
03/03/01 15:14ID:s7FTtIdkたぶんそゆこと。
俺、ObjC知らないけど…。
あれ、アスタリスクがつくのってポインタなんだっけ(Cではそうだよね)?
ってか、Cocoa-Javaって制約大きいよなぁ。
勉強しようかなぁ。
時間ないなぁ。
独り言です…
0305名称未設定
03/03/02 00:52ID:SBH9raFvNSSavaPanelについては良く知らんけど、
左辺のsavePanelはただの変数名。で、変数名の前のNSSavePanel *ってのは、
「この変数はNSSavePanelクラスのインスタンスを格納するための変数ですよ」という事を
『コンパイラに明示する』ために書いてあるものなんだ。だから、べつに:
id savePanel = [ NSSavePanel savePanel ];
としても特に問題は無いよ。
/*正確には『NSSavaPanelのオブジェクトのポインタを格納するための変数だと明示する』事。*/
/*試しに"NSString *savePanel"としてみよう。コンパイラが文句言うと思う*/
という訳でNSSavePanel *savePanel = [ NSSavePanel savePanel ]; という行は、
「NSSavePanelクラスのインスタンスを格納する予定である変数savePanelを宣言し、
そこに [ NSSavePanel savePanel ] の結果(返り値)を代入して変数を初期化する」って意味になるよ。
結果として、変数savePanelにNSSavePanelのインスタンスが代入されるみたいだね。
0307名称未設定
03/03/02 04:14ID:AapsQ2b/ん〜、やってみようかな?
マックでソフト作るならこれからObj-Cが必須な気もするし。。
ちょっと今はWebアプリの勉強をしなくちゃいけないからその次かな?
とりあえずObj-cを読めるようにはならないとなぁ。
AppleのサンプルもほとんどObj-Cだし。
ちょっとしたら初めて見ますわ。
0308303
03/03/02 12:33ID:sIDGxSpdあ、なるほど。「id savePanel =」と考えると見慣れた構文ですね
バッチシ理解できました。Thxです。
クラスからインスタンスの生成、というと
[ MyClass alloc ] init ];
と初期化とセットで考えてしまうのですが、
この場合[ NSSavePanel savePanel ]で生成された
インスタンス(右辺のsavePanel)は生成後自動的に初期化されているですか?
「cocoaはやっぱり」のキッチンタイマーでも
tmKitchen = [ NSTimer scheduledTimerWithTimeInterval: ...... ];
と alloc している部分は見当たらず・・・
ここもしかしてクラス固有の特性を理解していないのかもしれませんが
0309303
03/03/02 12:37ID:sIDGxSpd0310名称未設定
03/03/02 13:17ID:tVKgOb9Uインスタンスを生成するクラスメソッドは原則として
初期化とAutoreleaseまでやってくれることになってます。
なので、
[ NSSavePanel savePanel ];
というのは
[ [ [ NSSavePanel alloc ] init ] autorelease ];
と読みかえることが出きます。
0311名称未設定
03/03/02 14:34ID:YV6rGazc前スレが985という半端な数字でおわっているのは?
0313311
03/03/02 22:15ID:YV6rGazcご説明ありがとう。私超厨房で、dat落ちとか知らなかった。
とてもいいスレです。いま前スレを読んでまして、参加できる
日を楽しみにしてます。
0316名称未設定
03/03/03 02:22ID:qwTwrPB/同じインスタンスを使い回してたりとか。
>tmKitchen = [ NSTimer scheduledTimerWithTimeInterval: ...... ];
この場合はちょっとちがうかな。
NSTimerはNSRunLoopに登録しないと機能しないんです。
で、上のメソッドを呼ぶとインスタンスを生成させた後、カレントランループに
そのインスタンスを登録して、それを返してくれる。
単純なビルダーパターンみたいなもんですね。
0317xxx
03/03/05 01:05ID:n4eQ24cL>初期化とAutoreleaseまでやってくれることになってます。
というパターンもあれば、ずっと常駐する、あるいは解放する必要がない
ものを返す場合もあります。(たとえば[NSColor redColor]とか)
0318守護霊
03/03/06 00:27ID:zZEaj4Vp今日は保守に参りますた。
0319
03/03/06 02:07ID:do/ax8Tjその辺はsingletonパターンを使っているのでAutoreleaseしているか
常駐しているか意識しなくてもいいようになっているんだろうね
0320名称未設定
03/03/08 02:50ID:nolDcyCk0321名称未設定
03/03/08 02:55ID:1RkPkO0x0322名称未設定
03/03/08 04:15ID:4NgTRL//0324名称未設定
03/03/09 17:08ID:msa+sHAShtmlソースからリンクを抜き出そうとした時、
例えば <a HREF="xxx.html"> の部分を探して xxx.html の部分を抜き出したい時、
<a HREF=" や "> を検索しようとすると、@"<a HREF=""、@"">" となってしまってうまくいきませぬ。
" を含む文字列を記述するにはどうしたらいいのでしょうか?
0325名称未設定
03/03/09 18:12ID:6mXvgXjh0327名称未設定
03/03/10 23:29ID:mRFFOi61色をつけたいのだが、どうしたら良いのでしょう?
やはり NSTableView を継承するのが良いのでしょうか?
0328名称未設定
03/03/10 23:41ID:658LH3T0NSOutlineViewの
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;
あたりがヒントになるかもしれない。
0329名称未設定
03/03/11 00:57ID:9t0TPS4H0330329
03/03/12 01:53ID:U+AUWkbk/dev/cu.IrDA-IrCOMMch-b を読んだり書いたりすればいいのかな?
http://www.omnigroup.com/mailman/archive/macosx-dev/2001-November/020999.html
0331保守
03/03/15 07:58ID:4pQJTuAp0332名称未設定
03/03/16 17:36ID:g/2cX/MnNSFileManagerあたりがクサイと探していますがさっぱり見つかりません。
0333名称未設定
03/03/16 17:47ID:sxlGCdlS0334名称未設定
03/03/16 19:59ID:g/2cX/Mnフォルダの作り方がさっぱり。
0336名称未設定
03/03/16 22:24ID:g/2cX/Mnhttp://www.oomori.com/cocoafw/Foundation/NSFileManager/createDirectoryAtPath.html
0337名称未設定
03/03/17 11:34ID:vwFLfm0V思いっきり初心者質問で申し訳ナイス
0340名称未設定
03/03/19 05:20ID:VPA/u3fR0341名称未設定
03/03/21 17:51ID:YVSn6hCYある作業がちゃんと完了するのを待ってから先へ進ませる、ということはできますか?
たとえば何かの動作中に、作業状況をTextFieldに逐一表示したい場合とか...
0342名称未設定
03/03/23 01:45ID:OSxgBhrr0343名称未設定
03/03/23 11:48ID:zlrwIDrSFileMergerの使い方がよく分かりません。
◆やったこと
・クラスを作成していくつかアウトレットやアクションを作成
・生成したソースファイルにコードを書いてコンパイル
・その後クラスにアウトレットを追加したのでもう一度関連ファイルを生成
・ここでFileMergerが立ち上がるけどよく分からないのでセーブして終了
・ソースがまっちろに!うわーん
クラスを変更した結果増えた行に関しては(ヘッダファイル)、
問題なく追加されているんですが、新しいほうのファイルにない
行があるファイルは全部消えて置き換わってるんです。
正しいマージの仕方を教えてください。
0344名称未設定
03/03/23 12:20ID:4EplBd0u・その後クラスにアウトレットを追加したのでもう一度関連ファイルを生成
・ここでFileMergerが立ち上がるけどよく分からないのでセーブして終了
ここが問題。
一旦生成した Hoge というクラスに Outlet や Action を追加するには、
クラスの Hoge.h と Hoge.m ファイルに IBOutlet や IBAction のコードを書くだけでOK。
そして、その Outlet や Action とコントロール部品を接続するには、
Hoge.h ファイルを Interface Builder の
Classes > Read Hoge.h メニューで読み込んでから接続する。
0345名称未設定
03/03/23 14:15ID:jwdEcO0Vまっさらなひな形がプロジェクトビルダーで上書きされるんです
だから今まで書いたコードがまっさらに。
だから逆にプロジェクトビルダーのほうでアウトレット等書き込んでやって
それをインターフェースビルダーに読み込ませてコントロール等と
結線する、と。
どんなコードを追加したらいいかは最初にクリエイトしたひな形で
だいたい想像つくでしょ?
0346名称未設定
03/03/23 20:52ID:UR167UScToolbox の GetKeys のように、キー入力の状態を取得したいのですが、
他にフレームワークを追加するみたいで、行き詰まっています。
どなたかご存じの方がいらっしゃいましたら、ぜひ教えて下さい。
0347346
03/03/23 21:00ID:UR167USc0348名称未設定
03/03/23 23:14ID:zlrwIDrS助かりました! それが正しい(?)方法なんですね。
ところでもう一つ凄く初歩的な質問があるんですが…
"nil"ってなんですか? NULLのこと?
Cocoaはやっぱりのwebの例に
NSTimer *tmKitchen= nil;
ってありますけど、意味も分からずにそのまま書いてます。
0349名称未設定
03/03/23 23:37ID:fNMMXLs6http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=%22nil%22+c%8C%BE%8C%EA&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0350名称未設定
03/03/24 13:33ID:n86SSaMT0351名称未設定
03/03/24 18:09ID:Tl6Q9zvZ0352名称未設定
03/03/24 21:00ID:EQLEFjNY0353名称未設定
03/03/28 11:12ID:GvA0+xOONSThreadは読みましたが、実際どういうものなのかがわかりませぬ。
0354名称未設定
03/03/28 12:23ID:nijosm6z0355名称未設定
03/03/28 16:28ID:M9lTTgB20356名称未設定
03/03/28 17:34ID:4B5F/J3Bは動かないのだろうか...
0357353
03/03/28 21:45ID:GvA0+xOOサンクスコ。あちきは中村本の弟子なもんで...
プログラムがはじめてでもわかりやすい本だったけど、
やっぱりその分踏み込みは浅めですね。
荻原本とかもう一冊買おうかなあ(それとも立ち読みか)
0358名称未設定
03/03/28 22:19ID:SPgj6TFf技術書の立ち読みは個人的には好かんな。
まぁ、知りたいことがすでに絞り込んであるなら立ち読みもありだけど
できるだけ全体を通して理解した方が力にはなるよな。
本はいくら読んでも損はしないぞ。
特に入門本を買った時は間違いなく踏み込んだ本が必要。
説教じみてきたな。。。
スレッドに関しては>>354氏が言うようにjava系の解説を読むと
理解しやすいかも?
ガンバレ
0359353
03/03/28 23:24ID:GvA0+xOOいやあ、何かと春は物入りなもんで高い本にはなかなか手が出ないザンスよ。
Cocoaから始めたので未だにJAVAは機械語にしか見えないし...
とりあえずいろいろ実際動かして試してみよかな。
0360名称未設定
03/03/28 23:27ID:A+eq+s3hJavaも独自の部分を除けばCに似てると思うけど。
0361358
03/03/29 11:53ID:EALTZVpH>いやあ、何かと春は物入りなもんで高い本にはなかなか手が出ないザンスよ。
うんうん、わかるよ。
スレッドに関しては言語に依存しない解説も結構あるから探してみるといいかも。
0362名称未設定
03/03/29 16:02ID:+jtwqOS3スキャナとプリンタ欲しいけどもう金ねえ。
>>360
>>353が現状で何を勉強しているかわからないけど、Cocoaからプログラミングの勉強をはじめたので
どの言語もわけわからんものに見えるのだと思われ。
0363名称未設定
03/04/03 11:04ID:YumVfF0cその後に追加する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の値って保持されないですかね?
0364363
03/04/03 11:22ID:YumVfF0cないのかな....?
(1)と(2)、それぞれ前と後じゃ同じlogDataでも別物ですよね?
このメソッド繰り返すとワサワサメモリ使っていっちゃうんでしょうか?
0365名称未設定
03/04/03 12:31ID:7ox0ucKslogDataが有効なオブジェクトである場合:
まず[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が必要。
変数とオブジェクトのインスタンスを分けて考えることと、
オブジェクトオーナーシップを理解することなどが必要かと。
0366363
03/04/03 16:27ID: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変数に溜め込んで最後に「連続したデータとして」吐き出す、という考えです。
0367名称未設定
03/04/03 16:43ID:FkUa8EXL本買って読めって事?
0368名称未設定
03/04/03 16:59ID:A1JseunRhttp://www.big.or.jp/~crane/
0369365
03/04/03 18:38ID:7ox0ucKsオーナーシップの話題はさんざん既出なので資料はたくさんあると思う。
>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];
}
とかでいいんじゃないかな?
0370363
03/04/03 21:36ID:GdSqss15>リリースする必要がある(=インスタンスのオーナーである)のは
>基本的にalloc,copyした場合とか、retainした場合。
allocやretainと憶えていたのでこれまた前進です。
なんか断片的にジグソーバズルが埋まっていくような。
>よくわかないっす。並列に実行するの?
あ、今回はアルゴリズム的な話ではなく、Cocoaの作法として
考えて下さって結構でし。
ども、ありがとうございました。
0371名称未設定
03/04/04 01:07ID:3GIJbdVLシステム環境設定のDockの設定のところで動的にリアルタイムで変化させれますよね?
あれってどうやってるんでしょうか?
Apple Eventでもなさそうだし、ああいう風に他のアプリを自分のアプリから
コントロールする場合、どういう手法を採るんでしょうか?
0372名称未設定
03/04/04 01:22ID:/+WnuhbRなる「Real Switch」キャンペーンを開始した。「Switch」キャンペーンとは、
他OSからMacintoshへの変更を促すもの。転向したユーザーを「Switcher」
と呼ぶが、どうも、「偽Switcher」が多く含まれていた模様。このため、
Appleは、Switcherの中から本当のSuitcherを見つけるキャンペーンに
切り替えたようだ。
ttp://pc.watch.impress.co.jp/docs/2003/0401/uocchi/rs.htm
0373名称未設定
03/04/04 13:41ID:MjmTJW8jどこの何を読んでるの?
0374名称未設定
03/04/04 14:28ID:ZfGtqqRT0375名称未設定
03/04/05 12:00ID:R0KODGishttp://www.geocities.co.jp/Milkyway-Lynx/4133/article/art_7.html
0377名称未設定
03/04/05 12:19ID:Wq2mRxT5>Windowsで同じ事をすると倍近くのコードを書かねばなりません。
>MacintoshでCarbonやToolBoxを使った日にはさらに倍以上のコードを書くハメになります。
ナニモ シラナイノニ エラソウナコトイウナ!
0378名称未設定
03/04/05 12:32ID:y7qF7tfY0379名称未設定
03/04/05 12:47ID:Wq2mRxT5というか行数どうのこうのより、CocoaのCの字も知らないのに
バカにしているのが許せん。
0380名称未設定
03/04/05 16:15ID:phxq/2S9Mac批判してるだけでドザって思い込むのはやめたほうがいいぞ。
どう見てもドザじゃないし・・・。
OSXも使っててそれでもMotifがいいって言ってるんだから
価値観の合わない人とは関わらないのが吉。
0381名称未設定
03/04/05 16:51ID:7ul0KRc8微笑しながら見守ってあげましょう。
0382名称未設定
03/04/05 21:42ID:DU7TfmNgBeOSのアプリケーションのソースを見せてやりたい。(←をいっ!
0383名称未設定
03/04/05 22:54ID:asYB7vUettp://www.big.or.jp/~crane/cocoa/
落ちてますか?404 Not Found なんだけど…
0384名称未設定
03/04/05 23:13ID:mrX8GlKKInterface Builderだな。これはいい。
0386名称未設定
03/04/06 02:33ID:cbA9GWNr開発環境としていちばんはじめに用意されるべき物だったような気がするんだが。
0388名称未設定
03/04/06 02:51ID:cbA9GWNr電波っていうか、たんに自分の好きなものをマンセーしてるだけだな・・・
モーオタのファンサイトと同レベルかな。
cocoaの保存ダイアログのカラム表示は好きだけどなあ、
でもイマイチ整頓しきれていない感はあるな
0389名称未設定
03/04/06 02:56ID:9uHmEORtそれと、上の階層のフォルダに上がりにくくなった。
スレ違いだけど。
0390名称未設定
03/04/06 03:05ID:cbA9GWNrブラウザのブックマークは一つのプルダウンの中に入ってるからね。
慣れてないと、わかりにくい。
上の階層に上がるのは、カラム表示なら下のハンドルを掴んでうごかすだけのような。
0391名称未設定
03/04/06 03:05ID:3o4jut1o0392名称未設定
03/04/06 10:55ID:o0PnofWAたしかにOS.9からXに移行した時
一番使いにくかったのがファイルダイアログかな。(iBookだったし)
最近はPowerBook買って1280*854までスクリーンが広くなったから
そんなに苦じゃなくなったけど。
0393ほんとにさっぱりしてる
03/04/06 19:30ID:3EwRybz3ttp://www.big.or.jp/~crane/
によると、しばらくblogします、だってさ。
0394名称未設定
03/04/06 22:33ID:Lw1E0CGA0395名称未設定
03/04/07 00:46ID:wFMoad4B0397名称未設定
03/04/07 13:42ID:619o4sfV0398名称未設定
03/04/07 13:55ID:zzVqvOEmあんま Cocoa と Blog は関係無さげ。
MovableType 流行ってるね。tDiary とかWiki も。
0399名称未設定
03/04/08 13:14ID:YFjcPzEw0400名称未設定
03/04/08 14:02ID:8wTCAmOBWebデザイナーだったら激しく問い詰めてやるところだが
デベロッパだったら別にかまわないんじゃないの?
といいつつ400ゲット
0401名称未設定
03/04/08 14:23ID:CSfncaukなんか嫌な事でも有ったのか?
0402名称未設定
03/04/08 19:09ID:D2j+hYgMSafariに合わせて作るわけにもいかんでしょ。
0403名称未設定
03/04/08 21:29ID:CSfncaukSafariとCaminoだと、blogの存在すらわかんないじゃん。
0404名称未設定
03/04/08 21:44ID:D2j+hYgMちゃんとHTMLにさえ準拠してないブラウザが悪い。
0406名称未設定
03/04/08 22:10ID:B+W1wavS実験段階のblogらしいし、あんまり拘ってないのかな。
たぶんiframeのurl属性を""でくくってないから、
一部のブラウザで表示されないんじゃないんかなぁ?
0407406
03/04/08 22:16ID:B+W1wavSなんで表示されないんだろう。
0408名称未設定
03/04/08 22:18ID:NcOqdo2xttp://openlab.ring.gr.jp/k16/htmllint/htmllint.cgi?ViewSource=on;URL=http://www.big.or.jp/~crane/close.html
0409406
03/04/08 22:30ID:B+W1wavS0410名称未設定
03/04/08 22:39ID:CSfncauk0411名称未設定
03/04/08 22:41ID:CSfncaukさあD2j+hYgMさん。その箇所なおして再アップロードしといてください。
0412名称未設定
03/04/09 02:49ID:0CLAVZ0mなんとかならないんでしょうか。
バックスラッシュいちいちコピペしてるんですが。
0413名称未設定
03/04/09 05:21ID:ZFgISmAtいままさに
0414名称未設定
03/04/09 08:20ID:KUJbjg3Uスクリプトを米国にして、Option+\でバックスラッシュが入力できます。
0416名称不確定
03/04/09 16:05ID:ZwuYuJnVCocoaとSafariとどう関係するんだ?
CocoaフレームワークにSafariに関するクラスとかメソッドでもあるの?
0417名称未設定
03/04/09 16:38ID:YJvsqjsEパッケージ内のファイル、特に画像ファイルを見れなく
する方法てないですか?
ゲームなんかだと簡単に見られたく無い画像とかあるので。
0418名称未設定
03/04/09 16:47ID:6mlIhf9sCocoaフレームワークとSafariは直接関係ないだろう
一部ではWebKitフレームワークがアツいようだが
>>417
独自フォーマットに汁
PNGでプライベートチャンク使うとか
ビットマップをシーザー暗号でエンコードするとか
0419名称未設定
03/04/11 16:54ID:aOO376W1中村本だとデータソースにはNSMutableArrayを使うんですが、
NSCellを使ったりする方法もあるようで、
テーブルの項目の中に画像を使おうとするとそのほうがいいのかなあ。
なんだか根本的なことがわかってないような気もしますが、どなたかアドバイスキボンヌ!
0420名称未設定
03/04/11 20:11ID:ks8ALL2s要はアイコン付きリストを表示させたいのか?
NSTableViewじゃなくてNSOutlineViewの場合だけど……
俺はNSBrowserCellを使った
NSCellを継承してオリジナルのクラスを実装した場合に比べて
何もしないでもAQUAのアピアランスに沿ってくれるので楽
NSOutlineViewのExampleを改造したので
データそのものはNSObjectを継承したFileSystemItemクラスに持たせた
それとデータを保持するクラスとデータソースは別だぞ
0421名称未設定
03/04/11 23:02ID:aOO376W1普通だとNSStringやらNSNumberやらでつが、ここにNSCellを返せばいいのか、
はたまたNSImageを直接ぶちこんでもいいのだろうか、とか。
>それとデータを保持するクラスとデータソースは別だぞ
あっ、そうですた。
0422名称未設定
03/04/11 23:05ID:p0pqNUxkその方が理解も進むぞ。
0423名称未設定
03/04/12 00:01ID:nlJewAEd0424420
03/04/12 02:30ID:Wq3c32eIデータソースの-tableView:objectValueForTableColumn:row:で
返すオブジェクトはそのセルに表示する文字列(すなわちNSString)
NSCellはNSTableColumnに対してアプリ起動時にsetDataCellしてやる
NSTavleViewを継承してawakeFromNibをオーバーライドしてもいいし
デリゲートでアプリ起動を受け取ってアウトレットを使ってもいい
データセルは上記データソースメソッドの中で
cell = [tableColumn dataCell]; するとインスタンスへの参照を取り出せるので
そいつにsetImageしてやる(どこにも返す必要はない)
つまりテキストとイメージは渡す先が別だということ
NSCellは継承して改造しないとうまくいかないんじゃないかな
でもNSBrowserCellを使う方が簡単だと思う
ちなみにアイコン「だけ」表示させればいいという時は
NSTextAttachmentCellだけのNSAttributeStringを返してやればいい
言葉で説明してもよくわからないと思うので
NSOutlineViewでアイコン付きリストを表示させるソースをウプしようか?
NSTableView用に書き直すのは簡単だと思う
NSImageやNSCellで失敗してハマっちゃってるみたいだし(w
0425名称未設定
03/04/12 09:36ID:nlJewAEdhttp://homepage.mac.com/mkino2/cocoaProg/AppKit/NSCell/NSCell.html#iconedCell
目指しているのはMailのリストのような、アイコンで項目の状況を表示する(未開封アイコンとか)ものなんす。
わからないのは最初にカラムにsetDataCellしてしまって、そのあと「何番目の項目にこのアイコンを」とかってことはどうやってやるんだろう、と。
0426名称未設定
03/04/12 10:51ID:HC66oXv/その例はアイコンとテキストを同じ 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 の型を指定するためのものにすぎない。
0428420
03/04/12 11:36ID:Wq3c32eI-tableView:WillDisplayCell:forTableColumn:rowで
cellにsetImageする時にエラーで落ちるような???
つーわけでNSTextAttachmentCell使って30分でデッチ上げてみますた
http://ruffnex.oc.to/ipusiron/upload/6758.lzh
要はこういうことがやりたいの?
#画像はCocoMonarからの流用...
0430名称未設定
03/04/12 12:03ID:HC66oXv/ごめん。
実際に試してみたら426では動かなかった。
NSCell に -(void)setImage:(NSImage *)image; があるので直に通るかと思ったら、
やはり setDataCell をしないとダメらしい。
http://www.geocities.co.jp/SiliconValley-Bay/5171/tableviewsample.dmg.gz
とりあえず単純すぎるサンプル作ってみた。
0431名称未設定
03/04/12 13:11ID:nlJewAEdなんだが別の部分でうまく動かなくなってまだうちでは成功してないわけですが(;´Д`)
0432名称未設定
03/04/12 18:45ID:HC66oXv/NSTableColumn の -(void)setDataCell:(NSCell *)cell; で NSImageCell をセットしていたら
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;
で NSImage を返せばOKで、無理に
-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row;
で cell に NSImage をセットしなくても良いんだな。
cell の修飾は後者の方法という先入観があったので、
今まで気付かなかった。
何のために返り値が id なのかと小一時間(ry
0433名称未設定
03/04/16 06:13ID:12HTIbHt丁度テーブルで簡単にイメージを表示する方法をさがしてました。
参考にさせていただきました。ありがとうございます。
あー。快適です。
よいスレなのに人がいなくて寂しいのでage。
すいません。
0434名称未設定
03/04/16 20:10ID:ta/8SmU2そのソフトに付けるアイコンはどうやって調達されてますか?
デフォルトのままだと気が抜けたような感じだし、
自分でアイコンを作るのは絵心が無いので無理だしで、
どうも困ったものです。
0435名称未設定
03/04/16 21:18ID:VCcUn7JM確かに Mac OS X になってアイコンの解像度が上がってから
というもの、自作アプリのアイコンを自作するのが極端に難しく
なった気がするなー(絵心のない人は特に)
「描く」という発想を捨て、デジカメで撮った写真を素材に
それを加工するという方針でいってはどうでしょう?
0436名称未設定
03/04/16 22:29ID:2TWhHO33あれはちゃんと了解をとってるのかな?結構みんなパクリ?
0438名称未設定
03/04/17 00:33ID:7TzdHjIj何のソフトのアイコンか分からないとダメなので、
最終的には絵心というかセンスの問題ですねぇ。
それを考えると絵心のある他の人に作ってもらうというのが無難かもしれません。
ただ、他の人に作ってもらうのも難しいのですが。
0439名称未設定
03/04/17 01:33ID:RGT/kCP00440山崎渉
03/04/17 15:31ID:6I5vRaG+0441名称未設定
03/04/19 03:02ID:542+Wjisアプリがクラッシュした時のCrash reportってどうやってみるんですか?
自作アプリが、ふとした拍子に落ちるんですが,原因が分かりません。
再現性もなし。
とりあえずCrash reportでもよめば何か分かるのかな,と思いまして。
0443名称未設定
03/04/19 03:28ID:542+Wjisそのログの見方がわからないんです。。。
Thread 0 Crashed:
#0 0x9068ba50 in objc_msgSend
#1 0x9310e518 in -[NSMenuItem setImage:]
#2 0x00006d4c in -[AppController currentAppMenu]
#3 0x00004f9c in -[AppController addMenu]
みたいなのが続いてくんですが、
このThread 0 Crashed:の所は何となく下から上に向かって処理が流れていって、
この例で言うと
#1 0x9310e518 in -[NSMenuItem setImage:]
あたりでクラッシュしてるんかいな、と見当を付けてるんですが。
違いますかねぇ...
0444名称未設定
03/04/19 10:21ID:EP/fWNyzまさにそういう事かと。
その辺りのオブジェクトのメモリ確保とかに問題あるんじゃない?
というか自作アプリならProjectBuilderからデバッグモードで起動させた方が手っ取り早いと思う。
0445名称未設定
03/04/19 11:37ID:69ZrkNkSごく単純に考えればsetImage:に渡しているオブジェクトが解放されているせいかと。
0446名称未設定
03/04/19 12:10ID:UqlDwCfOどんぴしゃです。
おはずかしい。。。
思いっきりsetimage:にわたすオブジェクトを他のところで解放してました。
NSDictionaryにパスと一緒にsetObject:forKeyしてたんですが、
その後ですぐ[image release];してました。
はぁー。。。
ありがとうございました。
0447名称未設定
03/04/20 01:47ID:M4PLzZ0qゲームの画面を表示するView,GameViewを用意し
Thread走らせて、その中で画像のオフスクリーンへの描画
そしてそれが終わったらGameView対してdisplayを渡すという風にしたのですが、
(GameViewはオフスクリーンをView内に表示するだけ)
どうも動作が重く、画面更新もちゃんと行われません。
しかし、Timerを使うとちゃんと快適に動いてくれます。
やっぱりTimerを使ったほうがいいのかな。そうするとゲーム自体のコードが複雑になってしまう;
誰か助けて。
0448山崎渉
03/04/20 04:23ID:ZHDoPsUy( ^^ )< ぬるぽ(^^)
0449447
03/04/20 18:25ID:M4PLzZ0qウェイトをかけなかったために、動作に負担がかかってしまったみたいです。
?TickCountを使って30FPS程度に抑えたらスムーズに動きました。
0450名称未設定
03/04/21 22:51ID:NTulwzH40451名称未設定
03/04/27 00:07ID:IrQMMfyt0452名称未設定
03/04/27 01:20ID:x2s49Y6w0454名称未設定
03/04/28 20:45ID:NEdRKdm20455名称未設定
03/04/29 21:39ID:BcLcx+5r通常、こうなってますよね。
int main (...)
{
return NSApplicationMain(...);
}
でもNSApplicationMain( )は返ってこないんです。
どうやら、[NSApplication terminate:] 内部で exit(0) が呼ばれてます。
こうした処理はできますか?
int main (...)
{
int ret = NSApplicationMain(...);
// <-- 処理を入れたい
return ret;
}
0456名称未設定
03/04/29 21:42ID:SxaNpOC30457名称未設定
03/04/29 22:27ID:BcLcx+5r>ステータス返す値としてmainの戻り値を使わなければいい
それも不思議なんです。
Cocoaにそれらしい関数がないようですが、どこからでも exit(number);
で終わらしていいということでしょうか。
0458名称未設定
03/04/29 22:43ID:SxaNpOC3そこに値を放り込んで勝手に終了するとかいろいろ方法はあるでそ
0459名称未設定
03/04/29 23:38ID:BcLcx+5r意味がわからない。
本題はNSApplicationMain( )から戻ってこないということなんですが。。。
フックとか、戻り値をセットする関数とか、mainのreturnに返ってくる
関数あります?
NextStepもそうなのかな。
これは、もしかして、バグ?
0460名称未設定
03/04/30 00:44ID:EMvvjLY1キーイベントとりたいんですけどどうしたらいいですか?
自力で調べたところ,
NSTextFieldがFirstResponderを奪ってしまっているために,
-keyDownが使えない見たいなんだけど...
なにかいい方法ないですかね?
0461名称未設定
03/04/30 02:23ID:qWPrDMtcNSApplicationのリファレンスは読んだ?
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:を上書きとかになるけど、よくないよなー。
0462名称未設定
03/04/30 02:29ID:m3zd3BWS憶測だけど、NSApplicationMain()はフレームワーク内部からのみ
値を返せる仕様になってるんじゃないかな。
一応、
[ NSApp stop ];
でmain関数に戻ってくることは可能なようです。
戻り値は指定できないようなので、グローバル変数で
受け渡す等の方法を使う必要がありそうですが。
0463名称未設定
03/04/30 08:47ID:ywjZpSlRmainには戻らないとありますね。
ただ、戻らない(戻り値を返さない)理由になっていません。
「mainに戻らないから、後始末は delegateのapplicationWillTerminate:でやれ」
ということだけです。
terminate: では、delegateのコールと、内部Handlerの後始末して、exitが呼ばれる
ようでなので、サブクラスでする処理ことは、ほとんど意味ないですね。
>>462
modal loopだけで、main evevt loopは駄目なようです
本当はこうすべきでしょうね
int main(..)
{
NSApplicationMain(..);
return 0; // ここには戻ってこないぞ
}
戻り値を返す時、applicationWillTerminate:内部でexit(..);
説明がNSApplicationMainにないのが悪いんだが。
あるいは、途中で仕様が変わったのかも。
いやもう、おかしいって。
0464名称未設定
03/04/30 14:33ID:gNcdv87cそういう仕様です。
異常終了は、適当な場所でexitしてください。
どうしても気に食わないのであれば、NSApplicationのrunをオーバーライドして、
メインのNSRunLoopが終了可能にしてください。
0465名称未設定
03/04/30 14:34ID:gNcdv87c{
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];
}
0466名称未設定
03/04/30 14:37ID:gNcdv87c0467名称未設定
03/04/30 17:29ID:azR/4GRHNSTextFieldの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を返す。
0468名称未設定
03/04/30 19:34ID:ywjZpSlR>そういう仕様です。
そうですか。
サンプルありがとう、でも動かなかった。
これでは Eventを受け付けないようで。
検索したら、[NSApp run]で何をやっているのか質問した人が
いて、回答にApple Sample Codeのglutに例があると。
それらを参考にしてterminate:処理も考慮してながら、
いろいろ試しても戻ってこないから、おかしいと思い(gdb)disas
したら、なんと!runを抜けたあとのNSApplicationMainの最後で
exitが呼ばれてた。
もう、笑ってしまいました。
0469名称未設定
03/04/30 22:32ID:3qU3BKds>なんと!runを抜けたあとのNSApplicationMainの最後で
>exitが呼ばれてた。
ぐはっ!
NSApplicationのリファレンスのあのコードは嘘だったのか。
やられた。
0470名称未設定
03/04/30 23:30ID:Oi25Yza2"initializer element is not constant"
というコンパイルエラーが出てしまってうまくいきません。
こういうことを実現したい時ってどうすればいいのでしょうか。
const NSRange range = NSMakeRange(1, 100);
@implementation Test
...
@end
0471名称未設定
03/05/01 08:03ID:mnnNqPbr構造体を初期化するコードは以下のようになります。
const NSRange range = {1 , 100};
0472名称未設定
03/05/01 08:19ID:mvCRcF1/const NSRange range = {1,100};
あなたがお持ちの書籍の構造体の初期化に関する部分と
NSGeometry.hを見てください。
ただし、この書き方はAppleにより NSRange の定義が変えられたとき
コンパイル不能になる、もしくは意図しない動作をするようになるでしょう。
まあ、定義が変わることは、まずないでしょうけど。
0473460
03/05/01 20:50ID:AYrs/qnu教えてくれてありがとう.
でも,私,Delegateあんまり詳しくないので,
もう少し,詳しく教えてくれませんか?
Delegateの作成とかがよくわかんないです.
で,作成したあとで,
-setDelegate:すればいいんですよね?
あと,横取りしたらYESとかスルーならNOとかも
ちょっとわかんないです.
よろしくおねがいします
0475名称未設定
03/05/02 22:24ID:Wk9TZQjV従来のToolBoxを用いたプログラミングだと
RunApplicationEventLoopやWaitNextEventを用いて自分でイベントループをまわしていましたが
Cocoaだとイベントループの部分はCocoaに任せる事になりますよね。
自分の場合、主にゲームを作るとき
main()→ゲーム画面の描画→イベントループ→描画→イベント...
というようにやっていたのですが
Cocoaだと自分でイベントループをまわせなくて困っています。
参考書を読んでも「イベントはCocoaが管理してくれるよーん」としか書いてない。
やはりスレッドを用意するべきなのか、Cocoaはゲームに向かないのか……
何か方法がありましたらお教えください。
0476名称未設定
03/05/03 00:25ID:OHvswuV9NSTimerを使うんでは。
0477476
03/05/03 00:34ID:OHvswuV9あといい忘れたけど、自分でイベントループをまわすこともできるよ。
NSApplicationのnextEventMatchingMask:untilDate:inMode:dequeue:とか。
でもこれでループするとNotificationとかが動かなくなったりするので、
currentRunLoopも自分で実行する必要があったような気が。
0478名称未設定
03/05/03 00:42ID:dd4GQNX/小サーイ世界でアプリつくっては(以下略)
0479名称未設定
03/05/03 05:26ID:InjF+ARn使ったことないけど
0480475
03/05/03 10:47ID:kKEpC3P2nextEventMatchingMaskでぐぐったら数件ヒットしました。
一応
? NSEvent *event;
while(1) {
event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate dateWithTimeIntervalSinceNow:1/60]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event) [NSApp sendEvent:event];
}
で無事にイベントループが行われました。
画像処理とあわせた時にどう動作するかわかりませんが。
ありがとうございました。
0481名称未設定
03/05/03 13:13ID:vjwV+NvF復活しないんでしょうか。
興味のあるサンプルコード落とし損ねたままだった…。
0482名称未設定
03/05/03 13:15ID:gWar0X+G0483476
03/05/03 15:00ID:OHvswuV9NSRunLoopは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]とかすれば良いだろう。
0484名称未設定
03/05/03 17:57ID:1Efb2Mo1死んでるっていうか、消したんでしょ。サイト自体はやってますよ。
Topにインラインフレームで貼ってあったblogツールの日記が別サイトになって
通常のに戻った。
今はiTunesで再生中の曲を自分のサイトに表示するツールを更新中。
0486名称未設定
03/05/04 21:00ID:D13AZzoSと書いてありますが、スレッドってあまり使わない方が良いのですか?
0487475
03/05/04 21:20ID:fL39spbJできるだけ、いままでのスタイルを変えずにプログラムしたかったんです。
誤解招いてスマソ
0488名称未設定
03/05/05 00:33ID:DsA4ncXpあ、そういうことだったのかサンクス。
僕はまだいろいろとよくわかってない素人なんですが、
ループ回したら虹色のカーソルも回っちゃって
困ったなー、あーそうかなるほどスレッドかー、っていう感じだったので。
とりあえず動いてるみたいなので良かった良かった。
0489名称未設定
03/05/05 02:20ID:PMocT0kqデュアルプロセッサを視野に入れないのならスレッド処理はあまりメリットがない
スレッド管理のオーバーヘッドもあるし排他処理とか同期の問題もある
デュアルプロセッサ搭載マシンならマルチスレッドにした方が処理が速くなるみたいだけど
そうでないならタイマーでメッセージを送った方が楽にコーディングできるよね
ディスクアクセスとかアイドル時間の長い処理をそこかしこに入れてるなら
マルチスレッド処理も有効かもしれないけど
0490名称未設定
03/05/09 14:39ID:S3w8cPunWindow には 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 ];
}
0491名称未設定
03/05/09 19:24ID:fsuYUghz10.2におけるNSMovieViewのバグです。
音声ファイルを再生するだけなら、QuickTimeの
APIを直接叩くか、NSSoundを利用してください。
(10.2のNSSoundはMP3も再生できるようになってます)
0493名称未設定
03/05/11 02:49ID:nCoMVCtm-(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メニューがオープンされるときにコールバックされると思うのだが違う?
0494名称未設定
03/05/11 02:50ID:nCoMVCtmo implementation
0495名称未設定
03/05/12 20:45ID:KTXKJCkJ上に乗っけたいコントロールの類はいちいちコード内で配置していかないとダメなんですかね?
ビューを複製することができればIBで作ったビューを複製してやればOKだと思うんですが、ビューはNSCopyingに準拠してないし。
なんか方法知りませんか?
0496名称未設定
03/05/13 01:27ID:ohU4DReEIBで新規にnibファイルを作り、Viewとコントロールを配置しておいて、
+loadNibNamed:owner:でロードすれば良いのでは?
0497495
03/05/13 04:00ID:2IoPviAbTabの数が増えたり減ったりするTabViewで全てのTabに同じコントロールを乗せようと考えてたんです。
Tabの内容をコードでガリガリ書いてると分かりづらいなぁと思って、IBで書けたらいいなぁと思ってたところです。
View複製さえできれば、コントロール配置したNSViewをOutletで保持しといて、
NSView* newView = [templateView clone];
[tabitem setView: newView];
ってできると思うんですが。。。
やべ、もう寝ないと...
0498名称未設定
03/05/13 07:34ID:UL4Gjmyqインストールされているプラグインのリストが見られますが
(なんかCocoaGesturesまで見えているけど)
ああ言うロードされているバンドルのリストみたいなものは
どうやって所得するんでしょう?
0499名称未設定
03/05/13 15:24ID:9/HoAzNl496の言う通りにやればできるんじゃない?
IBでウインドウの上にコントロールを配置しておき
+loadNibNamed:owner:でロードして
ビューのインスタンスを取得してタブビューにセットする
一緒にロードされたウインドウを解放するのを忘れないようにね
マルチドキュメント・アプリケーションの作り方を参考にするといい
あれはひとつの.nibから複数のウインドウを作って管理するアプリなんだから
.nibをロード→viewのインスタンスを取得→viewをretain→
windowをrelease→viewをタブにセット→( ゚Д゚)ウマー
という手順でいいと思う
>>498
動的にロードされたバンドルも静的にロードされたバンドルも
Objective-Cでは区別されていないじゃなかったか
どうしても取得したいならロード時に記録しておくか
objc_getClassListで全てのクラスのリストを取得してから
既知のクラスを取り除くってのはどうよ?
プラグインパスを取得してその都度数えるという方法もある
NSBundleでロードされたクラスはNSArrayに記録しておくのが普通だから
それを利用するのが一般的だけどね
0500496
03/05/13 19:37ID:ogfctm/Wちょっと補足させていただくと、
IBでビューを作成するのにウインドウは必要ないですよ。
"CustomView"をパレットからドキュメントウインドウにDnDすれば
インスタンス化出来ますから。
0501495
03/05/13 20:54ID:2IoPviAbありがとうございました。
IBの"File's Owner"の意味がやっと正確に理解できました。
てっきり"File's Owner"==NSApplicationのインスタンスなのかと思ってました。
Viewが複製できないと思って、ちょっと「Cocoaの嫌なとこを見たな。。。」とか思ってたら、
もっとcoolな方法で解決していたとはさすが...
0502名称未設定
03/05/17 15:39ID:TNaiboK7Finderでこのアプリで開くのデフォルトにできないんですけど
どうすればいいのれすか?
0503名称未設定
03/05/17 15:51ID:g7wq4B5LProject Builderでファイルタイプを指定している?
0504502
03/05/17 16:07ID:TNaiboK7ファイルタイプってMIMEタイプかOSタイプのことですか?
info.plistのエントリの書類のタイプで
拡張子は指定していますけど
MIMEタイプとOSタイプは指定していません。
0505名称未設定
03/05/17 22:10ID:g7wq4B5L0506名称未設定
03/05/18 12:27ID:6rgw4rEVcocoa-javaでjava.awtやjava.swingは使えますか?
やってみてるんですが、Build failedしてしまいます。
0507502
03/05/18 12:45ID:jRJqhTtbう〜ん…それらしいファイルを消してもダメですね。
とりあえずソースおさらししてみます。
http://www2.plala.or.jp/doidoi/macosx/PeeDeeeF.tar.gz
画像ビューワとか言いましたけどホントはPDFビューワです。
0508名称未設定
03/05/18 14:25ID:6pgqlOinしょうだつやの
の本に書いて有る
0509506
03/05/18 15:36ID:6rgw4rEVちょうど手元にあったので見てみました。ら、少し書いてありました。
とにかくできることが分かり希望が持てました。
ところでご本人ですか?
0513名称未設定
03/05/18 20:36ID:cpgvRlRx0515山崎渉
03/05/22 04:59ID:PYior5Bg0516名称未設定
03/05/24 23:30ID:Shi0MeT+なんとNTTの新サービスはcocoa対応らしい・・・NTTすげえぜ。技術力。
0517名称未設定
03/05/24 23:50ID:eck5OJ0khttp://homepage3.nifty.com/coco-nut/
0518あぼーん
NGNG0519名称未設定
03/05/30 06:25ID:G/PNGWQ+cocoaアプリでPerlスクリプトみたいなことは出来ますか?
ユーザのリクエストに応えてHTMLファイルを動的に生成して出力するとか。
WebObjectなんかがそれっぽいかと思うんですけど、何せ高いしねー。
0520名称未設定
03/05/30 07:17ID:65rg5mpj普通にUNIX用CGIアプリを書いて使えばいいんじゃない?
もしどうしてもCocoaフレームワークを使う必要があるなら
ターミナルアプリからCocoaフレームワークを使う方法もあったと思う
0521名称未設定
03/05/30 07:24ID:EDgCWht0「Perlスクリプトみたいなこと」って、CGIのことか?
CocoaアプリじゃなくてFoundationToolじゃだめなん?
0522519
03/05/30 08:31ID:G/PNGWQ+端的に言えば、
1、ProjectBuilderが使えて
2、Objective-cが使えて
3、Cocoaフレームワークが使えると便利かもしれない
という条件を備えた、CGIとして使えるアプリ(?)を作りたかったんです。
FoundationToolって、UNIXのコマンドラインですよね。
使ったことはないけど、もう少し調べてみるかな。サンクスでした。
0523519
03/05/30 08:33ID:G/PNGWQ+○という条件で、CGIとして使えるアプリが作れるかを調べたかった
0524名称未設定
03/05/30 09:54ID:1W/oNIqXAppKitを使わない。
CocoaFrameworkはAppKitを含むので、FoundationFramework単体でリンク。
どうしてもWeb上でGUI部品もFrameworkとして使いたければWebObjectを買いなさい。
以上。
0525名称未設定
03/05/30 16:20ID:X8kW7aMccgiはhtmlをテキストで返すコマンドラインアプリであればいいので、
Objective-Cでもまったく問題なく作れますよ。
新規プロジェクトからTool->Foundation Toolを選べばいけまふ。
0526519
03/05/31 00:50ID:aRcsPIqzをつけてSitesフォルダなどに入れ、それをブラウザから読み込めば実行できるんですか?
cocoaで初めてプログラミングを始めたので、標準出力とかイマイチ良く分かりませんが
がんばりまつ。ありがとう。
0528名称未設定
03/05/31 09:58ID:Sf6VpD/aこの計算式の解を得る良い方法は無いでしょうか?
0529名称未設定
03/05/31 12:08ID:VdKa+9Gbhttp://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/2900/2923.html
へのレスを参照してみて下さい。
なんかいろいろと方法があってどれが一番良いかはよく分からんけど
0530名称未設定
03/05/31 15:20ID:Sf6VpD/aありがとうございます。
あまり簡単な方法は無いようですが、
スタックを使う方法を試してみて、
難しくてダメなら諦めて bc を使うことにします。
0531名称未設定
03/06/02 17:24ID:wwheiyOKThink Cでウインドウ出すのに挫折して幾星霜、web見ながらやってみたらウインドウがあっさりと出て。。。感動しました。
DevTools、昔は60万したって本当なんですか?
0532名称未設定
03/06/02 19:12ID:NBqm4pnRいい本ないんだよね〜。とりあえず、この辺はいかが?
http://www.h5.dion.ne.jp/〜tuyano/X-Java-Tutor/
http://underwater.lab.nig.ac.jp/〜takaho/computer/osx/
おいらもCocoa-Javaでやってたんだけど、Objective-Cやったら
おもったより簡単だったので、OCで書き直すか思案中。
ちなみに昔60万はWebObjectsのことでは?
0534名称未設定
03/06/02 19:15ID:NBqm4pnR0535名称未設定
03/06/02 19:44ID:wwheiyOK> いい本ないんだよね〜。とりあえず、この辺はいかが?
> 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のことでは?
そうなんですか、ありがとうです。
0536名称未設定
03/06/02 22:35ID:YJuUKbZimac2年目の初心者です。
cocoaでソフトを作りたいのですが、参考になるお勧め本教えて下さい。
どんなソフトかというと、運転免許場とか医局の番号表示システムみたいな
感じです。フルスクリーンにできて、番号打って一度に何人分も表示できて、
その番号の人がブツを受け取ったら簡単に消せタリする、
そんなソフトを作りたいんですけど・・・・難しいっすかね?
いろんな言語とか精通しないとかけないっすか?
0537名称未設定
03/06/02 22:45ID:VlbB3c6B中村氏のMac OS X Cocoa プログラミングと
荻原氏のObjective-Cの本を購入。
入門はその2冊で、今はネット上の資料で開発しています。
あとそれぞれの言語に得意・不得意はありますが
実際に独自のソフトを作るとなると、関係するのは言語じゃなくて自分の技術とセンスだと自分は考えてます。
0538名称未設定
03/06/03 17:41ID:FeZsaDw7>中村氏のMac OS X Cocoa プログラミングと
>荻原氏のObjective-Cの本を購入。
俺もその二冊かな。
はじめは「Cocoaはヤッパリ」だったんだけどね。
ただしどれも基礎的なCおよびプログラムの知識(文法とかプログラムの制御とか)が必要なので注意。
そこらへんを知らずにいきなり買ってもわからんと思うよ。
>mac2年目の初心者です。
っていうことなんで一応。
ちなみにCのお勉強は・・・
http://homepage1.nifty.com/toshio-k/prog/c/
こんなのはどうかな?
ちゃんと読んでないけど結構丁寧に書いてるっぽい。
そんなの知っとるわ、というのであれば余計なお世話スマソ。
0539538
03/06/03 17:45ID:FeZsaDw7ちなみにその程度のソフトなら慣れれば二日もあれば作れる
と思う
0540名称未設定
03/06/03 17:49ID:JqiBoCY70541名称未設定
03/06/03 18:23ID:Ga7VcSdP「はじめてのC」とか「やさしいC」とか「かんたんなC」みたいなC言語の入門書を一冊よんどけよ。
0542名称未設定
03/06/03 23:21ID:Rw7pKKEA0543名称未設定
03/06/03 23:27ID:YDNyciP7分かんないといけないんでつね。。。cからはじまる恋物語でも
読んで勉強してきます。
初心者の俺でもこのソフトならかなり簡単な部類だよなぁッと思ってました。
頑張ってみます。
0544名称未設定
03/06/04 21:03ID:hlOYrlfeRbの時、インターネットへの接続はSocketクラスを用意して、
PortとAddressを設定して、Writeメソッドで文字列のデータを送る。
とやっていました。
ドキュメント等見てCocoaではNSSocketPortを使うんだなぐらいまではわかりましたが、
NSSocketPortを見ても何がなんだかよくわからない状況です。
RbのSocketクラスのように行いたいのですが、ご説明願えますでしょうか。
0545名称未設定
03/06/04 21:35ID:BgUAWUkbNSTaskを使ってtarの自分用フロントエンドを作っていまして、
tarの場所を
[aTask setLaunchPath:@"/usr/bin/tar"]
みたいな感じで指定しているのですが、
例えば、cocoaWgetのようにtarをアプリケーション内にバンドルするにはどうしたらよいのでしょうか。
御存じの方いましたらよろしくお願いします。
0546名称未設定
03/06/04 21:45ID:WgVb2pVw0547名称未設定
03/06/05 00:06ID:tY8V3TTnわたしもRbからの転向者です。初心者ですので、詳しいことはわかりませんが、
NSURLとNSURLHandle を使ってインターネットへ接続しています。
0548名称未設定
03/06/05 00:21ID:uq3nlk02HTTPを介したデータの受信を行なうだけなら、
>>546の通りNSURLとNSURLHandleをクラスを
利用すれば出来ます。
その他のプロトコルを利用したい場合や、データの送信を行いたい場合は
C言語の領域に降りてSocketを作成する必要があります。
なお、作成したSocketはNSFileHandleクラスで扱うようにすると便利です。
NSSocketPortはちょっと特殊な用途に使うクラスなので、
とりあえず忘れてください。
0549名称未設定
03/06/05 00:56ID:7tSHTOFd「新規プロジェクト」→「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の初期設定も捨てたし・・・万策尽きました。
システムをクリーンインストールしたら解決するんですかねぇ。
0550名称未設定
03/06/05 07:35ID:aeSpNlllHTTPやFTPを使うのならNSURLとNSURLHandle。
それ以外ならsmallsockets使えば出来る。多分。
http://smallsockets.sourceforge.net/
0551549
03/06/05 11:00ID:7tSHTOFdデベツールのディスクイメージのチェックサム検証をスキップしてたのがいけなかった
みたいで、スキップしないでいるとDiskCopyが不正終了しました。
仕方ないのでDevToolをADCからもう一度ダウンロードしてインストールしたら復活!
インストール終了できても中身が壊れてるなんてこともあるんですね。意外だ。
0552名称未設定
03/06/05 11:09ID:slA/cPPYwgetと違ってtarを内蔵する意味はないと思うが・・・
単に方法を知りたいということであれば>546の通り
アイコンと同じようにプロジェクトにファイルを追加すれば良し
0554名称未設定
03/06/05 23:19ID:2wDtXBFuありがとうございます。NSSocketPortは違ったのですね。
NSURLとNSURLHandleについて調べてみます。
>>553
やっとObjective-Cに慣れてきたところなので、これ以上増えると頭がパンクしてしまいます
Javaの方もいつかさわってみたいです。
0555名称未設定
03/06/06 13:33ID:rT0yvc1iたいと思い(NSTextFieldと一緒に)NSPopUpButtonを-setPullsDownして配置したの
ですが、このPopupButtonについてくるMenuItemに-setState:NSOnStateを送っても
チェックがついてくれません。
InterfaceBuilderでも、このMenuItemのインスペクタでは「State」がグレーアウト
してるし、やっぱりチェックマークをつけることはできないんでしょうか。
0556名称未設定
03/06/06 21:14ID:YuWDq+q3>546,552
ありがとうございます。NSBundleを使ってpathを指定してやればうまくいきそうです。
0557名称未設定
03/06/06 22:50ID:WSvgpba2本当にNSPopUpButtonなのかな?
Mailでは普通のNSButtonにメニューをくっつけてるのかも。
Mailのnibファイルはのぞいてみた?
(ちょっと見てみたんだけどnibファイルが多すぎてどこに入ってるのか分からんかった。
ちなみにSafariのバックボタンはNSButtonのサブクラスになってる)
ところでMailは英語以外のnibファイルを開けないのはなぜだろう?
0558名称未設定
03/06/06 22:59ID:85f0ql6CObj-Cに限らず、オブジェクト指向言語はひとつ理解(言語仕様じゃなくてオブジェクト指向そのものを)
すると、他の言語もほとんど問題なく学習できるよ。
JavaはベースがCだから特に楽なんじゃないかな。
0559OC厨
03/06/07 13:26ID:9kccQz8fいまいち「オブジェクト」が解りません。
OCのオブジェクトはJAVAのそれとよく似ていると聞いたことがありますが、
JAVAの本も読んだ方がいいのでしょうか?
またオブジェクト初心者にも解るOCのオブジェクト解説のある書籍、
またはサイトがありましたら教えていたていただけないでしょうか?
よろしくお願いします。
0561555
03/06/07 13:42ID:beqrgONE恥ずかしながら、Mailみたいな機能を再現したいと思っていただけでNibは調べてませんでした。
NSButtonにメニューをくっつけると言うのもアリですか。
でも、Safariのボタンにはチェックを入れる必要がないのでNSPopUpButtonでもいけそ
うですけどねぇ。
もう少し、試行錯誤してみます。ありがとう。
0562名称未設定
03/06/07 13:42ID:e92/S+a9だんだん知識を塗り重ねて行くうちに
オブジェクト指向も分かるようになる気がする。
0563名称未設定
03/06/07 14:40ID:LXwTev9c言葉で理解するよりも、経験を積み重ねていったほうがおのずとわかってくるとおもうよ
荻原氏のはなかなか重宝しています。中村氏のは一度読んで実践して終わりだったけど、
こっちだと何度も開くことになる。
0564名称未設定
03/06/07 15:50ID:aqfgDdb7Safariのボタンは「ボタン長押しでメニュー表示」のためにNSButtonのサブクラスにしてるんじゃないかな?
>559
俺はC++の本でオブジェクト指向を勉強したな。
C++自体は一通り本を読んだだけで実際には一度もプログラムを書かなかったけど、
オブジェクト指向という概念そのものは役に立った。
>562,563のいう通り最終的には経験が一番重要だけど、
最初はなんかしらの読み物で概念を知っておいた方が良いと思うよ。
それで全てを理解できるわけはないけど、これからどんなことをしようとしているのかくらいは分かってないと
いくら勉強しても身に付かないと思う。
0565名称未設定
03/06/07 22:12ID:A9i4i/FLgzip -dc hoge.tar.gz | tar xf -
のようにコマンド間をパイプで繋ぎたいのですが、Appleのドキュメントを読んでもよく分かりません。。。
(tar xzf hogeをつかうのはなしで)
[task_Gzip setStandardOutput:aPipe];
として
[task_Tar setStandardInput:aPipe];
としてもダメでした。
NSFileHandleを使って標準入力をバッファから読み込めばうまく行くような気がするのですが、
うまくコードにする事が出来ませんでした。
/*この辺はやっぱりM$の方が(ry
ももう少しなんとか(ry */
0566OC厨
03/06/07 22:31ID:9kccQz8fどうせならOCでオブジェクト指向が学べたら、と思ったのですが。
JAVAやC++なみに人口が増えないと書籍層が充実しないというところでしょうか。
Javaでオブジェクト指向入門をしたいと思います。
0567名称未設定
03/06/07 22:34ID:dwlJu85Aオブジェクト指向は「何々で学ぶ」ってもんじゃないんだって。
分からないうちはJavaだろうが何だろうが分からない。
0568名称未設定
03/06/07 23:11ID:t+oK0YcuいやObj-Cの本(というかCocoa本)には「オブジェクトとは何か」という基本を説明している本がない現状では、
その部分をJAVAなりC++なりの本で学ぶのは大事だと思うよ。
>566
別にJAVAそのものを勉強する必要はないのでご注意を(もちろん勉強したって無駄じゃないけど)。
http://www5c.biglobe.ne.jp/〜ecb/java/java00.html
例えばここで4,6,7,8あたりをざっと目を通して終わりで良いんじゃないかな?
(このページを推称するわけじゃないよ、ぐぐったらそれらしいのが出てきただけ)
具体的なことはCocoaでソフトを作っているうちにだんだん分かってくるから心配はいらないと思う。
本当は0の0から(変数とはとか、オブジェクトとは、から)Cocoaを勉強できる本があるとベストなんだけどね
0570565
03/06/08 00:25ID:MeK+6oxvレスどうもです。
>どうも NSPipe は少しでも大きいデータを流そうとすると極端に重くなるので、
もしよければどのようにデータの受け渡しをするのか教えていただけませんか。
0571名称未設定
03/06/08 02:01ID:CYa6Vi2r中間ファイルを用いる方法は面倒なことに気付いたので、
「自分ならこうする」という別の方法を書いてみます。
まず、以下の内容のシェルスクリプトを 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。
0572OC厨
03/06/08 10:05ID:G2ZEYfMM良いサイトを紹介いただきありがとうございます、早速読んでいます。
>具体的なことはCocoaでソフトを作っているうちにだんだん分かってくるから心配はいらないと思う。
そう願います。なーんちゃって感覚でCocoa及びObjective-Cに慣れていきたいです。
>本当は0の0から(変数とはとか、オブジェクトとは、から)Cocoaを勉強できる本があるとベストなんだけどね
まさにそう思います。
0573565
03/06/08 12:05ID:MeK+6oxvとても詳しいレス有り難うございます。
早速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
となります。シェルスクリプトにエスケープシーケンスを認識させるにはどうしたらよいのでしょうか…
0574名称未設定
03/06/08 13:12ID:0L+H07wP俺はOCの萩原本でオブジェクト思考理解したよ
要は内容を受継いで変更や拡張できる部品を集める形でつくる
よって変更、拡張、他のプロジェクトの再利用が用意
ってこと(違う?
0575名称未設定
03/06/08 14:56ID:rXNVgJxB0576568
03/06/08 15:34ID:sQOSQfYR本当だ
荻原本にもオブジェクト指向の説明があったね。
>いやObj-Cの本(というかCocoa本)には「オブジェクトとは何か」という基本を説明している本がない現状では、
というのは俺の勘違い
スマソ
0578名称未設定
03/06/08 18:37ID: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]で待つと他のイベントがハンドリングされないから?
0579名称未設定
03/06/09 21:23ID:Zd9NcuPh#import <Cocoa/Cocoa.h>
#import "MyClass1.h"
@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}
このように自作クラスのオブジェクトを他のクラスのインスタンス変数にしようとすると
parse error before "MyClass1"
とコンパイラにおこられるんですが、
NS〜というクラスのおぶじぇくとでないとインスタンス変数にはできないのでしょうか。
0580名称未設定
03/06/09 21:39ID:ZzrENAjQ#import <Cocoa/Cocoa.h>
#import "MyClass1.h"
@class MyClass1;
@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}
としたらどうですか?
0581579
03/06/10 17:35ID:MT4H0P8v@interface AppContoller : NSObject
{
id anInstance;
}
このようにid型で宣言したらうまくいきました。
0582名称未設定
03/06/10 20:18ID:yYCfN7wDid型にしてしまうと、MyClass1が持っていないメソッドを
anInstanceに送ってしまった際の警告が抑止されてしまうので、
おすすめできる方法ではありません。
#import <Cocoa/Cocoa.h>
@class MyClass1;
@interface AppContoller : NSObject
{
MyClass1 *anInstance;
}
とするのが良いと思います。>>580に似ていますが、
#import "MyClass1.h"の宣言を削除しています。
ヘッダから削除したこの宣言は、かわりにAppContoller.mファイル
の方に書いておいてください。
0583582
03/06/10 20:25ID:yYCfN7wD・その他のクラスは@classディレクティブで宣言する
・@classディレクティブで宣言しておいたクラスのヘッダファイルは
実装ファイル(.m)で#importする
としておくと、ヘッダファイルの依存関係で悩まされることは
通常無いと思います。
0584名称未設定
03/06/11 16:14ID:wX/0F2JECocoaオンリーかとおもってたらGNU関係も対比して書いてるじゃん。
翻訳出るかな?これ。出たら友達に勧めよう。
0585名称未設定
03/06/11 20:55ID:YSUJ+XirJavaの知識だけあればできるの?
それとも、あの英語だらけで調べるのも一苦労のマニュアルを見ながらでないと
作れないの?
0586名称未設定
03/06/11 20:58ID:2rjAjKWp0587名称未設定
03/06/11 21:00ID:YSUJ+XirJavaならObj-Cよりも日本語の情報で苦労しなくてすむかなと思ったんだけど
そういうもんじゃない、ってことですかね?
0588名称未設定
03/06/11 21:01ID:67/wKApX0589名称未設定
03/06/11 21:03ID:YSUJ+Xirクラスライブラリが全部英語だとすごく疲れませんか?
僕は疲れます。
読み進むスピードが日本語の3分の1くらいになるし…
0590名称未設定
03/06/11 21:41ID:5+8tryGcここを利用してみれば?
http://www.oomori.com/cocoafw/index.html
参考にするといった程度だけど。
0591名称未設定
03/06/11 21:56ID:W5NOQIG6>JavaならObj-Cよりも日本語の情報で苦労しなくてすむかなと思ったんだけど
正解。
でもCocoaのリファレンスが全て英語なのでそこで苦労する。
JavaとObj-Cの情報の差なんて微々たるものだよ。
Obj-Cの情報なら荻原本で大体事足りるし。
>589
疲れる。
っていうか必要な部分を斜め読みするだけでまともに読んだことないな。
なんで後から「こんなクラスがあったのか!」って後悔すること多数。
あぽーもWin32からのポーティングガイドなんて訳してないで
Cocoaリファレンスを訳してほしいもんだ。
0592名称未設定
03/06/11 23:04ID:YSUJ+Xir「Cocoaフレームワークの中でJavaのライブラリを使うだけ」なのか、
「Javaで組んだら勝手にCocoaアプリになる」のか、ってことかも。
つまりCocoaのお勉強が絶対条件として立っているなら、
別にjavaでもObj-Cでも一緒だなぁと思いますし。
言語仕様自体の違いなんて問題にならないから。
0593名称未設定
03/06/11 23:46ID:nVInKmba>「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もよく似ているから
片方をある程度知っていればもう片方を勉強するのは
そんなに難しい事じゃないよ。
問題は、両者の似て非なる部分が微妙で混乱しがちな所か。
0594名称未設定
03/06/12 01:32ID:9EJS/9Nahttp://www.amazon.co.jp/exec/obidos/ASIN/4798003530/ref=sr_aps_b_/249-4965523-9500347
読んでからうんちく垂れれ
0596名称未設定
03/06/12 01:52ID:9EJS/9NaあくまでJavaの本であり、Javaがわの視点から書かれてるから。
0597名称未設定
03/06/12 02:37ID:OrCJHHiYこの本買ったけどわりといいと思うな。前半Javaそのもの、後半Cocoaをからめて、ってかんじで
しょうか。まだ前半を少ししかよんでないけど。
「Cocoaはやっぱり」はObj-Cベースだと言う事もありJava系のものをさがしてたらコレがあって。
かなり易しく噛み砕いているので僕のような初学車でもいけるかなと思います。
0598名称未設定
03/06/12 21:58ID:UTjBZJM1Cocoa+Java―MacOS X 10.1対応版MacOS �プログラミング入門
これと>>594ならどっちのほうがいいと思いますか?
どっちかにしようと思ってるんですけど。
0599名称未設定
03/06/12 23:42ID:G7NEAu9zAmazonにはレビューが付いてるだろ。レビューが無い本は売れてないとも読める
0601名称未設定
03/06/13 22:20ID:O6wb8MBrを放り込んだらローカライズされたパスに直してくれるクラスとかありますか?
0602名称未設定
03/06/13 22:25ID:pvegSkor0603名称未設定
03/06/13 22:35ID:O6wb8MBrこれって返ってくるのがlastPathComponentだけみたいなんですが・・・。
/User/aaa/Documents/abc.jpgというフルパスを渡したら
/ユーザ/aaa/書類/abc.jpgというNSStringが返ってくるクラスはFileManagerにあります?
0604名称未設定
03/06/13 22:41ID:fIQIYpV+どうせ6つぐらいしかないんだから
手 動 で
0605名称未設定
03/06/13 22:46ID:2yT3des30607601
03/06/13 23:28ID:O6wb8MBr参考までに超意訳のリファレンスをのせときます。
componentsToDisplayForPath:
- (NSArray *)componentsToDisplayForPath:(NSString *)path
パスのコンポーネントを表すNSStirng(既にAutoreleaseされています)を要素とする
NSArrayを返します。このパスの要素は、ユーザが目にする形であらわされています。
(Finderやオープン・セーブダイアログ等におけるような)
このメソッドで得られるパスは、ファイル操作などに使用することはできない、ユーザに
表示するためだけのものです。
・・のはずなのに、なぜかnilしか返ってこない・・・。
0608601
03/06/13 23:36ID:O6wb8MBr-componentsToDisplayForPathに渡すのは、今現在実際に当該ファイルが存在する
パスしか渡してはダメみたいです。以前に保存していたファイルパスを表示するという
場合には注意がいりますね。
0609名称未設定
03/06/15 09:32ID:gL/WGc+Xobjective-c側から普通のC関数の呼び出しは、そのまま記述できるのを
確認したんだけど。(self とかは使えないみたいだけど、それはまた別問題として、、)
具体的には、昔cでつくった処理からIBで作ったCocoaの表示処理を呼び出したいんです。
0610名称未設定
03/06/15 09:38ID:OkyjEh1bCocoaのクラスを呼び出すのは不可能だと思う。
0611609
03/06/15 09:47ID:gL/WGc+Xすんません。 Cocoaというレベルでなくて言語仕様レベルの話なんです。
昔作った処理の再利用が目的なんで、うわっかぶせでobj-c とcの
橋渡しができればいいんです。
C++経由というのをいま探索中です。
0612名称未設定
03/06/15 09:54ID:OkyjEh1bCの関数内から呼び出したいだけで、別にCで作ってるわけではないのね?
んじゃあ、Obj-Cなんだったらそのまま呼び出せば普通に使えると思うんだけど。
0613名称未設定
03/06/15 11:51ID:DseHzMTf--- main.c ---
main() {PrintStrObj();}
----------------
gcc -c main.c
--- print.m ---
#import <Cocoa/Cocoa.h>
void PrintStrObj()
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
printf([[NSString stringWithString: @"Hello World!"] cString]);
[pool release];
}
---------------
gcc -c print.m
gcc -o p main.o print.o -framework Cocoa
0614名称未設定
03/06/15 22:03ID:yvDfhKw+0615名称未設定
03/06/15 22:06ID:kPFDhgUZ0616名称未設定
03/06/19 19:54ID:PnXyS1H+int main(int argc, const char *argv[]){
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
[pool release];
return 0;
}
みたいなのをコンパイルして実行すると、CFStringとかCFNumberなどのCF〜のメモリが解放されていないようなんですけどこれはなんなんでしょうか?
0617名称未設定
03/06/20 00:25ID:hPWAptZ1>これはなんなんでしょうか?
どうやって検証したの?
認識が違っているかもしれないし、方法がわからないと誰にもわからない。
0618名称未設定
03/06/20 00:30ID:hPWAptZ1Cocoa.Frameworkってメモリーリークしているのかしていないのか
わからない所がある。
MallocDebug.appでみると、リークしまくりのようだが。
0619名称未設定
03/06/20 00:35ID:fU/oS9Tvすいませんでした。
gcc main.m -framework Cocoa
とコンパイルしたものを
ObjectAlloc上で実行してみたところCurrentの所が0になっていないものが
たくさんあったんです。
0621名称未設定
03/06/20 00:47ID:fU/oS9Tv0622名称未設定
03/06/20 01:33ID:hPWAptZ1main(){
char* p=malloc(10);
free(p);
return 0;
}
でfree()があるときとないとき比べても
システム内で使われたかどうか知らないが、
消えてないオブジェクトがある。
0623名称未設定
03/06/20 01:47ID:uQVPRV9+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で書いてみましたが同様の症状でした。
0624623
03/06/20 01:55ID:uQVPRV9+SHOEISHAのJavaゲームプログラミングを参考にしています。
(この本は推奨されないメソッドを使っている箇所がたくさんあるので気をつけてコーディングしています)
ポートは2357を使用しています。他のポートも試しましたが症状は変わりませんでした。
テスト段階で一回うまくいったような感じだったのですが
ポートを閉じる処理を忘れてからうまく動作しなくなったような感じがします。
記憶があいまいなので、もしかしたらうまく動いていたのは勘違いだったかもしれません。
この問題の解決が難しそうであればObj-Cで書き直すつもりでいますが
不馴れなためできればJavaで開発したいと思っています。
何卒よろしくお願い致します。
0625名称未設定
03/06/20 03:29ID:dn2gRYcxそれは多分、もともと解放されないオブジェクトだと思うのだが。
@"string"とかは解放されないNSStringのインスタンスでしょ?
>>623
たしかaccept()はそこで止まってアクセスを待つでしょ。
タイムアウトを設定すれば、時間切れで例外吐くようになるんじゃない?
0626623
03/06/20 03:40ID:uQVPRV9+うおおレスありがとうございます!
んー、なるほど。たしかに止まってアクセスを待ってるような感じもします。
なんでNoSuchMethodErrorが出てるのかもうちっと調べてみます。
0627名称未設定
03/06/20 12:15ID:KydAHKyTCFStringなどはCFReleaseで解放しなければならない
ということではなくて?
>618
リークは0にはならないね。
俺は10KBくらいにおさまれば良しとしてる。
OSのバージョンが上がれば改善されるみたいだし。
10.1ではNSURLHandleとかリークしまくりだったけど
10.2になったら直ったよ。
0628616
03/06/20 13:50ID:VIGfGwZO>>627
自分で生成した覚えのないものなので一体なにを解放すればいいのかわらないんです。覚えがないのならば気にしなければいいのかもしれませんが...
>>625
というのはシステムが勝手に生成して解放しないオブジェクトがあるということでしょうか?
やはりObjectAllocを使って調べようとしているのが間違いなのかな。
0629名称未設定
03/06/20 16:42ID:UunQc/xhCFStringはNSStringの内部で使われてたりします。
NSStringのリリースし忘れでは?
確認ですが、NSAutoreleasePoolは、Javaのガベコレと同等物ではないことはご存知ですよね?
autoreleaseメッセージをオブジェクトに投げると、カレントプールに登録され、
カレントプールがリリースされるときに登録されたオブジェクトに対しreleaseメッセージを投げるだけです。
ですから、カレントループが解放されるときにretainCountが1でない場合、
retainCountが1減るだけで解放はされません。
> やはりObjectAllocを使って調べようとしているのが間違いなのかな。
普通の人はMallocDebugを使います。
0630616
03/06/20 17:56ID:OVVUvMlC上に書いたようにNSAutoreleasePool以外に特にオブジェクトを生成していません。main()の中身はあっても無くても変化はありませんでした。
一応retainCountのことは理解しているつもりです。
MallocDebugはウィンドウアプリケーション(?)しか使えないのではないでしょうか?少なくともgcc main.m -framework Cocoaとしてできたa.outは選択できませんでした。
0631名称未設定
03/06/20 18:20ID:LblzhyXNhttp://www.trolltech.com/
0632名称未設定
03/06/20 18:35ID:hPWAptZ1>MallocDebugは
ループがないと動かない。
main()
{
....something code
while(1);
}
普通のアプリはイベントループがある。
MallocDebugではポインタの上書きしか検出されない、と思う。
ObjectAllocで見れる参照カウントがあるなら、Win32のデバッグ環境
のようにCheckPoint設定してダンプする関数があってもいいのにな。
ライブラリ自体がリークに関してあやしいのか。
0633625
03/06/20 19:30ID:dn2gRYcxそういうこと。
例えばNSString *のなんとかNotificationとかがAppKitにはいっぱい定義されてたりするでしょ。
それらはNSStringのインスタンスとして扱えるけど、自分で生成する必要もないし、解放もしない。
それにClassオブジェクトだって解放されないでしょ。
たしか現時点ではBundleはロードできてもアンロードできないんじゃなかったっけ。
つまり実質的にはリークしてるってことだ。どうせページアウトされるし。
0634名称未設定
03/06/22 18:45ID:g7Z4HPlh点が有ります。だれか教えて下さい。
分からないのは『タブの長さの設定が可能なのかどうか?』ということのなの
ですが、現在は手動で t(タブ)を任意個のスペースで置き換えるようにして
います。現在うまく動作していますがこの為だけのコードが出てきてしまい、
体によくありません。
1、ファイル読み込み時にタブをスペースで置き換え
2、タブ入力時にスペースに置き換え
3、保存時に必要な箇所をタブに直す
というふうになりますが出来ればフレームワーク側でできないかな?
と思いまして。。。
0635名称未設定
03/06/23 01:12ID:3C938+Doftpなどの対話的なインターフェイスを持つコマンドを、Aquaから
グラフィカルにそうさしつつ、ターミナルは開かないというような動作は
実現できますか?
Aquawget(だったかな)みたいなのを見てると、出来そうな気もするんですけど…
それと、Cocoa初級者むけのメーリングリストとかありましたら(ちゃんと生きてる奴)
教えてもらえると助かります。
0636名称未設定
03/06/23 01:57ID:P12MKax6NSMutableParagraphStyleを用意して、NSTextTabをNSArrayに入れてsetTabStops:でセットする。
んでこのNSMutableParagraphStyleをNSTextStorageとかNSMutableAttributedStringにセットする。
たぶんこの方法でよいと思われる。
Attributeの名前とかはリファレンスのNSAttributedString Additionsとかに書いてあるのでそれを参考に。あとはパフォーマンスとかの問題があるかもしれないので色々実験してみて。
>>635
NSTaskで対話的なものもたぶんできると思う。NSTaskはプロセスを実行して、NSNotificationとかで読み込みを受け取ったりするので、そこらへんを調べてみては。
あとユーザーの入力はstandardInputで与えることになると思うので、NSPipeとかNSFileHandleを使用する。
そして扱うデータによってはNSDataとNSStringの変換とかでエンコーディングの知識が必要になるカモ。あと、文字列を解析する場合はNSScannerが便利。
NSTaskでできなければforkとか使うのかな?
0637634
03/06/23 03:53ID:CnYhIbCRレスありがとうございます。
636の方法で方新は見えてきたのですが、NSTextTabの意味が
よく分かりません。今は時間がないのでテストできないのですが
後日調べてみます(よろしければおしえていただけないでしょうか?)。
面白くなりそうです!
0638616
03/06/23 19:42ID:a2k9m2bi遅くなりましたがどうもありがとうございました。
objective-cだけの時には気にならなかったのですが、cと混ざったものを
書いているときになにか自分で解放し忘れてるものがあるのではと
思ったのでした。
0639名称未設定
03/06/24 01:58ID:x7GZiE7hオートインデントが利かないばかりか、tabを押してもタブが入らず、
何度も挑戦しているとかならずProjectBuilderが落ちるようになってしまって
ションボリックリンクなんだけど、これはもうDeveloper toolsの再インストールしかない?
といったところで、インストーラのパッケージを探してみたら、
なんかいつの間にかハードディスクの中から消えてる??
MDD867なんですが、インストーラはどこにあったか教えてもらえませんか?
0640名称未設定
03/06/24 13:57ID:sZOxojhsとりあえずADCOnlineにでもなって(もしなってなかったらね)Dec2002と昨日でたDec2002用gcc3.3パッチとセットでDLしたら?
てかその前にpreferencesあたり疑ってみたりインデント外すなりしてみるとか。
Xcodeになってもインデントバグがあったりするとかなり鬱になりそうだけど(汗
0641名称未設定
03/06/24 19:27ID:Z3Jcgek/dissolveToPoint(NSPoint aPoint, float delta)ではOSXに付属のスクリーンセーバのような
なめらかな位置の移動はできないのでしょうか?
NSPointの各座標の値を1.234みたいな値にしても結果は1Pixelずつの移動でした。
なんか根本的な勘違いをしてますでしょうか?
0642名称未設定
03/06/24 21:19ID:x7GZiE7hウワァァン、最新版入れてもplist消してもやっぱりインデント設定を入れると落ちるよう
しょうがないからオートインデントなしで書くか…これじゃmiとあんましかわらんね
何が悪いのか皆目見当が付かないところもションボーリ
0643名称未設定
03/06/24 21:51ID:x7GZiE7hオートインデントを切ったら、tabがスペースに変換されてインデントされるのは
これはどうしようもないことなんですか?
回避方法(tabをtabとして記録する)があれば教えてほしいのですが…
環境設定の「エディタでタブを使う」とか項目をいじってみてもどこが変わったのか
よく分かんないし…助けてくだされ
0645644
03/06/25 00:39ID:eB6ceTrH「エディタでタブを使う」の設定はプロジェクトの個々のファイルごと
にも設定されてるようだ。cmd+iで情報パレット出してチェック入れれば
ちゃんとtabが入るよ。
0647641
03/06/25 03:28ID:lsrrhXEhdrawAtPoint,drawInRectを使用することでうまくいきました。
よくドキュメントを読んでから質問します、、、板汚しスマソ。
0648641
03/06/25 15:12ID:lsrrhXEhOSXに標準のスクリーンセーバに比べて描画速度が遅くて困っています。
NSViewを継承、RunnableをimplementsしたClassを作成して
run()内の無限ループでdisplay()、sleep()を繰り返し処理をしています。
(具体的な描画処理はdisplay()の中で行っています。)
drawInRectの描画面積が広く、クロスフェードで透明度をつけるととても遅いです。
スリープを0にしても遅くてなめらかな動きになりません。
OSXのスクリーンセーバはとてもなめらかに動いてるので
何とか対処できるのではないかと思うのですが解決策が全くわかりません。
やはり全画面描画をするときはObj-cでNSOpenGLViewを使わなければならないのでしょうか?
全画面描画について何かアドバイスよろしくお願い致します。
0649名称未設定
03/06/27 17:27ID:XaJJBML+ウィンドウに配置した NSTableView に表示するものを作ろうと思ったんですけど、
NSTableView にデータを表示させるにはどういう手順が必要なのかいまいち分かりません。
・NSTableDataSource を NSTableView のデータソースとして指定する
・おそらく tableView:setObjectValue:forTableColumun:row: でデータを書き込む
と言うところまでは分かるんですけど…
あれ、"(NSTableView *) tableView" がパラメータとして指定されてるということは
setDataSourceは必要ないということ?
ls の出力結果ということで、改行で区切られた文字列がダラダラと帰ってくるわけですけど、
これを配列に変換したものを、一気に書き込むなんてことはできるんでしょうか?
0650名称未設定
03/06/27 17:46ID:QrYouNyJNSTableView の DataSource に必要なのは
-(int)numberOfRowsInTableView:(NSTableView *)aTableView;
-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
この使い方は
http://homepage.mac.com/mkino2/cocoaProg/AppKit/NSTableView/NSTableView.html#setValue
このあたりを参照。
あとは、文字列を配列に変換するのに
-(NSArray *)componentsSeparatedByString:(NSString *)separator;
を使ったりすると吉。
0651名称未設定
03/06/27 19:29ID:OI+yaa6v全データを丸ごとコピーして新しい辞書を作るにはどうすれば良いでしょうか。
dictionaryWithDictionary:では頂上しかコピーされないし、
再帰でごりごりとコピーするしかないんでしょうか?
あ、ファイルに書き出す、は無しでお願いします(ファイルに書き出せないデータを含むので)
0652名称未設定
03/06/27 22:53ID:XaJJBML+うーん、この説明を読んでもさっぱりです…
たとえば myObject にアウトレットを作って、
tableView, tableColumn というアウトレットをそれぞれ
NSTableView, NSTableColumnに接続しますよね、
それでボタンをひとつ用意してそれに対してアクション run: を接続して、
その run: の中でテーブルにデータを入れたいと思ったら、
どのような操作が必要なんでしょうか?
0653名称未設定
03/06/27 23:27ID:9xWR5cniちょっと勘違いしているようで。
CocoaではオブジェクトがNSTableViewにデータを送って、表示するような方法は取ってないよ。
NSTableViewのほうから、「ここのカラムの何番目に表示するのは何よ?」って聞いてくるから、
オブジェクトは「表示するのは@"hoge"」とか返せば、その文字列が表示するって仕組み。
0654名称未設定
03/06/27 23:52ID:XaJJBML+むむむ。そうすると、
NSTableView「行数はいくつなの?」 (numberOfRowsInTableView)
オブジェクト「5つだよ」(↑の戻り値)
NSTableView「じゃあじゃあ! hogeの3行目はなに?」(tableView:objectValueForTableColumn:row)
オブジェクト「hogehogeだよ」(↑の戻り値)
って感じですか?
なるほどそうなると、なぜオーバーライドするのかとか
なぜそのメソッドを使うのかとかが分かってきたような気が。
0655名称未設定
03/06/28 21:48ID:zr+eaerBマルチポスト
警告1
0658名称未設定
03/06/29 02:20ID:KT4lXhEQ0659名称未設定
03/06/29 02:33ID:t58EgiAB0660651
03/06/29 21:53ID:LocSjlblファイルに書き出す前の処理です。
NSCodingに対応していないオブジェクトを含んでいてそれをデータから排除したいわけです。
でもメインのデータをいじっちゃうとその後の動作に問題が起きるので、
丸ごと複製してそっちをいじってやろう、というわけで。
設計上の問題といわれればそれまでですが。
0661名称未設定
03/06/29 22:58ID:lHyYE8i9この人可哀想…。
0662名称未設定
03/06/29 23:57ID:V4o6OgIx同情するなら金をくれ
0663名称未設定
03/06/30 00:53ID:k8jHSRl5カテゴリを使っちゃうのはどうか。(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:ってのもあるけど。
0664名称未設定
03/06/30 19:48ID:FjvaEaICレスサンクスです。
>でもこれってコピー用の再帰的な関数書くのとあんまり変わらんかもね。
こっちの方が再利用がきいてよりオブジェクト指向っぽいですね。
勉強にもなるしちょっとやってみます。
0665名称未設定
03/06/30 22:05ID:zRsGWYSYあるクラス(モデル)のメソッドで、文字列を引数として受け取り、
処理の結果を文字列として返す関数を作ろうと思うんですけど、
この場合、関数の定義はどうするのが一般的に正しいですか?
このメソッドは常に外部のクラス(コントローラ)から呼ばれることが前提です。
- (NSString)hogehoge: (NSString)aString
{
(略)
return aString;
}
のようにすればいいのかな。
オブジェクト指向言語でのプログラミングはほとんど始めてなので
クラスを引数にする時はどうすればいいのかイマイチ分かってないんですけど。
return aString とやると、ポインタか実体かどっちが帰ってくるんですかね。
0666名称未設定
03/06/30 22:39ID:W5NghL+q-(NSString*)hogehoge:(NSString*)aString
じゃないかと思うが。
0667名称未設定
03/06/30 22:53ID:mf6N3Mj60668名称未設定
03/07/01 01:02ID:5epRmT+Bありがとー
その後、stringWithString とかの定義を見てたら何となく分かってきたよ
といったところでもうひとつ質問が…。
アホな質問ばかりでごめん…
クラスAとクラスBがあったとして、クラスBの中のメソッドXが、
(メソッドX内で作った)NSArrayのポインタを返すとします。
これをクラスAの中から呼び出す時は、
NSArray *hoge = [ classB methodX ];
とやるのか、それとも
NSArray *hoge = [ NSArray arrayWithArray: [ classB methodX ] ];
とやるのか、どっちなんでしょう?
もしメソッドXが返すインスタンスがそのまま解放されないとしたら、
クラスA側でわざわざ別のインスタンスを作るのは無駄なように思えるし…
0670名称未設定
03/07/01 01:40ID:5epRmT+Bということは、まったく別のクラスの内部にあるメソッド内でインスタンス化された
ローカルオブジェクトが、解放されないまま別のクラスから参照できる、って事?
どこで宣言、インスタンス化されたオブジェクトであっても、それ自体をrelease
しない限りはメモリ上に残り続けるってことで合ってますか?
そして、たとえばクラスBのインスタンス自体が解放された場合、その中の
メソッドXでインスタンス化されたオブジェクトは解放されずに残るのか、
それとも一緒に消えるのか、どっちなんでしょ?(もちろんautoreleaseしてない場合)
萩原本は購入予定には入ってるけど資金不足でしばらく無理…
0672名称未設定
03/07/01 02:20ID:o6aV7lpLその中のメソッドXでインスタンス化されたオブジェクトは解放されずにメモリ上に残る。
クラスBが解放されてしまっているので、
たとえオブジェクトがメモリ上に残っていたとしてもアクセスできず、
メモリリークということになってしまうが。
0673名称未設定
03/07/01 02:27ID:o6aV7lpL@implementation B
-(NSArray*)hoge1{
NSArray *array=[[NSArray alloc] initWithObjects:@"a",nil];
return array;
}
-(NSArray*)hoge2{
NSArray *array=[[NSArray alloc] initWithObjects:@"a",nil];
[array release];
return array;
}
-(NSArray*)hoge3{
NSArray *array=[[[NSArray alloc] initWithObjects:@"a",nil] autorelease];
return array;
}
@end
0674名称未設定
03/07/01 12:05ID:5epRmT+Bそれぞれの違いはだいたい分かる…はず。
autoreleaseは同じイベント処理内(もしくはarpが作られてから破棄されるまで)
はずっと保持されるってことでいいんですよね。
それに対して何も無しはずっと解放しない。
releaseがあるものはその場で解放されるのでnilが返される。
で、合ってますか?
あともうひとつだけ!質問ばっかりですいません
componentsSeparatedByStringを使って、改行で分けた文字列を作るには、
セパレータを 「@"\n"」 ってやるのは間違ってますか?
0675名称未設定
03/07/01 16:35ID:T0L0lxsWNSViewにドラッグアンドドロップするのは出来たのですが、
NSCellにドラッグアンドドロップをしようとして、はたと立ち止まってしまいました。
NSView上にNSCellを複数配置してあって、それらの一つにFinderから
アイテムをドロップしたいのですが、どのように処理すれば良いのでしょうか?
0676名称未設定
03/07/01 16:47ID:u6msM7eZ0679名称未設定
03/07/01 17:14ID:T0L0lxsWNSViewにドラッグアンドドロップする時は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:がありません。
それで、どうすればよいのかな分からなくなったのです。
長文すいません。
0680名称未設定
03/07/01 17:18ID:fZaKdqpP> releaseがあるものはその場で解放されるのでnilが返される。
これ違う。
勝手にniになってくれるわけない。
0681名称未設定
03/07/01 19:02ID:o6aV7lpL後半
NSString *LF=[NSString stringWithCString:"\n"];
NSAttay *array=[hoge componentsSeparatedByString:LF];
みたいにするとか。
もっと良い方法があるかもしれない。
0685名称未設定
03/07/01 20:13ID:o6aV7lpLhttp://homepage.mac.com/mkino2/books/hmdt.html
Cocoa はやっぱり!や荻原本やヒレガス本などの
先行本の良いところを拾った感じになりそう。
0687名称未設定
03/07/01 20:33ID:5epRmT+Bどうも他の部分でバスエラってるモヨリ
0688名称未設定
03/07/01 21:14ID:o6aV7lpL以前、同じ問題で悩んだ時には @"\n" で失敗したので、
>>681 の方法を使ってたんだけど。
0689名称未設定
03/07/01 21:37ID:5epRmT+B同じクラス内の全てのメソッドが使える配列を作ろうとしたんですけど
@implementation Hoge
NSArray *aArray = [ NSArray array ];
- (IBAction)run:(id)sender.......
って感じにしてみたら、initializer elemant is not constant
って怒られてしまう。
メソッド内で同じものを宣言すると問題なく通るのだけど
何か基本的な間違いをしてますか?
それと、今作ってる練習用のプロジェクト(簡単なやつ)が
意味不明の場所でエラーを起こして落ちてしまうんですけど
どこかに上げたら誰か見てもらえませんか?
デバッガでトレースしてみてもやっぱり意味不明のところで落ちてるような。
0690名称未設定
03/07/01 21:58ID:T0L0lxsWそうなんですよ。
私もNSCellがNSViewのサブクラスだったらいいなぁと思ってたんですが。。。
解決したら書き込みます。
もうちょっとドキュメントあさって見ます。
0691名称未設定
03/07/01 22:07ID:HPfpM43kインスタンス変数でいいと思います。
@interface Hoge : NSObject {
NSArray* aArray;
}
...
そもそも変更不可の空Array作っても仕方がないのでは。。
こういうときはNSMutableArrayを使います。
0692名称未設定
03/07/01 22:35ID:u6msM7eZNSViewは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:を呼ぶことができる。
0693名称未設定
03/07/01 23:12ID:5epRmT+Bあやや、失礼しますた。書き間違いです。
なんでこんなことがしたいかと言うと、
これ自体がNSTableDataSourceを内包しているので、
スタティック変数(じゃないけど)を参照してセルの内容を返す必要があるんですよ。
んで、あるボタンを押すとその内容が変化するので、その度に毎回NSArrayを
作っているとそのうちメモリが溢れるかなぁと思ったもんで。
0694名称未設定
03/07/01 23:54ID:5epRmT+Bってことでこれがプロジェクトのディレクトリなんですけど。
余裕があったらぜひとも試して添削してみてくださいませませ。
0695名称未設定
03/07/02 01:07ID:cjlxSf/4ソースまだ見てないけど、そういう場合は、
@interface Hoge : NSObject {
NSArray* dataArray;
}
で、
-(NSArray*)dataArray{
return dataArray;
}
-(void)setDataArray:(NSArray*)inArray{
if(dataArray) [dataArray release];
dataArray=[inArray retain];
}
みたいなアクセッサメソッドを作りそれを介して扱います。
deallocで[dataArray release]すればきっちり片付きます。
0696名称未設定
03/07/02 01:38ID:2AiJdzFN??
最初のメソッドの意味が分かんないです。
この例のままだと、変なポインタ返しませんか?
もしかしたら役に立つかもしれないので教えてください。
よく考えたらNSMutableArrayを継承して、データソースのメソッドを持つ
専用のクラスを最初からインスタンス化しておくのが無難かもしれない…
0697名称未設定
03/07/02 02:02ID:+BXvG5zQ・tableData はインスタンス変数にして -(void)awakeFromNib; の中などで初期化すれば良い
・RunTask クラスを nib ファイル内でインスタンス化する意図が不明
・listView の dataSource は nib ファイル内で指定すれば良いのに
・とにかく一回基本書を買って読んだ方が良い
0698名称未設定
03/07/02 09:59ID:2AiJdzFNアドバイスありがとー
Cocoaはやっぱり!を読んだだけじゃぁナンニモワカンネーヨ!
ってとこですか。ぐふぅ
次のステップとしては、ヒレガス本か入門Cocoaか萩原本かHMDT本が
あると思いますけどどれがいいでしょうかね。
HMDT本はまだ出てないから候補から外すとしても。
0699名称未設定
03/07/02 11:04ID:vDGdMVpiぱらぱらっと立ち読みすることにして、他のを全部買えばいいんじゃない。
どれにしようとか、考えてると結構時間の無駄だし。
0700名称未設定
03/07/02 11:09ID:2AiJdzFN現時点でもっとも実りが多そうな本がいいなぁと…
萩原本かな。
0701名称未設定
03/07/02 13:24ID:VFUUmN8k聞いてることはほとんど載ってるような・・・。
HMDTは発売後様子を見てから。
0703名称未設定
03/07/03 02:20ID:WA9nmxUiそこらへんHMDTに期待。テキスト処理なんかが詳しく書いてあるとかないとか。
ちなみに、Learning Cocoa -> 萩原本 -> Cocoaはやっぱり! -> ヒレガス本
-> Cocoa Programming の順で買った。
0704名称未設定
03/07/03 20:26ID:puvhRaL3でも1冊買うとしたら、どの本を買うと良いですか?
0705名称未設定
03/07/03 20:28ID:rHAQZ22W0706名称未設定
03/07/04 00:29ID:03lNLZCC0707名称未設定
03/07/04 08:00ID:AxSMkcXN割と大きめの図書館なら大体おいてるし、無ければ「ない」と言えば、結構おいてくれる。
うちの近くの図書館もそんな感じで、妙にプログラム系の書籍が多いぞ。
0708名称未設定
03/07/04 10:05ID:q5MVtSOD自慢にもならんが、こっちの図書館には全部ない。
行く度にリクエスト用紙かいてくるが2年間ずっと無視
郷土関係のマイナーな本は山ほど買ってる見たいだけど、いらね
他の図書館から取り寄せてもらっても、貸し出し付加
・・・・・・・・・・・結局全部かいますた
0709名称未設定
03/07/04 13:36ID:ef+c7Q5Y買う本決まってる時はアマゾンで買うと決心した。
0711名称未設定
03/07/04 22:45ID:+PhI4JgTもちろん書店でもみくちゃにされた本が返本されてたのを、ブックカバー換える前に
再出荷することもよくある。
0712名称未設定
03/07/05 00:12ID:zkMtTc1Bでるのですが、これの意味(日本語訳という意味ではなく、どう解釈したら
いいのか)がわかりません。どなたか教えて下さい。
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)をすると上記エラーが発生する
0714名称未設定
03/07/05 08:58ID:RJNeLMy2Javaでこれが起こるってことはガベコレのバグかな?
これはObjCでNSAutoreleasePoolと言うクラスのインスタンスがないスレッド上で
autoreleseメッセージを送信したときにでるものです。
まあ、あえてJavaでいえばインスタンス変数にNULLをセットするようなものかな?
最初に書いたようにJavaの場合はガベコレが勝手にやってくれますので意識する必要はまったくないです。
どこかでプロジェクト一式晒してみるか、
Appleに”ガベコレがおかしいぞ!ゴルァ”メールを送るかしないとだめかも。
と思って調べてみたらCocoa/JavaにもNSAutoreleasePoolがあるのね。
いまいち必然性が分からない...
ってことで各スレッドごとにNSAutoreleasePoolのインスタンスを確保してください。
0715686
03/07/05 11:16ID:gnCL+1wwふと気がついたんだけど・・・
ドラッグ関係のメソッドってNSViewに実装されているわけではなくてNSDraggingDestinationプロトコルのものなんだよね。
(NSObjectで採用されている)
だからNSCellでregisterForDraggedTypes無しでもドラッグを受け入れられるのかも?
0716712
03/07/05 18:40ID:zkMtTc1Bレスありがとうございます。
NSAutoreleasePoolについて調べてみたものの解決しません。
NSAutoreleasePoolのドキュメントに以下のような方法で例の
エラーを回避できると書いてありました。
//--------------------------------Cocoa-Javaドキュメントより
int myPool = NSAutoreleasePool.push();
// Your code here
NSAutoreleasePool.pop(myPool);
//--------------------------------ここまで
しかし、これをどこに記述すれば良いのかがわかりません。
今回自分で新しいスレッドは生成していませんし、、、
とりあえずボタンをクリックされた時のアクションメソッドの最初で
push() して、このメソッドの最後でpop()してみましたが、駄目みたいです。
ほかにもいろいろ試してみましたがどれも解決しませんでした。
やはり、なんらかのバグなんでしょうか?(あまり簡単にバグだと思いたくない
んですよね)
0717名称未設定
03/07/06 06:21ID:bR3cImLuProjectBuilder-ターゲット-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=
と、空白にすると
警告も出ず、「ビルドは問題なく完了しました」と表示される。)
0719名称未設定
03/07/07 10:33ID:4QoCdxSu取得できる座標は画面端からの座標だけなのでしょうか?
Viewやwindowはマウスボタンを押した時にしかわからないのでしょうか?
window1枚にNSView,CustomViewの2枚が乗っている状態です。
0720名称未設定
03/07/07 10:34ID:4QoCdxSuどうしていいのか良くわかりません。任意のタイミングで効果音を出したいのですが。
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
0721名称未設定
03/07/07 11:03ID:MtEB9sars = [ NSSound soundNamed:@"Bang" ];
[ s play ];
[ s release ];
を同じメソッド内で処理するようにしよう
0722(´・ω・`)ショボーン
03/07/07 11:38ID:4QoCdxSuスミマセン。呼び出し方が解かってません
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
0723名称未設定
03/07/07 11:52ID:MtEB9sarちょっとは汎用性が高まるけれども。
0724名称未設定
03/07/07 12:18ID:dgRhmPVSMyVからMyOのメソッドを呼び出そうとしている書き方が間違ってます。
その書き方では呼び出せません。
MyVのインスタンス変数に「MyO *myO;」とか保持させてちゃんと代入すれば、
[myO bangSound:1];
と呼び出せます。あるいは、
NSApplicationのdelegateに音を鳴らすメソッド書いておいて
[[NSApp delegate] bangSound:1];
とか。
あと、soundNamed:で作られたインスタンスは(最初からautorelease
されてるので)releaseしたら駄目。
逆に言うと、ずっと保持していたい場合はretainしなきゃ駄目。
0725名称未設定
03/07/07 13:01ID:Eo2xXSPgわざわざMyOにsを持たせずにMyVで作成して保持すれば良いことだと思うが・・・
>>719
グローバル座標からViewの原点を引けば良いんじゃないの?
0726(´・ω・`)ショボーン
03/07/07 13:25ID:4QoCdxSu+グローバル座標から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も勉強中なので、試してみます。
0727名称未設定
03/07/07 13:31ID:s9qzJUP5> 取得できる座標は画面端からの座標だけなのでしょうか?
NSViewおよびNSWindowに変換メソッドがあります。
NSViewの場合スクリーンからの直接変換は出来ないようなのでいったんwindowメソッドでNSWindowを取ってきてNSWindowの座標に変換後、
convertPoint:fromView:メソッドでNSViewの座標に変換しなければいけません。
NSViewをカテゴライズして変換メソッドを実装してもいいでしょう。
カーソルの変更のような主導権がユーザー側にある場合は
http://developer.apple.com/documentation/Cocoa/Conceptual/BasicEventHandling/Tasks/HandlingMouseTracking.html
この辺。
でも、ファーストレスポンダーしか反応しないような書き方してるね。
0728名称未設定
03/07/07 14:51ID:dgRhmPVSそれじゃMyVごとにMyOのインスタンスがそれぞれ作られるんで、
>わざわざMyOにsを持たせずにMyVで作成して保持
するのと一緒。
「MyO→s, MyV, MyV」としたいのだろうが
「MyV→MyO→s, MyV→MyO→s」となっている罠
0729名称未設定
03/07/07 15:22ID:Eo2xXSPg>myO=[MyO alloc];
myO=[[MyO alloc] init]; ね
MyOに関しては>728の通り。
Cocoa的には
1.MyOをnib上でインスタンス化
2.MyVにMyOのアウトレットを追加
IBOutlet id MyO;
3.nib上でMyVのアウトレットにMyOのインスタンスを接続
ってのがスマートかも。
0730(´・ω・`)ショボーン
03/07/07 18:08ID:4QoCdxSu>>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
詰まったらまた質問に来ます。ヨロシクお願いします。
0732(´・ω・`)ショボーン
03/07/08 16:11ID:UxS+KAy+初期処理で音データを一度読み込んでおくというふうに理解しましたが?調べてみます。
>>etc
実際のコードにおとす部分でイロイロ詰まってまして、、また来ます。
0733名称未設定
03/07/12 00:15ID:PMkH8mJ0出版元のサイトにもトップページのコラム以外に情報のってないし・・・。
0734名称未設定
03/07/12 00:49ID:wlWAvniy0735名称未設定
03/07/12 05:51ID:L/wAtXpyもうちょっと前なら欲しかったけど、、、
0737名称未設定
03/07/12 12:06ID:75/jyeLQ表紙の画像はあるのにISBNコードも予価も書いてないし。。。
原稿が遅れてるんですかね?
20日に出版できるんだろうか。。
誤植いやだから初版は避けたいところだけど、
どうせMac関連の本だし第二版なんて出るのはいつの事やら。
Webで誤植フォローしてくれればいいんだけどね。
0738735
03/07/12 20:47ID:L/wAtXpyう〜ん、お勧めかぁ。
俺が読んだのは『Jaca&Cocoaプログラミングバイブル』だけなんだよ。
あんまりお勧めはしないけど…。
基本的にドキュメント読んで、いろいろ試してれば分かるでしょ。
どの本読んでも内容は一緒に見える。
ただ、Obj-Cの勉強をしたいなら話は別かもね、俺はJava使いだから。
0739名称未設定
03/07/13 07:43ID:Cg6GJpXRhttp://www.big.or.jp/〜crane/cocoa/
0740名称未設定
03/07/13 09:03ID:jZAR8wd90741名称未設定
03/07/13 12:03ID:CBeln3F4同一クラス内から自由に参照できますよね。
とすると、そのヘッダで、
@interface Hoge : NSObject
{
// この部分
}
ここで宣言した変数はどういうことになるんでしょうか?
外から見えるようになるんですか?
0742名称未設定
03/07/14 02:33ID:g5EsyC6Xを、ほんとだ。トップからはリンクなさそうだけど(つーかフレームのメニューが固定だから狭い画面なんで見落としてるかもしれんが)。
まだメインの記事は復活したわけじゃないし、740の言う通りHMDTとの差別化に苦労してるっぽいね。
今後どうやってくのかちと様子見(ほれ、PB(そのうちXcode)とIBの使い方はここ見れって言えるサイトに戻るといろいろと楽なんだが)。
#正直blogだけだとゴミ決定だったけど、これで見れるサイトに戻ったな。
0743名称未設定
03/07/14 08:47ID:p25DKQbX1.メソッドの中括弧の外で宣言した変数
Cのスコープが適用されるのでグローバル扱いのハズ
2.@interfaceの中
objective-cには、
@public
@protected
@private
の予約語があります。
デフォルトは@protectedです。
0744山崎 渉
03/07/15 10:12ID:34L7LbqJ__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0745名称未設定
03/07/15 11:32ID:C8aJ3Wyw0746山崎 渉
03/07/15 14:02ID:34L7LbqJ__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0747名称未設定
03/07/15 21:40ID:4N+pVtMv0748名称未設定
03/07/18 13:03ID:Z0heQC/50749名称未設定
03/07/22 22:13ID:DGhQ4uIZ0753名称未設定
03/07/22 23:29ID:DGhQ4uIZ0754名称未設定
03/07/22 23:30ID:dhxy6CcW0755名称未設定
03/07/23 00:49ID:mP07ShDE0756名称未設定
03/07/23 21:01ID:2jOSxer00757名称未設定
03/07/23 22:37ID:qiSGLmR4質がいいかどうかなんて他人に判断しようがない。
だから、一番お手軽なrand()を教えてくれたのに
「質の悪い」なんて言い返した751が悪い。
ちゃんとどの程度の質を求めているか書けばよし
0758名称未設定
03/07/23 23:27ID:kfucE81s0760名称未設定
03/07/24 00:02ID:dwFU6cl6このへんのスレッドが参考になるかも
0761名称未設定
03/07/24 02:09ID:T/GnQOGB0762名称未設定
03/07/24 13:33ID:OjXku3Nf0763名称未設定
03/07/24 14:41ID:AQGdguy4C言語をマスターしてるのが前提なのにメモリのアドレスとか、ヘッダ
ファイルとは・・・、とか無駄な説明が多い。1〜3章は要らない。
校正も残念ながら不十分で、おかしな日本語や図の貼り忘れとかがある。
説明もあまり適切ではない。読むんなら4章以降でしょう。
ウェブサイトの方は簡潔なのにね。本だとむずかしいのかな?
0764名称未設定
03/07/24 15:09ID:Ml3EfHSHむしろ「プログラミングをやったことが無い人にも
読めるように作った」とか書かれていなかったっけ。
0765名称未設定
03/07/24 16:42ID:AQGdguy4そうなんだけど、多分、そういう人が読んだら3章までで挫折すると
思うよ。それにObjective-Cを使うためにはCがわからなければ無理
だから、全くプログラムを組んだことがない人、ってことはありえない。
Cocoaの初心者という意味だと思う。
1〜3章は入れないほうが良かったと俺は思う。
0766名称未設定
03/07/24 17:04ID:de5d+QNZ第2版は出ないだろうから、ミスはミスのままか……
作者のサイトでエラッタがでればいいか。
0769名称未設定
03/07/24 20:05ID:66kjK9M7addTableColumn: で動的に NSTableColumn を追加した場合、
追加した NSTableColumn の部分だけダブルクリックに反応しなくなるという問題で困っています。
恐らく、NSTableColumn を追加する際に何か設定を見落としているのだと思いますが、
それが何なのか分かりません。
この問題について、どなたか解決策をご存じの方はおられないでしょうか。
ちなみに、問題の生じているプロジェクトは以下のようになっています。
http://www.geocities.co.jp/SiliconValley-Bay/5171/tablecolumnsample.dmg.gz
0771名称未設定
03/07/25 15:20ID:4xHRE/Drで、入力側にDoubleClickを奪われなくなるなり。
0772名称未設定
03/07/25 19:23ID:12KaNJEUまさにそれが原因でした。
何かに反応するには editable = YES だろうと勝手に理解していたのですが、
どうやら editable の意味を取り違えていたようです。
ありがとうございました。
0773名称未設定
03/07/26 05:54ID:vF4zZNxI今、サンプルでステータスバーのメニューにフォルダを登録して
メニューから任意のファイルやフォルダを開けるように
したいと思っています。
しかし、サブメニューを持つ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() の違い(意味?)が
よく分かりません。だれかご教授おねがいします。
0774名称未設定
03/07/26 20:57ID:78LIaaUj通常は MenuItem を選択した場合に action が呼ばれるわけですが、
MenuItem に SubMenu のある場合は、
選択しても何もしないのが正しい挙動なのでは?
あと、NSMenuItem の
setMenu は親メニューを登録する場合に使い、
setSubMenu は子メニューを登録する場合に使うものではないでしょうか。
リファレンスでは setMenu は呼ばないように注意されていると思います。
0775名称未設定
03/07/27 05:09ID:b7ikz8RS言いたいことはわかる。
>>774
>選択しても何もしないのが正しい挙動なのでは?
動的作成(というよりオンデマンド)メニューを作りたいからで、
サブメニューからアクション(コールバック)されてメニュー構築
をしたいということでしょう。
Obj-Cで試したことあるけどできないんだよ。
- (void)submenuAction:(id)sender;がコールバックされない。
ドキュメントでは、メニューがオープンされるとき呼ばれるとあるんだが。
たぶん、バグでしょう。分かる人いたら教えて!
他の人たちは、Carbonでやっているはず。
0777名称未設定
03/07/27 14:44ID:Sij2p2Pv返事ありがとうございます。
なるほど、基本的には出来ないのが”仕様”ということですね。
>他の人たちは、Carbonでやっているはず。
そうなんですか、、Snardみたいなことをしたかったんですが、残念です。
でも、出来ない事が分かったので、別の方法を検討してみます。
重ね重ねサンクスです。
0778名称未設定
03/07/28 00:10ID:pga3ndQwプルダウンされる時には既に更新されたメニューにすり変わってるんではないのかな?
まあ、snardを知らないわけだが。
0779名称未設定
03/07/28 00:11ID:Co98QJ540780名称未設定
03/07/28 09:37ID:cyqTWfTHスルーされた質問をコピペしてみ、解かることなら答えるよ。
ところで、macosx-dev-jpってどんな雰囲気なんさ?
0781名称未設定
03/07/28 09:54ID:Co98QJ54答えられるだけの技量を持った人が少ないのかなぁ…
まぁ漏れは答えられないから黙ってるんだけどさ。
雰囲気としては、普通の技術系MLと同じような感じで大人しいですよ。
0782名称未設定
03/07/28 11:23ID:G+3ASjikいや、普通はメニューバーのメニュー項目がクリックされた時に
メニューを再構築するんだと思う。その延長で、サブメニュー
のあるメニュー項目がクリックされた時に、再構築しようって
ことになったのだと推察。
最初にサブメニューも含めて再構築するしかないのではないか?
階層構造深くてそのタイミングで一気に再構築だと時間かかる
のであれば、778の言うようなやり方するか。
0784名称未設定
03/07/28 14:34ID:d3M3OIYK雰囲気今は枯れてるのだが、一時期FinderのUIがどーのでフレーム湧きまくりでおおむね逃げちゃったんじゃないかな?>答えるような椰子。
そういう罠はある。ま、MLワチスレで確認してくれ。
0785名称未設定
03/07/28 15:36ID:Co98QJ54技術系MLって、なぜかどこもそういう話題で荒れたり感情的になったりするよね。
個人への批判やたしなめの文章をML宛に送信したりとか。
実はアホが多いのかな。
0786名称未設定
03/07/28 15:37ID:IbnNhUdZパスワドのことなら、あれ答えるのが難しい。
MacOSX的には「KeyChain使え」何だけどCocoaフレームワークに入ってないから薦めにくいんだよね。
しかも使い方覚えるまでが地獄だし。
かといって「DEC(crypt)使うのが普通」ってのもなんだかなあって思うし。
んでも「MD5ハッシュでもいいよ」って答えるのも違う気がするし。
っていうのを誰かポストしてくれればいいなーなんて夢想してみる。
0787名称未設定
03/07/28 19:03ID:cyqTWfTH夢想してないで、そのままMLに投げちゃえば良いべさ。
全員が均一なスキルを前提としたような、クロ−ズドなMLじゃないよね?
質問者の書かなかった行間を(勝手に)補完してみたり、派生する(技術的な)余談を振った方が
面白いと思うんだけど。
答える人を暗に固定していってしまうと、発言できる・できないの閾値が
自分のストレスになるよ。
ストレス溜めておくと、フレームが燃えた時に参加したくなるから(w
0788名称未設定
03/07/28 20:30ID:488YHtXW正解です。
結局今のところフォルダを表すメニューの子メニューに
『***(フォルダ名)を開く』というメニューを持たせることにしました。
多少操作性が悪くなるけど。。。
0789名称未設定
03/07/28 22:16ID:xdxxBzdYCarbonのChangeMenuItemAttributesで、kMenuItemAttrSubmenuParentChoosableを
指定やればできると思います。
ちょこっとやってみたところ成功しました。
ただ、今やってみたところ、nibファイルで作ったメニューには効くんですが、
プログラムで作成したメニューに対しては効きませんでした。。。なんで?
プログラムで作ったってのは、ステータスメニューアイテムを作成して
その中のメニュー項目にたいしてなんですが、なんで効かないんでしょう。。。
0790階層途中でのクリック動作はキモイ
03/07/28 23:36ID:wGzI07RMクリックできるメニューとできないメニューの表示区別が無いのに
>サブメニューのあるメニュー項目がクリックされた時
に選択されるというUIは、激しく気持ち悪い。
0791名称未設定
03/07/29 01:30ID:TGiN7Ls9Carbonなら出来るみたいっすね。
俺、Carbonは全くわからないんすよ。
すいません。
とにかく、情報ありがとうございます。
>>790
そうですか?
いや、そうかもしれないっすね。あんまり考えた事無かったです。
でも、メニュー自体がディレクトリを表すので逆に直感的かな…と。
フォルダのアイコンをメニューにつけたら少しは気持ち悪さが
減りますか?(そういう問題じゃない?)
0792名称未設定
03/07/29 20:24ID:iLKEvWlmHMDTの記事どおりにやっても、エラーが出てアプリケーションが起動しません。
targetの設定で作成したNSApplicationのサブクラスを主要クラスに設定し、
File's ownerのカスタムクラスも作成したNSApplicationのサブクラスに設定してあります。
エラーの内容に
Creating more than one Application
とあるので、どこかでNSApplicationを複数作成してしまっているようなのですが
コードを見直してもそのような記述はありません。
どなたか解決策をご存じの方はいらっしゃいませんでしょうか?
0793名称未設定
03/07/29 20:55ID:M6u2i2+dHMDT のサイトの BBS で直接聞いた方が早いんじゃないかと思うが。
0794名称未設定
03/07/30 00:30ID:dnhhDohr>>792
「ホットキーを登録する」の記事のことだったら、その記事には
詳しい解説があって、
サンプルソースのプロジェクトまで置いてあるみたいだけど。
動いているコードがちゃんとあって、Macがエラーまで指摘しているのに
これで、まともな質問すらもできない奴の
「解決策」なんて、ひとつしか無いとおもわれ。
0795名称未設定
03/07/30 00:39ID:aSUw9N+E初心者向けにイイよー。初版とはまるっきり別の本だ(w
0796名称未設定
03/07/30 05:54ID:ziA8N7Rfもちろん解説も読みましたし、サンプルコードも見ました。
動いてるソースと自分のソースを比べて異なっているのはもちろん
自分のソースにはいろいろと他の処理が入っていることです。
その上で、"Creating more than one Application"というエラーが出るので、
上記のようにどこかでNSApplicationを複数作成してしまっているのでは?と推測しました。
作成したNSApplicationのサブクラスには-initや、+sharedAppliccationといったメソッドも
HMDTの通り、実装してあります。
一応どこかでNSApplicationの+sharedApplicationが呼ばれてしまってるのでは、と思い
カテゴリで自分の作成したNSAplicationのインスタンスを返すように
NSApplicationの+sharedApplicationを上書きしてあります。
自分の書いたコード中で明示的にNSApplicationを作製している箇所はないので
なぜなのか分からない、ということでこちらで質問させていただきました。
確かに長くなるので説明をはしょってあります。上記説明でもはしょってます。
>まともな質問すらもできない奴
で申し訳ない。
>「解決策」なんて、ひとつしか無いとおもわれ。
そう言われちゃしょうがない。
>>793
そうなんですが、こちらの方がいつも利用しているし、返答も早いだろうと思い
こちらに書き込みました。でもおっしゃる通りですね。
今あちらにポストするとマルチになるのでもうしばらく調べてみます。
もし、同じような箇所ではまった方いらっしゃったら情報いただけるとうれしいです。
0797名称未設定
03/07/30 06:52ID:RJThSSEm既にインスタンスを作成してある場合は改めて init を呼ばないようにしてあれば、
他の場所でいくら +sharedApplication を呼んだところで
"Creating more than one Application" が出るはずないと思うが。
0798名称未設定
03/07/30 09:26ID:GPlobAhaインスタンス作ってる部分が被ってるだけだと思うが、、、正直質問が掴めん。
>795
推薦文でも書いてくれ
でも、初版と比較するから良くみえるんじゃねえの?
>794
毒吐いてないで、アドバイスしてやれよ。
でも、
|他人からパクッったコードと自分のコードを混ぜたら動きませんでした。
|おれさまのコードは(漠然と)動いていたので悪くないです。
|何とかしてください。
っていう香具師を思い出したのは確かだけど(w
0799名称未設定
03/07/30 09:35ID:oDVr8HtEえーとHMDT見てないので適当に
> targetの設定で作成したNSApplicationのサブクラスを主要クラスに設定し、
> File's ownerのカスタムクラスも作成したNSApplicationのサブクラスに設定してあります。
この場合、
int main(int argc, char* argv[])
{
NSApp = [[AppsSubClass alloc] init];
.......
}
てのが必要だとADCのドキュメントに載ってた気がする。
0800名称未設定
03/07/30 13:04ID:tAMDdiy2オブジェクトAの中でオブジェクトBを生成します。
オブジェクトBは一定時間待ってオブジェクトAのメソッドAを呼び出して任務終了です。
この場合オブジェクトBの生成時にretainしないでほったらかし
(というか[[[B alloc] init] autorelease])
にして、作業完了したら勝手にいなくなってほしいのですが、
どのようにすれば良いのでしょうか?
メソッドAでreleaseすれば良いわけですが何となくスマートじゃないような気がして。
やっぱ自分で自分をretain,releaseするのは反則なんですよね?
NSTimerなどはどのようになっているのでしょう?
ちなみに「一定時間待って」というのはあくまで例でして、NSTimerを使え、というのは無しでお願いします。
0801名称未設定
03/07/30 15:05ID:Qx5mIL/y質問の意図が全然わからん。
AがBを作成し、
BはAを利用。
Bが作業完了したら、もういらない。
AはBを保持したくない。
ってことだね。Bの作業完了ってのはBのその作業をする
メッセージを呼ぶ奴が誰かいるわけだから、その作業を
要求したやつがリリースすればよいのではないかと思うが。
それと、その間EventLoopから抜けないのであれば、
NSAutoreleasePoolが開放されないから心配いらないし。
どっちにしろ、何がやりたいのかもう少し具体的に説明すれ。
0802800
03/07/30 16:47ID:0YSl6FwLえーとですね、BはGUIのコントローラです。
Aでボタンを押されるとパネルを表示して、ユーザがボタンを押したらAに連絡します。
ものすごく簡単に言えばアラートを表示してOKを押させるだけのクラスです。
もちろんAの中でやりゃすむ話ですが、いろいろ使いまわししたいので別クラスにしたわけです。
なもんでパネルを表示したらEventLoopから抜けてしまいます。
うーん、やっぱりAが保持すれば良いだけのことですかねえ?
パネルを表示するのを専用のクラスでなくてNSAppでやっているのが不思議だったんですが、
もしかしてそこら辺の事情もあるんでしょうか?
0803名称未設定
03/07/30 21:43ID:1TrZUxsX用が済んだら勝手に居なくなるという動作で言えば、
autoreleaseしている時点で「いつか勝手に無くなります」。
それはイベント処理の終わり(デフォルト)かもしれないし、
自前で作ったARPを解放した時かもしれないけれど、
とにかくいつかは解放されます。
ということで、希望通りの動作をしていることになります。
もしもう使わないことが決定した時点で解放したいのなら、
autoreleaseを使わずに、[ [ B alloc ] init ]で生成して、
不要になった時点で自分でreleaseする必要があります。
ARPに登録したインスタンスをretainせずにreleaseした場合は
実行時にエラーが出ます。
具体的に言うとARPが解放された時点で、存在しないインスタンスを
解放しようとして怒られます。
0804名称未設定
03/07/31 00:46ID:1ZiDg8TAオーナーシップ・ポリシーの考えに従うと、
オブジェクトを生成(alloc)した人(今回はオブジェクトA)が責任を持ってreleaseしないと
いけないことになっています。
だからAが生成したインスタンスBを、Aが解放するのはごく普通のことです。
その手間を省くのが、autoreleaseということです。
0805名称未設定
03/07/31 01:22ID:t2k0wxQANSDocument と Document Window のような関係の
NSDocument 側を生成&消滅させたいってことですね。
まずPanelはModeless Windowですか?
私の場合は、ControllerをPanelを定義するnibでインスタンス化
させてしまいます。そうすると生成&消滅するタイミングを気に
する必要がありません。この方法の欠点は、生成するだけの役割
のクラスがそのnibのFile's Ownerになってしまうってこと。
あとは、そのパネルの終了時のNotificationをクラスAなりNSApp
なりで受け取って、消滅させる。でもその場合にはそいつがクラス
Bのインスタンスを保持していないとだめか。
自分自身に終了ボタンが押された時に自分自身にreleaseか
autoreleaseを送りたくなりますね。
でも、それはクラスAが生成してクラスBが消滅させるっていう
のが嫌っぽい。誰もが納得する正解はちょっと思い付きません。
0806802
03/07/31 11:02ID: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に解放してもらうことにします。
0807806の続き
03/07/31 11:03ID:GnXX0/3M>私の場合は、ControllerをPanelを定義するnibでインスタンス化
>させてしまいます。そうすると生成&消滅するタイミングを気に
>する必要がありません。この方法の欠点は、生成するだけの役割
>のクラスがそのnibのFile's Ownerになってしまうってこと。
これってFile's Ownerはautoreleaseしちゃうんですか?
で、宙ぶらりんになったControllerをNotificationを捕まえてreleaseするということでしょうか?
でもFile's OwnerをreleaseしちゃったらControllerも消えますよね・・・
Contorollerを生成するクラスを間に挟むのはどういう意図なんでしょうか?
私はControllerをPanelのnibのFile's Ownerにしていますが・・・
アルファベットばっかりでわけ分かんないですね。(^^;
0808名称未設定
03/07/31 12:11ID:ZhNM6pYt> 繰り返し気味ですが、目標は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ってことです。
(解放と言うかオーナーシップの放棄ね)
0809名称未設定
03/07/31 12:36ID:t2k0wxQA>これって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は必要な限り存在しているし
必要なくなったら破棄されるってことでやっています。
苦肉の策なのでもっと良い方法あれば私も変えたい。
0810名称未設定
03/07/31 12:46ID:6M7ykKQe質問させて下さい。
Cocoaアプリのinfo.plistのNSBGOnlyに1をセットすると
ドックにドックを表示せずに起動出来ますよね。
しかし、こうして起動したアプリケーションに対してキー入力
が出来ません。これはこういうものなのでしょうか?
例えばテキストフィールドに文字入力が出来ない。
Command + W でウィンドウが閉じない…等。
これは仕様なのでしょうか?
アプリケーションがアクティブにならないからキーイベントを
受け取れないというのであれば納得できるのですが、出来たら
受け取りたいです。良い方法は無いでしょうか?
それともバックグランドアプリで文字入力はタブー??
0811名称未設定
03/07/31 13:29ID:MA7IMiefそんなにがらっと変わったんだ。
初版買っちゃったんだよな〜。うかうかしてる間に日本語版とか出てるし(死
でもあんまたいした事なかったんだよね、あれは。
O'Reillyの新刊もそう考えるといいのかなぁ。
0813806
03/07/31 17:59ID:Z8iT+W5Zほほう、NSRunLoopが管理してたんですか。
勉強になりました。
そう特殊なことをやっているわけではないんですね。
>>809
>nibで作ったインスタンスの廃棄処理はプログラム的には気にしなくて
>よかったのですよね?
え、そうなんですか?
ウィンドウが閉じられたらnib上のインスタンスが全部解放されるとか?
(そういわれてみるといままでもそうだったのかな)
それならBをnibでインスタンス化しておいて、
FactoryClassを作成してすぐにautoreleaseで良いのかも。
作業が完了したら自分でパネルを閉じるので、
そこで(そのうち?)nib上のインスタンスは全部解放してもらえる、と。
よく分からないんで、あとでテストしてみます。
0814名称未設定
03/07/31 21:36ID:6M7ykKQeサンクスコ!
最初クラス名かと思って探しちゃいました…。
思ってた事が出来ましたよ( ´Д⊂ .... メグスリ タゾ. ゴルァ゙
0815名称未設定
03/07/31 21:59ID:uAmd+BBO>ウィンドウが閉じられたらnib上のインスタンスが全部解放されるとか?
Nibの読み込みにNSWindowControllerを使うとそうなる。
NSBundleから読み込むと自分で解放する必要有り。
……と、DevTool付属のドキュメントに有ったと思う。
0816815
03/07/31 22:03ID:uAmd+BBOこれの後半部分だね。
0817名称未設定
03/07/31 22:38ID:Z8iT+W5Zおおー、なるほど。
そういうことでしたか。
WindowControllerはまだ良く分かってないんでちょっと読んでみます。
どうもです。
そういえばヒレガス本かなんかでもこれ説明されてるんですよね。
今度立ち読みしときまふ。
0819名称未設定
03/08/01 16:50ID:7B1ZjzpRドロワーってユーザーが自由に大きさを変えられますが、これの大きさをAutoSave
するにはどうすればいいのでしょうか。
NSWindowの、-setFrameUsingNameみたいなのもないみたいですし・・。
0820名称未設定
03/08/01 21:28ID:y8unTgrE自分で保存しようよ。
大した手間じゃないし。
0821名称未設定
03/08/01 22:57ID:MbBgXFR2ProjectBuilderでプロジェクトを作らずに普通にCocoaライブラリに
クラスパスを通してコンパイル-テスト(JUnit)を行うとコンパイルは普通に
通るのですが、テスト時に _NSAutoreleaseNoPool() エラーが多数出力されます。
それでもテストには成功するのですが、精神衛生上よろしくないっす。
多分正常な(Cocoaが内部的にやってくれている)処理を踏んでいないので
起こるのだと思われます。解決方法は無いものでしょうか?
どなたか、Cocoa-Javaライブラリを作った方いましたら体験談
が聞きたいっす。
0822山崎 渉
03/08/02 02:06ID:pAaIAblN0823名称未設定
03/08/02 09:27ID:ATjiMNLT>通るのですが、テスト時に _NSAutoreleaseNoPool() エラーが多数出力されます。
よくわかりませんが、そのライブラリの入り口で
NSAutoreleasePool.push();
出口で
NSAutoreleasePool.pop();
してやればどうでしょうか?
0824名称未設定
03/08/02 11:55ID:9tDPnMYyCocoa、Carbonどっちでもいいんですが
0825名称未設定
03/08/02 18:41ID:09kWCvYPNSTaskでPingを使ってみたら?
0826名称未設定
03/08/04 11:08ID:JJk6Ww9zいつの日からかparse error before '*' と出るようになりました。
NSString *string;
NSLog(@"test");
string = @"string";
は問題ないのに
NSLog(@"test");
NSString *string = @"string";
だとエラーになります。なぜだか分かる方いないでしょうか?
0827名称未設定
03/08/04 11:29ID:TiNF3m10そういうもんです。
変数の宣言は必ずメソッドの最初でやるべき。
なぜと言われてもコンパイラのバージョンが挙がったからでないの?
別にNSLogの順番が変わったところで対した問題でも無し。
0828826
03/08/04 11:40ID:JJk6Ww9zそういうもんなんですか... いつからこうなったんでしょう。
僕みたいな初心者が参考書を見ながらプログラムする時困るんじゃないだろか。
0829名称未設定
03/08/04 12:07ID:TiNF3m10Perlとかな
0830名称未設定
03/08/04 12:16ID:y4WqvXs7> 変数の宣言は必ずメソッドの最初でやるべき。
この仕様もどうかと思うんだけどね・・
変数の宣言が集中しちゃってややこしくなっちゃう。
0831名称未設定
03/08/04 12:25ID:TiNF3m10その一時的に使うルーチンを別の処理単位に分けたほうがいいよ。
メモリの動的管理という意味からも、そのほうがいい。と、思う。
0832名称未設定
03/08/04 15:02ID:2KrYbm7Ngcc3.3 (Dec2002gccUpdater) 入れてない?
デフォルトコンパイラが gcc3.3 になってると、Project Builder が gcc2.95
を使うようになって、ISO C99 の拡張が無効になる、ということみたい。
とりあえず、
gcc_select 3
すればよい。詳しくはアップデータ付属のドキュメントを読む。
0833名称未設定
03/08/04 20:18ID:k7WfjE9dメソッドの途中でしか使わない変数は、中括弧で囲ったブロックの中に閉じこめれば
いいと思うけどな。
下手に処理単位を分けると却って引数の受渡しでごちゃごちゃする怖れもあるし、
この方法が個人的には気にいってる。
0834名称未設定
03/08/05 08:53ID:10KRv2tDTechNote 1145が参考になるかと思います。
原理はEntpointを作成してみて確認するという
無理矢理な方法で確認しています。
それか、System Configuration Frameworkのドキュメントを見て下さい。
原理はやっぱりDynamic Storeに有効なIP Addressを持つものが
あるかどうかを調べると言う、
やっぱり無理矢理だなあという方法を使っています。
Jaguarだとこれが限界ではないかと思います。
0835824
03/08/06 13:06ID:cLUQBlNuレスサンクスです&遅レスすいません
ストレートに調べることはできないみたいですねえ。
API一発で調べられるのかと思ってたんですが・・・
何も考えずとりあえずつないでみるってのが一番手っ取り早いのかもしれませんね。
0836名称未設定
03/08/06 16:18ID:JFTNy68Y初版と比べてやっぱりずいぶん分かりやすくなってますね。
Currency Converter Tutorialのくだりは初版ではわかりにくかったのが、
ずいぶん説明が整理されて、ワシのようなド素人でも
何とかなるレベルになってました。
英語で文献を読める人なら、お勧め、って感じです。
0837名称未設定
03/08/08 22:58ID:6SrqXNAY0838名称未設定
03/08/11 00:28ID:zp5/eJSH新しいウィンドウを動的にいくつも生成したいわけです。
この場合、Interface Builderではどのようにすれば、実現できますか?
同じnibファイルに新しいウィンドウとして作ると、最初からインスタンス化されたままに
なりますよね?
あと、他のアプリを覗いてたら、複数のnibファイルに別れてるんですけど、
これはどうやって読み込むんでしょうか?
0839名称未設定
03/08/11 06:35ID:Oj26dXoCプロジェクト新規作成時にDocument-basedを選べば良い。
0840名称未設定
03/08/11 07:58ID:8TwafDpy>あと、他のアプリを覗いてたら、複数のnibファイルに別れてるんですけど、
>これはどうやって読み込むんでしょうか?
NSBundleのloadNibNamed:owner:
0841名称未設定
03/08/11 11:02ID:zp5/eJSH操作用のウィンドウ(これが本体)が必要なんですよ。
そういうのって Document-basedでいけるんですかね。
0842名称未設定
03/08/11 11:44ID:4y8SFX1s0843名称未設定
03/08/11 13:36ID:Oj26dXoC所謂、「インスペクタ」だと思っていいのかな?
MainMenu.nibでユーティリティウインドウを作ってもよさげな感じがするけど。
0844名称未設定
03/08/11 16:44ID:zp5/eJSHそれっぽいです。助かります。
>>843
そうかもしれませんけど、私にはそれが何か良く分かりません…どうもすいません。
ところで、Document-basedでのアプリの作り方がまるで分からないんですが
別に使わなくても出来そうな気もします。どうなんでしょう?
0846名称未設定
03/08/11 17:41ID:zp5/eJSH今のところとりあえずQuickTime(OSかな?)が提供してくれてる画像ルーチンを
使えればいいので、Document-basedだとファイルタイプとか拡張子とか確認して登録するのが
面倒くさい分不利な気がしてきました。
ということで今回は普通のCocoaアプリとして作ったほうが面倒が少なそう…
0847名称未設定
03/08/11 17:44ID:4uyENI11QTが再生できる全フォーマット用のファイルタイプがあったはず!
でも忘れた(泣
0848名称未設定
03/08/11 18:01ID:zp5/eJSHどうでもいいけど、PICも展開できたらいいかなと思って
「PIC 稲妻展開」で検索したらX68kへの愛が感じられるテキストがヒットして
泣けてきましたよ。
0849名称未設定
03/08/12 00:12ID:lemn98gDこれはIBの仕様なのかOSの仕様なのかどっちなんでしょう?
この限界を突破してもっと小さいウィンドウを作りたいんですがどうすればいいですか?
0850名称未設定
03/08/12 04:33ID:3swArVMyそうしよう!
0851名称未設定
03/08/12 05:11ID:LIY+RbFP決まったやり方みたいなのはあるのでしょうか?
今はintValueで返って来た値をみて、0が入っていた場合や
全角の数字が入っていた場合を始めに振り分けた上で判断するしかないのかな
と思っているのですが・・・
0852名称未設定
03/08/12 06:49ID:0XfSgYbZ-(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 の使い方がいまいち分からないです。
0854名称未設定
03/08/12 07:22ID:0XfSgYbZ例えば @"10a" といった文字列の場合に YES が返ってくるような気もしますが。
0855853
03/08/12 08:10ID:XNTyuzEOYESが返ってきますね。失礼しました。
では、こんな方法でどうでしょう?
-(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;
}
0856名称未設定
03/08/12 10:15ID:I+YZR2OA何をするために判別するのでしょう?
目的によって最適な方法は変わると思いますが。
0857名称未設定
03/08/12 11:51ID:lemn98gDありがとう。できました。
ところで、Project Builderについてなんですけど、
ClassesとOther Sourcesとあって、Interface Builderから作ったソースやヘッダは
Other Sourcesに置かれるんですが、じゃあClassesには何を置くとか、そういう使い分けは
基準はあるんですか?
0859851
03/08/12 18:17ID:HHx7bqnAありがとうございます。そんな方法があったとは!
NSCharacterSetは、まったく気が付きませんでした。ドキュメント読み直さねば。
>>856
NSTextFieldの入力を見て、数字入力と文字入力の振り分けがしたいのです。
数字だった場合は、リストに登録してある番号に、その数があるかどうかを見て
あった場合は、その番号に対応する項目名を自動入力したいなーと。登録が
なかった場合は、エラーを返して入力を促します。
文字列だった場合は、リストに重複がないかを見て、新しい項目名だった場合は
追加登録するという流れです。
0860名称未設定
03/08/12 18:54ID:0XfSgYbZ一つの TextField に複数の機能を持たせた場合、
画面はシンプルになりますが、頭の中は逆に混乱してしまうので、
そこらへんを検討された方が良いのではないかとも思います。
0862名称未設定
03/08/12 21:40ID:lemn98gDえっ、そうですか?
PBから、適当なところをクリックして新しいファイルを作ると好きなところに置けますけど、
IBから(PBでMainMenu.nibをダブルクリック)だと今まではOther Sourcesにしか
ファイルが置かれたこと無いんですけど。
0863名称未設定
03/08/13 01:29ID:dO1suOK8確認のため、今試したけどIBからソース書き出しする前に
Classグループを選択しておいたら、ちゃんとそこに書き出された。
環境は?こっちは10.2.6 + Jul 2002
0864名称未設定
03/08/13 01:41ID:potkRvDlありがとう、意味が分かりますた。
何となく常にResourcesを選択していた(多分main.mがあるから)のが、
間違いの始まりだったのか…
普通に考えたら、クラスの定義するファイルなんだからClassesに置くのが当たり前ですよね。
0865名称未設定
03/08/13 02:31ID:potkRvDlやっぱりOther Sourcesに書き出される…なんでだ!?
こちらは 10.2.6 December 2002でおます。
結局生成してからClassesにドラッグしてまふ…
0866名称未設定
03/08/13 06:59ID:AAHCYJID・ファイルがエイリアスであるかどうかを判別する方法と、
・エイリアスだった場合、元ファイルのパス
誰かご教示下さい。
0867名称未設定
03/08/13 07:34ID:BXHerPj4ttp://homepage.mac.com/nathan_day/pages/source_frames.html
ttp://cocoa.karelia.com/Foundation_Categories/NSFileManager__Reso.m
0868名称未設定
03/08/13 07:56ID:BXHerPj4>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を嫌う
0869名称未設定
03/08/13 15:38ID:FOdqydDAドロップされたファイルを全部受け取りたいなら
ファイルタイプを"*"にしときゃいいだけだと思うが。
>なぜそんなにDocument-basedを嫌う
単にOSの仕組みを知らないだけだろう。
そもそもDocument-basedにしないと
DnDやファイルオープンダイアログでの
フィルタリングは効かないからな。
0871名称未設定
03/08/13 20:24ID:GR0Rf7t5> DnDやファイルオープンダイアログでの
> フィルタリングは効かないからな。
嘘。
NSOpenPanelを100回読め。
0872851
03/08/14 03:24ID:7jqNoBtbありがとうございます。そこが結構気になっている部分なんです。
ただ、同じ一つの項目を入力させるのに2つのフィールドがあるのも
混乱する所かなーと思って、とりあえず二種類作ってみることにしたのですが
いまだ結論は出ず。
0873名称未設定
03/08/14 22:15ID:XymbVs6Bなぜかファイルを選ぶとバスエラーで終了します。
キャンセルした場合は問題ない模様。
どこかおかしいところはある?
- (IBAction)openFile:(id)sender
{
NSOpenPanel *op = [NSOpenPanel openPanel];
int result;
result = [op runModalForDirectory:NSHomeDirectory() file:nil types:[NSImage imageFileTypes]];
NSLog(@"result = %@", result);
}
0874名称未設定
03/08/14 22:22ID:XymbVs6Bintにdescriptionなんて搭載されなかったよ…
0875あぼーん
NGNG0876名称未設定
03/08/16 19:17ID:K0Oq6bvQ処理を分けてるメソッドがあるんですけど、このメソッドをコードから使う方法って
ありますか?
コードから直にそのメソッドを呼び出したらsenderにtagがないことになるし、
かといって、NSMenuItemには「actionを送れ!」というメソッドもないみたいだし・・・。
おわかりの方がおられましたらお教え下さい。
0877名称未設定
03/08/16 19:37ID:6EbzeRpn-(void)setTag:(int)value; で tag の値をセットした後で
sender に呼び出し元のオブジェクトを渡しつつ NSMenuItem の action メソッドを呼ぶとか。
0878名称未設定
03/08/16 19:39ID:2hOZdQ4k-(IBAction)myAction:(id)sender{
//とかやって
[self myMessage:[sender tag]];
}
-(void)myMessage:(int)tag{
//直接こっちを呼べばいいのでは
}
0879876
03/08/16 20:02ID:K0Oq6bvQありがとうございます。
どちらもなるほどー!といった感じです。解決策は一つではないと言うことですね。
ひとまずは>>878さんの方法でいってみることにします。ありがとうございました。
0880名称未設定
03/08/17 00:03ID:cA2KncTA自分のオナニーのためだけに画像ビューアー作るよ!
0882名称未設定
03/08/18 00:05ID:QxQeZONZビユーのRect情報の取得なのですが、frameを使って取得すると、
実際のサイズより大きな情報を取得してきてしまいます。
やりたいのは実サイズの取得なのですが、どのメソッドを使えば良いのか、
探しましたが見つかりません。
インターフェースビルダーで言うところの、Layout Rectに相当する
情報です。よろしくお願いいたします。
0883名称未設定
03/08/18 00:38ID:7RxquvZG0884882
03/08/18 01:33ID:QxQeZONZ返してきたので違うのです。
もしかして一発では無理なのかもしれないのですが、どうやれば
できるのかが分かりません。
0885名称未設定
03/08/18 02:54ID:SCMqRkkU残るはvisibleRectかな
NSScrollViewに入ってるならdocumentVisibleRectやらNSClipViewのframeやら?
おいらもちゃんと理解してないですけど(´д`;)
0886882,884
03/08/18 04:08ID:QxQeZONZご紹介頂いたvisibleRectも以前試してみたところ撃沈でした。
NSScrollViewのdocumentVisibleRectやNSClipViewのframeは
相手がNSButtonなだけにダメそうです。
簡単なことのように思うのですが、なぜ一発呼び出しができないのか...
Cocoaってたまに理解に苦しむことがあります。
0887名称未設定
03/08/18 09:04ID:0rnO+OwBframeであってる。多分描画してある部分とのずれの話だと思うけど。。。
たとえば、IBでNSButtonを配置後、インスペクタのカスタムクラスを独自クラス(例えばCButton)に変更し、
@interface CButton : NSButton
@end
@implementation CButton
-(void)mouseDown:(NSEvent*)event
{
NSLog(@"Click!");
[super mouseDown:event];
}
@end
を実装してやって、ボタンの周囲をクリックしまくってみなはれ。
DevToolに入ってるPixel(だったっけ?)を起動してやると細かいところまで分かるよ。
0888883
03/08/18 09:54ID:U6ightR6NSButtonのIBでいうLayout Rectなら、frameから12ずつ引けばいいんじゃない?
Layout Rectの数字はIBがボタンの影の部分とかの大きさを抜いて、
レイアウト用に出してる数字じゃなかったっけ?
間違ってたらスマソ
0889名称未設定
03/08/21 18:38ID:rLCFQVxzNSWorkspaceのisFilePackageAtPath:で判定はできるんですが、セットの方法が分かりません。
0890名称未設定
03/08/21 22:17ID:VLE3j2+x1,info.plistの書類のタイプで「ファイルパッケージ」にチェック。拡張子を指定。
2,NSFileWrapperを使う。この時ファイルネームに1,で指定した拡張子を使用する。
拡張子ではなくファイルタイプでも行けるかもしれませんが、試してません。
0891名称未設定
03/08/21 22:55ID:Oz1Jgrhf1.setImageでNSImageを描画する
2.NSImageViewを別の場所へ動かす
3.setImageで別のNSImageを描画する
すると前(1)に描画したNSImageが残っているんです。
これを消すことはできないんでしょうか?
0892名称未設定
03/08/21 23:01ID:ZKzVSuK60893名称未設定
03/08/21 23:18ID:Oz1Jgrhfありがとうございます。なんとかなりました。いや、NSWindow側とは。。。
NSImageViewもしくはNSImageの問題だと思って、ずっと「メモリの解放なのかな?」とかうんうん唸ってました
0894名称未設定
03/08/21 23:21ID:VLE3j2+x>1.setImageでNSImageを描画する
NSImageView* target; // 既に動かすViewが入っているとする。
[[target superview] setNeedsDisplayInRect:[target frame]];
>2.NSImageViewを別の場所へ動かす。
>3.setImageで別のNSImageを描画する
この順で。
0895名称未設定
03/08/22 00:13ID:OgneJbil実はJava使いなのでObj-Cの解釈が間違っていたらすみません
NSImageViewのスーパークラスであるNSView
その中に用意されているメソッドsetNeedsDisplayInRectを呼び出している
ってことだろうと解釈しました。
で、さっそくCocoaリファレンスを見て引数など確認。
さぁ、いざ使ってみるかな。。。。「シンボルが解釈できません」
なぜ?と思い本家appleDevelopersに行ってJava用リファレンスを見てみると、
「setNeedsDisplayInRectがない!!」
>>http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Java/Classes/NSView.html#//apple_ref/doc/j_ref/NSView
Java萎え〜。残念です。
>>894さん、親切にありがとうございました。
0896名称未設定
03/08/22 00:40ID:LTbImdDlJavaの場合多分こうなります。
terget.superview().setNeedDiplay( target.frame() );
0897名称未設定
03/08/22 00:55ID:OgneJbil夜遅くなのにありがとうございます
target.setNeedsDisplay(target.frame());
でなんとか消えました。少し早くなったようです。
0898889
03/08/22 10:40ID:ThM6NSFwサンクス!
Document Basedではないので書類のタイプ設定してもどういう風に使えばいいのかよく分かりませんが、それは自分で調べます。
0899名称未設定
03/08/25 19:09ID:ju0ihoQV0900名称未設定
03/08/25 20:07ID:qK6Ad3nC// Xxxはアウトレットの名前
行けたと思うけど。
0902>>899
03/08/26 00:07ID:rV6cWmPMIBOutlet NSHogehoge *hoge;
を追加してやって、IBで読込んだらいいんじゃ?
0903名称未設定
03/08/26 03:04ID:FxHxecdd0904名称未設定
03/08/27 00:29ID:Om2pRXftNSBeep(1);
と書いてしまう....
0905名称未設定
03/08/27 00:32ID:Om2pRXft0906名称未設定
03/08/29 06:32ID:KuLaet3tしかないってことはないけど(NSImageをぺたぺたやればグラフィックはできるし)、
OpenGLを使うのはいい方法なんじゃない?
2Dでもコーツイクストリームで高速そうだしー。
詳しい人の意見も聞きたいなあ。
0907名称未設定
03/08/29 19:19ID:g3UFcZWJこの2つをプログラム内で合成したいのですが、どのような方法がありますでしょうか。
0908名称未設定
03/08/29 20:49ID:RY31j0Bk0909907
03/08/30 09:11ID:dTk5i4WIそれがわからないんです。>GRBとAをGRBAにする
RGB画像とアルファ画像をそれぞれNSImageに読み込んで
compositeメソッドで合成しようとしてるんですがうまくいきません(アルファ画像が白黒画像として解釈されてしまう)
なにか根本的に間違ってるんでしょうか。
0910名称未設定
03/08/30 23:41ID:ZaPdnmBRregex(3)を地道に使ってるけどやっぱNSStringを受けてくれる奴が欲しいです。
みんな自作してるのかな?
0911名称未設定
03/08/31 00:17ID:6hhW/fCEできるのならメソッドの書き方を教えてください。
今、とあるソフトのプラグインを書いていて
そのプラグインからWindowを呼び出したいのです。
0913名称未設定
03/08/31 01:15ID:2wCslq7m日本語の使える正規表現で困ってたけど、鬼車と自作ラッパーで
検索アプリ作れた。一度やってみなよ。
基本的な関数のみだけど、いろんな表現形式が使える。
修正BSDライセンスでGPLみたいなウィルス性はないし、フレームワークにして
思い切って公開してしまえば神になれる。
暇なきゃ必要な分ラップすればいいだけ。実用になる。
漢字コードもEUCとかUTF8とかShiftJISがあるからマジでお勧め。
0916915
03/08/31 02:08ID:6hhW/fCE書いておきますが、Carbonでwindow描くと
ホストがcocoaだからなのか虹がぐるぐる回るもんで
cocoaで描くと上手く行くかなと思って聞いてます。
0920名称未設定
03/08/31 07:12ID:cijs1LIB荻原本には書いてあるね。
ざっくり言えば、
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 から読み込むほうがスマートだとは思うけど...
0921909
03/08/31 07:49ID:OgP5ty3I解答するのもアホらしい質問なのかも知れませんが、
どこか勉強できるサイト、あるいは書籍を教えていただけませんか…
0922名称未設定
03/08/31 10:00ID:YW6hofkM具体的には、アルファチャンネル付きのNSBitmapImageRepを作成し、
bitmapDataメソッドでビットマップ情報を格納する領域の
ポインタを取得して、そこへRGBとアルファチャンネルの情報を
書きこんでいきます。
入力元の画像からBitmap情報を取り出すには、
NSBimapImageRepのinitWithData:メソッドでオブジェクトを
作成し、やはりbitmapDataメソッドでビットマップ領域の
ポインタを取得します。
作成したNSBitmapImageRepはNSImageにaddRepresentation:して
使います。
APIリファレンスの、NSBitmapImagRepの
initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerP
ixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:
メソッドの説明も参照してください。
だいぶ昔、英語サイトで画像合成のサンプルコードを見かけた事があるので、
それを見せられれば早いんだけど……。URL失念してしまいました。
0923名称未設定
03/08/31 11:24ID:2wCslq7m,.-――――――――――――-、 ダメだっ…… オレはダメなんだ……
/ \ わかったんだよ……
\ l オレには もう…… わかった…
>、 |
/―`\、 | 鬼車派には二種類ある…と
/―――u \__ |
ヽ ヽ二二ニニニヽ`ー-、_____ | ラッパーを作って公開できる奴と
n===〜=-、===============、 .| それができない奴と・・・
| |〉 i] ) u | |⌒`i .|
| | └┐r' u | |⌒`| .| オレは…… そのダメな方……
./U u`ーし‐' U .l |(^) | | …ダメなんだ…
∠__ ) O ーU-、\. .| .|___ノ |
<_____ ヽ .Vヽ | どうしてもマイナスのイメージが拭えない…
└┴┴┴┴`i l / \ | フレームワークを作ろうとしても……
┌┬┬┬rノ / \ |\ 自作アプリでは一部のメソッドしか使わない姿がちらついて……
匚 ̄ ̄ ̄ ̄u. / \/ どうしてフル機能のラッパーを作ることが出来ない………
| U u / / 今も苦悶中………
l_____/ / もう自分の必要最低限を作るのでギリギリ……精一杯なんだ………
0924名称未設定
03/08/31 11:55ID:Vck73lXlこれは関係ないかな。
http://cocoa.mamasam.com/COCOADEV/2001/09/1/11010.php
適当に検索しただけなので、ちごてたらすまん。
0925907=909
03/08/31 12:19ID:OgP5ty3Iありがとうございます!
NSImageRepresentationは勉強してませんでした。
早速勉強して参ります。
0926915
03/08/31 14:06ID:EcGR2iXP荻原本買ってきます。
0927名称未設定
03/08/31 17:46ID:oNFM+YRd遅レスだが、NSStringはUTF-8で値を持ってたと思うから、PCREにUTF-8オプションつけてコンパイルしたものがオススメ。
鬼車使ったことないから、どっちが良いとは言えないけど。
0928名称未設定
03/09/01 08:25ID:tv9M+3K2Nibから作らないとAquaにならなかったと思うが。
>917さんも書いてるけど、プラグインはBundle形式じゃないの?
0929915
03/09/01 21:12ID:mhCs1yO1レスどうも。
CocoaBundleではなくて
ライブラリーっていう形式なんですよ。
(新規ターゲットから選べるやつ)
アイコンが"B"じゃなくて"L"になってます。
この形式でCocoa.hをincludeすると、obj-cに対応してないみたいで
コンパイルすると@とか[]の部分でエラーでまくりという状態で
今いろいろためしているところです。
昨日ためした限りでは、ライブラリーだとobj-cは対応してない様子です。
CocoaBandleとは、ライブラリーとはなんぞや?
というのを調べてみます。
0930名称未設定
03/09/01 22:13ID:0GgUF9oIえーと、Project BuilderがObj-Cに対応したコンパイルを
行なってくれるかどうかは、ソースファイルの拡張子で決まっていたはず。
問題のソースファイルの拡張子が".c"になってませんか?
".m"またはC++を併用するなら".mm"に変更してください。
0932915
03/09/01 23:41ID:mhCs1yO1僕もそんな気がします。
ソフトは・・秘密にしておきますw
すいません。
>>930
mmにしてます。
エラーが出るのは上記問題のような気がします。
しかし、OSXのプログラミングはおもしろいですね〜
0933915
03/09/02 01:15ID:kZybqWeV結果報告。
コンパイルに成功し、読み込みもうまく行きました。
windowの表示はできませんでしたが・・w
(表示しようとはしているようです。読み込み時HOSTが重くなりました。)
どうもwindow描画のメソッドがおかしいようなので
荻原本見て勉強します。
あと一歩〜
0935名称未設定
03/09/04 16:24ID:D/ixHjRkキューは
enum {
queueIsEmpty,
queueHasSpace,
queueIsFull,
};
という3つの状態を持ってます。
状態が2つなら、NSConditionLockを使えば簡単に排他制御が出来るのですが、
3つの状態を持つ場合にどうやれば排他制御が出来るのかが分かりません。
キューの容量を変化可能にすればqueueIsFull状態を無くすことは出来ますが、
動作が重くなってしまうので出来るだけ避けたいです。
よろしくお願いします。
0937935
03/09/04 20:04ID:U2TVQR+Mありがとうございます。ちょっと考えてみます。
>935 ちょっと条件が足りなかったので付け加えます。
Queue* queue;
id data = [queue dequeue]; // queueIsEmptyならデータが入るまでwaitをかける。
と、
[queue enqueue:data]; // queueIsFullなら空きができるまでwaitをかける。
です。
よろしくお願いします。
0938935
03/09/05 00:11ID:d4S07o8T考えてみましたが、デッドロックが発生しない方法を思い付けませんでした。(泣
とりあえず、queueIsFull状態をなくして、キューがいっぱいのときは例外を投げてごまかすことにします。
このすれは毎日チェックしてますのでどなたか良い方法があれば教えて下さい。
0939名称未設定
03/09/05 00:56ID:KCe4m5Xn「なんとかピーク版とかいうのはいいから、リリース版を出してほしいなぁ」
というのが、今望んでいることだったりする。
でもまだ開発調整中だったらごめんなさい。
開発版をsourceforgeではなく2chで議論することに疑問を感じるところではあるけど…
0940名称未設定
03/09/05 01:01ID:KCe4m5Xn0941名称未設定
03/09/05 01:40ID:ezIjTJMK0942a beginner
03/09/05 09:50ID:BA/i6WJ9それはクラシック環境でも動くのでしょうか?
よろしくお願いします。
0943a beginner
03/09/05 09:53ID:BA/i6WJ9ココアでクラシックで動くアプリがいちから作れるか、ということです。
0944935
03/09/05 12:38ID:BOUxdYER残念ながらCocoaはクラシック環境では動きません。
Carbonで作成したとしてもProject BuilderがCFMバイナリを生成できませんので、
やはりクラシック環境での動作は出来ません。
古いCodeWarrior等を使ってCFMバイナリを作れば
Nib+Carbonでかつクラシック環境で動作するアプリケーションが作成可能です。
(最新のCodeWarrioirはMach-Oバイナリしか生成できません)
0945a beginner
03/09/05 18:09ID:BA/i6WJ9丁寧なレスありがとうございます。
クラシック用アプリの開発環境は現行ではREALBasicぐらいということでしょうか。
0946名称未設定
03/09/06 01:09ID:VHHJOKZJ> 最新のCodeWarrioirはMach-Oバイナリしか生成できません
間違い。
http://www.metrowerks.com/MW/Develop/Desktop/Macintosh/Professional/mac9
0947び
03/09/06 02:31ID:AT0Bahd7アプリケーション独自形式のデータをファイルに書き出す方法を
だれか教えて。
入門書だと、ドキュメントベースにしてテキストを出し入れする
例題ばっかで、document.nibが無い例が無い。
ググッてみても、さっぱりわからん。
デバッグのことを考えて、テキストコメントとデータで
セーブデータを作るつもりなんだけど
変にCocoaにコダワリすぎ?
0948名称未設定
03/09/06 02:54ID:sLyZd4pI0949び
03/09/06 03:48ID:AT0Bahd7たった今までNSDataはNSDocumentの継承だと勘違いしていた、、、
調べなおしてみます。
Cocoaはやっぱりワカンネー
0950名称未設定
03/09/06 09:14ID://38hyxlセーブデータを格納するオブジェクトを作って、
それにNSCodingプロトコルを実装させる。
ここが参考になるかと。
ttp://www.stripe-net.jp/cocoa/cocoa/foundation3/foundation3-2.html
0951944
03/09/06 09:20ID:2vqBcRYB指摘ありがとう。
http://www.metrowerks.co.jp/Products/Desktop/MacXE.html
これが最新版だと思ってた。機能限定版だったのね。
0952名称未設定
03/09/08 02:35ID:oYdQ9pyGサンプルコードさえあれば後は自学自習しますんで
0953名称未設定
03/09/08 02:39ID:CXbuqi0Zフーリエ変換とかでいいの?
0954952
03/09/08 02:41ID:oYdQ9pyGアフィン変換で、例えば台形をした画像を、正方形に変形する事はできるのでしょうか?
0955952
03/09/08 02:50ID:oYdQ9pyGフーリエ変換でということは、画像の周波数成分から特定の値をとるとか
フォトショップのフィルタみたいなってことですかね?
フォトショップの編集メニューにある自由変形みたいなことがしたいのです。
0956名称未設定
03/09/08 02:51ID:R+3AwMjPむしろ、台形かどうかを判定する方が難しいような。
変形は簡単にできるけど。
http://developer.apple.com/samplecode/Sample_Code/Cocoa/Transformed_Image.htm
0958び
03/09/09 00:58ID:+nwA3XPkThanxすこしだけ進んだけど、やっぱり詰まってしまった。
たとえば、任意バイナリを読むときに
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の所でファイルサイズの分だけコピーするにはどうしたらよいのでしょ?
0959名称未設定
03/09/09 02:05ID:pZuWLBw75でinit...の返り値を受け取ってないよ(NSDataはクラスクラスタ)。
>あと、3の所でファイルサイズの分だけコピーするにはどうしたらよいのでしょ?
- [NSData length]でバイト数がわかる。
てか、NSMutableDataで読み込んで、[NSMutableData mutableBytes]使えば?
0960名称未設定
03/09/09 02:14ID:HE6It75g・画像サイズに合わせたサイズになる
・画面サイズ以上に大きくはならない
という動作をさせようと思うんですけど、画像のサイズはともかく、
画面のサイズはどうやって入手したら良いんでしょうか?
0961名称未設定
03/09/09 03:22ID:oKY8amQK文字列定数にメッセージ・・・んなら、いっそのことパスをまんま書いちゃえば
0963名称未設定
03/09/09 08:11ID:iK3vNGeB>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];
とするべき
0964名称未設定
03/09/09 09:00ID:KiEjpc+9>963に関して。
前半はまあ、ありではあるよね。ただし、オートリリースされないけど。
でも後半は完全にダメだよね。
例えばこういう実装もありなのよ。
-(id)init
{
[self release]; // 自分自身を解放。
return [[MySubClass alloc] init]; // サブクラスのインスタンスを返す。
}
NSDataとかNSStringとかのクラスクラスタは上の様にinit...で
必ず自分のサブクラスのインスタンスを返します。
ですから、必ずinit...メッセージの返値を受け取らなくてはいけません。
2,の場合は、init...で解放される一時インスタンスに対してオートリリースをかけて、
実際に使用されるインスタンスにはオートリリースが掛かってませんから、リークします。
0966び
03/09/09 12:41ID: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"が刺さらんか)
0967名称未設定
03/09/09 13:40ID:at1cWoqCPowerBookにしる。
0968967
03/09/09 13:41ID:at1cWoqC○iBookだとHDDが
0969名称未設定
03/09/09 14:22ID:KiEjpc+9> 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のサブクラスじゃ!
つうことです。
0970Kusakabe Youichi
03/09/09 23:01ID:aGXZMgFL ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
ヘ_ヘ ) (´⌒(´
ミ ・ ・ ミ ) (´⌒(´
( ° )〜≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0971名称未設定
03/09/09 23:45ID:pN8SOKiOttp://www.fastwave.gr.jp/diarysrv/trinity/200309a.html#20030909-2
0972名称未設定
03/09/10 01:25ID:Y8g7Iah+「動的確保したメモリブロックはfreeで必ず解放せよ」って言いたいのかな?
/*
MLでこの話題が出ると果てしなく荒れ続けるよなw
メモリブロックからOSの実装まで発展して不毛極まりない論争になる。
これと双璧を成す起爆剤トピックが「fopen後は必ずfclose」
*/
0973名称未設定
03/09/10 01:46ID:3gJ2qtrWAutoreleasePoolは{}による変数のスコープとは別のオブジェクトのライフタイムのスコープを導入する。メソッドの戻り値を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
ってこんな感じであってる?
0974名称未設定
03/09/10 02:36ID:Ipd3Rmyd導入部は別に間違ってないと思う。
オーナーシップに関する理解がなければ簡単にリークしちゃうと思う。
メソッドの戻り値のオーナに関して明記されてないとあるが実はキチンと明記されている。
ここ
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_4_section_2.html
#ここには>966氏が理解してない +alloc... と -init... が不可分であることもきちんと明記されている。
御覧の通りこれはObjective-Cのお勉強の資料です。
彼はObjective-Cのお勉強もしっかりやらずにうんちく垂れてるわけですね。
0975974
03/09/10 02:49ID:Ipd3Rmyd>966氏はよく見たらすごいことやってるな。
NSDataを確保して、初期化して、自動解放して、初期化したわけか。。。
ここまできたら、もう一回自動解放してみるのがいいかも。。。
0976名称未設定
03/09/10 14:31ID:HRQvxoap自分が生成したオブジェクトは自分で削除する。
自分が生成したのでないオブジェクトをランループを超えて
保持し続けたいのであれば、retainする。
retain(かalloc)したオブジェクトのreleaseは忘れない。
retainしていない(かallocしていない)オブジェクトはreleaseしない。
自分でreleaseできない場合や他のオブジェクトなどへ渡す場合には
autoreleaseする。
つまり、他のオブジェクトメソッドの返り値で受け取ったオブジェクトは
factoryメソッドなどの明示されている場合を除き、autoreleaseされて
いると思ってつかう。
このサイトの作者はまだオーナー湿布ポリシーを理解していない。
0977名称未設定
03/09/10 16:48ID:neWZY+QAオブジェクトはかならず
myObj=[[[Obj alloc] init] autorelease];
で確保して、
欲しくなったら必ずretain、releaseするっていうのが
よく分かってない人(例えば>971氏)には分かりやすいんじゃないか?
分かればそんな難しいもんじゃないんだけどね。
0978名称未設定
03/09/10 18:05ID:IcsQ4bO0JavaにはGCがあるし、C++ではスタックオブジェクトやスマート
ポインタを使えばオブジェクトの廃棄は自動的に行われる。
これに対しAutoreleasePoolを使った手動参照カウントはプログ
ラマが考えて参照カウントを調整しないといけない。
> 自分が生成したオブジェクトは自分で削除する。
> 分かればそんな難しいもんじゃないんだけどね。
はJava/C++の自動廃棄に比べてミスの危険が常に付きまとう。
AutoreleasePoolはお手軽だけど古くさい仕組みだということ
0980び
03/09/10 21:43ID:GbQyCWIJ>967
G3 or G4よりもHDDか。
FirewireDiskを増設すれば改善する?とかちょっと思ったけど、
テンポラリファイルは結局システム側なのでダメポ。
新型も待ちたいけれど、我慢できないぽい。
>969
スンマセンでした。参考になります。
NSMutableData ドキュメント読んでます。
>975
理解してないのはメモリ周りだけじゃないってことで。(T_T)ノシ
たとえば、
-(NSString *)description
{
NSString *result=[[NSString allloc] initWithFormat:@"=%d",Number];
[result autorelease]; //releaseが必要
return result;
}
-(NSString *)description
{
return [NSString stringwithFormat:@"=%d",Number];//自動解放される
}
と言われても、何をたよりに区別していけばよいやらさっぱり
0981名称未設定
03/09/10 22:03ID:jwKs/3Mbコードを書いて動的に列を追加するにはどうしたら出来るのでしょうか?
0982名称未設定
03/09/11 00:21ID:RKqJ6G2Xhttp://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Protocols/NSTableDataSource.html#//apple_ref/occ/cat/NSTableDataSource
0983982
03/09/11 00:26ID:RKqJ6G2X列は
- addTableColumn:
- removeTableColumn:
- moveColumn:toColumn:
- tableColumns
- columnWithIdentifier:
- tableColumnWithIdentifier:
あたりか。
前にとりあえず試しただけで実際に実用品を作ってるわけじゃないから
いいかげんだけど。
0984警戒宣言
03/09/11 01:28ID:aG4bViZS0985名称未設定
03/09/11 12:10ID:uv6x7W5ballocを使って生成したオブジェクトは自分がオーナーなので、いらなくなったら解放する>NSString *result=[[NSString 『allloc』] initWithFormat:@"=%d",Number];
allocを使わないで生成した(正確には生成してもらった)オブジェクトは自分がオーナーではないので、解放する必要はない
>return [NSString stringwithFormat:@"=%d",Number]
あるオブジェクトを使用し続けたい場合はretainして、いらなくなったらreleaseする、っていうのは理解してるよね?
allocで生成するとすでに一度retainされている状態なので、いらなくなったらreleaseしなくてはいけないということ。
stringwithFormatの方はNSStringクラスがallocで新しいオブジェクトを作ったあと適当なタイミングでautoreleaseしているので、retainされていないオブジェクトが出てくるという感じかな。
基本的には
allocの回数+retainの回数==releaseの回数+autoreleaseの回数
でメモリリークはないことになる。
と思う。
0986び
03/09/11 22:29ID:VdM09J4Kメモリ管理の基本がなんとなくあやふやな理解なので、
さらっと
NSString *result=[[[NSString allloc] stringwithFormat:@"=%d",Number] autorelease];
とか書いてしまいがちなうっかりさんということなのでつ。
0987び
03/09/11 23:23ID:UFMc21xHCocoaはやっぱり!を見て真似してソフトを作ったは良いが、
オリジナルを作ろうと思ったら、全然その先に進めない人集まれ!
親切なプログラマーさんが暇なときだけ教えてくれてる(よね?)
前スレ
Cocoaはさっぱり! http://pc.2ch.net/mac/kako/1007/10076/1007632025.html
Cocoaはさっぱり!version:2 http://pc.2ch.net/test/read.cgi/mac/1007632025/l50
関連スレは >>2
プログラム関連スレ
Macでプログラミング{3} http://pc.2ch.net/test/read.cgi/mac/1049070432/
MacでC言語 http://pc.2ch.net/test/read.cgi/mac/1048587374/
MacOSX Java総合スレッド http://pc.2ch.net/test/read.cgi/mac/1047361032/
「AppleScript,Perl,Shell」OS Xでスクリプトスレ http://pc.2ch.net/test/read.cgi/mac/1055091471/
Mac OS XをUnixとして使ってる人の為のスレ その5 http://pc.2ch.net/test/read.cgi/mac/1055874672/
XCode �A http://pc.2ch.net/test/read.cgi/mac/1061702196/
参考リンク
HAPPY Macintosh Developing TIME!
ttp://homepage.mac.com/mkino2/
Cocoa Developer Documentation
http://developer.apple.com/documentation/Cocoa/Cocoa.html
file:///Developer/Documentation/Cocoa/CocoaTopics.html
Cocoaはやっぱり!
ttp://www.big.or.jp/%7Ecrane/cocoa/
0988び
03/09/11 23:31ID:uK94yB1o繋ぎ変えてもだめぽ。
スレたて、だれかおねがいします。
0989名称未設定
03/09/11 23:40ID:RKqJ6G2X0990名称未設定
03/09/11 23:43ID:RKqJ6G2X0991名称未設定
03/09/12 00:00ID:QACoJ0KQ0992名称未設定
03/09/12 00:41ID:8ue/kw6d0993992
03/09/12 00:52ID:8ue/kw6dCocoaはさっぱり!!! Version.3
http://pc.2ch.net/test/read.cgi/mac/1063295248
レス数が950を超えています。1000を超えると書き込みができなくなります。