1 名前:名称未設定 mailto:sage [2008/10/26(日) 03:42:50 ID:Ato5tySs0] 前スレ Cocoaはさっぱり!!! version.X(10) pc11.2ch.net/test/read.cgi/mac/1211290055/ Cocoaはさっぱり!!! version.9 pc11.2ch.net/test/read.cgi/mac/1201106820/ Cocoaはさっぱり!!! version.8 pc11.2ch.net/test/read.cgi/mac/1179498292/ Cocoaはさっぱり!!! version.7 pc11.2ch.net/test/read.cgi/mac/1161486802/ Cocoaはさっぱり!!! version.6 pc11.2ch.net/test/read.cgi/mac/1146391229/ Cocoaはさっぱり!!! version.5 pc11.2ch.net/test/read.cgi/mac/1124986925/ Cocoaはさっぱり!!! version.4 pc11.2ch.net/test/read.cgi/mac/1091927026/ Cocoaはさっぱり!!! Version.3 pc5.2ch.net/test/read.cgi/mac/1063295248/ Cocoaはさっぱり!version:2 pc11.2ch.net/test/read.cgi/mac/1036923528/ Cocoaはさっぱり! pc11.2ch.net/test/read.cgi/mac/1007632025/
152 名前:名称未設定 mailto:sage [2008/11/09(日) 03:54:10 ID:B9u3WR7L0] C 系の言語の文法をひとつでも既に知っていて、 Obj-C の文法が二日でわからないひとは何かがおかしい。 Cocoa API の全貌をつかむのは大変なのはわかるけど、 それは Obj-C の文法の問題ではないベ。
153 名前:名称未設定 mailto:sage [2008/11/09(日) 06:13:08 ID:40c4vp+k0] .NET Frameworkのどこがいいんだがさっぱり謎だが一応。 www.mono-project.com/Mono:OSX
154 名前:名称未設定 mailto:sage [2008/11/09(日) 08:05:26 ID:ijj+bVEA0] 110=135でOK?
155 名前:名称未設定 mailto:sage [2008/11/09(日) 08:10:56 ID:40c4vp+k0] >>135 はプログラム板のここにでも行った方がいいんじゃないか? 過疎りまくってるが。 Mac OS Xでの開発環境はどれがイイ? pc11.2ch.net/test/read.cgi/tech/1163314891/
156 名前:名称未設定 [2008/11/09(日) 09:30:27 ID:mFvSzNPX0] >>125 NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。 NSMenuItemのArrayとできちゃえばサイコーなんですが…。 >>129 できるよ。 ObjectがNSMenuItemのNSArrayController作ってみよう。 125です。 すいません、言葉が足りませんでした。 NSMenuItemをaddObjectしたNSArrayControllerとバインドした場合、 ・"Controller Key"は"arrangedObjects" ・"Model Key Path"は"title" とするのが普通になると思います。 でも、これだとNSPopUpButtonクラスのaddItemWithTitleをしているような感じになり、 結局はNSStringからポップアップの各項目を作ることになっています。 当方の希望は、 ・"Controller Key"は"arrangedObjects" ・"Model Key Path"は"self" みたいな感じ(実際にこれをやってもobjectの説明がポップアップに追加されるだけです)で NSMunuItemからポップアップの各項目を作るのが希望です。
157 名前:名称未設定 mailto:sage [2008/11/09(日) 09:36:30 ID:lxRIk4K/0] >>143 ループでGUI更新が動かないのは、NSRunloopが一回りしたタイミングで 更新処理がまとめて行われるからだよね。 コードの中でループしちゃうと、NSRunloopに処理が戻らない。 自分はスレッドが面倒なので、ループをばらし、ループの中身だけ別メソッドに して、performSelector:withObject:afterDelay: で繰り返し呼び出しに してる。普通はスレッドにするものなの?
158 名前:名称未設定 [2008/11/09(日) 10:31:27 ID:L1s+Atna0] >>152 わかるわからないではなく、Obj-Cの文法は美しくない。
159 名前:名称未設定 mailto:sage [2008/11/09(日) 11:29:50 ID:Cd0AMfEC0] 後付け感ありまくりではあるね シンプルに書けないのも今風ではないね MacRubyに期待(^^;
160 名前:名称未設定 mailto:sage [2008/11/09(日) 12:48:29 ID:xdgDUb6t0] >>158 じゃあ、好きな言語を使ったら良いんじゃない? .NET使う環境から一生出てこなくて良いよ
161 名前:名称未設定 mailto:sage [2008/11/09(日) 13:00:26 ID:la8cu0hU0] >>156 何をしたいのかわからないけど、 NSMenuのアイテムとNSPopupButtonのアイテムを同期させたい、 または同じ内容にしたいということ?
162 名前:名称未設定 mailto:sage [2008/11/09(日) 13:53:57 ID:VAAVuJ8X0] >>158 美的感覚の問題だったのか。 じゃあまあ個人の好き嫌いだからそれでいいんじゃね? 僕は括弧の乱舞は好きだけど。 あと、メソッド名が長くてほとんど文章なので コメントを書く必要がほとんどない、というか プログラム自体がほとんどコメントになるのはいい点だと思う、って これは Obj-C の文法の問題ではなくて Cocoa の API の問題か。失礼。
163 名前:名称未設定 mailto:sage [2008/11/09(日) 14:43:48 ID:YNFGyvs40] 文法的に美しく無いとされるフランス語にも素晴らしい文学は存在する。 Objective-Cに文句を言うのは勝手だが、 経験豊富なプログラマであれば言語に左右されない美しいアプリを作れるはず。
164 名前:名称未設定 mailto:sage [2008/11/09(日) 15:18:38 ID:uAivnwgs0] そういうこと言うと、論点ずらしって言われるぞ。
165 名前:名称未設定 mailto:sage [2008/11/09(日) 15:20:17 ID:YNFGyvs40] >>164 撒き餌を食うなよw
166 名前:名称未設定 mailto:sage [2008/11/09(日) 16:00:55 ID:cf3ZhWey0] あれじゃないの? iPhoneのアプリ開発とか注目されてきてるからObj-Cで組んでみようと思ったけど VBしか経験がなくて文法の違いが吸収できず、HelloWorldすら出せずにイライラしたとか。
167 名前:名称未設定 mailto:sage [2008/11/09(日) 16:05:18 ID:YNFGyvs40] >>166 それはあるよな。 iPhone出てから「初心者です」みたいなのが増えた。
168 名前:名称未設定 [2008/11/09(日) 16:23:25 ID:mFvSzNPX0] >>161 はい、だいたいそういう内容です。 title以外の内容があるアイテムとか、セパレータとか、NSMenuItem自体には いろいろな状態があるので、そういった状態を抱えたまま同期したいのが希望です。
169 名前:名称未設定 mailto:sage [2008/11/09(日) 16:42:55 ID:HoxfCMO50] 俺はObjective-Cの簡潔なオブジェクトシステムが好きだ。しばらくすると一風変わったメッセージ式にも愛着がわいてくる。
170 名前:名称未設定 [2008/11/09(日) 17:14:50 ID:L1s+Atna0] お前らの言いたいことはわかった。「オラの方言が最高だべさ」ってことだろ。一生時代遅れの田舎言語使ってろ。
171 名前:名称未設定 mailto:sage [2008/11/09(日) 17:23:45 ID:XOOSfoZw0] はいはい田舎田舎。 厨房発言に上げ荒し、おまけにドトネト最高か。 まじでVB厨のバカ丸出しだな。
172 名前:名称未設定 mailto:sage [2008/11/09(日) 17:25:12 ID:40c4vp+k0] 田舎の方が味があって和むんだよ。それが分からないとはまだまだだな。
173 名前:名称未設定 [2008/11/09(日) 17:34:46 ID:BSsYOmbX0] 言語とか処理系て、どうせ借り物でしょw 目的は何だ?金?w だったら冷や汗たらして働けw 何か作りたいものがあるなら最適な手段を選べばいいだけ
174 名前:名称未設定 mailto:sage [2008/11/09(日) 18:06:51 ID:YNFGyvs40] iPhoneで小遣い稼ぎしようと思ったけど 理解できなくて八つ当たりしてるだけだろ。
175 名前:名称未設定 mailto:sage [2008/11/09(日) 18:49:44 ID:Cd0AMfEC0] まあ誰がなんと言おうとObjectiveC++ は最強だと思うけどね C++/CLIよりも使い易いし、判り易い でも、ちょっと古い感じはするね MacRubyに(ry
176 名前:名称未設定 mailto:sage [2008/11/09(日) 19:17:05 ID:oz3XxqjX0] Objective-C++は最強にカオスってことですねわかりまs
177 名前:名称未設定 mailto:sage [2008/11/09(日) 20:05:06 ID:n+KcZ/pQ0] 心の寂しい方がいらっしゃる様ですね きっと心だけでなくプログラムも隙間だらけなのでしょう
178 名前:名称未設定 mailto:sage [2008/11/09(日) 21:06:35 ID:Se6LpMt+0] >>158 Ruby でも Java でも C++ でも JavaScript でも出来ますが、何か?
179 名前:名称未設定 mailto:sage [2008/11/10(月) 01:51:16 ID:5p8Fyhi10] Ruby → RubyCocoa か MacRuby 。 MacRuby は Apple が開発していて大本命ぽい? Python → PyObjC。 Perl → CamelBones というオープンソースのがある。 Java → Cocoa-Java があったけど、捨てられました。Java の object システムが硬いのが問題? Javascript → Objective-J (Cappuccino) という web app を Cocoa で書ける opensource のがある。 あと、WebKit つかえば、Javascript から Cocoa の object をいじるのは非常に簡単。 AppleScript → AppleScript Studio... でも使ってる人ぴよまるさん以外にいるの? MonoObjC → Mono (.Net のオープンソース版) から ObjC を呼べる。 Cocoa# → 同上、こちらのほうが Mono の公式版?でもあんまりアップデートされてないぽい。 C++ で Cocoa をかけるのってあったっけ?Objective-C++ で C++ と Obj-C を混ぜられるのはそうだけど、Cocoa API を C++ の クラス階層として実装したのってないよね? そもそも delegate とか performSelector とか C++ で実装しようがあるんでしょうか?
180 名前:名称未設定 mailto:sage [2008/11/10(月) 10:38:38 ID:ku2SFWuM0] C++とか、今のスレの流れは別に興味ないけど、 >>135 が今までどんなアプリを作ったのかが 非常に気になるw
181 名前:名称未設定 mailto:sage [2008/11/10(月) 11:56:44 ID:W6D0WGgG0] 多分、hello, world.だろ。
182 名前:名称未設定 mailto:sage [2008/11/10(月) 12:10:30 ID:/kpuffDm0] ついで、「こんにちわ、世界」と出力しようとしたが、 エンコードがあっていなかったので文字化け。 キレる。 ってのが王道です。
183 名前:名称未設定 mailto:sage [2008/11/10(月) 12:56:58 ID:r8VH7KRc0] @ も序でに忘れてんじゃね?
184 名前:名称未設定 mailto:sage [2008/11/10(月) 13:13:37 ID:+x+/8+Ia0] 学び始めて間もなく、色々とやってみたのですが解決できず悩んでいます。 場違いかも知れませんが質問させてください。 テキストフィールドからNSMatrixをつくり、個々のセルにint型の数値を表示しています。 マウスクリックで選択したセルから数値を取り出しています。 ところが、 個々のセルに対して、NSCellやNSTextFieldCellのメソッド、例えばsetTextColor:等を 送るとその後、セルから数値を取り出せなくなってしまいます。どうしてそうなるのかが 判りません。どなたかご教授いただけませんか?宜しくお願いします。
185 名前:名称未設定 mailto:sage [2008/11/10(月) 14:01:43 ID:jRir/5vF0] >>184 セルを参照しているインスタンス変数を上書きしておらんか?
186 名前:184 mailto:sage [2008/11/10(月) 14:25:50 ID:+x+/8+Ia0] >>185 レス有り難うございます。 セルの指定は、以下のようにしています。 [[matrix cellWithTag:n] setTextColor:[NSColor blueColor]]; ご指摘いただいたようにポインタを使った形にしてみたのですが、 やはり上手く行きませんでした。
187 名前:184 mailto:sage [2008/11/10(月) 17:40:23 ID:+x+/8+Ia0] 一人でばたばたして、連続の書き込みになり申し訳ないのですが、 もう少し補足させてください。 マトリクスのセル(テキストフィールド)に数値を設定しているそのメソッドにおいて、 セルの文字の色を変えようとしたとき、 「元の色 -> さらに元の色と同じ色を設定」 の場合はその後でも別のメソッドから数値が取得できる。ところが、 「元の色 -> 別の色に設定」した場合、取得できなくなる。 これはひょっとして文字の色を変更したことによって、 セルが持つテキストフィールドセルが別もの(オブジェクト)に 置き換わったということなのか?と考えています。 ご助言頂ければありがたいです。
188 名前:名称未設定 mailto:sage [2008/11/10(月) 19:16:30 ID:k7er6Elw0] 取り出せないって具体的にはどうなるんですか? エラーでアプリケーションが落ちるとか? 期待した値じゃなくて0しか返ってこないとか?
189 名前:名称未設定 mailto:sage [2008/11/10(月) 19:35:34 ID:NIf0gNWD0] 値をセットするところ、ゲットするところのコードを見せた方が早いよ。 言葉だけじゃさっぱり伝わらない。
190 名前:名称未設定 mailto:sage [2008/11/10(月) 20:12:33 ID:atwbsV0eO] 昨日、ループからGUIのラベルを更新したいと言っていた者です ループの存在するメソッドをスレッド化し、ラベル更新部分をメインスレッドで実行するようにしました しかし、ラベルは更新されませんでした 更新部分は [対象ラベル setStringValue:newLabel]; [対象ラベル display]; となっています newLabelはログで確認済みです 携帯からなんで間違っているかもしれませんが、よろしくお願いします
191 名前:184 mailto:sage [2008/11/10(月) 20:43:59 ID:+x+/8+Ia0] >>188 ,189 レス有り難うございます。簡略化したものを見て頂くと、 //クリックしてセルの値を取り出す - (IBAction)getNumber:(id)sender { NSLog(@"%d", [[myOutletMatrix selectedCell] intValue]); } //数字をセット - (IBAction)setNumber:(id)sender { [myOutletMatrix setMode:NSHighlightModeMatrix]; [[myOutletMatrix cellWithTag:0] setIntValue:1]; [[myOutletMatrix cellWithTag:1] setIntValue:2]; [[myOutletMatrix cellWithTag:2] setIntValue:3]; int i; for (i=0; i<=2; i++){ [[myOutletMatrix cellWithTag:i] setTextColor:[NSColor blackColor]];//悩んでいる箇所 } } となります。これで setTextColorの引数[NSColor blackColor]のblackColorを他の色に変えると、 クリックしても値が取得できなくなります。
192 名前:名称未設定 mailto:sage [2008/11/10(月) 22:01:15 ID:k7er6Elw0] >>191 [NSColor blueColor]に変えても ウチでは元気よく動いてますが・・・。 10.5.5、DevTools多分最新。
193 名前:名称未設定 mailto:sage [2008/11/10(月) 22:34:29 ID:wRpzRNtU0] 自分はwhiteColorにしましたが動いていますね 数字は見えなくなりましたが...
194 名前:184 mailto:sage [2008/11/10(月) 22:50:22 ID:+x+/8+Ia0] >>192 レス有り難うございます。 なんと・・。実はこちらは未だOS10.4.11で、XCODE2.5なのですが、 リファレンスではNStextFildCellは10.0以降とあるのでバージョン のことはまったく頭にありませんでした。>>191 のコードのままで上記 のような結果になっています。プログラミング初心者がおこがましいですが、 これはXCODEやコンパイラのバグと考えるべきなのか、それともまだ他に 原因があるのか・・・?取りあえず今日は頭を休めます。 いずれにしてもレス頂いた方々、わざわざ実際に試してくださった192さん、 感謝いたします。有り難うございました。
195 名前:名称未設定 mailto:sage [2008/11/10(月) 22:53:24 ID:jRir/5vF0] >>194 なんでもバグの所為にすると怒られるよ。 どこか間違ってるんだろ。
196 名前:184 mailto:sage [2008/11/10(月) 22:55:24 ID:+x+/8+Ia0] >>193 さん、わざわざ試して頂いて有り難うございました。 やはり、私の環境に問題がある可能性が明確になってきました。 感謝です。
197 名前:190 mailto:sage [2008/11/10(月) 22:56:24 ID:hIykeUF50] 質問してる身であれですが、、、 >>184 さん カラースペースの設定とか関係ないでしょうか? 見当違いの回答かもしれないですが、RGB色空間を扱っているとき、[NSColor blackColor]が使えなかったもので、、、 自分も始めたばかりなんでそのあたりが知りたいです
198 名前:184 mailto:sage [2008/11/10(月) 23:29:28 ID:+x+/8+Ia0] >>195 さん そうですね、軽率でした。ご容赦の程。 >>197 さん カラースペースというのは環境設定ーディスプレイの設定か もしくはキャリブレーション関係でしょうか。もしそれならば、1670万色に設定されている 状態です。ガンマ補正以外はデフォルトのままにしています。しかし、そういうことがあるの ですね。私はまだまだそこまで到達していませんが、いずれグラフィック関連のプログラミング もできればと思っていたので、とても参考になりました。 お二方とも有り難うございました。
199 名前:名称未設定 [2008/11/11(火) 00:04:08 ID:I3pahUr70] >>194 >OS10.4.11で、XCODE2.5 同じ環境で試してもちゃんと動くぞ(ちなみに192、193とは別人)
200 名前:名称未設定 mailto:sage [2008/11/11(火) 01:05:54 ID:PUKvd1/H0] >>194 >>190 コード全体を晒したほうがいいんじゃないかな。 きっと自分では予期せぬところがおかしくなっていると思われる。 基本的に、なんかプログラムをかいて、バグがあって、 自分ではここがおかしいんじゃないかなというところを いくら考えて修正しても正しく動かないばあいは、 その自分がここがおかしいんじゃないかなと思うところだけ 抜き出して 2ch で聞いても改善する可能性は非常に低いです。 なぜなら、そういうときはえてしてそこと違う場所がおかしいからです。
201 名前:名称未設定 mailto:sage [2008/11/11(火) 01:14:55 ID:K+WZjSUa0] 勘だが - (IBAction)setNumber:(id)sender { [myOutletMatrix setMode:NSHighlightModeMatrix]; int i; for (i=0; i<=2; i++){ [[myOutletMatrix cellWithTag:i] setTextColor:[NSColor blackColor]];//悩んでいる箇所 } [[myOutletMatrix cellWithTag:0] setIntValue:1]; [[myOutletMatrix cellWithTag:1] setIntValue:2]; [[myOutletMatrix cellWithTag:2] setIntValue:3]; } こうしたらどうなる?
202 名前:名称未設定 mailto:sage [2008/11/11(火) 01:29:08 ID:wEupgvlC0] >>190 - (IBAction)start:(id)sender { [NSThread detachNewThreadSelector:@selector(doWork) toTarget:self withObject:nil]; } - (void)doWork { for (int i = 0; i <= 100; i++) { double percentage = i /100.; [button setEnabled:(BOOL)percentage]; [textField setDoubleValue:percentage]; [progressIndicator setDoubleValue:percentage]; usleep(20000); } } こんなテキトーなコードでも動いてます。 NSWindow上に置いた、NSButton, NSTextField, NSProgressIndicator すべてガンガン更新されてます。@10.5.5
203 名前:名称未設定 mailto:sage [2008/11/11(火) 02:15:56 ID:+aCpyxf+0] >>200 なるほど。。 提示されている例と明らかに異なる部分はあるのですが、 それがダメなのかはわかりませんからね。。 >>202 ありがとうございます 手元にMacがないのが辛い;いろいろ試したいのに ちょっと流れをさらして見ます ループを含むメソッドをもつクラスRoopTestと、ビューコントローラMyViewCtrlがあります ///myViewCtrlのメソッド - (IBAction)push { //ループ開始 RoopTest* rt = [[RoopTest allc] init]; [NSThread detachNewThreadSelector:@selector(roopMethod) toTarget:rt withObject:nil]; } - (void)updateLabel:(NSString*)newLabel { [myLabel setStringValue:newLabel]; [myLabel display]; }
204 名前:名称未設定 mailto:sage [2008/11/11(火) 02:18:49 ID:+aCpyxf+0] ///RoopTestのメソッド - (void)roopMethod { /* AutoPoolの宣言など */ while(1) { /* ループ内の処理 */ if(....) { //更新する条件にはまった場合 [self performSelectorOnMainThread:@selector(updateMethod) withObject:Label waitUntilDone:YES]; } } } - (void)updateMethod:(NSString*)newLabel { MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理? [vc updateLabel:newLabel]; } こんな感じです ボタンプッシュ→ループクラスのインスタンス作成→ループメソッド呼び出し →更新時、メインスレッドで更新メソッド呼び出し →ビューコントローラのインスタンス作成→ビューコントローラ内の更新メソッド呼び出し 見づらくて申し訳ないです なんか変な事やっているのは感じていますが、これでは動かないのでしょうか?
205 名前:名称未設定 mailto:sage [2008/11/11(火) 03:13:01 ID:K+WZjSUa0] MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理? ここが諸悪の根源だ。 あと performSelectorOnMainThread:@selector(updateMethod) でコロンを忘れてる。
206 名前:名称未設定 mailto:sage [2008/11/11(火) 03:38:59 ID:K+WZjSUa0] RoopTest* rt = [[RoopTest allc] init]; ここもなんだか気持ち悪いな。
207 名前:名称未設定 mailto:sage [2008/11/11(火) 08:11:40 ID:fkU0XAOh0] 何で画面更新の度に MyViewCtrl を alloc してるんだ? どう考えたら、こんなコードを書けるんだろう... あと、allc じゃなくて、alloc だろ。 明らかに自分のコードに問題があるのに、 >これはXCODEやコンパイラのバグと考えるべきなのか とか、 >やはり、私の環境に問題がある可能性が明確になってきました。 とかよく言えるな。 コンパイラのバグとか考えるのは最後だろ。
208 名前:名称未設定 mailto:sage [2008/11/11(火) 08:12:02 ID:PUKvd1/H0] updateMethod: で newLabel をどう渡しているつもりなのか? あと、 MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理? 無理ではないけど、そうやってつくったものは インターフェースビルダーで既につくったオブジェクトとは別のものです。
209 名前:名称未設定 mailto:sage [2008/11/11(火) 09:13:26 ID:FpRggH2w0] あんまし速度を求めないのであれば スレッド使うよりNSTimerにした方が無難だと思うけど。
210 名前:184 mailto:sage [2008/11/11(火) 09:57:42 ID:zECfChq+0] 皆さん、レスポンス頂いて有り難うございます。 >>207 さん、203、204さんは私とは別の方です。軽卒な発言を書いたのは私の方です。 平にご容赦ください。 >>200 さん >>191 のコードのみで、やはり値が取り出せない状況になっております。 >>201 さん 結果は変わりませんでした。 >>199 さん、わざわざ試していただき有り難うございました。199さんが>>191 のコードのみで 検証されたとしますと、私のInterface Builderでの作業が間違っているのかもしれないと考え始め ました。 夜まで作業できませんが、なんらかの結論なり経過なりはまたご報告させて頂きます。 有り難うございました。
211 名前:名称未設定 mailto:sage [2008/11/11(火) 10:23:26 ID:fkU0XAOh0] >>210 >>>207 さん、203、204さんは私とは別の方です。 勘違いしてた。スマソ。
212 名前:203 mailto:sage [2008/11/11(火) 12:21:53 ID:a+a3ujwr0] みなさん、いろいろ助言をありがとうございます 調べたところ、NSConnectionを用いてスレッド間通信をすればよいとあったのでやってみたところ、ついに出来ました! やはり、ラベルの授受がうまく行ってなかったようですね ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな? 上にある、RoopTestにIBOutletを定義しても更新できなかったので。。 とりあえず、今後のGUI更新作業は、必ずコントローラ上で行うようにします
213 名前:名称未設定 mailto:sage [2008/11/11(火) 12:44:52 ID:FpRggH2w0] >>212 結局やりたい事は名にだったんだろう? NSTimerだとかなり簡単なんだが。
214 名前:203 mailto:sage [2008/11/11(火) 12:52:55 ID:a+a3ujwr0] >>213 目的の処理はとても重いのですが、NSTimerも重いとのことだったので避けていました ループメソッドがコントローラクラスのメソッドではなく、別クラスのものだったため、例があまりなかったので悩んでいました 正直わかりやすくするためで目的の結果には必要ないものなので、時間をとってしまったのは失敗でした^^;
215 名前:名称未設定 mailto:sage [2008/11/11(火) 12:58:33 ID:K+WZjSUa0] >ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな? 可能。やり方を知らないだけ。 NSConnection なんて馬鹿げたことするよりよほど簡単にできる。
216 名前:名称未設定 mailto:sage [2008/11/11(火) 13:16:49 ID:PUKvd1/H0] どうも 203 さんは日本語力が足りない気がする。 自分が書いたことを、相手が読んでわかるためには 何をどこまで書いたらいいか、考えていますか? あなたにとっては暗黙の了解でも、読んでる人にはわからないかも知れないし、 読んでる人にはそもそもまったく納得出来ない話かもしれません。 「NSTimer も重いとのことだったので」なんてどこから出て来たのか? NSConnection なんかつかわなくても、 performSelectorOnMainThread で withObject: で渡せばいいんでないかと おもいますが...
217 名前:名称未設定 mailto:sage [2008/11/11(火) 13:24:59 ID:wEupgvlC0] >>203 ///myViewCtrlのメソッド - (IBAction)push { //ループ開始 RoopTest* rt = [[RoopTest allc] init]; [NSThread detachNewThreadSelector:@selector(roopMethod:) toTarget:rt withObject:self]; } ///RoopTestのメソッド - (void)roopMethod:(MyViewCtrl*)myViewCtrl { /* AutoPoolの宣言など */ while(1) { /* ループ内の処理 */ if(....) { //更新する条件にはまった場合 [myViewCtrl performSelectorOnMainThread:@selector(updateLabel:) withObject:Label waitUntilDone:YES]; } } } どうでも良いんだけど、roopはloop。
218 名前:203 mailto:sage [2008/11/11(火) 13:49:08 ID:a+a3ujwr0] >>216 >>209 の >あんまし速度を求めないのであれば >スレッド使うよりNSTimerにした方が無難だと思うけど。 から勝手に重いものと解釈していました、申し訳ないです performSelectorOnMainThreadは初め使っていました が、できなかったのですが。。 >>217 をみてわかりました いろいろと勘違いをしていたようです みなさんありがとうございます 最後に、差し支えなければNSConnectionが劣っている?理由が知りたいです
219 名前:名称未設定 mailto:sage [2008/11/11(火) 13:54:33 ID:4BivI9sj0] 自分だったらthread側はstringに対するアクセッサ用意するだけで何もしない。 Thread側から他へ要求すると遅くなるし、結合度が強くなって簡単に修正できなくなる。 メイン側はtimerかevent loopのついでに進捗見て非同期にゆっくり表示すれば良い。 人間が視認できる速度は知れてるからそれで十分
220 名前:名称未設定 mailto:sage [2008/11/11(火) 14:21:48 ID:LVzKoGmm0] > NSConnectionが劣っている? というよりは、この場合は不必要である処理が間に挟まっちゃいます。 適材適所でご利用ください。
221 名前:名称未設定 [2008/11/11(火) 20:37:16 ID:nt03fgQI0] 超初心者です。 windowの立ち上がり時にcomboBoxに項目を自動的に加えたいのですが・・・ たぶんtableViewの時と同じようにdatasoceとして登録しておくのか、 window起動時の動作を定義できる関数とかがあるのだろうと思って調べたのですが 見つかりませんでした。
222 名前:名称未設定 [2008/11/11(火) 20:45:45 ID:nt03fgQI0] 一応IBのwindowのデリゲートをコントローラに接続して windowWillMoveをオーバーライドすることによって windowを動かしたときの定義はできたのですが・・・・・ windowを開いたときの動作を定義する関数もあるのでしょうか?
223 名前:名称未設定 [2008/11/11(火) 20:58:42 ID:nt03fgQI0] データソースで登録できますね。 お騒がせして申し訳ございません。
224 名前:名称未設定 [2008/11/11(火) 22:21:22 ID:nt03fgQI0] データソースで登録する仕方がわかんねー
225 名前:名称未設定 mailto:sage [2008/11/11(火) 22:52:41 ID:mgiOCDFu0] www.oomori.com/cocoafw/ApplicationKit/NSComboBox/index.html datasource使わなくてもできるっぽいけど。
226 名前:名称未設定 [2008/11/11(火) 23:07:33 ID:nt03fgQI0] >>225 確かに出来るんですが、起動時にすでにcomboBoxの中に項目が追加されているように したいんですよね。 で、最初はwindowDidBecomeKeyのオーバーライドでクリアさせたんですけど、 でもデータソースがあるって知って、今それをトライしているところです。
227 名前:名称未設定 mailto:sage [2008/11/11(火) 23:18:55 ID:u7V+zvQV0] >>226 awakeFromNibで追加するのはダメなん?
228 名前:名称未設定 mailto:sage [2008/11/12(水) 00:23:06 ID:7kG+RNj90] >>224 これじゃ駄目? -(void)awakeFromNib{ int i; _array = [[NSMutableArray alloc] initWithCapacity:0]; for(i=0;i<10;i++){ [_array addObject:[NSString stringWithFormat:@"String%d",i]]; } [myComboBox setUsesDataSource:YES]; [myComboBox setDataSource:self]; } windowBecomeKeyをどうしても使いたいなら、 -(void)windowDidBecomeKey:(NSNotification *)aNotofication{ if([myComboBox dataSource] != self){ 上と同じなので略。 } } で、↓これ。 -(int)numberOfItemsInComboBox:(NSComboBox *)aComboBox{ return [_array count]; } -(id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index{ return [_array objectAtIndex:index]; } 酔っ払ってカキコしてるから間違ってたらすまん
229 名前:名称未設定 mailto:sage [2008/11/12(水) 12:21:14 ID:/WVpT08D0] NSTextFieldのSubClassを作って並んでいる状態でtabキーを押してもNextKeyViewに移動しないんですがなにか特殊な処理は必要ですか? SubClassでは - (id)initWithFrame:(NSRect)r { self = [super initWithFrame:r]; if(self){ [self setDelegate:self]; before = [[NSString string] retain]; } return self; } - (BOOL)becomeFirstResponder { [before release]; before = [[self stringValue] retain]; return [super becomeFirstResponder]; } - (void)textDidEndEditing:(NSNotification*)aNotification { if(![before isEqual:[self stringValue]]){ [[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil]; } } しか処理をしておらず、編集終了時に内容に変更があれば、別のControllerで [window setDocumentEdited:YES]; を処理する、と言った感じです。 Controllerで通知を受け取らないのは、bindingを設定してあり通知がControllerに来なかったためです。 Xcode、OSともに最新のものを使用しています。 どなたかお知恵をお貸しください。
230 名前:名称未設定 mailto:sage [2008/11/12(水) 12:36:08 ID:rhZoTYoC0] >>229 - (BOOL)resignFirstResponder { return NO; } は書いてある?
231 名前:名称未設定 mailto:sage [2008/11/12(水) 12:39:39 ID:rhZoTYoC0] >>230 逆だったorz - (BOOL)resignFirstResponder { return YES; }
232 名前:名称未設定 mailto:sage [2008/11/12(水) 12:58:01 ID:DjwU0p+F0] >>229 何でこんな無茶苦茶なコードを書く必要があるのか聞きたいw サブクラス作る必要もないし、自分自身をdelegateにする必要もないし、Notificationをわざわざ転送する必要もない。
233 名前:名称未設定 mailto:sage [2008/11/12(水) 13:02:27 ID:/WVpT08D0] >>230 ありがとうございます。 それは書いていませんが、オーバーライドしていないメソッドは SuperClass(この場合NSTextFieldやNSControl)のものが勝手に使われる という認識ですが間違っているのでしょうか。 ところで今回の件に関しましては自己解決しました。。。 - (void)textDidEndEditing:(NSNotification*)aNotification { if(![before isEqual:[self stringValue]]){ [[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil]; } [super textDidEndEditing:aNotification]; ←これがポイント。 } と、最後にSuperClassのメソッドを呼び出してやることで無事にNextKeyViewが選択されました。 この問題に取り組んでくれた皆様、ありがとうございました。
234 名前:名称未設定 mailto:sage [2008/11/12(水) 13:08:58 ID:/WVpT08D0] >>232 私も正直こんな面倒なことはしたくなかったのですが。。。 Bindingを使いこなせていないせいかイマイチ「編集終了時に値が実際に変更されているかどうか」 を比較する手段が思い浮かばずこんなことになった次第です。
235 名前:名称未設定 mailto:sage [2008/11/12(水) 13:47:41 ID:rhZoTYoC0] >>234 >編集終了時に値が実際に変更されているかどうか それだけなら普通にデリゲート使えばいいんじゃね?
236 名前:名称未設定 mailto:sage [2008/11/12(水) 14:00:48 ID:bpwWLlCO0] >>234 Core Dataを使ったり自分でUndoを実装すればsetDocumentEdited:YESは自動でなされるだろうし、 そこまでしない小規模なものならdelegateのcontrolTextDidChange:でいいし、 Bindingされているモデルが変更されたときやりたいならモデルに対してKVOすればいいと思う。
237 名前:名称未設定 mailto:sage [2008/11/12(水) 14:26:27 ID:L0OFkZM60] どうぞ キー値監視について(Key Value Observing) developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueObserving/
238 名前:名称未設定 mailto:sage [2008/11/12(水) 15:04:38 ID:/WVpT08D0] >>235 Bindingが設定してあるNSTextFieldからはDelegateしても通知がポストされなかったんです。 >>236 >>237 CoreDataは一度かじって挫折してました。今度調べてみようと思います。 とりあえずはKVOの方向から解決策を模索してみます。
239 名前:名称未設定 mailto:sage [2008/11/12(水) 15:28:59 ID:RkfhbVlK0] >>238 Bindingしてても普通にデリゲートメソッド呼ばれるよ? 念のため書いておくとtextDidEndEditing:はデリゲートメソッドじゃないからね。 controlTextDidEndEditing:かcontrolTextDidChange:を使えばいいと思う…が、 もちろんcontrolTextDidEndEditing:は変更の有無は関係ないし呼ばれたときにはBindingで変更された後だから、 その用途には向いていないのかもしれない。
240 名前:名称未設定 mailto:sage [2008/11/12(水) 15:59:05 ID:/WVpT08D0] >>239 textDidEndEditing:はDelegateではないんですか。 大きな勘違いでした。どうりで。。。 そしてDelegateが呼ばれるということは そのときの私の何か他の部分がよくなくて正しくない動作をしていたか もしくはtextDidEndEditing:がController側で実装してあり呼び出されなかった、 という話だったのではないかという気もしてきますね。 じっくり調べてみます。 皆さんありがとうございました。
241 名前:名称未設定 mailto:sage [2008/11/12(水) 20:29:57 ID:3TV0qhbR0] ttp://www.friday.com/bbum/2008/11/11/autozone-the-objective-c-garbage-collector/ darwinsourceに最近、追加された(?)AutoZoneって何かと思ったら、objcのgcなんだ?
242 名前:名称未設定 [2008/11/12(水) 21:22:46 ID:xTjUSaTU0] >>228 非常に参考になりました。 ありがとうございます。 あー僕も酔っ払いながらかけるようになりたいっす。
243 名前:名称未設定 mailto:sage [2008/11/13(木) 05:09:02 ID:Zr8Iqv0x0] 暫くcocoaから離れてたんですが、 ファイルをゴミ箱に入れる方法ってNSworkspace以外に実装されてませんかね?ゴミ入れ音付で
244 名前:名称未設定 mailto:sage [2008/11/13(木) 08:32:00 ID:z+Jww09y0] NSAppleScriptでFinderにやらせれば音が出るよ。
245 名前:名称未設定 mailto:sage [2008/11/13(木) 09:22:35 ID:XbONM5Ht0] Finder でゴミ箱にすてるのと同じ動作をする API が Leopard で Carbon に追加されてます。 developer.apple.com/releasenotes/Carbon/RN-CarbonCore/ の File Manager のところを参照。
246 名前:名称未設定 [2008/11/13(木) 20:54:10 ID:Jm2bYpNn0] 初心者です ボタンを押したら新たにwindowを表示したいんですが そういった関数をご存知の方いませんか?
247 名前:名称未設定 mailto:sage [2008/11/13(木) 21:02:24 ID:qC4pYBiI0] >>246 まずオブジェクト指向の意味を理解してください。 そうすれば自ずと何をすれば良いか分かります。
248 名前:名称未設定 mailto:sage [2008/11/13(木) 21:15:19 ID:hEQXH/4q0] 複数のウインドウを表示したり制御するのって意外と難しくて面倒なんだよね。 メニューのアクションとかもキーウインドウに対してセンドしなきゃいけないし。
249 名前:名称未設定 [2008/11/13(木) 21:21:03 ID:Jm2bYpNn0] >>247 そこまで戻る必要があるんですか・・・・・ ただ単にAPIの問題だと思っていたのですが・・・・ 深いですね。
250 名前:名称未設定 mailto:sage [2008/11/13(木) 21:33:42 ID:Eaz1tdC20] 単にダイアログを表示するだけならAPIの問題だけどな。
251 名前:名称未設定 mailto:sage [2008/11/13(木) 21:39:35 ID:uPguWfkE0] >>246 Interface builderだけで簡単に作れるよ
252 名前:名称未設定 [2008/11/13(木) 21:53:20 ID:Jm2bYpNn0] >>251 customViewを使うことにしました。 教えていただいてありがとうございます