Cocoaはさっぱり!!! v ..
2:名称未設定
09/01/13 22:28:24 TtNlCCCM0
関連スレ
Macでプログラミング{9}
スレリンク(mac板)
MacOS XをUnixとして使ってる人の為のスレ その14
スレリンク(mac板)
Xcode part7
スレリンク(mac板)
MacでJava その4
スレリンク(mac板)
RubyCocoa 初心者質問【Leopardバンドル記念】
スレリンク(mac板)
AppleScript アップルスクリプト 質問、発表 3
スレリンク(mac板)
3:名称未設定
09/01/13 22:39:37 TtNlCCCM0
関連追加
iPod touch/iPhone ネイティブアプリ製作 ver.8
スレリンク(mac板)
Objective-C [ObjC part:3];
スレリンク(tech板)
4:名称未設定
09/01/13 23:08:47 H0hDNQK00
Web
Cocoa wiki
URLリンク(cocoawiki.aerial.st)
ADC
URLリンク(developer.apple.com)
CocoaDevCentral
URLリンク(cocoadevcentral.com)
CocoaDev
URLリンク(cocoadev.com)
Cocoa Blogs
URLリンク(cocoablogs.com)
Cocoaはやっぱり!
URLリンク(www.big.or.jp)
HMDT
URLリンク(homepage.mac.com)
OOMORI.com - Cocoaリファレンス
URLリンク(www.oomori.com)
Cocoa Study Blog
URLリンク(blog.cocoa-study.com)
Cocoa Break!
URLリンク(park15.wakwak.com)
Cocoa Bindings Examples and Hints
URLリンク(homepage.mac.com)
Cocoaで遊ぼう!!
URLリンク(homepage.mac.com)
itok's Lab
URLリンク(110k.net)
Vacuous Virtuoso
URLリンク(lipidity.com)
MOSA テクニカルドキュメント
URLリンク(www.mosa.gr.jp)
5:名称未設定
09/01/14 01:13:18 bEd33IEe0
>>1
(・ω・`)乙 これは乙じゃなくてポニーテールなんだからね!
6:名称未設定
09/01/14 01:51:20 zQKDdF+j0
>>1
ポニーテール!
7:名称未設定
09/01/14 16:52:14 2Od3YeYO0
,,,,,,_
,,,,,iiiilllllllllllllliii,,,,
,,,,,_ .,,,,,,,,,,iiiiiiillllllllllllllllllllllllllllllllllll丶
゙llllllllliiillllllllllllllllllllllll!!!!llllllllllllllllllllllll!!゙
゙!llllllllllllllllllll!!!゙゙゙° ,,illllllllllllllllllll!゙゜
゙!lllllll!!l゙゙’ .,,illlllllllllllllll!!゙゜
^ .,,illllllll 山
,,illlllll iiiiiiiiiiiir
,,illllllllヽoOOO''o_-
,,illlllllll( <:::::::乙::::::::>ヽ
,,illllllllll!/ ,|:::::::::::::::::|ヽ ゝ
,,illllllllll!゙ ,< )ヽ,━./ ( / liiii,,
,,illllllll!゙゜ ,lヽ i /::::::::::::::ヽ i .r 'llllllli,,
,,illllllll!゙ !!|;;;;;;;;;;;;;;;;;;;;| !!, lllllllllli,,
,illlllllll゙ |::::::::∧::::::::| ,lllllllllllllii,
llllllllllli,_ .|::::::::| |::::::::| ,,,,illlllllllllllllllli, こ、これは>>1乙じゃなくて
!llllllllllllllliiiiiiiiiiiiii,,,|::::::::| |::::::::|llllllllllllllllllllllllllll 瞬獄殺なんだから
゙゙!!llllllllllllllllllllllllll|::::::::|. |::::::::|lllllllllllllllllllllllll 変な勘違いしないでよね!
゙゙゙゙!!!!!!llllll_ ノ;;;;;;;;r. |::::::::レ_lll!!!!!!!l゙゙゙゜
'ーー" "ーー'
あと、ヘボい質問なんですがcocoaアプリから別のアプリを実行した時にそのアプリがアクティブになりますよね?
その後、元のcocoaアプリをアクティブにしたいのですがどうしたらよいのでしょうか…
8:名称未設定
09/01/14 16:58:22 2Od3YeYO0
自己解決しました(´・ω・`)
スレ汚してすんません…
9:名称未設定
09/01/14 19:35:07 P+BRcwQe0
解決方法はどんなときでも晒しといた方が
同じ問題にぶち当たった人のためになると思う
10:名称未設定
09/01/15 01:00:17 N5HZEMqr0
そろそろ確定申告の事を考えないといかん時期だな。
11:名称未設定
09/01/15 01:03:14 N5HZEMqr0
盛大に誤爆ったorz
12:名称未設定
09/01/15 01:09:22 upzL9L0e0
MORINAGAの人?
13:名称未設定
09/01/16 22:20:19 z0eHNRBe0
ここにいる方々は、普段どんな仕事をしてるんですか?
14:名称未設定
09/01/16 22:43:09 //jRGAOJ0
底辺プログラマ
15:名称未設定
09/01/17 14:18:31 w58sAeN+0
他人の書いたプログラムの虫取り(´;ω;`)
16:名称未設定
09/01/17 16:59:24 FvBk0qG30
ぶっちゃけ今はiPhoneぐらいだもんね。飯の種は。
cocoaで便利なアプリを作っても金を出してまで買ってくれる人はそんなにいなさそう。
17:名称未設定
09/01/17 18:09:22 nxgihjOe0
Cocoaでエロゲつくればドザが釣れるかも試練
18:名称未設定
09/01/17 19:24:02 /MEyp2B50
あんなもん画像に合わせて音とテキスト流してるだけだから
作ろうと思えばすぐに作れるだろうな。
19:名称未設定
09/01/17 20:32:16 b7hUTCNO0
CoreAnimationまわりのフレームワーク使ったらかなり楽に作れる気はする。
紙芝居的なシロモノだが。
20:名称未設定
09/01/17 21:04:09 j2Iu8BFS0
>>19
Flashでええやん、紙芝居ならw
もうすっかり忘れちまったよObjC
21:名称未設定
09/01/17 21:46:34 8QKDDPhx0
>>20
よく考えたら、Windowsのエロゲ程度ならFlashで
作れそうだよな。
22:名称未設定
09/01/17 21:49:12 fqNr3t6F0
Cocoaで書けばAppstoreで金儲け
23:名称未設定
09/01/18 03:27:46 qnipeswc0
日本のエロゲー文化が世界に進出する瞬間だな。
24:名称未設定
09/01/18 04:06:37 0BtTldEf0
>>22,23
エロが入るかどうかは知らんが
MOONSTONEがiPod touch/iPhone版Giftを開発中らしい。
が、去年の最初の発表以降情報がないようで(´・ω・`)
25:名称未設定
09/01/18 04:27:33 9Du8SxzA0
あなたの時は止まったままですか?
とっくに出てるみたいだけど>Gift
26:名称未設定
09/01/18 04:43:16 qnipeswc0
URLリンク(www.moon-stone.jp)
2009.01.13 Gift iPhone/iPod touch版発売!!
27:名称未設定
09/01/18 07:56:36 0BtTldEf0
>>25,26
なんと!
MOONSTONEは積極的だな。
そのうち冗談抜きでMac版が来そうだw
でもその前にGiftの製品ページ更新しようよ(´・ω・`)
28:名称未設定
09/01/18 10:45:01 tC3ieAbi0
iPhoneアプリをマックアプリに移植なんて簡単でしょ
29:名称未設定
09/01/18 11:20:11 b8XPQbTx0
なら、Macに移植する仕事すれば儲かるんじゃね?
30:名称未設定
09/01/18 11:23:24 tC3ieAbi0
アップルがMacAppStoreを始めればいいのに
31:名称未設定
09/01/18 11:29:39 630p3L3w0
携帯以外のプラットフォームで
ぽっと出の会社が出しても赤字にならないソフトって
そもそもあるか?
32:名称未設定
09/01/18 11:31:46 BqFofErM0
MoonStoneなんて、25年待ったって出やしねぇよ!
33:名称未設定
09/01/18 12:40:30 x/r4yEXa0
なぜ25年なのか気になる
34:名称未設定
09/01/18 13:35:55 pcVVaY0/0
石の上にも25年
35:名称未設定
09/01/18 15:07:01 lpSD9VBZ0
XcodeでVisual Studioみたいに例外が投げられた時点で自動的にブレークするにはどうしたらいいですか?
36:名称未設定
09/01/18 15:25:57 lfTHOEWB0
スルー&キャッチ
37:名称未設定
09/01/18 15:39:47 lpSD9VBZ0
スルーじゃなくてスローですよね。
でもそれだと、どこから飛んできたかが分からないのですが。
38:名称未設定
09/01/18 15:40:51 qnipeswc0
スローで投げるオブジェクトで区別したら良いじゃん。
39:名称未設定
09/01/18 15:57:46 lpSD9VBZ0
それって大きなプログラムのどこで飛ばしているか、誰が飛ばしているか(自分が発行していない場合もあり得る)
が、分からない状態だと手当たり次第にprintfを挟むのと大して違いがないと思うのですが。
質問の答えとしては「自動的にはブレークできない」ということなんですかね。
40:名称未設定
09/01/18 16:03:34 qnipeswc0
スローしたら自動的にキャッチに飛ぶわけだから・・・
キャッチがループ外にあれば、自動的にブレイクするでしょ。
まぁキャッチそのものの定義がループ内にあったらブレイクしないけどね。
明示的にブレイクする必要はある。
41:名称未設定
09/01/18 16:10:41 qnipeswc0
40だけど、自分で言っててなんだけど、
キャッチをループ内に定義するなんてありえないよね・・・・?やるの?
それにどこから飛んできたか分からないっていうなら
dictionaryを放り投げれば良いじゃん。
キーでどこから投げたのかとかいろいろ情報を区別できるんだから。
42:名称未設定
09/01/18 16:17:18 lpSD9VBZ0
んーと、イベントとか読み書きとか不確定要素が多くて
どこで起きてるか、何が飛んでくるか分からない場合に
少ない手順で発生源を知る方法はないという事ですよね?
極端な話、存在しうる全ての例外を知っていたところで
main()
{
try{
func();
}catch(e_a & e){
}catch(e_b & e){
}catch(e_c & e){
...
...
...
}
}
って全部羅列してられないですし、補足できてもbad_allocみたいな一般的なものだったら
どこで起きてるか全く分からないですし、
例外が起きる行を絞り込んでいって、その行にブレークポイントを置かないと
例外が起きている状態のコールスタックと変数は分からないわけで。
43:名称未設定
09/01/18 16:20:18 lpSD9VBZ0
連投すみません。
dictionaryをどこに設置するかをどうやって決めるのですか?
44:名称未設定
09/01/18 16:30:57 qnipeswc0
URLリンク(wwwa.dcns.ne.jp)
例外の生成
Objective-Cにおける例外の生成は、NSExceptionのオブジェクトにより行われます。
以下の例では、resultが-1だった時に、@"FooException"という名前を持つ例外をあげています。
- (void)foo
{
if (result == -1) {
[[NSException exceptionWithName:@"FooException"
reason:@"Result returned -1.."
userInfo:nil]
raise];
}
}
この例から類推できるように、CocoaのObjective-C環境における例外クラスはNSExceptionだけで、
Javaがさまざまなサブクラスによって例外を区別しているのとは、趣が違います。
どの例外があがったかを知るには、NSExceptionに設定された例外名などの情報を判定する必要があります。
システムであらかじめ定義された例外名には、以下のものをはじめいろいろあるので、
判定にはそれを使うこともできます。また、自分で例外名を定義する場合は、
頭に"NS"をつけるのは止めましょう。
45:名称未設定
09/01/18 16:32:15 qnipeswc0
>>42
44でuserInfoにdictionaryを設置する。
46:名称未設定
09/01/18 16:34:41 qnipeswc0
45は全然、43の答えではないな。
43は具体的にどういうこと?
47:名称未設定
09/01/18 16:45:28 lpSD9VBZ0
dictionaryの設置箇所が分かっているなら既に当たりを付けた後じゃないかなと。
無論、最初から全ての箇所でdictionaryを投げるように書いておけばいいんでしょうけど。
あと、C++を使う事の方が多いので42ではbad_allocと書きましたが
NSExceptionにしたってシステムが出す例外は場所の特定がしづらいですよね。
48:名称未設定
09/01/18 16:50:14 qnipeswc0
システム自体が出す例外ってかなり特殊ですよね・・・・。
僕もこいつらがどんな例外情報を送ってれるのかしらないけど、
nameとかresonとかだけでは特定できないのかな?
49:名称未設定
09/01/18 16:53:13 xDMM8zcg0
流れがよく分からんが、-[NSException raise]にブレークポイントを設定するんじゃ駄目なの?
50:名称未設定
09/01/18 16:54:18 lpSD9VBZ0
!!
51:名称未設定
09/01/18 16:58:06 qnipeswc0
>>49
そんなクラスメソッドなんてあったけ?
raiseって例外を明示的に発生させるインスタンスメソッドだよね。
+ raise:format:
+ raise:format:arguments:
どちらかと勘違いされているのですか?
52:名称未設定
09/01/18 17:01:46 xDMM8zcg0
>>51
…シンボリックブレークポイント使ったことないのかな?
(特定のクラスの)特定のメソッドが呼ばれたときにブレークするには、シンボリックブレークポイントの追加でこういう風に入力するの。
インスタンスメソッドなら-、クラスメソッドなら+。
53:名称未設定
09/01/18 17:02:08 lpSD9VBZ0
今更過ぎですが>>49を呼んで試してみたらNSExceptionはobjc_exception_throwを呼んでいて、
こいつは__TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__を呼んでいて、
その中でint3(ブレーク)してますね。
つ、ついでにC++で自動的にブレークする方法も分かったりしないでしょうか?
スレ違いかな。
54:名称未設定
09/01/18 17:06:52 lpSD9VBZ0
メニューの[実行]->[ブレークポイントを管理]->[C++ 例外のブレークポイントを追加]ダイアログで
[すべての例外]というチェックボックスがありました。
大変お騒がせし、スレを汚してしまい申し訳ありませんでした。
でもこの一連の流れのおかげでNSExceptionとXcodeの理解が深まりました。
55:名称未設定
09/01/18 17:12:01 qnipeswc0
>>52
へぇー、今度試してみます。
cocoa referenceで
breakはインスタンスメソッドで例外にジャンプするってあったから
なんでクラスに対してメッセージを送信するんだろうって思いました。
それならクラスメソッドの以下のメソッドじゃないのかって・・・・。
56:名称未設定
09/01/18 17:14:07 qnipeswc0
55、breakじゃなくてraiseですね。
これクラスにいっぺん送ってみます・・・・。
質問主さんは解決されたみたいだけど、僕は?????状態っす。
57:名称未設定
09/01/18 17:32:11 xDMM8zcg0
>>55,56
あ、いやこれメソッドの実行じゃないのよ。
特定の関数とか特定のメソッドを呼び出したところでブレークするために、
自分で書いたソースコードの行とかじゃなくて、関数名やメソッド名そのものをブレークポイントとして使うの。
「実行」>「ブレークポイントを管理」>「シンボリックブレークポイントを追加」して、ダイアログに入れる内容が>>49。
デバッガとしては多分そのメソッドの名前、クラス、クラスメソッドかインスタンスメソッドかどうか、の情報があればいい。
それを指定するための文法が>>49みたいになってるってだけで、Obj-Cの文法とは別。
ていうかXcodeのマニュアルちゃんと読もうぜ皆。
58:名称未設定
09/01/18 17:49:23 qnipeswc0
>>57さん、ありがとう。
そうなのか。
結構ブレイクポイント使用するけど、そこまで考えたこと無いわ。
で、その回答で質問主さんが解決された意図がわかりました。
デバック目的で例外処理を利用しようとしていたんですね。?
それで、スローで投げてきても「発生源がわからない」、これなんとかならんのか?
42のように細かく書かんといかんのか?ってことになっていって
で、>>49で「いやブレークポイントを設定すれば、エラー発生時にどこでエラー発生しているか
わかるでしょって」ことで
>>50で解決したのか・・・・・・・・・・・・・・・・。
そうですよね?
59:名称未設定
09/01/18 18:03:01 lpSD9VBZ0
いえ、多分最初の理解で合ってるんじゃないかと思います。
デバッグのために今から例外投げるプログラムを書くのであれば
printfを挟むのに感覚が近いですがそうではなくて、
もともとあるプログラムのどこからか例外が投げられた時に
そこで止まってくれないかな、というのが元々の発想です。
で、NSExceptionは特別な事をしなくても勝手に止まってくれるようになっていましたので
多分-[NSException raise]をブレークポイントに追加しなくてもいいはずです。
C++は>>54をONにする事で勝手に止まるように出来ました。
60:名称未設定
09/01/18 18:05:06 lpSD9VBZ0
>>58が発生源が分からないエラーの発生場所を特定するという理解
をしていただいたのであれば、その通りです。
61:名称未設定
09/01/18 18:13:17 ZuNSxY880
なんだこのグダグダな流れ...
>>57
>ていうかXcodeのマニュアルちゃんと読もうぜ皆。
そういう自分も Leopard 上のマニュアル(リリースノート)を読んだ方がいいな。
Leopard を使ってないなら仕方ないかもしれんが。
62:名称未設定
09/01/18 18:46:39 xDMM8zcg0
>>61
-[NSException raise]だと@throwで投げた例外はキャッチされないからobjc_exception_throw使えってことか。
サンクス。
63:名称未設定
09/01/18 20:30:54 kMPqyzsk0
久しぶりにCocoaを触ってCoreDataとか新しく追加されたAppkitとか触ったら
昔何日も徹夜して作ったようなものがコード一行もなしに動いて
秋葉原で涙する元KGBスパイみたいな気分になった。
64:名称未設定
09/01/19 01:07:41 QeooMR930
Key pathとかkey-value observing面白そうだけど何しているのかいまいちしっくりこない。
これあえて自分で使う事ってあるのかな?
65:名称未設定
09/01/19 01:22:16 WxEnXMt70
同じようなことを実現するだけなら自前でももっと簡単なやり方があるだろうけど
大枠をbindingで作ってる場合、細かくいじる必要がある自作クラスを
key-value-coding準拠で作っておけば、全体のbindingの連携に組み込めるという話
66:名称未設定
09/01/19 01:36:07 QeooMR930
なんとなく分かったような気がします。でも自分の書いているどんな処理をあえてそれに
当てはめた方がよいかと考えるとあまり思いつきませんけど。理解しなければCocoa
プログラミングできないというものでもなさそうなのでしばらくはスルーしておいても
良さそうですね。
67:名称未設定
09/01/19 01:41:12 9T/jZU8v0
bindingで一番効果が発揮するのはtableViewかな。
ぶっちゃけIBだけでコーディングできるし。
これを知ったとき、あのデータソースをつかって、
どうやって目的のセルに値を表示させることが出来るのか格闘していた自分が
惨めにおもえた。
このときの経験は、後々すごく役にたったけど。
68:名称未設定
09/01/19 01:53:58 k1KJxZ8q0
便利だけど確かBinding、ていうかNSArrayControllerがスレッドセーフじゃないから困ったこともあるなぁ
あと、いろいろ自動でやってくれる新しいAPIって便利だけど重いんだよなぁ
69:名称未設定
09/01/19 03:24:53 9T/jZU8v0
たしかに、間に余分な物をはさむ分遅くなるしね。
70:名称未設定
09/01/19 14:52:03 j0GQl9c30
ところでみんなNSArrayとSTL、どういう使い分けしてる?
STL一切使わずNSArrayをサブクラス化して使ってるとか参考までに色々言ってみて。
71:名称未設定
09/01/19 15:05:47 TXDBp2F00
>>70
STLってなに?
72:名称未設定
09/01/19 15:19:02 0IPPfgoR0
>>71
リーゼントのorz
73:名称未設定
09/01/19 15:20:17 fO6WFzd+0
S: すばらしきかな
T: テンプレート
L: ライブラリーよ!
74:名称未設定
09/01/19 15:33:20 FKWl3JcY0
>>70
>STL一切使わずNSArrayをサブクラス化して使ってるとか参考までに色々言ってみて。
NSArray をサブクラス、とか言っている時点で Objective-C の素人さんですね。
URLリンク(developer.apple.com)
の Class Cluster の説明を読みましょう。
NSArray は配列の性質によって alloc init の結果が違うクラスになるのを
隠蔽しているので、知らずにサブクラスをするとおかしくなります。
だから機能を追加したいときはカテゴリを使います。
URLリンク(journal.mycom.co.jp)
URLリンク(jay.tuley.name)
URLリンク(borkware.com)
あたり参照。
Cocoa の Foundation のコレクションクラス一般の C++ 等との違いは
URLリンク(ridiculousfish.com)
が詳しい。STL と NSArray の比較もあるよ。
75:名称未設定
09/01/19 15:46:31 j0GQl9c30
>>74
機能というより異なるインスタンス変数をそれぞれ持たせたければサブクラス化するしかないんでないの?
↓以下Aを持つArrayA Class , Bを持つArrayB Class というように。
//A
typedef struct {
float y;
float x;
float z;
} float3;
//B
typedef struct {
int vert0,vert1,vert2;
}
カテゴリで追加する手法ならうちもfirstObject程度はやってるけど、それだともちろんNSArrayとしか振る舞わないからね。
NeXTやってた頃はBigNumberとかExtentとかST80近似に作ってprimitiveもNSArrayに入れるようにしてたけど、今はSTLあるからね・・
みんなどう工夫してるのか知りたかったのさ。
76:名称未設定
09/01/19 15:51:26 TXDBp2F00
>>75
NSArrayはid型のものを入れるのにしか使わないから、どうしてもそういう構造体とか基本型入れるんなら
NSValue使って入れてる。この場合NSArrayのサブクラスは必要ないよね。
NSArrayを使わないんならCの配列やそのSTLとかいうので間に合うでしょ。
どっちの場合もNSArrayのサブクラスは必要ないと思うんだけど。
77:名称未設定
09/01/19 15:52:44 FKWl3JcY0
それは失礼。こちらは日曜プログラマなので
C / C++ のオブジェクトなら STL,
Obj-C のオブジェクトなら NSArray で済ませてました。
そういう純粋 struct を NSArray (もしくはそのサブクラス)
にいれる利点はほとんどないんでは?
逆に id を STL にいれると retain カウントがおかしくなるのでどうしようと
おもっていて、これを機にしらべてみたら
URLリンク(lists.apple.com)
なんてのがありました。賢い。
78:名称未設定
09/01/19 16:16:11 j0GQl9c30
>>76-77
>NSArrayのサブクラスは必要ないと思うんだけど
もちろん大抵はそうだよね。
ただtraverseでパフォーマンスを得なければならない場合が極稀にあるもので・・
そういう場合はid型じゃ困るんよ。
id型で済むのであればNSValueなりNSNumber、あるいはNSObjectから派生させたものを突っ込めばいいし、機能はカテゴリで増やせばいいってことなんだけどさ。
STLはvector<set<int> >とかとっても有り難いんだけど、set間の論理演算がないから書かなきゃいけないとか不満な所はそれなりにあるよ。
NSArray系は集合を扱うものがなかったと思うのでこれらもちょっと。
ま・・問題点とかというよりも普段みんなどんな使い分けをしてるか参考にしてみたい。
79:名称未設定
09/01/19 16:21:50 TXDBp2F00
>>78
集合は普通NSArrayじゃなくてNSSetを使うよね?
パフォーマンスを得たい場合には直接配列をいじればいい。使い分けつってもそれくらいしか思いつかないな。
80:名称未設定
09/01/19 16:25:01 j0GQl9c30
>>79
NSSetがあるとは知らなかった
あとでちょっと使ってみる。
ただ集合扱うのにNSArrayをset的に〜って話ではないんだよ、もちろん。
81:名称未設定
09/01/19 16:37:32 Vvone4rF0
おれもどうしてもパフォーマンスが欲しけりゃCで書くよ。
たとえば>>75にあるようなのはCで書くし、Cocoaでもシビアなところはそうしてる。
たとえばNSFontのgetBoundingRects:forGlyphs:count:は構造体配列を渡すようになってるでしょ。
82:名称未設定
09/01/19 16:53:09 0UmyVXJW0
NSCodingプロトコルのencodeWithCoderっていつ呼び出されるんですか?
83:名称未設定
09/01/19 16:57:56 0IPPfgoR0
>>82
NSCoderが何をする物かを理解すれば分かると思うよ。
84:名称未設定
09/01/19 17:09:27 0UmyVXJW0
>>83
その回答でわかりました。
85:名称未設定
09/01/19 17:16:39 suWeNgYM0
NSNotification と KVO についての質問です。単純にある値を監視したい
とき、どっちの方が軽い処理なんでしょう?例えば単純に、Hoge の
インスタンス変数 BOOL foo を監視するような場合です。
Notification 使う場合は NSNotification を作ったり、通知対象を探すのに
時間かかりそうかなぁ?と思っているので、KVOの方が軽そうな印象を
持っているのですが。詳しい方、お教えください。
86:名称未設定
09/01/19 17:47:25 iFBtkqAI0
setterをトラップするだけだから、observingに一票。
87:名称未設定
09/01/19 19:15:14 suWeNgYM0
>>86
あ、やっぱりそう思われます?こんな場面でパフォーマンス稼ごうという気に
なっている訳ではないのですが…何か気になって(笑
どうもありがとうございました。
88:名称未設定
09/01/19 23:51:03 4VVsl/ct0
NSMutableDictionaryのsetValueとsetObjectってどう違うのでしょうか?
自作のPGではsetValueとvalueForKey、setObjectとobjectForKeyのペアで
どちらを使用してもうまく動くのですが。
89:名称未設定
09/01/19 23:57:13 OBOP0rKe0
>>88
両方同じとリファレンスに書いてある。
以前は、setObjectとobjectForKeyしかなかったが、10.3でKVCのサポートが強化されたときにsetValueとvalueForKeyが追加された。
90:名称未設定
09/01/20 00:13:33 1geMWJWK0
>>88
>どちらを使用してもうまく動く
100%同じ挙動と思うと落とし穴あるぞ。NS(Mutable)Dictinaryのドキュメントよく読んだ方がいい度
91:名称未設定
09/01/20 01:07:44 Qn/CmdU10
>>89
>両方同じ
[hoge setObject:nil forKey:@"uge"];→例外発生
[hoge setValue:nil forKey:@"uge"];→[hoge removeObjectForKey:@"uge"];
92:名称未設定
09/01/20 09:54:55 J4NUz8bNi
setNilValueForKey:
setValueForUndefinedKey:
とかもみるといいも。
93:名称未設定
09/01/21 00:49:27 em2Uj4bF0
>>88です。
大変良くわかりました。ありがとうございます。
nilが入る可能性がある場合はとりあえずsetValueの方が良いのですね。
94:名称未設定
09/01/21 10:27:15 6tJD085I0
>>93
>nilが入る可能性がある場合はとりあえずsetValueの方が良いのですね。
違います。それだと値として nil を設定したい場合に setValue では、エントリが
削除されてしまうので、できないでしょ。ドキュメントではこの場合には
NSNullを使え、とあります。その辺りもちゃんと理解した方が良いかと。
nil が入る可能性うんぬん、ではなくエントリを削除したい場合に、
removeObjectForKey: のつもりで setValue:nil forKey:key を使うのです。
とりあえず NSMutableDictionry を理解し、そのKVCを理解するまでは、
setObject:forKey:を使う事をお勧めします。
95:名称未設定
09/01/21 12:33:25 52b1vsc70
なるほど、それではsetObjectを使うことにします。
96:名称未設定
09/01/21 16:00:24 GWqklfd70
receiver となる instance の変数名を文字列で得てNSLogに表示したいのですが、
ivar_getName というのを使うのでしょうか? どうやるのでしょうか?
97:名称未設定
09/01/21 22:50:26 tu4Rz/My0
>>96
やったことはないけど、objc2.0のリファレンスを見た感じでは。
Class class = [receiver class];
で、クラスオブジェクトを取得してから、
unsigned int outCount;
IVar* ivars = class_copyIvarList(class, &outCount);
で、インスタンス変数の配列を取得して、
char* name = ivar_getName(ivars[0]);
で、C文字列形式の変数名を取得する。
といったところかな。
98:名称未設定
09/01/21 23:06:24 Aw/6XBfV0
>>88
>>93
でもいい質問だよ。
時間あったらKeyValueCodingについても調べてみてね。いずれsetValue:forKey:、valueForKey:をがんがん使うことになると思うよ
99:名称未設定
09/01/22 19:14:22 ZpfLBz0W0
reference見れば,同じことがマンマ書かれているぞ。
100:名称未設定
09/01/22 19:24:05 7zOJ1PPW0
>>99
書いてあってもどうせ見る気ないんだろうから
レスしてやるだけ無駄だと思うぞ。
リファレンスに書いてあるような事をわざわざ質問してくるような馬鹿は
放置でいいと思うんだが、みんな優しいなぁと。
101:名称未設定
09/01/22 21:09:13 Eb57WDtu0
おまえもおれもな
102:名称未設定
09/01/23 00:06:20 Ai0xcuBl0
じゃあおれも
103:名称未設定
09/01/23 00:08:10 GtS9tfT90
いやいや。俺も入れてくれよ。
104:名称未設定
09/01/23 01:30:11 PZGWGn2f0
みんな最初は馬鹿だった
105:名称未設定
09/01/23 02:56:43 DgTEvzZj0
最初は人に聞く前に調べるもんだ
106:名称未設定
09/01/23 09:06:11 Ngn6b8eA0
>1
今気付いたけど、次が抜けてるな。
>初心者は教えてくれる方への感謝を忘れずに。
>上級者も初心者だった頃の気持ちを忘れずに。
107:名称未設定
09/01/23 09:51:17 ZxnL70JI0
>>97 さん ありがとうございます。
[receiver receiverName] とやると'receiver'が得られる様な簡単な方法あると便利なんですが。
108:名称未設定
09/01/23 10:35:33 xhdOSqSx0
>>105
最近は自分で調べるのがマンドクセー時代なんだよきっと
109:名称未設定
09/01/23 10:54:18 My/P55Nt0
同時に人を育てようとしない時代とも言える。
>>106の気持ちが大切。
110:名称未設定
09/01/23 14:13:39 VXuYipkz0
>>107
それって、receiverのクラス名が欲しいってこと?
NSStringFromClass([receiver class]);
111:名称未設定
09/01/23 16:08:21 +ZnAyY+C0
>>110
>>107はローカル変数名が欲しいんじゃないかという悪寒がする。
デバッガ使えってことじゃね?
112:名称未設定
09/01/23 16:16:43 pSjXfnZJ0
何のためにどのように使うのかワカンネから誰も的確な答えは出来ないでしょ
自分のインスタンス変数とかなら
#define HOGE_NAME(v) ##v
printf("%s --> %d\n", HOGE_NAME(foo) , foo);
でもいいし。
113:名称未設定
09/01/23 18:13:42 ZxnL70JI0
>>107 です。すみません。ローカルなインスタンス変数をデバッグの一環として
リストアップしてモニタしたいという時に、その変数の値と同時に、その名前も表示
できたら便利だと思ったのです。>>111 >>112 さんのおっしゃる意図です。>>112
の方法を知りませんでした。試してみます。必要なヘッダファイル等あるのでしょうか?
114:名称未設定
09/01/23 18:19:34 eHn0Trda0
普通にデバッガで見られるじゃん。
115:名称未設定
09/01/23 18:24:53 ZxnL70JI0
どうやるのでしょうか?参考になるキーワードは何でひくと良いでしょう。
初歩的な問題なんですね。すみません。
116:名称未設定
09/01/23 18:30:55 eHn0Trda0
>>115
まさかXcodeで「デバッガ」を使ったことがないというのか?
デバッガだぞ。デパ地下じゃなくてデバッガ。
117:名称未設定
09/01/23 19:41:41 AZUY41n6O
Cプリプロセッサの#だな。
char* rn=#変数名;
まあ、デバッガの使い方覚えたほうが百倍有益だが。
118:105
09/01/23 22:19:09 DgTEvzZj0
>>106
私も初心者です
119:名称未設定
09/01/23 22:26:30 0/Pk3m510
僕は小心者です
120:名称未設定
09/01/23 22:28:40 8Os1ry6Y0
僕は小遊三です。
121:名称未設定
09/01/23 23:57:37 Ai0xcuBl0
僕は小鳥遊です
122:名称未設定
09/01/24 01:10:50 vLaJQL7q0
僕は小円遊です
123:名称未設定
09/01/24 01:11:50 ubqtwZr30
僕は円形ハゲです
124:名称未設定
09/01/24 01:17:48 C7l3u5Cn0
僕はハゲです URLリンク(www.computerworld.jp)
125:名称未設定
09/01/24 03:35:40 4NMkVpLa0
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
126:名称未設定
09/01/24 06:01:13 de117D7I0
25にして前髪が気になりだした・・・・・
もう禿げを笑えない。
俺の前では誰も禿を馬鹿にさせない!
プログラマーって若禿の割合ってどれくらいなのかな?
皆さんの周りは大丈夫っすか?
127:名称未設定
09/01/24 12:52:51 kU43svfh0
QTKitについて初学者なのですが,質問です。
勉強のため,コマンドラインから音楽ファイルを再生したいのですが,うまくいきません。
URLリンク(developer.apple.com)や
URLリンク(developer.apple.com)を
参考にこのようなものを書きました。
#import <QTKit/QTKit.h>
int main ()
{
NSError* movieError = nil;
QTMovie* movie;
NSString* filePath = nil;
filePath = @"/Users/mini/Desktop/sample.mp3";
NSLog(@"path = %@", filePath);
movie = [[QTMovie alloc] movieWithFile:filePath error:&movieError];
[movie setVolume:1.0];
[movie play];
[movie release];
}
でgcc -o study -g study.m -framework QTKit -framework Foundationのコンパイルは問題ありませんが,
./studyとしてもエラーを出して再生されません。
*** _NSAutoreleaseNoPool(): Object 0x11b500 of class __NSCFDate autoreleased with no pool in place - just leaking
Stack: (0x95bf665c 0x95b23810 0x95b67524 0x92d4e120 0x92d4e008 0x91ccaab4 0x91cc9010 0x91cdb0c8)
が10ぐらいでます。
*** -[QTMovie movieWithFile:error:]: unrecognized selector sent to instance 0x11cd60というのもあります。
よろしくおねがいします。
環境は10.5.6です
128:名称未設定
09/01/24 12:55:27 T3GSIXO90
[ movie release]を外せ
129:名称未設定
09/01/24 13:19:01 UuMn6FBr0
#import <QTKit/QTKit.h>
BOOL didFinished = NO;
@interface Hoge : NSObject
@end
int main () {
NSError* movieError = nil;
QTMovie* movie;
NSString* filePath = nil;
filePath = @"/Users/mini/Desktop/sample.mp3";
NSLog(@"path = %@", filePath);
id pool = [[NSAutoreleasePool alloc] init];
id hoge = [[Hoge alloc] init];
movie = [QTMovie movieWithFile:filePath error:&movieError];
id nc = [NSNotificationCenter defaultCenter];
[nc addObserver:hoge selector:@selector(hoge:) name:QTMovieDidEndNotification object:movie];
[movie setVolume:1.0];
[movie play];
id ct = [NSThread currentThread];
while(!didFinished) [ct sleepForTimeInterval:0.1];
[pool release];
}
@implementation Hoge
- (id)hoge:(id)notification{ didFinished = YES;}
@end
コンパイルも何にもしてません。ランループ回してないからちゃんと動くかは不明。
130:名称未設定
09/01/24 13:22:41 UuMn6FBr0
>127 のおかしな点
movie = [[QTMovie alloc] movieWithFile:filePath error:&movieError];
movieWithFile:error: はクラスメソッド。
さらにこのメソッドはNSAutoreleasePoolが居ないとだめです。
[movie release];
鳴らすためのものを捨てちゃダメでしょ。
鳴らしてる途中でツール自体を終了しちゃダメでしょ。
131:名称未設定
09/01/24 13:25:49 UuMn6FBr0
あれ?
ごめん。
sleepForTimeInterval: はクラスメソッドだったわw
人の事言えねえwww
132:127
09/01/24 14:28:28 kU43svfh0
>>128~131
どうもありがとうございます。
そもそも別のスレッドで再生する仕組みになっているとは知りませんでした。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSError* movieError = nil;
QTMovie* movie;
[pool addObject: movie];
NSString* filePath = nil;
filePath = @"sample.mp3";
movie = [[QTMovie alloc] initWithFile:filePath error:&movieError];
QTTime theTime = [movie duration];
NSValue* qtValue = [NSValue valueWithQTTime: theTime];
NSLog(@"%@", QTStringFromTime([qtValue QTTimeValue]));
[movie setVolume:1.0];
[movie play];
sleep(15);// 15秒程のサウンドファイルなので
[pool release];
と書き換えてみたところエラーがでなくなりました。
とはいえ再生が完全でない(初めの数秒しか再生されない)ので,
もう少し調べてから,お知恵を拝借したいと存じます。
133:名称未設定
09/01/24 14:32:23 KAvNfK720
Movieの読み込みは非同期です。
再生前に、Movieがきちんと読み込み終わるまで待つ必要があります。
134:名称未設定
09/01/24 14:35:14 qTQC8jca0
[pool addObject:movie];
はおかしいですよ。その時点では movie にはいってるのはガラクタなので、
そんなのを登録してもだめです。alloc init のあとでしないと。
さらに、pool には普通自分で addObject しちゃだめです。
movie = [[QTMovie alloc] init...]
のあとに、
[movie autorelease]
とすると自動で適切な autorelease pool に登録してくれます。
あと、
QTTime theTime = [movie duration];
NSValue* qtValue = [NSValue valueWithQTTime: theTime];
NSLog(@"%@", QTStringFromTime([qtValue QTTimeValue]));
はなんか無駄な気がする。なんで NSValue につめてからまた取り出してるの?
単に QTStringFromTime(theTime) でいいのでは。
135:名称未設定
09/01/24 15:40:51 iC4toJH20
#import <Cocoa/Cocoa.h>
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *path = @"/test.aif";
NSSound *sound = [[[NSSound alloc] initWithContentsOfFile:path byReference:YES] autorelease];
[sound play];
[NSThread sleepForTimeInterval:[sound duration]];
[pool drain];
と思ったらQTKitの勉強だったか、、吊ってくる
136:名称未設定
09/01/24 15:42:58 ocqxJVJ40
QTKitってrunLoop回さなくていいの?
137:名称未設定
09/01/24 16:27:03 6oIPn9ie0
NSMedataItemからファイルパスを取り出すのってどうやればいいの?
attributesの中にそれっぽいのがないんだけど
138:名称未設定
09/01/24 16:34:43 iC4toJH20
int main () {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *path = @"/test.aif";
QTMovie *movie = [QTMovie movieWithFile:path error:nil];
[movie play];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:15]];
[pool drain];
return 0;
}
これでおk。くそ、コマンドラインってとこでハマったわ。
139:名称未設定
09/01/24 16:42:38 iC4toJH20
>>137
ファイルのメタデータにファイルパスは入ってない
140:名称未設定
09/01/24 16:50:53 6oIPn9ie0
>>139
どうもです。
じゃあNSMetadataQueryを使って検索した結果からファイルパスは得られないのかな?
141:名称未設定
09/01/24 16:54:24 iC4toJH20
あれ、kMDItemPathってのがあるかも
それかQueryの方から得られると思う
昔作ったサンプルプロジェクトが見当たらなくて明確な回答ができません
142:名称未設定
09/01/24 17:04:07 iC4toJH20
このへん読んで
URLリンク(developer.apple.com)
143:名称未設定
09/01/24 17:57:51 6oIPn9ie0
>>141-142
どうもありがとうございます。kMDItemPathで得ることができました。
-attributesで得られるキーの配列のなかにkMDItemPathは入ってなかったので・・・
144:名称未設定
09/01/24 19:10:48 TBOq/xmI0
すみません。
このようなケースの場合、どのように組めば(調べれば)いいのか教えて下さい
(1) 2つのウィンドウA、Bがあり、それぞれ共通のアクションがある(例えばNSTableViewで選択したリストの情報を見るなど)
(2) メインメニューで(1)のアクションを起動するメニューアイテムを定義する(例えば「Show Info」など)
(3) (2)のメニューアイテムからアクティブなウィンドウの方のアクションを起動したい
(4) (2)のメニューアイテムでアクティブなウィンドウの方の状態((NSTableViewで選択されているかなど)から
enable/disableを設定したい
(1)でA、Bのウィンドウに対してコントロールするクラスA、Bを記述してインスタンス化、
それぞれのインスタンスA、Bにアクションが定義されています。
145:名称未設定
09/01/24 19:27:59 iC4toJH20
とりあえずResponderChainとFirstResponderと調べてみ
146:名称未設定
09/01/24 20:29:45 P3BnVaEO0
C の実数配列を4次元ベクトルと見立て、インスタンス変数として持ち、簡単なベクトル演算をメソッドに定義した
クラス V をNSObject を継承して作り、別途、ベクトル計算をするクラスを作ってクラス V インスタンス生成し利用
した後、このベクトルのインスタンス解放をする段でクラス V の dealloc が呼ばれると思います。
この クラス V での dealloc の実装は [super dealloc]; のみで良いのでしょうか?
147:名称未設定
09/01/24 20:55:48 /5n08FiC0
>>146
前レスでも話題になったけど、
基本的にはVクラスでallocして作成したインスタンスは
deallocで明示的にreleaseしておく。
148:名称未設定
09/01/24 21:04:57 /5n08FiC0
>>147は正確ではないな。
他のクラスを参照しているインスタンス変数をdeallocで明示的にreleaseだな。
なぜならVクラスが解放されても、参照されている他のクラス自身は分からないからね。
必要がなくなったにもかかわらず、ずっと保持されてしまうことになる。
そうすることでリークを起こす可能性もあるわけだし・・・・・今はそんなことは無いかな?
149:名称未設定
09/01/24 21:15:13 P3BnVaEO0
V クラスでは、基本演算(四則演算等)メソッドのみなので、計算結果をVクラスインスタンで使うのは、
メソッドの引数と返り値のみです。実際の演算は、別途のクラス(Wとします)で、Vクラスのインスタンス
をallocで生成して行います。この場合、Wクラスで生成したVのインスタンスはreleaseするのは分かるん
ですが、そのとき呼ばれる V の dealloc は、演算メソッドで引数に使った自分自身のインスタンス変数や
メソッド返り値のみです。これらも [aVector release]; [rVector release]; みたいにして V の dealloc 中
に記述するのでしょうか? という意味です。
150:名称未設定
09/01/24 21:26:06 /5n08FiC0
>そのとき呼ばれる V の dealloc は、
>>演算メソッドで引数に使った自分自身のインスタンス変数やメソッド返り値のみです。
WクラスでVクラスをreleaseしたからってVクラスのdeallocが呼び出されるってわけでないけど、
Vクラスで他のクラスを参照しているインスタンス変数がないならば、
わざわざdeallocをオーバーライドして定義しておく必要なんてないんじゃない?
まぁ前スレでは基本的にはallocもしくはretainされたインスタンス変数はそこでreleaseして
参照カウンタを1減らしておくとかいう結論だったはず。
151:名称未設定
09/01/24 21:40:51 YxulMnGO0
>>146
クラスVはインスタンス変数に他のオブジェクトを持っていないんだから、dealloc時にreleaseするものがそもそもない。
可変長配列をmallocなんかで作ってるんならfreeとかを入れるだろうけどね。
152:名称未設定
09/01/24 23:08:25 P3BnVaEO0
皆さんありがとうございます。
クラスVは、インスタンス変数として、Cの実数変数だけしか持っておらず、他のクラスのオブジェクトは
無いし、メソッド実装に使われている引数、変数、返り値もやはりクラスV 以外のモノも無いので、dealloc
をオーバーライドする必要がないから、dealloc の記述は不要、という理解で良いのですね。
あと、ベクトルを表現するクラスVのような場合、メソッドの返り値はインスタンスのコピーを返す(渡す)
というのが適切という事でよいのでしょうか?
153:名称未設定
09/01/24 23:16:13 /5n08FiC0
C言語では配列を返す関数はないからね。
オブジェクティブ指向から考えても、それでいいと思う。
154:名称未設定
09/01/24 23:28:51 YxulMnGO0
ていうか4次元ベクトル固定なら構造体使えばいいじゃん。
俺は詳しくないけど、物理シミュレーションかなんかに使うならそういうベクトル演算のライブラリあるよね。
155:名称未設定
09/01/24 23:44:57 d+Teu/bB0
ソース無いとなんのこっちゃなのかよくわからん
156:名称未設定
09/01/25 01:31:52 bQWMzZr30
>あと、ベクトルを表現するクラスVのような場合、メソッドの返り値はインスタンスのコピーを返す(渡す)
>というのが適切という事でよいのでしょうか?
ここいらがよく理解できてません。一応動くソースではあるのですが、心得がないせいで時折全く不明な
停止状態になります。もう少し勉強して出直します。ありがとうございました。少し頭が整理されました。
157:名称未設定
09/01/25 10:35:40 ivZ6d7js0
Cocoaのクラスというかフレムーワークにはシェルのgetoptやrubyのoptparseみたいな
コマンドライン(オプション)パーサってありますか?
それともwhileつかって、従来通りがしがし書いていくしか無いのですか?
158:名称未設定
09/01/25 10:46:06 dVCCmgN10
getopt使えば良いじゃん
159:名称未設定
09/01/25 11:39:42 zAeErYVm0
>>157
NSArgumentDomain
が役に立つかな?
160:名称未設定
09/01/25 14:43:56 sL22S9gg0
>>147
その辺いまだに分からないんでリーク上等、autoreleaseに全部おまかせで作ってる。
newを発行したら+alloc , -initと呼ばれるよね。
alloc以外で領域確保する手段ってNSObject見ても書いてないし
それぞれのクラスがインスタンス生成用に作ってる+stringWithFormatとか
内部ではどうしてんだろね。
結局必ずalloc , initと通るなら同じ事なんだけどさ。
161:名称未設定
09/01/25 15:30:29 IseXWGDP0
>>160
+stringWithFormatとかの中身
+ (id)hoge
{
id result = [[Hoge alloc] init];
return [result autorelease];
}
162:157
09/01/25 16:29:22 ivZ6d7js0
>>158
Cのgetopt_longを使ったコードに#import <Cocoa/Cocoa.h>
を書き足すだけで,コンパイル時にエラーになってしまうので,
なにかCocoa用のものがあるのかと思っていたのです。
structがいけないのか
163:名称未設定
09/01/25 17:31:42 zAeErYVm0
>>162
ヒントが足らんか?
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *dict = [[[NSUserDefaults standardUserDefaults] volatileDomainForName:NSArgumentDomain] mutableCopy];
NSLog(@"args are %@", dict);
[dict release];
[pool drain];
return 0;
}
./args -a foo -b bar -option myOption
2009-01-25 17:30:44.241 args[2303:10b] args are {
a = foo;
b = bar;
option = myOption;
}
164:162
09/01/25 18:03:31 ivZ6d7js0
>>163
サンクス
ロングオプション(--)とオプション以外の引数は別処理なんですね
165:名称未設定
09/01/25 19:15:10 KBsZcb+r0
スレを見始めた頃はチンプンカンプンだったのに
いつの間にか質問も回答も理解できるようになってて、ちょっと感激
日々の積み重ねって大事よね
166:名称未設定
09/01/25 23:28:02 D0B6AaXh0
>>162
>Cのgetopt_longを使ったコードに#import <Cocoa/Cocoa.h>
>を書き足すだけで,コンパイル時にエラーになってしまうので,
うちでは Obj-C で getopt_long つかえるけど?
興味が有るのでどんなエラーがでるのか、
Cでは通るけど Obj-C ではとおらない最小限のソースを教えてください
167:名称未設定
09/01/26 07:36:50 gWcJYF5K0
>>165
質問に回答して返事がなかったら萎えるよね
もう答えるの無駄だしやめよ、と何度思ったか
168:名称未設定
09/01/26 09:50:58 QROzM0KB0
まぁ自分の勉強だと思えば・・・・。
他人に解説する際に気づくこともあるし。
169:名称未設定
09/01/26 11:26:26 mXilku0z0
>>166
#import <Cocoa/Cocoa.h>
#include <stdio.h>
#include <unistd.h>
#include <getopt.h>
extern char *optarg;
extern int optind, opterr, optopt;
int main(int argc, char *argv[]) {
int ch;
float time;
static struct option longopts[] = {
{"begin", no_argument, NULL, 'b'},
{0, 0, 0, 0}
};
opterr = 0;
while(( ch = getopt_long(argc, argv, "b:e:l:h", longopts, NULL)) != -1 ){
switch( ch ){
case 'b':
printf("Begin the begin\n");
break;
}
optarg = NULL;
}
}
です。
gcc -o test test.c -framework Cocoa
でコンパイル
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5003日前に更新/246 KB
担当:undef