1 :
名称未設定 :
2008/10/26(日) 03:42:50 ID:Ato5tySs0
2 :
名称未設定 :2008/10/26(日) 03:43:22 ID:Ato5tySs0
3 :
名称未設定 :2008/10/26(日) 19:27:40 ID:Ob0KlCLP0
4 :
名称未設定 :2008/10/27(月) 17:43:20 ID:9uBJK4c00
いちもつ
5 :
名称未設定 :2008/10/28(火) 00:59:41 ID:YdtXB3i50
6 :
名称未設定 :2008/10/28(火) 01:32:23 ID:UXhSYK7I0
7 :
名称未設定 :2008/10/28(火) 01:41:19 ID:Fus9Bxnw0
8 :
名称未設定 :2008/10/28(火) 10:47:25 ID:e40mOyml0
9 :
名称未設定 :2008/10/28(火) 12:34:15 ID:/p+sPRRh0
10 :
名称未設定 :2008/10/28(火) 18:29:50 ID:e40mOyml0
11 :
名称未設定 :2008/10/28(火) 18:47:24 ID:/p+sPRRh0
OmniGraffleやOffice 2004(たぶん2008も)のUtility Windowのように、 ドラッグにより、Window同士がある程度近づくと、ドラッグがある程度離れるまで、 ぴったりくっついた状態をキープする動きを実装したいのです。 Windowの位置が近くかどうかは、WindowサブクラスのmouseDragged:内で、位置を取得して割り出せました。 で、Windowがくっついた位置をキープしたいのですが、この方法が分かりませんでした。 mouseDragged:内で、[NSWindow setFrameOrigin:]などで位置を強制的に固定しようとしても、 mouseUp:になるまで効きませんでした。どうすればいいのでしょう?
12 :
名称未設定 :2008/10/28(火) 21:40:46 ID:iCg2NlHu0
13 :
11 :2008/10/29(水) 19:46:15 ID:lZE7N+XQ0
>>12 まさにこれですね。じっくり見てみます。
とりあえずありがとうございます。
14 :
名称未設定 :2008/10/29(水) 22:02:38 ID:cQqhv9zc0
MallocDebugについて質問 MallocDebugで起動し、PopupButtonからLeaksを選択するとリークしているものが表示されると思っている。 次の手順で作ったアプリでリークが検出されるんだけど、本当にリークしているのか MallocDebugが誤動作しているのかどっちなんでしょうか。 Xcode3.1 OS10.5.5 MallocDebug1.7.1(89.0) Cocoa Applicationのテンプレートで新規作成 クラス作成 @interface MYObject : NSObject { IBOutlet NSTextField *textField; } -(IBAction)button:(id)sender; @end @implementation MYObject -(IBAction)button:(id)sender { [textField setStringValue:@"string"]; } @end WindowにNSTextFieldとNSButtonを配置し、アウトレットとアクションをセットし完成。 手順: テキストフィールドに入力したり、消したり、ボタンを押したりしてから MallocDebugでリークをチェックするとリークしているように見える。 (272 0x1>こんな感じになってます。272は操作を繰り返すと増えていきます。) 書いてて気にしないのが良いように思えてきた。
15 :
名称未設定 :2008/10/30(木) 16:30:52 ID:01X0n4GO0
オブジェクトのディープコピーをするにはどうしたらいいですか?
16 :
名称未設定 :2008/10/30(木) 23:25:40 ID:sjApbA2/0
自分でメソッドかけば仕舞いだと思いますが。 めんどくさければ、 NSKeyedArchiver で NSData にかためて、 NSKeyedUnArchiver で NSData にとかせばディープコピーになるんでは?
17 :
名称未設定 :2008/10/31(金) 00:07:46 ID:WY8mn5mD0
俺いつもそうやってるw
18 :
名称未設定 :2008/10/31(金) 00:22:36 ID:Ijy6iEQp0
19 :
名称未設定 :2008/10/31(金) 10:11:29 ID:nFHujBCu0
>>14 まあ自分では対処しようがないんだから気にすることは無いんじゃない?
あと@"string"をインスタンス変数に入れて
初期化が一回だけになるようにしたらどうだろう?
たしか文字定数は初期化一回だけのはずではあるけど
20 :
名称未設定 :2008/10/31(金) 22:16:59 ID:9ab+JRCT0
Xcode 3.1/Mac OS 10.5.5 (intel) MacBookとか、iMacとかのモデル名を取得する方法ってあるでしょうか。
21 :
名称未設定 :2008/10/31(金) 22:30:21 ID:3evJZ2XL0
>>20 ハードウエアの情報については、開発ツールのIORegistryExplorerで目的のものがあるか探してくれ
22 :
名称未設定 :2008/10/31(金) 22:34:21 ID:cB2Q2v1H0
23 :
名称未設定 :2008/10/31(金) 22:42:52 ID:23e1rSMO0
なにもおきなくて正解です。単にその操作は、 .h に書かれている内容を IB に教えてあげるだけです。 図 5.3 のようにするには、ステップ 3 をしないといけないです。 ライブラリから青い立方体のをドラッグ&ドロップして、 クラス名を NSObject から ConverterController にしてやらないといけないです。
24 :
22 :2008/10/31(金) 22:53:59 ID:cB2Q2v1H0
>>23 おお!なるほど!できました!
それにしても紛らわしい書き方ですね…。
25 :
名称未設定 :2008/10/31(金) 23:04:11 ID:23e1rSMO0
Apple のかわりにあやまっておきます。ごめんなさい。 あと、普通は 2. のステップ (.h を開く もしくは IB にドロップ) は IB が自動的に XCode に登録されてる .h を全部監視しているので しなくてもいいんですが、ときどき IB が混乱して 新しい .h を読まなかったりするので、やり方は覚えておいたほうがいいでしょう。 まあ頑張ってね :) 仕組みがわかれば IB は快適です。
26 :
名称未設定 :2008/11/01(土) 01:11:52 ID:n4dRfqKu0
>>21 ありがとうございます。見つかりました。
Macにもレジストリってあったんですか…。
27 :
名称未設定 :2008/11/01(土) 01:17:48 ID:nRvsaBqW0
てめー、Mr. Registry.appさんにケンカうってんのか
28 :
名称未設定 :2008/11/01(土) 03:04:31 ID:ABXtPrBS0
RegistryはMicrosoftの登録商標ですか
29 :
名称未設定 :2008/11/01(土) 04:53:05 ID:lyFOviiP0
iPhoneで何か作るか〜と昔買ったヒレガス本を引っ張り出してきて まーとりあえず、cocoaでOSX用乱数発生アプリを手本通りに組んで 追々思い出しながら手慣らしを〜・・・ インターフェースビルダにツールバーが無ぇ!(笑 ”システムフォント”はどこだ?(笑 NSObjectのサブクラスを・・・ってClassメニューはどこ行った!?(今日はここまでw Xcode3(というかインターフェースビルダーというか)が変わってて 昔の本の記述が役に立たねぇ orz
30 :
名称未設定 :2008/11/01(土) 12:13:33 ID:azplz7rR0
つうかCocoaの「たのココ」とかチュートリアルとか、 に何となく簡単そうに見える本から入っていく初心者って、 IBでGUI作ったりチュートリアルのコピペあたりで終わって つまづいて進歩しないか、飽きていくのがほとんど。 ちゃんとC言語、オブジェクト指向、Objective-C、と基礎から 積み上げて行かないと、いくらやっても表面なでてるだけで、 まともに書けるようにならないよ。
31 :
名称未設定 :2008/11/01(土) 12:39:28 ID:IrrqNq8q0
確かに今活躍してるCocoa開発者はNeXTのときにみっちり身につけてる人らばっかりだもんな。
32 :
名称未設定 :2008/11/01(土) 12:57:52 ID:5Mi4Vs1D0
MacOSXがリリースされてから、すでに7年はたっている。 これだけ時間があれば、NeXTを知らなくても、Cocoaを身につけられる
33 :
名称未設定 :2008/11/01(土) 13:00:28 ID:suYAyqpA0
んなことはない。「たのココ」は知らんが、俺は「ヒレガス本」から入った。 後はサンプルをつまみ食いしつつ、AppleのサイトのApplicationKitと Foundationのクラスのドキュメントを読めば何とでもなる。Cを知らないと 話にならんが、最初からObjective-Cをすべて網羅する必要はない。 それこそ、CとかObjective-Cの基礎からやってたんでは飽きてしまって Cocoaに辿り着けなくなるのがオチだ。 NeXTからやってる奴なんてごく少数だ。
34 :
名称未設定 :2008/11/01(土) 13:02:11 ID:suYAyqpA0
35 :
名称未設定 :2008/11/01(土) 13:13:39 ID:9deuPHbB0
俺も
>>33 と同意見
俺はプログラミングド素人
Macも6月に買ったばかり
未だに「オブジェクト指向?」「クラス?」「メソッド?」なレベルなんだけど
「たのCoco」とサンプルを参考にして既にiPhoneアプリを一本リリースした
これがそこそこ売れてしまったのでモチベーションUP!!
最近ようやくCの入門書を買って読み始めた
最初にCの入門書を読んでいたら確実に挫折していたと確信している
36 :
名称未設定 :2008/11/01(土) 17:13:04 ID:fjrubA2a0
37 :
名称未設定 :2008/11/01(土) 17:58:25 ID:n4dRfqKu0 BE:226400933-2BP(1235)
>>35 有料化できるアプリってどういうのなんだろ。
やっぱちゃんと作らないといけないイメージがある。
あと、レジストキー関係のプログラムが面倒くさそう。
適当でも良いんだけど、適当だと簡単に破られるしね。
そこらへん、iPhoneは有料アプリ組みやすいのかな?
俺の暇つぶし集↓今んとこ全部無料。
http://www.smilemac.com/
38 :
名称未設定 :2008/11/01(土) 19:57:18 ID:azplz7rR0
C言語からはじめる必要はないか。
ただIBで遊んだりチュートリアルのコピペをしばらく
楽しんだら、ある程度基礎的なことも理解していく必要は
あると思うけどね。
その点で、
> 最近ようやくCの入門書を買って読み始めた
という
>>35 はもう次のステップにうつっているから
良いんだけど、そういうステップに行く前に挫折する人が多いのも
事実。
39 :
名称未設定 :2008/11/01(土) 20:06:00 ID:ABXtPrBS0
Cすらも分からんのに何やるのさ
40 :
14 :2008/11/01(土) 20:41:08 ID:pd2MLZdJ0
>>19 元々はCocoaバインディングを使ってみて同じ現象になったんでバインディングの
使い方が悪いのかと思ってたんですが、使わなくてもなったんでデバッガの使い方が
悪いのかと思って質問しました。
気にしないことにします。
>>35 の行動力は凄いな。
41 :
名称未設定 :2008/11/01(土) 23:23:16 ID:/+/D9BW40
>>37 >あと、レジストキー関係のプログラムが面倒くさそう
iPhone の場合はそのあたりは全部 AppStore が面倒見てくれるので
なにも書かなくていい。
42 :
名称未設定 :2008/11/01(土) 23:32:13 ID:sVr4qJRL0
>>37 誰かと思ったらMacNicoPlayerの作者さんじゃないかw
暇つぶしとかそんなまた謙遜を。
なんか35見て感動したのでたのCocoAmazonで買ってくるか。
43 :
名称未設定 :2008/11/02(日) 00:12:33 ID:lKREfCNZ0
>>35 はかなりセンスあるんだな。
俺は趣味グラマ長いけど、未だにInterfaceBuilderには馴染めない。(泣
44 :
名称未設定 :2008/11/02(日) 00:23:21 ID:HoLoopJM0
>>43 習うより慣れろ。by パソコンサンデー おヅラも出てたな。
45 :
名称未設定 :2008/11/02(日) 00:36:37 ID:lKREfCNZ0
パソコンサンデー・・・ 何もかもが懐かしい。 スレ違いスマン。
46 :
35 :2008/11/02(日) 00:45:43 ID:lImmlfsv0
iPhone Dev Centerのドキュメントとサンプルコードが充実していたので
なんとか一本書けた感じです
http://developer.apple.com/iphone/ 細かいことはとりあえず気にせずに
とにかく一本AppStoreに出してみようじゃないか!
という勢いだけで突き進みました
課金については
>>41 の通り
料金をプルダウンメニューから選ぶだけです
もちろんFreeでもいいです
どんなに小さなアプリでも
とにかく一本完成させたことが大きな自信につながったので
小難しいことは軽くスルーしつつ一本作って公開してみるといいと思います
その点、iPhoneのAppStoreは小さいアプリをぽんぽん出せるのでおもしろいです
今後はOSXのアプリにも挑戦したいですねー
47 :
名称未設定 :2008/11/02(日) 01:00:42 ID:MKapFhX90
>>41 ほぉ、そうなのか。
ところで、$99払えば誰でもアプリ売れるの?
それとも審査とかがあるのかなぁ。
Developer Connectionは日本語文字化けするので、買い物用のApple IDとは別のIDにしてるんだが、もし審査あるのなら、メイン垢のほうが良さげ?
日本語名の垢でやるとフォーラムとかで自分の名前化けそうなんだよな。
そこらへん誰かkwsk。
>>46 iPhone開発って難しいイメージあったんだが、iPhone SDKのリファレンス見たら、そうでもないのか。
Cocoaアプリ作る要領で、リファレンス見ながらやればすぐいける感じかな?
ちょっくら作ってみるか、実機もって無いけどorz
48 :
名称未設定 :2008/11/02(日) 01:11:24 ID:lImmlfsv0
>>47 シミュレータで動かすだけなら無料
実機転送とAppStoreに公開したいのなら$99払う必要有り
アカウントの文字化け問題には俺を含めてかなり多くの日本人が悩まされているけど
「文字化けしてるから直してくれ!」って根気よくADCにメールすればそのうち直るw
これは人によっていろんなケースがあるから一概には言えない
iPhone開発に関しては
プログラミング経験のほとんどない俺が
Macを初めて買って一ヶ月ちょっとでリリースまでこぎつけられたことを考えると
ハードルは高くないはず
アプリは提出すると審査があって
脆弱性とかエログロとかがあると却下される
でもどこが悪いのか教えてくれるから直しやすい
詳しくはiPhone開発スレで
http://pc11.2ch.net/test/read.cgi/mac/1224089976/
49 :
名称未設定 :2008/11/02(日) 02:08:28 ID:lyXSXRrr0
バカお前ら騙されるな
>>35 = mkino (=たのcocoの著者) だ!!
>>35 は宣伝なんだよ!!
50 :
名称未設定 :2008/11/02(日) 02:09:20 ID:j7DXTstY0
ΩΩΩ < 何だって〜〜!
51 :
名称未設定 :2008/11/02(日) 02:20:49 ID:fJQfdcGh0
やられた!
>>35 見て、今すぐ書店に急いじゃったぜ!
52 :
名称未設定 :2008/11/02(日) 03:34:40 ID:Y374j0B40
アメリカの会社なのに社会主義的でおかしいよね
53 :
名称未設定 :2008/11/02(日) 04:03:29 ID:sEZUqidf0
54 :
名称未設定 :2008/11/02(日) 04:10:21 ID:Y6GegVsr0
なんで49とか53はそう悪意というか疑いの目で35を見るかな.... 嫉妬でもしてるのか?
55 :
名称未設定 :2008/11/02(日) 04:29:03 ID:9VM5jO2v0
iPhoneのアプリ作ってる人ってカタギじゃないですよね?
56 :
名称未設定 :2008/11/02(日) 04:55:14 ID:CejDTsgr0
>>54 パソコンサンデーとか言って通じる辺り、たぶんここの平均年齢層は高いのだと思うが、
そういう世代にとって、プログラミングというのは「模型を作る」のと同じレベルの趣味で、
さーて、なんかiPhoneだと世界相手にプログラム作って売れるらしいからなー
こりゃ面白い、あーでもMSXマガジンの頃はいくらでもアイデア出たのに、
長年離れてたら勘が鈍ったなー まーcocoaの作法覚えながら、また少しずつ鍛えるかー
ぐらいのもんなんだが、
「プログラミング」っていうのがひょいとパソコンを買ってきたら普通にできるホビー。
じゃなくて、プログラミングというのは専門学校かなにかで習って、
企業に就職したプロが、プロジェクトチームでカネを掛けてやるもの。
ってことに(その子の中では)なってる子が、
これ系の別スレにも迷い込んでて周りと話がかみ合ってなかった。
57 :
名称未設定 :2008/11/02(日) 05:26:20 ID:Y6GegVsr0
自分はパソコンサンデー?なにそれ?って感じの世代だがそのホビーとしてのプログラミングって言う発想は分かる。
まだ自分がMacユーザーではなかったときに一番最初にいじった言語はなでしこ(
http://nadesi.com/ )だったなそういえば。
その後JavascriptをちょっといじってからMacに移動して、AutomatorとAppleScriptに興奮して、最近たのCoCo版Tigerを買ってXcode 2.x系列を落として色々やっていたらLeopard版が出てしまったというのが現状。
でもそういえば自分は文系だった気がする。おかしいかな?
58 :
35 :2008/11/02(日) 07:17:52 ID:lImmlfsv0
パソコンサンデー? なんだか方向がズレてきてるけど とりあえず自分が言いたかったことは ・C言語からはじめて挫折するよりも、細かいところには目をつぶってサンプルコードを参考にしてとにかく何か一本完成させて公開までもっていく ・これにはiPhoneアプリが最適なのではないか (Appleの審査があるので無自覚に危険なアプリをばらまいてしまう恐れも無いし、メンテや課金も簡単) こんな感じです アプリは実名で出しているのでアプリ名晒しは勘弁してください これまでの売り上げはMacBookが買える程度です 売り上げのほとんどが海外です(これもiPhoneアプリのおもしろいところ!) ではみなさんもがんばって!
59 :
名称未設定 :2008/11/02(日) 09:39:27 ID:3POzmbdQ0
ObjC (Cocoa) + IB ってのが、簡易言語的な感じでとっつきやすいんだろうね。 で、実用的なGUIなアプリが割と楽に作れるし、達成感もあると。 素のC言語から初めて、何か人に使ってもらえるものを作るとなったら、 結構な道のりだからなあ。 iPhoneのアプリなんかは、単純なプログラミングの技術より、何かいい発想の ある人の方が面白いものを作れる可能性が高いような気がする。
60 :
名称未設定 :2008/11/02(日) 10:18:24 ID:anI9QKlo0
35が宣伝でも構わんが、たのCocoは正直オススメできない。 内容も薄いし、理解させようと言う意識が感じられない。 入門ならヒレガス本をオススメする。
61 :
名称未設定 :2008/11/02(日) 10:21:52 ID:sje4Pdr1P
しかしIBのインターフェースが変わったのがヒレガス本としては痛いな 早く新版でないかなー
62 :
名称未設定 :2008/11/02(日) 10:28:52 ID:Y6GegVsr0
63 :
名称未設定 :2008/11/02(日) 10:54:58 ID:3Vx+y2lH0
>>62 たぶん
>>61 は和訳されたものが欲しいのだと思う。
俺も旧版の和訳しか持っていないので
新版出てくれるとありがたい。
64 :
名称未設定 :2008/11/02(日) 19:07:02 ID:/LuXh8CU0
65 :
名称未設定 :2008/11/02(日) 19:14:03 ID:MKapFhX90
66 :
名称未設定 :2008/11/02(日) 21:02:55 ID:mqh/+RaW0
すみません、質問です。 アプリを起動した直後に特定のテキストフィールドなどにフォーカスを 当てたいのですが、どうすればよいのでしょうか?
67 :
名称未設定 :2008/11/02(日) 21:06:32 ID:sje4Pdr1P
>>64 コメントありがとね
画像アップはちょっとまってて、
2、3日でリアルが片付くから、それからやります
不便をさせて申し訳ない
68 :
名称未設定 :2008/11/02(日) 21:54:10 ID:lKREfCNZ0
ここ数日ADCのレスポンスが異常に悪いんですが、皆さんいかがですか? Software Updateもタイムアウトで完了できない有様で・・・。
69 :
名称未設定 :2008/11/02(日) 22:03:51 ID:Y6GegVsr0
>>68 Snow Leopardの新seedのせいとか?
70 :
名称未設定 :2008/11/02(日) 22:03:55 ID:rI4hnwUX0
71 :
名称未設定 :2008/11/02(日) 22:11:09 ID:MKapFhX90
>>68 -(void)awakeFromNib{
[myField becomeFirstResponder];
}
72 :
名称未設定 :2008/11/02(日) 22:11:42 ID:MKapFhX90
73 :
名称未設定 :2008/11/02(日) 23:48:27 ID:mqh/+RaW0
>>71 ありがとうございます。
ちなみに調べていて
[myWindow makeFirstResponder:myField];
でも行けたのですが、どちらも同じですかね?
74 :
11 :2008/11/03(月) 00:21:48 ID:3VCrO+9U0
通りすがりだけど becomeFirstResponder には Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly. とあるね
75 :
名称未設定 :2008/11/03(月) 00:58:24 ID:Hr4zrpPq0
becomeFirstResponderってオーバーライド用じゃなかったっけ?
76 :
名称未設定 :2008/11/03(月) 02:17:40 ID:qCH2Sci10
OSX10.3辺りで一時期cocoaに触れて、 その時に作ったソフトが起動すらしなくなったので改めて一から作り直そうと 久々にcocoaに再挑戦する所なのですが、 レオパルドの開発環境では何か根本的に作り方が変わったりしてるんでしょうか?
77 :
名称未設定 :2008/11/03(月) 02:44:14 ID:1yy3U75q0
再ビルドすれば起動するんじゃないの IBが変わりすぎて慣れるのに時間がかかる。
78 :
名称未設定 :2008/11/03(月) 02:52:02 ID:mTkV4jRn0
>>74-75 73ですけどご意見ありがとうございます。
makeFirstResponder を使った方が良いという事ですよね。
79 :
76 :2008/11/03(月) 03:22:30 ID:qCH2Sci10
以前改良しようと中途半端に手を加えた場所等、 もう全体構造が判らなくなってるので一から作った方が早いと思ったからです。
80 :
名称未設定 :2008/11/03(月) 03:36:44 ID:Foy84T9X0
いや、プログラムのサイズにもよるけど、
がんばって思い出してみたほうがいいんじゃないかな。
とりあえずは昔のプロジェクトを最新の xcode で開いて、
コンパイルしてみるのをおすすめします。
なにか 10.5 になってなくなった/挙動がかわった
API をつかってるのかもしれないし ...
デバッガでどこで落ちてるのかを調べるだけでもちがうでしょう。
別に本質的にはなにもかわってませんよ。
いろいろ Cocoa の API が増えてるのを除けば。
(CoreData, Binding とか... Binding は 10.3 にもあったっけ?)
>>77 さんもいうように
IB3 は IB2 からかなり変わりましたが、outlet / target の考え方はかわらないし。
クラスは IB 側で作らずに XCode で作ることが推奨されるようになったぐらい?
81 :
名称未設定 :2008/11/03(月) 10:01:54 ID:DCZONU6Z0
>>73 IBでwindowのinitialFirstResponderとテキストフィールドを繋げてもできた
後はnextKeyViewを繋げていけばタブキーの移動が制御できた
82 :
名称未設定 :2008/11/03(月) 10:02:46 ID:dKQvPNo00
>>78 becomeFirstResponderは「自分がFirstResponderになるか否か」を返すためのもの。
FirstResponderにしないビューを作りたい場合、
becomeFirstResponderをオーバーライドしてNOを返せば良い。
- (BOOL)becomeFirstResponder {
return NO;
}
83 :
名称未設定 :2008/11/03(月) 18:19:30 ID:jVQJ8W/E0
unsigned int hoge = 4264034304; NSData *hogedata = [NSData dataWithBytes:&hoge length:4]; NSLog(@"hoge is %d, hogedata is %@" , hoge, hogedata); とやってコンソールの出力を見ると hoge is -30932992, hogedata is <000028fe> となります。 32bitなので unsigned int なら4264034304(0xfe280000)はきちんと表示されると思ったのですが、 この-30932992や<000028fe>はどうして出力されるのでしょうか?
84 :
名称未設定 :2008/11/03(月) 19:17:31 ID:+8TFOxC70
>>83 こんな感じでどうでしょう
unsigned int hoge = 4264034304;
NSData *hogedata = [NSData dataWithBytes:&hoge length:4];
NSLog(@"hoge is %u, hogedata is %@" , hoge, hogedata);
union {
unsigned int ui;
unsigned char ch[4];
}test;
[hogedata getBytes:&test length:4];
NSLog(@"hoge2 is %u, %x, %x, %x, %x" , test.ui, test.ch[3], test.ch[2], test.ch[1], test.ch[0]);
http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html
85 :
名称未設定 :2008/11/03(月) 20:07:58 ID:YM+SucNB0
要は符号付き/無しとエンディアンの話か。
86 :
名称未設定 :2008/11/04(火) 18:54:34 ID:eYzISOw90
ライブラリのパスの渡し方を教えてください プロジェクトの設定でライブラリ検索にパスを渡しても エラーが生じます。 ちなみにヘッダファイルのパスは上手く通ります。
87 :
名称未設定 :2008/11/04(火) 23:33:36 ID:G6xtfucg0
>>86 スタティックライブラリ(.a?)ならファイルが並んでるツリーのところで
右クリック->追加->既存のファイルでライブラリファイルを選択
同様にヘッダファイルを追加してビルドすればできたっぽい
プロジェクトの設定とかはいじってない
88 :
87 :2008/11/04(火) 23:38:48 ID:G6xtfucg0
>>87 に追記
*.a、*.hの追加時にコピーは作っても作らなくてもできた
89 :
名称未設定 :2008/11/04(火) 23:41:04 ID:eYzISOw90
>>87 ありがとうございます。
明日確認してみます。
90 :
名称未設定 :2008/11/05(水) 21:09:37 ID:19atskXb0
NSTableView内のセルを編集可能にして セルの内容をプログラム内で読めるようにしたいのですが、 どのようなメソッドを使えばいいのでしょうか? 変更した時点でデータを読みに行く必要は無くて、 適当なタイミングで(Save Buttonを押した時とか)読めればいいのですが。 元々用意してたデータをNSTableViewに表示までは出来るようになったのですが。。。
91 :
名称未設定 :2008/11/05(水) 22:03:03 ID:bThhRr9i0
>>90 tableView:setObjectValue:forTableColumn:row:
セルの内容が変更になった時に呼ばれるから、
該当するデータを差し替えれば良い。
92 :
76 :2008/11/06(木) 08:26:12 ID:8NSMQDOL0
遅れながら、言われた通りちょこっと頑張って直せました。 レオパになってメモリ管理の新機能が付いたとかチラ聞きして その辺りも含めて立ち上がらなくなったのかとか色々考え過ぎて腰が引けてた様です。 有り難うございました。
93 :
90 :2008/11/06(木) 11:23:58 ID:FHeExVxB0
>>91 さん
出来ました! 素早い解答ありがとうございます。
94 :
名称未設定 :2008/11/06(木) 21:38:07 ID:5DYNPx6+0
NSTextField内の挿入ポイントを行の最後に移動したいのですが どうすればいいでしょうか? moveToEndOfLine: はNSTextViewでしかできませんでした。
95 :
名称未設定 :2008/11/06(木) 21:48:16 ID:4wWZp45n0
currentEditor で NSText を取り出して moveToEndOfLine:
96 :
名称未設定 :2008/11/06(木) 23:12:39 ID:xQKaLsP4P
うちのCocoa Wikiにコメントをくれた人、いますかね? ファイル添付機能を有効にしたので、再度編集していただけると嬉しいです。 ちなみにファイルサイズの上限は5MBです。
97 :
名称未設定 :2008/11/06(木) 23:48:14 ID:5DYNPx6+0
>>95 [[inputTextField currentEditor] moveToEndOfLine:self];
できました、ありがとうごさいます。
98 :
名称未設定 :2008/11/07(金) 01:50:36 ID:ww1WLO3q0
99 :
名称未設定 :2008/11/07(金) 09:13:42 ID:Xt4hlMq90
100 :
名称未設定 :2008/11/07(金) 11:15:30 ID:DD7bYBXs0
いまいち何が問題なのかわからないので、質問させてください。 まずMyClass.hとMyClass.mで下のように実装して @interface MyClass : NSObject { NSMutableArray *myArray; } @end @implementation MyClass -(id)init { self = [super init]; if( self ){ [myArray initWithCapacity:10]; [myArray addObject:[NSNumber numberWithInteger:1]]; NSLog(@"myArray is %@", myArray); } return self; } @end その上で、AppController.h とAppController.mで @interface AppController : NSObject{ MyClass classObject; } @end @implementation AppController -(void)awakeFromNib { classObject = [[MyClass alloc] init]; } @end というふうに初期化してみても、コンソール出力に(NULL)しか出ません。これは何故なのでしょうか? あとこのmyArrayをアプリケーションの起動から終了までずっと保持しておきたいのですが、ガーベジコレクションを使う場合、ルート集合から参照しておけばよいと本に書いてあります。具体的にはどうすればよいのでしょう?
101 :
名称未設定 :2008/11/07(金) 11:18:38 ID:I+wKqcuj0
↑フラッシュの穴を付いた攻撃なので注意
102 :
名称未設定 :2008/11/07(金) 11:20:56 ID:Xt4hlMq90
[myArray initWith...] じゃだめ。その時点では myArray は nil でしょ。 nil に initWith メッセージを送ってもどうしようもないです。 myArray=[NSMutableArray alloc]; として myArray に NSMutableArray のインスタンスをつくってから、 initWith... しないと。普通は組み合わせて myArray=[[NSMutableArray alloc] initWith... ] とするのが吉。 ルート集合って何のことなのか具体的なことが本に書いてあるはずだけど、 読みましたか?読めばどうすればよいのかこともわかるはずだけど...
103 :
名称未設定 :2008/11/07(金) 11:22:48 ID:Xt4hlMq90
え。このフラッシュって悪い奴なの?ごめんなさい。 単に犬の赤ちゃんの live webcam で可愛いなあと思ってみてたんですが...
104 :
名称未設定 :2008/11/07(金) 12:55:31 ID:xQSQPAmW0
それをなぜこのスレに貼る
105 :
100 :2008/11/07(金) 13:08:19 ID:DD7bYBXs0
>>102 さん
確かに[myArray [[NSMutableArray alloc] init..]とすると動きました。
初めて1月たつのに、まだまだ基本的な所が理解できていないようです。
本は荻原さんの詳解Objective-C2.0を読んでるんですが、
外部変数や大域変数がなんなのか、そこから参照するというのがよくわかりません。
106 :
名称未設定 :2008/11/07(金) 14:08:16 ID:5c1UEXI40
1ヶ月で理解出来たら、世の中はObj-Cプログラマーで溢れかえってるんだぜ?
107 :
名称未設定 :2008/11/07(金) 16:01:22 ID:SM5nwPQ/0
最近プログラミングを初めようと思いCocoa本買いました。 Mac買った時に付属していたDVDからXcodeインストールしたんですが、新規プロジェクトの中のCommand Line Utilityという項目はあるんですが、その中にStanderd ToolやFoundation Toolなどが入ってません。 どうすればいいでしょうか? 素人的なことで申し訳ないです…。(-.-;)
108 :
名称未設定 :2008/11/07(金) 16:47:19 ID:xH5O/xya0
買った本は何か? Xcode のバージョンは? 何をしようとしているの?
109 :
名称未設定 :2008/11/07(金) 18:55:42 ID:VaKcdyjz0
>>108 バージョンは3.0です。
買った本は木下誠「たのしいCocoaプログラミング」です。
実験用のプロジェクトをつくりたいんですが。
110 :
名称未設定 :2008/11/07(金) 19:25:52 ID:zN7DmkVq0
NSString定数で漢字を使えない設計にした人 すぐに自殺してください。
111 :
名称未設定 :2008/11/07(金) 19:35:18 ID:Qu5mLm7y0
>>110 貴方の無知は痛々しいです。何が原因か推測さえ出来ないのですか。
112 :
名称未設定 :2008/11/07(金) 20:00:31 ID:zN7DmkVq0
原因はObjective-Cのアーキテクトが馬鹿だからです。
113 :
名称未設定 :2008/11/07(金) 20:02:07 ID:xH5O/xya0
たのココ(10.5)にはcommandLineAppなんて無かった気がするが…まぁ、無くても出来るよ。 新規プロジェクト>Application>Cocoa Application を選んで、適当にプロジェクト名を つける。後はXCodeのウィンドーにある>グループとファイル>Other Sources>main.m をいじれば良い。StanderdToolのmain.c(Cしか使わなければ、Xcode上でmain.mを選択、 右クリック>名称変更で、.c に)は、 #include <stdio.h> int main (int argc, const char * argv[]) { // insert code here... printf("Hello, World!¥n"); return 0; } FoundationToolのmain.mは、 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // insert code here... NSLog(@"Hello, World!"); [pool drain]; return 0; } なので、書き換えれば良い。
114 :
名称未設定 :2008/11/07(金) 20:24:34 ID:WHDeBs4d0
>>109 木下の本はやめた方が良いと思う。
ヒレガス本にしる。
>>112 じゃやめちまえ。
バカに付き合うほど暇なら別だが。
115 :
名称未設定 :2008/11/07(金) 20:30:00 ID:qG8ur2d10
うは、馬鹿降臨。
116 :
名称未設定 :2008/11/07(金) 20:43:30 ID:7lDacPZy0
>>110 @"漢字ひらがなアイウエオ"
で全然通りますが。
117 :
名称未設定 :2008/11/07(金) 21:03:18 ID:zN7DmkVq0
118 :
名称未設定 :2008/11/07(金) 22:33:21 ID:jHitKJj60
てかさんざん既出だろ。
119 :
名称未設定 :2008/11/07(金) 22:39:03 ID:b9cUYWPw0
>>112 それが「objective-cの」言語仕様だと思っている時点でアホウだな。
120 :
名称未設定 :2008/11/07(金) 22:41:40 ID:wHlO12kf0
態度わりーw
121 :
名称未設定 :2008/11/07(金) 23:08:52 ID:4BK/dCS30
>>107 >Standerd ToolやFoundation Toolなどが入ってません
けど変だね。普通はそこに5つはいってるけどな
122 :
名称未設定 :2008/11/08(土) 00:22:53 ID:kXRjTak80
@"..." の定数って、 7 bit ascii 以外は未定義だよね ??? [NSString stringWithCString: "...." encoding: ソースコードのエンコーディング] を使うのが安全なんではないかと思いますが。 あと、お願いだからみなさん NSString <---> char* の変換で encoding 指定のない deprecate されてるメソッドは使わないようにしましょう。 それらのメソッドは Cocoa のデフォルトエンコーディングをつかいますが、 Cocoa のデフォルトエンコーディングは環境設定で言語を何にしているかに 依存するので、日本語環境では動いているソフトが英語環境にすると 途端に動かなくなったりその逆とかいう意味不明なバグが多発します。 これのせいで英語の作者のつくったユーティリティーが 日本語ファイル名をちゃんと扱えなかったりするので泣けます。
123 :
名称未設定 :2008/11/08(土) 02:14:53 ID:HB66BG0k0
>>122 これ何に対するレス?
>[NSString stringWithCString: "...."
>encoding: ソースコードのエンコーディング]
>を使うのが安全なんではないかと思いますが。
とりあえず autorelease されてる点は注意だよね。
それに「ソースコードのエンコーディング」ってのも、ポータビリティを考えると
どうよ、って感じがする。
>これのせいで英語の作者のつくったユーティリティーが
>日本語ファイル名をちゃんと扱えなかったりするので泣けます。
この場合はエンコーディングを指定しても本当は駄目で、
filesystemRepresentaion を使わないといけないのだが。
現実的にはUTF-8にしておけば一応大丈夫だけど。
中途半端なアドバイスをするお前に泣けたw
124 :
名称未設定 :2008/11/08(土) 02:46:09 ID:D6mFIMvA0
>>113 ありがとうございました。
助かりました。(≧∇≦)
125 :
名称未設定 :2008/11/08(土) 06:50:28 ID:+B195WiV0
NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。 NSMenuItemのArrayとできちゃえばサイコーなんですが…。
126 :
名称未設定 :2008/11/08(土) 08:06:27 ID:HVynMMKD0
超ハイパーウルトラ初心者ッス IBでコントロールを二つ用意しそれぞれアウトレットとアクションを一つずつ持ちます。 でWindowsにテキストフィールド二つとスタートボタンがあります。 テキストフィールドはそれぞれ上記で用意した各コントロールのアウトレットと一対一でコネクトさせています。 しかし、アクションであるスタートボタンを二つのコントロールにコネクトさせることができません! どちらか一つとコネクトさせると一方のコネクトが(勝手に!)解除されます。 スタートボタンを押すと二つのコントロールを起動させたいのですが・・・・
127 :
名称未設定 :2008/11/08(土) 08:48:36 ID:SWmtZyAd0
InterfaceBuilder で何でもできると思ったら大間違いだ
128 :
名称未設定 :2008/11/08(土) 09:04:59 ID:NHu1yaCo0
>>126 Windowsってw
Actionは1つのオブジェクトにしか送信できないので、
複数のオブジェクトを動作させたい場合は中間にオブジェクトを置くのが手っ取り早い。
ボタン→中間オブジェクト┬→オブジェクト1
└→オブジェクト2
というか、1つのアクションで完結するように設計を見直した方が良いと思うが。
129 :
名称未設定 :2008/11/08(土) 11:20:51 ID:Nk749XR60
>>125 できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。
130 :
名称未設定 :2008/11/08(土) 20:44:39 ID:d4+4vCvN0
超ハイパーウルトラ初心者ッス
>>128 さんの言うとおりに中間オブジェクト(Viewクラス)を作りました。
そのViewクラスにIBのテキストフィールドと結びつけるアウトレット変数を定義したのですが・・・・
そのアウトレット変数を
>>128 で定義されたオブジェクト1や2で使用するにはどうしたらいいのでしょうか?
参考詳細
View.hファイル
IBOutlet id textField1;
-(IBAction)startBu:(id)sender;
View.mファイル
-(IBAction)startBu{
OBJ1 obj1 =[[OBJ alloc] init];
[obj func];
OBJ.m
-(void) func{
[[textField1 setStringValue:"Hello World"]]; //ここでView.hで定義したtextField1を使用したい
}
131 :
名称未設定 :2008/11/08(土) 20:51:09 ID:d4+4vCvN0
超ハイパーウルトラ初心者ッス 今日僕はCocoaの奇跡を見ました。 すごい、すごすぎる! テキストフィールドをプロパティとして簡単に宣言して 等号で結べばいいだけだなんて・・・・・・・・ まー無理だろなーと思いながら試しただけなのに・・・・・
132 :
名称未設定 :2008/11/08(土) 21:00:30 ID:C2KKDa3W0
超ハイパーウルトラ初心者ッス 今日はまだ一度もうんこ出てないのに お腹がすきます すごい、すごすぎる!
133 :
名称未設定 :2008/11/08(土) 22:00:57 ID:NHu1yaCo0
>>130 なんか錯乱しとるから、もうちょい勉強してください。
134 :
名称未設定 :2008/11/08(土) 23:46:37 ID:RNOdKyfY0
つーか、キャラ作んなくていいよ。
135 :
名称未設定 :2008/11/09(日) 00:22:06 ID:L1s+Atna0
Objective-C糞過ぎ C++かJavascriptかRubyか、最悪でもJavaで書けるにしろ つーか、Cocoaなんて廃止して、.NET Framework使えるようにしろよ
136 :
名称未設定 :2008/11/09(日) 00:26:57 ID:hlpGev2i0
おまえがやれ
137 :
名称未設定 :2008/11/09(日) 00:33:30 ID:L1s+Atna0
お断りだ
138 :
名称未設定 :2008/11/09(日) 00:38:23 ID:IHDltFNu0
2行目が何を言いたいのか分からんが C++とかJavaでやりたいならやればいいじゃん
139 :
名称未設定 :2008/11/09(日) 00:39:38 ID:5aT87bHO0
質問です。 たぶんちょっとしたことで出来るんだと思いますが、、、 あるクラスAのメソッドのループから、ウィンドウ中のラベルなどを更新って出来ますか? ビューコントローラは別にあり、ビューコントローラをインスタンス化してメソッドを直接呼出し と、安易な考えをしていたのですが、やはり出来ませんでした。 具体的には、ループが進むごとにウィンドウ中のラベル(進行状況%表示)を更新したいのですが、 どうすればいいでしょうか?
140 :
名称未設定 :2008/11/09(日) 00:42:14 ID:dKIqpJ+F0
[labelTextField setStringValue:@"hoge"]; [labelTextField display]; これでどうか
141 :
名称未設定 :2008/11/09(日) 00:42:53 ID:dKIqpJ+F0
ループの処理を別スレッドにした方がいいけどな
142 :
名称未設定 :2008/11/09(日) 00:48:20 ID:L1s+Atna0
>>138 分からないならコメントするな。素人は黙ってろ
143 :
名称未設定 :2008/11/09(日) 00:49:34 ID:5aT87bHO0
>>ID:dKIqpJ+F0 ありがとうございます! スレッドは扱ったことないので、ちょっと勉強してきます。 その場合、ラベルをコントローラにIBOutletとして定義すると思うのですが、 ループ中からそのラベルオブジェクトを扱う事はできるんですかね? ループの存在するクラスに定義するのは避けたいので・・
144 :
名称未設定 :2008/11/09(日) 00:53:03 ID:dKIqpJ+F0
どこで定義しても特に支障無く扱うことができると思うが ものは試しにやってみれ
145 :
名称未設定 :2008/11/09(日) 01:09:57 ID:B9u3WR7L0
メインスレッド以外からは GUI を直接いじってはいけないので、 [object performSelectorOnMainThread: ... waitUntilDone:....] だったかなにかをつかいましょうね。
146 :
名称未設定 :2008/11/09(日) 01:10:15 ID:5aT87bHO0
なるほど、、どこからでも扱えるんですね。 ちょっと今は試せないですが、ありがとうございました! 近々自分のMacを買うつもりなので、転がりながらプログラミングしたいものです。
147 :
名称未設定 :2008/11/09(日) 01:21:23 ID:fqJDb0t30
>>145 ん、そうだっけ?
メインスレッドじゃなくてもOKでしょ?
何か制限あったと思うけど、忘れた。
148 :
名称未設定 :2008/11/09(日) 01:25:37 ID:IHDltFNu0
GUI系はメインじゃないと危険だったかと プログレス表示に精密さを求めないならsetNeedDisplay:YESとかでもアリじゃないかな
149 :
名称未設定 :2008/11/09(日) 01:28:00 ID:NDkcMBd2P
150 :
名称未設定 :2008/11/09(日) 01:34:57 ID:IHDltFNu0
>>149 を読んで意味が分かったけど、
>>135 の2行目は日本語の意味が良く分からんかったってこと。まぁカリカリすんなよ。
151 :
名称未設定 :2008/11/09(日) 01:53:05 ID:ROIk3bo+0
>>135 出来ないのはお前が糞だから。俺は出来るもんね。
152 :
名称未設定 :2008/11/09(日) 03:54:10 ID:B9u3WR7L0
C 系の言語の文法をひとつでも既に知っていて、 Obj-C の文法が二日でわからないひとは何かがおかしい。 Cocoa API の全貌をつかむのは大変なのはわかるけど、 それは Obj-C の文法の問題ではないベ。
153 :
名称未設定 :2008/11/09(日) 06:13:08 ID:40c4vp+k0
154 :
名称未設定 :2008/11/09(日) 08:05:26 ID:ijj+bVEA0
110=135でOK?
155 :
名称未設定 :2008/11/09(日) 08:10:56 ID:40c4vp+k0
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 :
名称未設定 :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 :
名称未設定 :2008/11/09(日) 11:29:50 ID:Cd0AMfEC0
後付け感ありまくりではあるね シンプルに書けないのも今風ではないね MacRubyに期待(^^;
160 :
名称未設定 :2008/11/09(日) 12:48:29 ID:xdgDUb6t0
>>158 じゃあ、好きな言語を使ったら良いんじゃない?
.NET使う環境から一生出てこなくて良いよ
161 :
名称未設定 :2008/11/09(日) 13:00:26 ID:la8cu0hU0
>>156 何をしたいのかわからないけど、
NSMenuのアイテムとNSPopupButtonのアイテムを同期させたい、
または同じ内容にしたいということ?
162 :
名称未設定 :2008/11/09(日) 13:53:57 ID:VAAVuJ8X0
>>158 美的感覚の問題だったのか。
じゃあまあ個人の好き嫌いだからそれでいいんじゃね?
僕は括弧の乱舞は好きだけど。
あと、メソッド名が長くてほとんど文章なので
コメントを書く必要がほとんどない、というか
プログラム自体がほとんどコメントになるのはいい点だと思う、って
これは Obj-C の文法の問題ではなくて Cocoa の API の問題か。失礼。
163 :
名称未設定 :2008/11/09(日) 14:43:48 ID:YNFGyvs40
文法的に美しく無いとされるフランス語にも素晴らしい文学は存在する。 Objective-Cに文句を言うのは勝手だが、 経験豊富なプログラマであれば言語に左右されない美しいアプリを作れるはず。
164 :
名称未設定 :2008/11/09(日) 15:18:38 ID:uAivnwgs0
そういうこと言うと、論点ずらしって言われるぞ。
165 :
名称未設定 :2008/11/09(日) 15:20:17 ID:YNFGyvs40
166 :
名称未設定 :2008/11/09(日) 16:00:55 ID:cf3ZhWey0
あれじゃないの? iPhoneのアプリ開発とか注目されてきてるからObj-Cで組んでみようと思ったけど VBしか経験がなくて文法の違いが吸収できず、HelloWorldすら出せずにイライラしたとか。
167 :
名称未設定 :2008/11/09(日) 16:05:18 ID:YNFGyvs40
>>166 それはあるよな。
iPhone出てから「初心者です」みたいなのが増えた。
168 :
名称未設定 :2008/11/09(日) 16:23:25 ID:mFvSzNPX0
>>161 はい、だいたいそういう内容です。
title以外の内容があるアイテムとか、セパレータとか、NSMenuItem自体には
いろいろな状態があるので、そういった状態を抱えたまま同期したいのが希望です。
169 :
名称未設定 :2008/11/09(日) 16:42:55 ID:HoxfCMO50
俺はObjective-Cの簡潔なオブジェクトシステムが好きだ。しばらくすると一風変わったメッセージ式にも愛着がわいてくる。
170 :
名称未設定 :2008/11/09(日) 17:14:50 ID:L1s+Atna0
お前らの言いたいことはわかった。「オラの方言が最高だべさ」ってことだろ。一生時代遅れの田舎言語使ってろ。
171 :
名称未設定 :2008/11/09(日) 17:23:45 ID:XOOSfoZw0
はいはい田舎田舎。 厨房発言に上げ荒し、おまけにドトネト最高か。 まじでVB厨のバカ丸出しだな。
172 :
名称未設定 :2008/11/09(日) 17:25:12 ID:40c4vp+k0
田舎の方が味があって和むんだよ。それが分からないとはまだまだだな。
173 :
名称未設定 :2008/11/09(日) 17:34:46 ID:BSsYOmbX0
言語とか処理系て、どうせ借り物でしょw 目的は何だ?金?w だったら冷や汗たらして働けw 何か作りたいものがあるなら最適な手段を選べばいいだけ
174 :
名称未設定 :2008/11/09(日) 18:06:51 ID:YNFGyvs40
iPhoneで小遣い稼ぎしようと思ったけど 理解できなくて八つ当たりしてるだけだろ。
175 :
名称未設定 :2008/11/09(日) 18:49:44 ID:Cd0AMfEC0
まあ誰がなんと言おうとObjectiveC++ は最強だと思うけどね C++/CLIよりも使い易いし、判り易い でも、ちょっと古い感じはするね MacRubyに(ry
176 :
名称未設定 :2008/11/09(日) 19:17:05 ID:oz3XxqjX0
Objective-C++は最強にカオスってことですねわかりまs
177 :
名称未設定 :2008/11/09(日) 20:05:06 ID:n+KcZ/pQ0
心の寂しい方がいらっしゃる様ですね きっと心だけでなくプログラムも隙間だらけなのでしょう
178 :
名称未設定 :2008/11/09(日) 21:06:35 ID:Se6LpMt+0
>>158 Ruby でも Java でも C++ でも JavaScript でも出来ますが、何か?
179 :
名称未設定 :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 :
名称未設定 :2008/11/10(月) 10:38:38 ID:ku2SFWuM0
C++とか、今のスレの流れは別に興味ないけど、
>>135 が今までどんなアプリを作ったのかが
非常に気になるw
181 :
名称未設定 :2008/11/10(月) 11:56:44 ID:W6D0WGgG0
多分、hello, world.だろ。
182 :
名称未設定 :2008/11/10(月) 12:10:30 ID:/kpuffDm0
ついで、「こんにちわ、世界」と出力しようとしたが、 エンコードがあっていなかったので文字化け。 キレる。 ってのが王道です。
183 :
名称未設定 :2008/11/10(月) 12:56:58 ID:r8VH7KRc0
@ も序でに忘れてんじゃね?
184 :
名称未設定 :2008/11/10(月) 13:13:37 ID:+x+/8+Ia0
学び始めて間もなく、色々とやってみたのですが解決できず悩んでいます。 場違いかも知れませんが質問させてください。 テキストフィールドからNSMatrixをつくり、個々のセルにint型の数値を表示しています。 マウスクリックで選択したセルから数値を取り出しています。 ところが、 個々のセルに対して、NSCellやNSTextFieldCellのメソッド、例えばsetTextColor:等を 送るとその後、セルから数値を取り出せなくなってしまいます。どうしてそうなるのかが 判りません。どなたかご教授いただけませんか?宜しくお願いします。
185 :
名称未設定 :2008/11/10(月) 14:01:43 ID:jRir/5vF0
>>184 セルを参照しているインスタンス変数を上書きしておらんか?
186 :
184 :2008/11/10(月) 14:25:50 ID:+x+/8+Ia0
>>185 レス有り難うございます。
セルの指定は、以下のようにしています。
[[matrix cellWithTag:n] setTextColor:[NSColor blueColor]];
ご指摘いただいたようにポインタを使った形にしてみたのですが、
やはり上手く行きませんでした。
187 :
184 :2008/11/10(月) 17:40:23 ID:+x+/8+Ia0
一人でばたばたして、連続の書き込みになり申し訳ないのですが、 もう少し補足させてください。 マトリクスのセル(テキストフィールド)に数値を設定しているそのメソッドにおいて、 セルの文字の色を変えようとしたとき、 「元の色 -> さらに元の色と同じ色を設定」 の場合はその後でも別のメソッドから数値が取得できる。ところが、 「元の色 -> 別の色に設定」した場合、取得できなくなる。 これはひょっとして文字の色を変更したことによって、 セルが持つテキストフィールドセルが別もの(オブジェクト)に 置き換わったということなのか?と考えています。 ご助言頂ければありがたいです。
188 :
名称未設定 :2008/11/10(月) 19:16:30 ID:k7er6Elw0
取り出せないって具体的にはどうなるんですか? エラーでアプリケーションが落ちるとか? 期待した値じゃなくて0しか返ってこないとか?
189 :
名称未設定 :2008/11/10(月) 19:35:34 ID:NIf0gNWD0
値をセットするところ、ゲットするところのコードを見せた方が早いよ。 言葉だけじゃさっぱり伝わらない。
190 :
名称未設定 :2008/11/10(月) 20:12:33 ID:atwbsV0eO
昨日、ループからGUIのラベルを更新したいと言っていた者です ループの存在するメソッドをスレッド化し、ラベル更新部分をメインスレッドで実行するようにしました しかし、ラベルは更新されませんでした 更新部分は [対象ラベル setStringValue:newLabel]; [対象ラベル display]; となっています newLabelはログで確認済みです 携帯からなんで間違っているかもしれませんが、よろしくお願いします
191 :
184 :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 :
名称未設定 :2008/11/10(月) 22:01:15 ID:k7er6Elw0
>>191 [NSColor blueColor]に変えても
ウチでは元気よく動いてますが・・・。
10.5.5、DevTools多分最新。
193 :
名称未設定 :2008/11/10(月) 22:34:29 ID:wRpzRNtU0
自分はwhiteColorにしましたが動いていますね 数字は見えなくなりましたが...
194 :
184 :2008/11/10(月) 22:50:22 ID:+x+/8+Ia0
>>192 レス有り難うございます。
なんと・・。実はこちらは未だOS10.4.11で、XCODE2.5なのですが、
リファレンスではNStextFildCellは10.0以降とあるのでバージョン
のことはまったく頭にありませんでした。
>>191 のコードのままで上記
のような結果になっています。プログラミング初心者がおこがましいですが、
これはXCODEやコンパイラのバグと考えるべきなのか、それともまだ他に
原因があるのか・・・?取りあえず今日は頭を休めます。
いずれにしてもレス頂いた方々、わざわざ実際に試してくださった192さん、
感謝いたします。有り難うございました。
195 :
名称未設定 :2008/11/10(月) 22:53:24 ID:jRir/5vF0
>>194 なんでもバグの所為にすると怒られるよ。
どこか間違ってるんだろ。
196 :
184 :2008/11/10(月) 22:55:24 ID:+x+/8+Ia0
>>193 さん、わざわざ試して頂いて有り難うございました。
やはり、私の環境に問題がある可能性が明確になってきました。
感謝です。
197 :
190 :2008/11/10(月) 22:56:24 ID:hIykeUF50
質問してる身であれですが、、、
>>184 さん
カラースペースの設定とか関係ないでしょうか?
見当違いの回答かもしれないですが、RGB色空間を扱っているとき、[NSColor blackColor]が使えなかったもので、、、
自分も始めたばかりなんでそのあたりが知りたいです
198 :
184 :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 :
名称未設定 :2008/11/11(火) 01:05:54 ID:PUKvd1/H0
>>194 >>190 コード全体を晒したほうがいいんじゃないかな。
きっと自分では予期せぬところがおかしくなっていると思われる。
基本的に、なんかプログラムをかいて、バグがあって、
自分ではここがおかしいんじゃないかなというところを
いくら考えて修正しても正しく動かないばあいは、
その自分がここがおかしいんじゃないかなと思うところだけ
抜き出して 2ch で聞いても改善する可能性は非常に低いです。
なぜなら、そういうときはえてしてそこと違う場所がおかしいからです。
201 :
名称未設定 :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 :
名称未設定 :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 :
名称未設定 :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 :
名称未設定 :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 :
名称未設定 :2008/11/11(火) 03:13:01 ID:K+WZjSUa0
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理? ここが諸悪の根源だ。 あと performSelectorOnMainThread:@selector(updateMethod) でコロンを忘れてる。
206 :
名称未設定 :2008/11/11(火) 03:38:59 ID:K+WZjSUa0
RoopTest* rt = [[RoopTest allc] init]; ここもなんだか気持ち悪いな。
207 :
名称未設定 :2008/11/11(火) 08:11:40 ID:fkU0XAOh0
何で画面更新の度に MyViewCtrl を alloc してるんだ? どう考えたら、こんなコードを書けるんだろう... あと、allc じゃなくて、alloc だろ。 明らかに自分のコードに問題があるのに、 >これはXCODEやコンパイラのバグと考えるべきなのか とか、 >やはり、私の環境に問題がある可能性が明確になってきました。 とかよく言えるな。 コンパイラのバグとか考えるのは最後だろ。
208 :
名称未設定 :2008/11/11(火) 08:12:02 ID:PUKvd1/H0
updateMethod: で newLabel をどう渡しているつもりなのか? あと、 MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理? 無理ではないけど、そうやってつくったものは インターフェースビルダーで既につくったオブジェクトとは別のものです。
209 :
名称未設定 :2008/11/11(火) 09:13:26 ID:FpRggH2w0
あんまし速度を求めないのであれば スレッド使うよりNSTimerにした方が無難だと思うけど。
210 :
184 :2008/11/11(火) 09:57:42 ID:zECfChq+0
皆さん、レスポンス頂いて有り難うございます。
>>207 さん、203、204さんは私とは別の方です。軽卒な発言を書いたのは私の方です。
平にご容赦ください。
>>200 さん
>>191 のコードのみで、やはり値が取り出せない状況になっております。
>>201 さん 結果は変わりませんでした。
>>199 さん、わざわざ試していただき有り難うございました。199さんが
>>191 のコードのみで
検証されたとしますと、私のInterface Builderでの作業が間違っているのかもしれないと考え始め
ました。
夜まで作業できませんが、なんらかの結論なり経過なりはまたご報告させて頂きます。
有り難うございました。
211 :
名称未設定 :2008/11/11(火) 10:23:26 ID:fkU0XAOh0
212 :
203 :2008/11/11(火) 12:21:53 ID:a+a3ujwr0
みなさん、いろいろ助言をありがとうございます 調べたところ、NSConnectionを用いてスレッド間通信をすればよいとあったのでやってみたところ、ついに出来ました! やはり、ラベルの授受がうまく行ってなかったようですね ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな? 上にある、RoopTestにIBOutletを定義しても更新できなかったので。。 とりあえず、今後のGUI更新作業は、必ずコントローラ上で行うようにします
213 :
名称未設定 :2008/11/11(火) 12:44:52 ID:FpRggH2w0
>>212 結局やりたい事は名にだったんだろう?
NSTimerだとかなり簡単なんだが。
214 :
203 :2008/11/11(火) 12:52:55 ID:a+a3ujwr0
>>213 目的の処理はとても重いのですが、NSTimerも重いとのことだったので避けていました
ループメソッドがコントローラクラスのメソッドではなく、別クラスのものだったため、例があまりなかったので悩んでいました
正直わかりやすくするためで目的の結果には必要ないものなので、時間をとってしまったのは失敗でした^^;
215 :
名称未設定 :2008/11/11(火) 12:58:33 ID:K+WZjSUa0
>ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな? 可能。やり方を知らないだけ。 NSConnection なんて馬鹿げたことするよりよほど簡単にできる。
216 :
名称未設定 :2008/11/11(火) 13:16:49 ID:PUKvd1/H0
どうも 203 さんは日本語力が足りない気がする。 自分が書いたことを、相手が読んでわかるためには 何をどこまで書いたらいいか、考えていますか? あなたにとっては暗黙の了解でも、読んでる人にはわからないかも知れないし、 読んでる人にはそもそもまったく納得出来ない話かもしれません。 「NSTimer も重いとのことだったので」なんてどこから出て来たのか? NSConnection なんかつかわなくても、 performSelectorOnMainThread で withObject: で渡せばいいんでないかと おもいますが...
217 :
名称未設定 :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 :2008/11/11(火) 13:49:08 ID:a+a3ujwr0
>>216 >>209 の
>あんまし速度を求めないのであれば
>スレッド使うよりNSTimerにした方が無難だと思うけど。
から勝手に重いものと解釈していました、申し訳ないです
performSelectorOnMainThreadは初め使っていました
が、できなかったのですが。。
>>217 をみてわかりました
いろいろと勘違いをしていたようです
みなさんありがとうございます
最後に、差し支えなければNSConnectionが劣っている?理由が知りたいです
219 :
名称未設定 :2008/11/11(火) 13:54:33 ID:4BivI9sj0
自分だったらthread側はstringに対するアクセッサ用意するだけで何もしない。 Thread側から他へ要求すると遅くなるし、結合度が強くなって簡単に修正できなくなる。 メイン側はtimerかevent loopのついでに進捗見て非同期にゆっくり表示すれば良い。 人間が視認できる速度は知れてるからそれで十分
220 :
名称未設定 :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 :
名称未設定 :2008/11/11(火) 22:52:41 ID:mgiOCDFu0
226 :
名称未設定 :2008/11/11(火) 23:07:33 ID:nt03fgQI0
>>225 確かに出来るんですが、起動時にすでにcomboBoxの中に項目が追加されているように
したいんですよね。
で、最初はwindowDidBecomeKeyのオーバーライドでクリアさせたんですけど、
でもデータソースがあるって知って、今それをトライしているところです。
227 :
名称未設定 :2008/11/11(火) 23:18:55 ID:u7V+zvQV0
>>226 awakeFromNibで追加するのはダメなん?
228 :
名称未設定 :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 :
名称未設定 :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 :
名称未設定 :2008/11/12(水) 12:36:08 ID:rhZoTYoC0
>>229 - (BOOL)resignFirstResponder {
return NO;
}
は書いてある?
231 :
名称未設定 :2008/11/12(水) 12:39:39 ID:rhZoTYoC0
>>230 逆だったorz
- (BOOL)resignFirstResponder {
return YES;
}
232 :
名称未設定 :2008/11/12(水) 12:58:01 ID:DjwU0p+F0
>>229 何でこんな無茶苦茶なコードを書く必要があるのか聞きたいw
サブクラス作る必要もないし、自分自身をdelegateにする必要もないし、Notificationをわざわざ転送する必要もない。
233 :
名称未設定 :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 :
名称未設定 :2008/11/12(水) 13:08:58 ID:/WVpT08D0
>>232 私も正直こんな面倒なことはしたくなかったのですが。。。
Bindingを使いこなせていないせいかイマイチ「編集終了時に値が実際に変更されているかどうか」
を比較する手段が思い浮かばずこんなことになった次第です。
235 :
名称未設定 :2008/11/12(水) 13:47:41 ID:rhZoTYoC0
>>234 >編集終了時に値が実際に変更されているかどうか
それだけなら普通にデリゲート使えばいいんじゃね?
236 :
名称未設定 :2008/11/12(水) 14:00:48 ID:bpwWLlCO0
>>234 Core Dataを使ったり自分でUndoを実装すればsetDocumentEdited:YESは自動でなされるだろうし、
そこまでしない小規模なものならdelegateのcontrolTextDidChange:でいいし、
Bindingされているモデルが変更されたときやりたいならモデルに対してKVOすればいいと思う。
237 :
名称未設定 :2008/11/12(水) 14:26:27 ID:L0OFkZM60
238 :
名称未設定 :2008/11/12(水) 15:04:38 ID:/WVpT08D0
>>235 Bindingが設定してあるNSTextFieldからはDelegateしても通知がポストされなかったんです。
>>236 >>237 CoreDataは一度かじって挫折してました。今度調べてみようと思います。
とりあえずはKVOの方向から解決策を模索してみます。
239 :
名称未設定 :2008/11/12(水) 15:28:59 ID:RkfhbVlK0
>>238 Bindingしてても普通にデリゲートメソッド呼ばれるよ?
念のため書いておくとtextDidEndEditing:はデリゲートメソッドじゃないからね。
controlTextDidEndEditing:かcontrolTextDidChange:を使えばいいと思う…が、
もちろんcontrolTextDidEndEditing:は変更の有無は関係ないし呼ばれたときにはBindingで変更された後だから、
その用途には向いていないのかもしれない。
240 :
名称未設定 :2008/11/12(水) 15:59:05 ID:/WVpT08D0
>>239 textDidEndEditing:はDelegateではないんですか。
大きな勘違いでした。どうりで。。。
そしてDelegateが呼ばれるということは
そのときの私の何か他の部分がよくなくて正しくない動作をしていたか
もしくはtextDidEndEditing:がController側で実装してあり呼び出されなかった、
という話だったのではないかという気もしてきますね。
じっくり調べてみます。
皆さんありがとうございました。
241 :
名称未設定 :2008/11/12(水) 20:29:57 ID:3TV0qhbR0
242 :
名称未設定 :2008/11/12(水) 21:22:46 ID:xTjUSaTU0
>>228 非常に参考になりました。
ありがとうございます。
あー僕も酔っ払いながらかけるようになりたいっす。
243 :
名称未設定 :2008/11/13(木) 05:09:02 ID:Zr8Iqv0x0
暫くcocoaから離れてたんですが、 ファイルをゴミ箱に入れる方法ってNSworkspace以外に実装されてませんかね?ゴミ入れ音付で
244 :
名称未設定 :2008/11/13(木) 08:32:00 ID:z+Jww09y0
NSAppleScriptでFinderにやらせれば音が出るよ。
245 :
名称未設定 :2008/11/13(木) 09:22:35 ID:XbONM5Ht0
246 :
名称未設定 :2008/11/13(木) 20:54:10 ID:Jm2bYpNn0
初心者です ボタンを押したら新たにwindowを表示したいんですが そういった関数をご存知の方いませんか?
247 :
名称未設定 :2008/11/13(木) 21:02:24 ID:qC4pYBiI0
>>246 まずオブジェクト指向の意味を理解してください。
そうすれば自ずと何をすれば良いか分かります。
248 :
名称未設定 :2008/11/13(木) 21:15:19 ID:hEQXH/4q0
複数のウインドウを表示したり制御するのって意外と難しくて面倒なんだよね。 メニューのアクションとかもキーウインドウに対してセンドしなきゃいけないし。
249 :
名称未設定 :2008/11/13(木) 21:21:03 ID:Jm2bYpNn0
>>247 そこまで戻る必要があるんですか・・・・・
ただ単にAPIの問題だと思っていたのですが・・・・
深いですね。
250 :
名称未設定 :2008/11/13(木) 21:33:42 ID:Eaz1tdC20
単にダイアログを表示するだけならAPIの問題だけどな。
251 :
名称未設定 :2008/11/13(木) 21:39:35 ID:uPguWfkE0
>>246 Interface builderだけで簡単に作れるよ
252 :
名称未設定 :2008/11/13(木) 21:53:20 ID:Jm2bYpNn0
>>251 customViewを使うことにしました。
教えていただいてありがとうございます
253 :
名称未設定 :2008/11/13(木) 21:55:02 ID:Eaz1tdC20
何をやりたかったんだ……
254 :
名称未設定 :2008/11/13(木) 22:07:32 ID:NIwWlo0Q0
>>252 えええ、アクションつなぐのじゃdameなの?
255 :
名称未設定 :2008/11/13(木) 22:35:51 ID:qC4pYBiI0
www
256 :
名称未設定 :2008/11/13(木) 22:55:55 ID:Jm2bYpNn0
>>253-254 何とかボタン一つでwindowを表示させることに成功しました
お騒がせしてすみません。
257 :
名称未設定 :2008/11/13(木) 23:03:14 ID:2FfKOU+J0
Finderウインドウの表示内容を更新する方法って NSFileManagerでフォルダを作る意外には無いのかな
258 :
名称未設定 :2008/11/13(木) 23:07:22 ID:cv3LdfgN0
>>257 NSWorkspaceのnoteFileSystemChangedではだめ?
259 :
名称未設定 :2008/11/13(木) 23:21:55 ID:2FfKOU+J0
>>258 noteFileSystemChangedでは更新されるときとされないときがあるんだよね。
特に、smbでマウントしたwindows共有フォルダには効かなくて、無理矢理不可視フォルダを作って削除する方法で対処してる。
260 :
名称未設定 :2008/11/14(金) 03:52:32 ID:Z7zd+aLz0
>>246 まず手始めにwindow画面を起動時に見えなくして
NSWindowクラスのmakeナンタラ関数で前面に出してきたらいいんじゃないのか?
後IBでコネクトね。
オブジェクト指向を理解してても出来ませんよ。
APIの問題です。
261 :
名称未設定 :2008/11/14(金) 20:14:55 ID:9weqjvTi0
今はCarbonのGestaltを使っているんだけど、CocoaでOSのバージョンを 取得する方法はありますか?
262 :
名称未設定 :2008/11/14(金) 22:32:15 ID:9w5lRAlf0
>>261 [[NSProcessInfo processInfo] operatingSystemName]
263 :
名称未設定 :2008/11/14(金) 22:45:01 ID:xk6PzQrT0
いつも気になるんだが NSWorkspaceとNSProcessinfoのメソッドの分け方がおかしい と思うのは俺だけだろうか。 直感的じゃないんだよな
264 :
262 :2008/11/15(土) 00:33:02 ID:/jR4jH2p0
すまん、間違えた [[NSProcessInfo processInfo] operatingSystemVersionString]
265 :
名称未設定 :2008/11/15(土) 01:13:29 ID:Fo6g+zIo0
どうせ NSProcessInfo も最終的に Gestalt を呼んでるんだろうから Gestalt でいいんでは?
266 :
名称未設定 :2008/11/15(土) 11:36:16 ID:4imPoNXz0
ローカリゼーションとかで使う .strings ファイルの形式って、どっかに詳細なスペックは あるかな? 自分でも同じフォーマットを利用しようと思って(ローカライズ目的ではないけど)、 foo = var; 式のエントリの文字列を -[NSString propertyListFromStringsFileFormat] でパースさせているんだけど、エラーになる条件がよくわからない。 class = hogehoge; みたいに、1単語の時はクォートしなくていいように一見見えるんだけど、少し違うタイプ name[0] = hogehoge; だとエラーになる。
267 :
名称未設定 :2008/11/15(土) 11:56:07 ID:7DuJOrGV0
268 :
261 :2008/11/15(土) 13:03:33 ID:8pxLxWly0
>>262 ,264
ありがとう。NSProcessInfoとは・・・なかなか見つからないわけだ。
>>265 今はGestaltで間に合うけど、Carbonもいつまでサポートされるか
わからないからね。
269 :
266 :2008/11/15(土) 14:34:07 ID:9X9dz6u50
>>267 あ、どうもありがとうございます。
でもよく考えたら自分の最終目的は なんたら = かんから; のようなエントリが複数ある
ファイルから、この なんたら/かんたら のペアを取り出すことでしたw
で、.strings用のAPIが使えないかと思った、という流れです。でも厳しそうですね。
ここで なんたら や かんたら は、
name[0]のような式の場合もあれば、文字列の場合もある。複数の語からなる文字列の
場合はダブルクォートで囲まれる。文字列自身にダブルクォートが含まれる場合は
バックスラッシュでエスケープする。みたいな感じです。
ちゃんとやろうとするとパーサーみたいのを書かないといけないと思うんですが、
もし出来合いのものがあるならそれを利用しようかと.... プログラムの設定ファイルとかで
ありがちな処理だと思うので、何かいいものがあれば....
CocoaなのでObjCから利用できるものが望ましいです。よろしくお願いします。
270 :
名称未設定 :2008/11/15(土) 14:38:35 ID:7DuJOrGV0
>>269 そゆばあいはNSUserDefaults使います。
どうしても .stringsでなきゃならないなら、
-[NSBundle localizedStringForKey:value:table:]
で無理やり。
271 :
名称未設定 :2008/11/15(土) 14:51:20 ID:Fo6g+zIo0
>>269 .strings ファイルは "..." = "..." しか公式にはサポートされてないんではとおもいます。
それは OS X 以外のソフトとデータをやりとりする必要がある?
OS X だけですむなら、単に内部では NSDictionary でもっておいて、
保存するときには plist 形式で書き出すだけで済むと思います。
OS X 以外とデータをやりとりする必要がある場合でも、
2008年暮れにもなってパーサを自前で書くのは馬鹿らしいとおもいます。
単に XML で書き出して、(plistもXMLなのでそれでいいですが、)
ほかのプラットホームで読むときはXMLライブラリつかって
読み込むのが簡便だとおもいます。
272 :
名称未設定 :2008/11/15(土) 14:54:03 ID:7DuJOrGV0
ごめん。全然読まずにレスしてた。 たぶん、そういう特殊用途なら自力でパースした方が早いです。 NSScannerならObjCで使うことが可能です。:-)
273 :
266 :2008/11/15(土) 14:58:56 ID:9X9dz6u50
>>270 >そゆばあいはNSUserDefaults使います。
えーと、状況は なんたら = かんたら; みたいのが沢山入ったファイルがまずありきで、
この なんたら/かんたら のようなペアをロードしたいのです。
ただ、ここで なんたら と かんたら はダブルクォートで囲まれた文字列とは限らず、
そういう場合に.strings用のAPIだと失敗するようなのでどうしましょう、という流れです。
わかりにくくてすみません。もしかしてCocoaと関係ないかもしれないですね。
274 :
名称未設定 :2008/11/15(土) 15:05:03 ID:7HtqMIxl0
プロパティリストでいいじゃん。 NSDictionaryをそのまま保存すればいいよ。
275 :
266 :2008/11/15(土) 15:29:05 ID:9X9dz6u50
>>271 OS Xではあるんですが、自分の直接の管理下にない別のソフトが なんたら = かんたら;
みたいなフォーマットでデータを吐き出してくるのです。で、それを処理します。
長期的にはそのソフトが最初からplist(XML)を吐き出すべきなんでしょうが、差し当たってw
>>272 一応、そこそこ汎用な解析をしないといけなそうな感じなんですが、
NSScanner がおすすめですか。使ったことがないので調べてみます。
276 :
名称未設定 :2008/11/15(土) 19:31:31 ID:74MSLTm4P
汎用性を持たせるならJASONって手もあるよ
277 :
名称未設定 :2008/11/15(土) 19:34:08 ID:74MSLTm4P
間違えた、JSONか
278 :
名称未設定 :2008/11/16(日) 02:31:44 ID:5nyRUfyn0
279 :
266 :2008/11/16(日) 04:41:34 ID:NL8p9MOk0
>>277 >JSON
おーなんか面白そうですが今回はとりあえず。
>>278 >NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
結局CFPropertyListほげに処理が行くようで、エラーになる感じは
>>266 と同様のようです。
>僕なら perl か ruby かなにかで
確かに、正規表現で切り出したりすればいいですかね。
左辺or右辺が文字列リテラルのときとそうでないときがあるのがちょっと面倒ですが...
280 :
名称未設定 :2008/11/16(日) 05:06:34 ID:IF7lggCK0
NSScannerでパースするのが一番楽だと思うな。 たいして複雑な書式じゃないようだし。
281 :
266 :2008/11/16(日) 06:29:16 ID:NL8p9MOk0
>>280 まだNSScannerを理解しきれてないですが、割と単純に文字をスキャンするだけじゃない
ですかねえ?
書式には文字リテラルが含まれるので、そんなに単純じゃなかったりします。例えばリテラル内に
¥"が現れる可能性もあったり... 結局、それなりの状態遷移を書く必要があるような。
とりあえずperlで正規表現を考えてみました... 文字リテラル用の表現が、なんとかできたかなあ
という感じです。文字リテラルじゃないときの場合分けはむしろ簡単かな。
282 :
名称未設定 :2008/11/16(日) 11:57:37 ID:IF7lggCK0
283 :
266 :2008/11/16(日) 21:53:32 ID:NL8p9MOk0
>>282 >この場合は「"なんたら" = かんたら¥";」から「"なんたら"」と「かんたら¥"」を
>取り出すだけしか出来ないね。
こういう風に、値のデリミタが異なる場合を毎回試さないといけないので、なんかすでに面倒感
が出てくるというか...
>エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。
勿論¥自体もエスケープされていることがあります。ので、上の場合のでも¥のさらに手前が¥かどうか
調べないといけなくて、下手するとさらにその前、みたいなバックトラックモードに...
で、そういうのを普通のプログラムで書いていると、
「これって正規表現を展開したのを書いてるんじゃないか?」、という気分になってくるという....
>Cocoaから使えるライブラリもあるよ。
ちらっと眺めてみました。よさげですね。
なんか正規表現のセットが複数種類あるみたいですが... ONIG_SYNTAX_PERL というのを
有効にしたい場合はどうしたらいいんですかね? (ソースを調べろって?)
284 :
名称未設定 :2008/11/17(月) 07:34:57 ID:WMJOqaGa0
ステートマシンを書くといいよ
285 :
名称未設定 :2008/11/17(月) 21:43:05 ID:VleoNMSp0
前スレでCGImageRefの輪郭抽出でお世話になったもんです。 御礼が遅くなりましたが、とりあえず無事解決?したのでご報告まで。 結局、シェーダー書いてCoreImageで処理に落ち着きました。クリック判定の時だけ CGColorAtX: Y:で判定というかなりテキトウな処理です。 いまのところ問題なく動くようです。アドバイスしてくれた方、ありがとうございました。 しかし、CoreImage面白いですね。
286 :
前スレ947 :2008/11/17(月) 21:43:56 ID:VleoNMSp0
間違えた… 285です。メール欄に名前入れちまったい…
287 :
名称未設定 :2008/11/17(月) 22:50:50 ID:AI8JnSZ50
NSOpenPanelでオープンダイアログ出すと スレッドの数が異常に増殖するんだけど これって普通ですか? 5-6スレッドも何に使ってんだろ・・・。
288 :
266 :2008/11/17(月) 23:25:37 ID:VM9cdE+20
>>284 正規表現はそれと同等な有限オートマトンで表現できる... いえ、もうそこはいいですw
巷に優秀な正規表現コンパイラが溢れる今日日、固定パターンの受理マシンを最初から作るのは...
今回。文字リテラルを含む入力の正規表現を確定するのに少し試行錯誤しましたが、
同じことを毎回プログラムの変更でやるのと、どっちが楽かと..
しかし、Cocoaでネイティブに正規表現をサポートしてくれたりしないのかな。おしまい。
289 :
名称未設定 :2008/11/18(火) 00:48:50 ID:d2ANkhTZ0
>>287 modalってだけて、ランループを3つぐらい塞いでる気がするし、
あとディレクトリに変化あったら自動で更新されるのもスレッド立ててる気がするし
まぁ5-6スレッドぐらいすぐ使うんじゃない?
290 :
名称未設定 :2008/11/18(火) 20:18:09 ID:wWLAMWH+0
>>288 時代遅れな技ですが。
#define Pattern NSClassFromString(@"java.util.regex.Pattern")
NSJavaSetupVirtualMachine();
id matcher = [[Pattern compile:@"ab(.+)cd"] matcher:@"ab123cd"];
BOOL result = [matcher find];
if(result) NSLog(@"%@", [matcher group:1]);
291 :
名称未設定 :2008/11/19(水) 01:24:15 ID:awxWx5gM0
>>290 なるほどー。試してみると、最初の一回は時間がかかるけど2回目以降は悪くないですね。
Java -> Cocoa は確か新規のCocoa APIが今後サポートされないとかいう話がありましたが、
Cocoa -> Java の方も同じことになるんですかね?
Cocoa というより ObjC と書くべきなのかもしれないけど。
292 :
名称未設定 :2008/11/19(水) 15:26:17 ID:BWlnzWKG0
Dictionaryに格納すると 順番がめちゃくちゃになるんですけど・・・・・ なにかいい方法ないですか?
293 :
名称未設定 :2008/11/19(水) 15:36:59 ID:7EA3pAHdP
NSArrayにも格納したら? NSDictionaryやNSArrayはオブジェクトのコピーじゃなくてそのポインタを格納するだけだから, 両方使ってもメモリが一気に増えるってことはないと思う.
294 :
名称未設定 :2008/11/19(水) 16:11:23 ID:LDJCxdq70
ソートも使えるしな
295 :
名称未設定 :2008/11/19(水) 16:13:18 ID:BWlnzWKG0
296 :
名称未設定 :2008/11/19(水) 21:02:02 ID:gPj/kG9F0
>>291 java -> ObjCもObjC -> javaもサポート停止です。というか保守停止かな?バグが発見されても放置みたいな。
下位互換のために、それ自体は、OSの中に残るようですけども。
297 :
名称未設定 :2008/11/19(水) 23:16:35 ID:TXTxCrRP0
>>292 めちゃくちゃってか、アルファベット順とかそんなんだろ?
298 :
名称未設定 :2008/11/19(水) 23:44:27 ID:tDuS/dfz0
っていうかディクショナリに順番を期待するのが間違いだよね。
299 :
名称未設定 :2008/11/19(水) 23:50:44 ID:NbUmXR8v0
>>298 普通本屋で売ってる辞書って順番にデータが格納されてるよね...
いや、僕らは NSDictionary はハッシュテーブルだって知ってるから
順番を期待しないけど、プログラムはじめたばかりのひとが
混乱してもしかたないんじゃないかな。
それで気になるのは、~/Library って素人は中をいじっちゃだめだけど、
日常用語としては図書館には行ってもいいはずだから、
すくなくとも英語圏の素人さんなら中に pdf を大量にためちゃったりとか
ある気がするんだが問題ないんだろうか。
300 :
名称未設定 :2008/11/19(水) 23:54:18 ID:ie6rHw0y0
ディクショナリに順番を期待するってREALbasicからの移行組? コイツはハッシュ型でありながら追加した順番も保持されてるんだよな。
301 :
名称未設定 :2008/11/20(木) 00:36:58 ID:3uwYS9mh0
>>299 >Library
中をあけたらすでにごちゃごちゃとフォルダが入っているのは
わかるはずだから、自分で自由に使っていいフォルダとは違う
ということぐらいはわかるんじゃないのか。
もっともアメリカに限っていえば、ぬれた猫を電子レンジに
かける人がいるお国柄だからどうだかわからんが…
302 :
名称未設定 :2008/11/20(木) 00:41:31 ID:/EKcz7fk0
そもそもアメリカ人は馬鹿だから Library と聞くと怯えて近寄らないとか?
303 :
名称未設定 :2008/11/20(木) 11:32:25 ID:bdDdnpxd0
図書館に自分の本を勝手に置いて来たり 中身を書き換えたりするようなことは普通しないと思う
304 :
名称未設定 :2008/11/20(木) 22:48:47 ID:USnih3EQ0
>>302 でもおれたちはその馬鹿なアメリカ人が作ったソフトでひいひい言ってるんだぜ?
305 :
名称未設定 :2008/11/21(金) 00:37:17 ID:Mt+yfcCZ0
cocoaって標準で正規表現使えないの? どんだけ屑なの?
306 :
名称未設定 :2008/11/21(金) 00:40:11 ID:ulllyDug0
OgreKit
307 :
名称未設定 :2008/11/21(金) 02:58:00 ID:KDDxp3BY0
雪ヒョウではOgreKitを標準で搭載すべきだ
308 :
名称未設定 :2008/11/21(金) 02:59:39 ID:603c8RI50
毎回フレームワークを追加して<OgreKit/OgreKit.h>を書くのがめんどくさい
309 :
名称未設定 :2008/11/21(金) 04:02:45 ID:Iagf3QtT0
OgreKit 自体はすごいんだろうけど、Cocoa に取り込むとした場合、既存の Unicode 処理との 整合性が気になるけど大丈夫なんだろうか。Unicode の正規化の規則とか、case insensitive で マッチした場合の振る舞いとか... そこら辺、何か気づいた人はいますか? 一方、Cocoa は内部で ICU をいろいろ参照しているみたいなんで、もし正規表現を実装することに なるならやはり ICU を経由するのかなあと思うが...
310 :
名称未設定 :2008/11/21(金) 04:09:28 ID:M0Acd2jx0
>>309 おお、我が母校はCocoa内部からも参照されていたか。
311 :
名称未設定 :2008/11/21(金) 04:17:30 ID:ulllyDug0
>>310 笑ったww
自分は卒業生でも関係者でもないが、そのネタ分かる人どれだけいるんだ?
312 :
名称未設定 :2008/11/21(金) 04:41:23 ID:Iagf3QtT0
あそこ広々して、雰囲気もいいよね。やはりCならではとでも言いましょうか... ほとんど関係者じゃないんだけど、知り合いの先生が教員用住宅に住んでてそこが結構広くて、 飲み会(一応アカデミックな)とかよく開いてもらったなあ。 そういえばかつて天文台にも用があったので、何かの拍子にNAOって綴りをみると思い出すw しかしICUは一般的にはいろんな管を繋がれてピッ、ピッ、とか鳴ってるイメージかとw
313 :
名称未設定 :2008/11/21(金) 09:31:03 ID:cugDLjhM0
あれ?聞いた話では構内での飲み会は禁止だったが…今度あったら確認してみよう。 って、Cocoaはどうした?
314 :
名称未設定 :2008/11/21(金) 09:34:44 ID:pKv4qdEc0
Cocoaどこ?わたしは誰?
315 :
名称未設定 :2008/11/21(金) 10:17:50 ID:AatvtfKP0
俺はUnicodeのみの制約を嫌ってオリジナルの鬼車の方を使ってる。
316 :
名称未設定 :2008/11/21(金) 13:25:04 ID:6z3WSjYr0
317 :
名称未設定 :2008/11/21(金) 13:43:56 ID:M0Acd2jx0
パァるじゃね?パァる。
318 :
名称未設定 :2008/11/21(金) 14:23:01 ID:jqALT49u0
ぱぁる厨の城東区だからね
319 :
名称未設定 :2008/11/21(金) 14:35:54 ID:KDDxp3BY0
Rubyでも正規表現は使えたはず。 REALbasicも3.5あたりから内蔵されてバリバリ使えるしね。 だが俺はCocoaが屑とは思わん。むしろマンセーしてる。 AppleがPascalかBASICでCocoaアプリ作れるようにしてくれれば もっとマンセーするんだけどねぇ
320 :
名称未設定 :2008/11/21(金) 18:13:59 ID:JwOtb6rU0
321 :
名称未設定 :2008/11/21(金) 18:25:23 ID:FH+sWgoq0
Cocoa-Perlが出たらパァる厨も大喜び
322 :
名称未設定 :2008/11/21(金) 18:45:13 ID:tTr4sDtj0
regex(3)じゃだめなの?俺仕事のコードでバンバン使っちゃってるけど。
323 :
名称未設定 :2008/11/21(金) 20:00:45 ID:7NEuk8Da0
regex(3)の機能で充分ならばそれでいいんでないの
324 :
名称未設定 :2008/11/22(土) 00:01:23 ID:Fh4kVmb/0
>>321 CamelBones が既にあるよ。
>>319 Pascal、BASIC と Obj-C のどこに違いがあるのかわからん。
見た目はちがうが、ほとんど文法一対一に対応するのに。
325 :
名称未設定 :2008/11/22(土) 10:33:51 ID:Ua3yloZ/0
>>324 CamelBones、中の人がやる気がなさすぎでしょう。
10.5になるまでは「標準でのるかも?」って勢いだったけど、その後失速し
て、いまじゃそのままでは動かない。他の人があてたパッチでかろうじて、、、
326 :
名称未設定 :2008/11/22(土) 13:24:04 ID:N1bFgiBw0
Propertyって便利だけど、何か中途半端な気がするのは気のせいですかね? オプジェクトを作成してプロパティをセットする所までは便利だと思うけど id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、 受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
327 :
名称未設定 :2008/11/22(土) 13:41:41 ID:E1jjc5CT0
?
328 :
名称未設定 :2008/11/22(土) 13:41:52 ID:Fh4kVmb/0
>>326 >id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
>受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
意味が判らんのですが、どういうこと?
なんでプロパティつかっててキャストするはめになるのか判らんのですが。
329 :
名称未設定 :2008/11/22(土) 13:44:26 ID:Q5Vk1lrT0
画像のExifや一般情報を取得する方法って有るんでしょうか?
330 :
名称未設定 :2008/11/22(土) 13:50:30 ID:Fh4kVmb/0
Core Graphics の CGImage をつかえばいいです。 CGImageSourceCopyProperties のあたりを参照。
331 :
名称未設定 :2008/11/22(土) 13:59:13 ID:E1jjc5CT0
>>326 property設定する時、全部idで宣言してるとかじゃないよね。
332 :
名称未設定 :2008/11/22(土) 14:17:29 ID:RI5N1Fnn0
333 :
名称未設定 :2008/11/22(土) 16:47:35 ID:N1bFgiBw0
senderで送られてくるオブジェクトって通常id型でしょう? そのプロパティにアクセスしようと思たらキャストかクラスに代入する必要があるでしょうに
334 :
名称未設定 :2008/11/22(土) 17:07:45 ID:F4n+OlHB0
プロパティ関係ないじゃん。 普通のメソッドでもそうじゃん。
335 :
名称未設定 :2008/11/22(土) 17:24:03 ID:lKz+QYh00
336 :
名称未設定 :2008/11/22(土) 17:35:49 ID:IISK+7aO0
- (IBAction)hoge:(id)sender { sender.foo = [aClass new]; // ??? } ってことね。 俺はsenderに働きかけたことないけど。
337 :
名称未設定 :2008/11/22(土) 18:11:15 ID:R6yOr3bR0
>>333 senderなんてほとんどIBOutletだろ。
if (sender == hoge) {
float value = hoge.foo;
}
みたいに書くんじゃね? 普通は。
338 :
名称未設定 :2008/11/22(土) 19:12:12 ID:Il+FqCN50
うそーん
339 :
名称未設定 :2008/11/22(土) 19:40:36 ID:EmZE7Gqk0
NSTextViewでsetEditable:NOにしておき、クリックされた、またはフォーカスが当った時に setEditable:YESに変更、view外がクリックされた、またはフォーカスが外れた時にsetEditable:NOに するにはどうすればよろしいのでしょうか? 他のボタンでsetKeyEquivalent:@"半角スペース"などで設定した時に、NSTextViewにキーイベントを 取られるのを防ぎたいのです。 よろしくお願いします。
340 :
名称未設定 :2008/11/22(土) 22:11:15 ID:v4sMs7r70
>>330 すいません、Core関係は全く触った事無く扱い方自体知らないんですが、参考になる日本語ページとか無いでしょうか?
341 :
名称未設定 :2008/11/22(土) 23:16:25 ID:W+1fjktw0
>>333 - (void)action:(MyClass*)sender
{
...
}
ソースコード側は、こう書いてもいいんだよ。
342 :
名称未設定 :2008/11/22(土) 23:18:38 ID:hv+kYqZ80
id型が何か分かってないんだと思う
343 :
名称未設定 :2008/11/22(土) 23:26:23 ID:W+1fjktw0
>>339 NSTextViewのサブクラスを作って、becomeFirstResponderとresignFirstResponderをオーバーライドすれば、できそうだけど。
ただ、NSTextViewからフォーカスが外れたら、そもそもキーイベントがNSTextViewに行く事は無いと思う。
344 :
名称未設定 :2008/11/23(日) 00:08:59 ID:knCwFm3k0
345 :
名称未設定 :2008/11/23(日) 00:16:15 ID:knCwFm3k0
346 :
名称未設定 :2008/11/23(日) 01:41:23 ID:fOaeIxBi0
>>341 id の問題はおいとくとしても、 action メソッドで sender のプロパティに
アクセスしないといけない状況ってほとんどないと思うんだけど。
バインディングつかってないの?
347 :
名称未設定 :2008/11/23(日) 09:19:20 ID:iaCcgTxk0
継承関係が無いクラスをポリモルフィックに扱う時はid型を使うだしょ その時の話をしていたのだがorz...
348 :
名称未設定 :2008/11/23(日) 09:32:18 ID:fOaeIxBi0
>>347 そういう状況でなんでプロパティを読みとりたくなるのか
具体的な状況がまったくわからんのだが。
349 :
名称未設定 :2008/11/23(日) 11:27:47 ID:iaCcgTxk0
つうことで、propertyに違和感を感じるのは俺だけってことで...orz
350 :
名称未設定 :2008/11/23(日) 12:33:34 ID:fOaeIxBi0
orz とか言うのはいいけど、こっちの疑問に答えてくれないんでは
違和感も伝わらないんだけど ???
a.property というのは obj-c ぽくなくて違和感があるが、
それは
>>349 の感じている違和感ではなさそう。
どういう局面で sender の property が読みたくなるの?
351 :
名称未設定 :2008/11/23(日) 14:14:58 ID:iaCcgTxk0
クラスHogeとFugeがあって @interface Hoge : NSObject { int x,y; } @property int x,y; @end @interface Fuge : NSObject { int x,y; } @property int x,y; @end こんな感じかな。そんでもってこんな感じで使って Hoge* hoge = [Hoge new]; hoge.x = 10; hoge.y = 5; [self shift:hoge]; Fuge* fuge = [Fuge new]; fuge.x = 15; fuge.y = 25; [self shift:fuge]; んでメッセージを受ける方が - (void) shift:(id)point { //point.x += 10; としたくなんない? //point.y += 10; としたくなんない? //いちいちキャストなんてやりたくないからこんなんなるでしょ。 [point setX:[point x] + 10]; [point setY:[point y] + 10]; //コードが統一できない...orz } 簡単に書くとこんな感じ。動的なオブジェクト言語なんで無理矢理継承関係を持たずにシンプルに書きたいときが多いよね
352 :
名称未設定 :2008/11/23(日) 15:03:15 ID:lPFF9JrY0
>>351 - (void) shift:(hoge *)point {
}
にすればええやん。
353 :
名称未設定 :2008/11/23(日) 15:10:01 ID:qOiHI6Fa0
それだとfugeが受け取れない
354 :
名称未設定 :2008/11/23(日) 15:10:47 ID:lPFF9JrY0
異なるクラスを1つのメソッドで処理したいのかが分からん。
355 :
名称未設定 :2008/11/23(日) 15:17:00 ID:iaCcgTxk0
orz
356 :
名称未設定 :2008/11/23(日) 15:31:04 ID:qOiHI6Fa0
まあ、アプリを作るよりもコードの組み方に執心するのも悪くないが、 それで満足出来ないならこれ以上は無駄な議論になる。 自分で言語を作るか満足出来る言語を探すしかないな。
357 :
名称未設定 :2008/11/23(日) 15:38:14 ID:iaCcgTxk0
そこまで拘ってはいないんだけど、規模が大きくなると 可読性も重要になるもんでちょっと気になっただけです。 スレ汚しすまそん。
358 :
名称未設定 :2008/11/23(日) 15:43:18 ID:NCg555PX0
>>351 例としてそれが正しいんだとすると、クラス設計が間違ってるんじゃない?
>>354 も言ってるけど、
同じプロパティ持ってて、なおかつ一つのメソッドで処理したいんなら
共通の親クラス持つべきでしょ。
> 動的なオブジェクト言語なんで無理矢理継承関係を持たずに
どっちかっつーと、継承させればいいのに無理矢理継承させなかったようににみえるよ
359 :
名称未設定 :2008/11/23(日) 15:58:16 ID:iaCcgTxk0
サンプルの例は簡単すぎるけど、継承関係を持ちたくない動的なポリモルフィズムでは プロパティは合わないってことかな。たぶん俺の設計が悪いんでしょう...。
360 :
名称未設定 :2008/11/23(日) 15:59:47 ID:qbiNAB4B0
>>358 いや、実際継承関係なしに同じメソッドを持たせたいときのためにプロトコルってもんがあるんだけどな…
プロパティ使ってもプロトコル作っとけばメソッドでアクセスは出来るだろうけどプロパティ構文でアクセスは出来ないか。
ていうかプロトコルみたいな基礎の基礎を理解してからプロパティみたいな(ある意味シュガーシンタックス)を使うべきだと思う。
361 :
名称未設定 :2008/11/23(日) 15:59:59 ID:lPFF9JrY0
>>359 具体的に何をしたかったのか気になるな。
こういう事は参考になるし、差し支えなければ教えてたもれ。
362 :
名称未設定 :2008/11/23(日) 16:10:58 ID:5E7pfPDV0
プロトコルって たった一つの関数のために宣言するのも気が引けない・・・・・ それに今回の場合は二つのクラスがあってそれを第三者である別のクラスのメソッドを使用して この二つのクラスのオブジェクトにメッセージを送りたいんでしょ?
363 :
名称未設定 :2008/11/23(日) 16:20:45 ID:qbiNAB4B0
>>362 メソッドの数は関係ないだろ…NSCopyingとか知ってる?
>>351 の例で言えば、HogeとFugeが共通のプロトコルを実装していれば、継承関係がなくても
id <protocol> point2 = pointとすれば、少なくともメソッドでのアクセスはできるわけ。
まあid型なんだからメソッド呼ぶ分にはコンパイルエラーは出ないと思うが、静的型チェックしたい場合は。
こういう継承関係はないけどある程度のメソッドのセットを共有するクラスって、実際にアプリケーション作ってれば
結構あるんだけどな。プロパティってカテゴリとかプロトコル中で使えないんだっけ?
364 :
名称未設定 :2008/11/23(日) 16:22:46 ID:5E7pfPDV0
メッセージを送りたいんじゃなくて その二つのクラスを仮引数にしたいのか。 そうなると仮引数での型宣言がid型にならざるを得ない・・・ ・・・hoge型を受け取るセレクタとfuge型を受け取るセレクタ 両セレクタを第3者のクラス(たぶんメインのほうなんだろうけれど)で定義すればいけるよね。 これだとソースも汚れないんじゃない?
365 :
名称未設定 :2008/11/23(日) 16:24:25 ID:NCg555PX0
>>360 まぁインターフェースだけ持ちたい場合はそうなんだけど、
>>351 の例じゃメンバも一緒だし、プロトコルじゃなくて継承があってるっしょ
例が簡単過ぎと言う事だから、何がしたいかによるけどさ
同機能の名称だけ違うクラスがあるようだったから、これを親クラス使わないテは無いんじゃない?
366 :
名称未設定 :2008/11/23(日) 16:31:47 ID:5E7pfPDV0
>>363 そうなのか。
僕は研究で使うためのアプリケーションを作成させられているんだけど、
まわりにcocoaなんてやってる人がいないから、相談できる相手がいないんですよ。
だからイメージ的にプロトコルなんだから一つだけの関数のためにあっても仕方ないよなー
って感じだったんですよ。
でも確かにcocoaのプロトコルの存在理由を考えれば一つでもありですよね。
沢山のクラスで同じメソッドが使われている。
となればそのメソッドを一つの「Aプロトコル」と宣言しておけば
このクラスは「Aプロトコルに沿っています」となればその関数は使用できるってことがわかるわけだし。
その逆もしかりだしね。
367 :
名称未設定 :2008/11/23(日) 16:33:55 ID:4U1xjB9Y0
ある程度プログラムが出来上がったあとに、別個に作って来たクラスを共通の基底クラスに 乗せるのは厄介でできない、というのはデザイン云々はともかく実際問題としてあるかも。 C++ だと多重継承という逃げ道もあるが... あるいはテンプレート。 規模が大きくなると可読性が... とかいうなら、それこそプロトコルとかである程度縛りを 持たせないとまずい気がする。
368 :
名称未設定 :2008/11/23(日) 16:35:19 ID:qbiNAB4B0
>>365 >>351 の例そのままなら誰だって継承を選択するし、継承ならプロパティもそのまま使えるからわざわざ質問なんかしないよ。
369 :
名称未設定 :2008/11/23(日) 16:44:44 ID:5E7pfPDV0
ごめん、366で納得しといて申し訳ないんだけど・・・・ 今回の例でプロトコルをしようするってどういうこと? 何度も確認するんだけど、 今回の例は 第三者のクラスで実装されている一つのメソッドにおいて 二つのクラスを仮引数として受け取れるようにするには id型しかなくて それだとわざわざプロパティとして定義してあるx,yなのにドット演算子を用いてアクセスできない っていう不満なんですよね? どの辺にプロトコル・・・・・・・・が関係するんですか?
370 :
名称未設定 :2008/11/23(日) 16:45:50 ID:qbiNAB4B0
>>364 あ、そうか。
HogeまたはFugeをインスタンス変数として持つ第3のクラスを作って、
プロパティはそっちに実装すれば…って余計めんどくさいけど、どうしてもプロパティ使いたいならこれかw
371 :
名称未設定 :2008/11/23(日) 16:55:57 ID:qbiNAB4B0
>>369 いや、プロパティじゃなくてメソッドだったらプロトコル使えるねって話。を俺がしてるだけw 混乱させたらすまん。
372 :
名称未設定 :2008/11/23(日) 17:16:16 ID:bRvMtYeW0
@protocol MyProtocol @property int x, y; @end @interface A : NSObject <MyProtocol> { int x, y; } @property int x, y; @end @interface B : NSObject <MyProtocol> { int x, y; } @property int x, y; @end void printXY(id <MyProtocol> obj) { NSLog(@"%d, %d", obj.x, obj.y); } 面倒くせぇ。
373 :
名称未設定 :2008/11/23(日) 17:19:54 ID:5E7pfPDV0
351の解決策 ----Fugeクラス-------- int x,y //プロパティとして宣言 ----Hogeクラス-------- int x,y //プロパティとして宣言 ----第3のクラス-------- - (int) myMain(void){ Fuge* fuge = [Fuge new]; Hoge* hoge = [Hoge new]; } - (void) shift:(Fuge*)point { point.x += 10; }
374 :
326 :2008/11/23(日) 17:20:53 ID:iaCcgTxk0
番号書いとかないと解らなくなりますね(^^; 話題がクラスの設計にまで発展していて恐縮してしまいます。 最初に戻りますけど、プロパティは便利だから使うんじゃなくて 静的な設計でしっかりとしたチェックを行う為に導入されたのかもしれませんね。 あ、でもメッセージを送信できてしまうのでそうでも無いのか。 プロトコルを使った設計もいいんですけど、ObjectiveCなのでAPIを作るとき以外は あまり使いたくないと思ってしまうんですよね.... もっと使い込んで良い使用例を見つけてみます。サンクスアロット!
375 :
名称未設定 :2008/11/23(日) 17:21:33 ID:5E7pfPDV0
ごめん途中でかきこんでしまいました・・・・ まぁ省くと さらに - (void) shift:(Hoge*)point を作成して myMainで 両方ともうけとれるんでは?と・・・・
376 :
名称未設定 :2008/11/23(日) 17:22:27 ID:5E7pfPDV0
>>374 ものすごく参考になる例でしたよ
こちらこそありがとう
377 :
名称未設定 :2008/11/23(日) 18:39:08 ID:wtDM58qW0
高度な話題の途中で申し訳ないんですが、 ファイルの有無を返すメソッドって何を使えばいいのでしょう? 例えば、 /Users/me/hoge.txt を引数にして、hoge.txtがあればYES,無ければNoを返すようなものです。 で、もしあったらそれをhoge2.txtにリネームしたいのですが、 便利なメソッドありますか? 今はNSStringのinitWithContentsOfFileでエラーが出なかったら、 そのNSStringをwriteToFileで書き込んでるんですが、 無駄にメモリを使っているような気がします。
378 :
名称未設定 :2008/11/23(日) 18:57:59 ID:CafrItRj0
やっと答えられるネタがw id fm = [NSFileManager defaultManager]; BOOL flag = [fm fileExistsAtFilePath:theFilePath]; でいいかと
379 :
名称未設定 :2008/11/23(日) 19:48:14 ID:knCwFm3k0
ちなみに - (BOOL)fileExistsAtPath:(NSString*)path isDirectory:(BOOL*)flag でディレクトリかどうかも分かる
380 :
377 :2008/11/23(日) 19:48:57 ID:wtDM58qW0
>>378 さん
こういう時はNSFileManagerを使えばいいんですね。
ありがとうございます。参考になりました。
381 :
名称未設定 :2008/11/23(日) 22:06:28 ID:UPPqK5k50
インスタンス変数の先頭や後ろに_を付けたり、 mを付けたりしてるのをよく見掛けるのですが、 正式(もしくは通例)な書き方ってあるのですか?
382 :
名称未設定 :2008/11/23(日) 22:51:13 ID:zrPQcDP/0
ないです
383 :
名称未設定 :2008/11/23(日) 23:08:33 ID:HpygaMZ60
俺の例で申し訳ないけど 1.あまり変数名を考えないで何もつけない 2._を付ける 3.mを付ける 4.変数名をよく考えて何もつけない の順で進化(退化?)してきて、現在では何も付けないに固まりつつあるよ
384 :
名称未設定 :2008/11/23(日) 23:17:00 ID:lPFF9JrY0
よく_を付ける人がいるけど、 あれってAppleが予約してるんだよね?
385 :
名称未設定 :2008/11/23(日) 23:27:30 ID:NCg555PX0
mって懐かしいな CodeWarrior PowerPlantの命名規則だっけ
386 :
名称未設定 :2008/11/24(月) 01:10:28 ID:zG2/3T9r0
質問です。 10.4.11以降で実行(記述)出来るようになったメソッド(webView:didClearWindowObject:forFrame:)を 記述した場合、10.4.11以前のOSで起動したらどうなるのでしょうか?(落ちる?) また、このメソッドを実行(記述)したくない場合、下記のように書けばよろしいのでしょうか? #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4(またはMAC_OS_X_VERSION_10_4_11?) - (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)wso forFrame:(WebFrame *)frame { // いろいろ処理 } #endif 稼働確認の環境がないもので(当方10.4.11)、これでいいのかよろしくお願いします。
387 :
名称未設定 :2008/11/24(月) 01:17:47 ID:GByYYnXG0
>>386 それはデリゲートメソッドなんで大丈夫。10.4.11より前では単に呼ばれなくなるだけ。
388 :
名称未設定 :2008/11/24(月) 01:55:11 ID:zG2/3T9r0
>>387 早速の回答ありがとうございます。
特に気にすることはないのですね。
あと、もう一つ便乗で申し訳ないのですが、
10.4.11でDeprecatedになったwebView:windowScriptObjectAvailable:を記述しても
呼ばれないのですが、(
>>386 のメソッドは記述しないで)
-(void)windowScriptObjectAvailable:(WebScriptObject*)wso
{
NSLog(@"windowScriptObjectAvailable");
}
何か記述がたりないのか、単に10.4.11でテストしてるから呼ばれないのか、
わからない状態です。
(ソースは@interface myWebView : WebView でサブクラスにしています)
389 :
名称未設定 :2008/11/24(月) 04:04:16 ID:GByYYnXG0
>>388 それもデリゲートメソッドなんだからWebViewのサブクラスに書くメソッドではないよ。
そもそも
- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject ;
だと思うんだが。そのコードじゃ呼ばれるわけがない。
390 :
名称未設定 :2008/11/24(月) 14:03:19 ID:PGqxC8ff0
Garbage collection有りのcocoa-Applicationで、 アプリの起動から終了まで、あるNSMutableArrayの中身を保持したいのですが どういう風に宣言すればいいのでしょうか? AppController Classのインスタンス変数として宣言すればいいのかなと思いましたが うまくいきませんでした。
391 :
名称未設定 :2008/11/24(月) 15:50:19 ID:HWz3ev+J0
>>390 AppControllerが、どこからも参照されていないのではないかな。
NSAppのdelegateにすれば良いでしょう。
nibのfile's ownerからdelegateを接続すれば解決するでしょう
392 :
名称未設定 :2008/11/24(月) 17:07:43 ID:/NHK9Ydy0
リファレンスカウンタを利用してみれば?
393 :
名称未設定 :2008/11/24(月) 17:13:33 ID:ljIgus1G0
id型だとプロパティ構文が使えないのは、コンパイラが、それがプロパティへのアクセスなのか、構造体(または共有体)へのアクセスなのか区別できなくなるためです。
こういうときは、非公式プロトコルを使ってコンパイラを騙してしまえば、綺麗に書けると思います。
// 非公式プロトコル
@interface common
@property int x,y;
@end
// 非公式プロトコルを使うメソッド
- (void) shift:(common*)point { point.x += 10;}
あとは、
>>352 や
>>375 が言ってることといっしょです。
394 :
名称未設定 :2008/11/24(月) 17:22:33 ID:ljIgus1G0
>>381 Cocoaの場合、インスタンス変数名が、そのままプロパティ名や、KVCのキーになったりするので、プリフィックスを付けずに、そのままの名前で書くのがよいと思います。
逆に、メソッドの引数や、ローカル変数側にプリフィックスを付けるのが、Cocoa流なのではないかと最近思ってます。
よくメソッドの引数名で、anObjectとか、aStringとか見かけます。
>>384 の言ってる通り、_はアップルが予約してるので使えませんが、ローカル変数名なら使っても問題ないはず。
>>394 眼からうろこ落ちた。おれも今日から引数やローカル変数の方にプリフィックス付ける!!
一応、ローカル変数はPowerPlantからの癖でtheを付けてるけど、引数の
方はinとかoutをつけるとメソッド名とかぶってむずがゆいです。
anとかaはいいね。複数だとobjectsとかObjectsArrayとかにしてますか?
396 :
名称未設定 :2008/11/24(月) 20:05:56 ID:/NHK9Ydy0
397 :
名称未設定 :2008/11/24(月) 20:23:03 ID:lYcKzgoR0
>>35 がすごすぎてへこんだorz
自分もがんばるぞ。
398 :
名称未設定 :2008/11/24(月) 20:31:56 ID:GzPVuqFS0
Xcode 3.1を使用しています。 Safariの"Advanced"環境設定や、 iTunesの"General"環境設定などで見かける、横線を表示したいのですが、 どのようにしたら良いのでしょうか。
399 :
名称未設定 :2008/11/24(月) 20:32:59 ID:GzPVuqFS0
ごめんなさい、IBのLayout Viewsのところにありましたorz
400 :
名称未設定 :2008/11/24(月) 20:46:50 ID:NpEGxfAA0
>>389 指摘のメソッドに変えたらうまくいきました、ありがとうございます。
401 :
名称未設定 :2008/11/24(月) 20:49:20 ID:6rT9ICRJ0
なんだかんだいってもCocoaでプログラミングするのは楽しいな ハマル事も多し、標準フレームワークの実装には文句もあるけどね 超高速NSTableViewとか作ってみたけど公開してみようかな
402 :
名称未設定 :2008/11/24(月) 21:31:36 ID:/NHK9Ydy0
>>401 dictionaryを展開させるやつならぜひ
403 :
名称未設定 :2008/11/24(月) 21:32:23 ID:6a5Gwn4E0
15万件でもサクサクですか?
404 :
名称未設定 :2008/11/24(月) 21:37:10 ID:/NHK9Ydy0
mac miniで多重スレッドでのプログラム処理は大丈夫ですか?
405 :
名称未設定 :2008/11/24(月) 21:40:03 ID:CRbch+U60
>>401 1万件のCocoaBindingで、PBG4だと1分待たされました。
是非高速版がほしいですw。
406 :
名称未設定 :2008/11/24(月) 21:48:00 ID:6a5Gwn4E0
でもそれはアレイコントローラーが高速にならないと。 余談だけど、NSTableViewでサムネ画像など表示させた場合、 描画領域内にある行だけ画像表示させるのって簡単なんですかね?
407 :
名称未設定 :2008/11/25(火) 00:31:44 ID:n8XQ2L280
>>406 ふつうに datasource メソッドを実装すれば
描画領域にある列、行のサムネイル画像を NSTabelView が要求してくるから、
その場でサムネイルつくって返せばいいだけだけど。
NSTableView って配列を先に全部与えて表示するものと勘違いしてない?
408 :
名称未設定 :2008/11/25(火) 20:37:50 ID:fTXxDM330
アレイコントローラーの配列にNSImageで持たせるか、 画像のパスだけ持たせておいて データソースで描画内だけNSImageを作成するかの 違いってことかな?
409 :
名称未設定 :2008/11/25(火) 21:57:22 ID:R26T1kav0
>>405 1万行あるテーブルなんて、特定の行を探すのが大変そう。
ユーザーインターフェースの設計を考え直した方がいいと思う。
410 :
名称未設定 :2008/11/26(水) 01:33:15 ID:P35jjkPN0
文字列オブジェクトは日本語でも全く問題ないよね。 でもそれをC言語のchar型の文字列ポインタにUTF8stringで代入しようとしたら文字化けするんですが、 なぜなんでしょうか?
411 :
名称未設定 :2008/11/26(水) 06:25:24 ID:xQANSJuC0
>>410 文字化けしているかしていないかはその char* をどう使ったかによります。
どうやって char* を表示させたのか書いてくれないとわかりません。
412 :
名称未設定 :2008/11/26(水) 14:48:24 ID:GK26HTBC0
>>390 [[NSGarbageCollector defaultCollector] disableCollectorForPointer:myMutableArray]
では駄目なの?(それか、グローバル変数として作るとか)
413 :
名称未設定 :2008/11/26(水) 15:47:10 ID:QSxwsUJ30
NSWindowをsetLevelでNSNormalWindowLevel以外にするとExposeの時消えてしまいます。 Exposeの対象にする方法はないでしょうか?
414 :
名称未設定 :2008/11/26(水) 18:44:35 ID:0RmgUrO80
NSAppleScriptのexecuteAndReturnErrorで スクリプトファイルからスクリプトを実行する時に 引数を渡す方法ってありますでしょうか…
415 :
名称未設定 :2008/11/26(水) 19:41:31 ID:FophLCsx0
416 :
名称未設定 :2008/11/27(木) 02:46:01 ID:B6cixQN+0
マックから異なるサーバに メッセージを書き込みに行くときに 日本語が含まれていると、かなり酷い文字化けして格納されるよね。 windowsからxコードで記述したプログラムを見てみると同様に文字化けするし・・・・ 一応環境設定でデフォルトのエンコードは「Shift JISS」にはなっているんですが。
417 :
名称未設定 :2008/11/27(木) 03:18:48 ID:37LWSc7G0
>>416 >マックから異なるサーバに
>メッセージを書き込みに行くときに
>日本語が含まれていると、かなり酷い文字化けして格納されるよね。
異なるサーバってどういう意味?
ファイルサーバ? それとも HTTPサーバにポストする場合のこと?
ここにいるひとだってエスパーじゃないんだから、もうちょっと
他のひとが読んでも判るように心がけて書き込みしたらいいんじゃない?
ファイルサーバだったら書き込む際に文字コード指定して
書き込めばいいだけだし、
POST とか URL のエンコードがうまくいかないのは
html の form で文字コードをちゃんと
指定してないからで Mac のせいじゃないよね。
Google で検索するときは windows からでも mac からでも
日本語で検索出来るわけでさ。
まあそれはともかく、悪い事は言わないから Windows だけで済まない場合は
もう Shift-JIS を使うのは止めて全部 Unicode ベースにしたほうがいいと思う。
418 :
名称未設定 :2008/11/27(木) 05:13:33 ID:B6cixQN+0
>>417 返信ありがとうございます。
サーバはデータベースサーバのことです
言葉足らずで申し訳ございません。
そのUnicodeベースにしたほうがいいって言うのは
どういうことでしょうか?
環境設定でそうしろってことですか?
419 :
名称未設定 :2008/11/27(木) 05:22:59 ID:37LWSc7G0
申し訳ございませんと丁寧に謝っていただくより、 もっと細かい状況をおしえてもらったほうがいいんだけど... データベースサーバのことです。ってたって何種類もあるでしょ。 データベースサーバとはどうやって通信してるの? Mac 用のクライアントソフトがある?それとも http 経由? データベース側では文字列は文字コードは何を使うと決めてある? Mac 側から送る文字コードはデータベースサーバ側が期待している 文字コードになるようにしてますか? そのあたりはいろいろな設定が関わってくる問題で、 あなた独自の暗黙の了解が通じるところではないです。 Windows な人なら Shift-JIS が好きかもしれないし、 Linux ベースのサーバなひとなら当然 EUC かもしれないし、 Unicode で XML つかってるひとなのかもしれない。 あなたがそのうちどれなのかは説明してもらわないとわからんです。 単に「マックから書き込むと文字化けするよね」という問題じゃ ないと思いますが... Windows サーバに Windows のクライアントソフト/ブラウザから 書き込むばあいでも、IE じゃ文字化けしないけど Firefox だと化けるとか そんなこともあるでしょ。 よく判らない場合は Windows + IE に閉じこもっていたほうが 安全だと思います。 全部 Unicode ベースというのは、XCode もユニコード、 データベースサーバもユニコード、Windows でもユニコードということです。 そうできる権限があるなら、そうしたほうがあとあと楽だと思いますが。
420 :
名称未設定 :2008/11/27(木) 05:30:59 ID:B6cixQN+0
データベースサーバはPostgresQLをつかっています。 通信方法はそこで用意されている libpqというC言語用のAPIを使っています。 ですからUTF8StringでC言語用の文字コードにエンコーディングしてから Posgreで用意されている関数に渡すことでデータベースに書き込みに行っています。 その時に表のセルに日本語の文字列を書き込みにいくと文字化けして格納されてしまいます。 ただ同じようにWindowsのエディッタで作成したプログラムで書き込みに行くと 文字化けを起こしません。 まったく同じプログラムなのですが・・・・・・ 後、再度返信ありがとうございます。
421 :
名称未設定 :2008/11/27(木) 06:06:19 ID:37LWSc7G0
>>420 それはちゃんと表のセルに入力した文字列が
UTF8 の文字列に変換されてないんだと思います。
お礼をいただくよりも、暗黙の仮定を減らしていただいたほうがいいんですが、
GUI のプログラムは何のフレームワーク使って書いているんですか?
あなたの
>>420 の書き込みを僕が読んで、
どういう言語でどういう GUI ライブラリをつかってプログラムしているか
僕が読みとれると思いますか?思いませんよね。
自分以外のひとが読んで判らないところがないだろうか、
考えて書き込んでくださると助かります。
ですから、「GUI のフレームワークはこれこれで、
文字列クラスは std::string なり NSString なり QString なりを使っていまして、
これこれこのように GUI から渡ってきた文字列を
C の char* に変換しているのだがうまくいきません。
どうすればいいですか?」
というふうに聞いてくれるといいんですけど。
あとこれは Mac のせいじゃなくてあなたのプログラミングのせいでしょう。
422 :
名称未設定 :2008/11/27(木) 06:15:15 ID:B6cixQN+0
>>421 僕も自分のプログラムのせいなのかなと考え
実はC言語だけでCUIプログラムを作成して送信したんです。
char command[250];
sprintf(command,"insert into table (id,name)values('101','田中康夫');");
PQexec (conn,command): //PQexec(接続先データベースサーバ情報を格納した構造体ポインタ,実効命令)
これと同様にWindowsのエディッタで作成し実行したところ、こちら側では
田中康夫が文字化けせずに格納できました。
423 :
名称未設定 :2008/11/27(木) 06:20:31 ID:B6cixQN+0
あとまた言葉足らずになってしまっていたので、 ですからXコードの文字エンコードの問題かなと考えるにいたったんです。 環境設定ではShift-JISSにしています。 以前マックのターミナルで データベースサーバからの情報を受け取ったとき 同じように日本語が文字化けを起こしていたので、 環境設定でShift-JISSにしたところ問題が解決されたことがあります。 ですが今回、データベースサーバに日本語の文字列を格納する際に すでに文字化けを起こして格納しているみたいです。 なんども言うようですが、windowsのエディッタで作成すれば、全く問題ありません。
424 :
名称未設定 :2008/11/27(木) 06:24:07 ID:37LWSc7G0
425 :
名称未設定 :2008/11/27(木) 16:33:22 ID:rWXcKYWw0
低スキルが間違いをOSのせいにする典型例だな。
426 :
名称未設定 :2008/11/27(木) 20:01:20 ID:hCNJMOhd0
unsinged char data = 0xaa; はできますが unsinged char data = 0b10101010; は出来ないのですね。 2進数を使いたい部分があるのですが、どう扱えば良いのでしょうか?
427 :
名称未設定 :2008/11/27(木) 20:49:24 ID:wLn06wmd0
#define b00000000 0x00 ... #define b10101010 0xaa ... #define b11111111 0xff
428 :
名称未設定 :2008/11/27(木) 21:46:16 ID:t7oDCkvv0
ぬはは、なんという発想の転換
429 :
名称未設定 :2008/11/27(木) 23:21:44 ID:PejjknVj0
>>427 それって、なんの意味があるんだ?
2進数を使いたいっていう話なのに、それだと実質上16進数だろ
430 :
名称未設定 :2008/11/27(木) 23:57:32 ID:M0fGLrHO0
データタイプにbitがある言語使うとか。 まあ、普通は10進なり16進なりで処理するべ
431 :
名称未設定 :2008/11/28(金) 00:11:57 ID:ng41BnSv0
基数変換はプログラミングの初歩だぞ。自分で作れ。
432 :
名称未設定 :2008/11/28(金) 00:16:55 ID:/Q9QB/Oa0
gcc拡張で無かったっけ?
433 :
名称未設定 :2008/11/28(金) 00:35:02 ID:vpfLJ8rB0
Cの仕様には含まれてないんですよね。 私は「計算機」のプログラマモードで16進と変換したりしてます。
434 :
名称未設定 :2008/11/28(金) 01:07:35 ID:G1SWboG00
>>414 NSAppleScriptは最低機能のラッパだからできない。
OSAを直接使えばパラメータ与えてハンドラ呼び出したりとかできる。
探すべきキーワードはOSADoEvent kASSubroutineEventあたり。
さらに言えば、パラメータ必要になる様なことやるなら、Scripting Bridge
使うかAppleEvent使う方が良い。AppleScript介すると遅いし不安定なだけ。
435 :
名称未設定 :2008/11/28(金) 15:32:11 ID:xfBeI8Px0
if([self なんたら]){ if([self こうたら]){ if([self どうたら]){ if([self ふんたら]){ if([self ちんたら]){ // OK牧場 } } } } } こういう書き方って一般的なんですかね?
436 :
名称未設定 :2008/11/28(金) 15:50:33 ID:dEcFhsPw0
好み。 おれは深いインデント嫌いなので、 if(![self なんたら]){ return booooo; // goto boooo; // @throw boooo; } if(![self こうたら]){ return booooo; } if(![self どうたら]){ return booooo; } if(![self ふんたら]){ return booooo; } if(![self ちんたら]){ return booooo; } // OK牧場 か、 if([self なんたら] && [self こうたら] && [self どうたら] && [self ふんたら] && [self ちんたら]){ // OK牧場 } だね。
437 :
名称未設定 :2008/11/28(金) 19:59:09 ID:dDOC0C8d0
>>436 >if([self なんたら]
>&& [self こうたら]
>&& [self どうたら]
>&& [self ふんたら]
>&& [self ちんたら]){
>// OK牧場
>}
これに一票。Cの&&は前方から順番評価なので、これでOK。
438 :
名称未設定 :2008/11/28(金) 21:31:38 ID:3W0bMjsI0
>437にもう一票だが、それ以前に5重の&&をもっと簡略化できないかに頭を捻るな、自分なら。 (どうしても回避しきれない場合とか、無駄に凝るより素直にまとめて書いたほうが良い場合が あるのはもちろん承知だが、それでも)。
439 :
名称未設定 :2008/11/28(金) 21:39:40 ID:72PQStUNP
順番評価ってことは、一度否定が出たら以降は無視されるんだよね?
440 :
名称未設定 :2008/11/28(金) 21:47:32 ID:Bb35kMPW0
仕事で3000行のforループとか300行オーバーのif文とか 悶絶するコードの改修を体験しことがある。
441 :
名称未設定 :2008/11/28(金) 23:09:54 ID:OvBIZwt90
>>438 switch文が数値以外の値も評価できるようになればいいのかもしれんね。
...別に簡略化にできてないか
442 :
名称未設定 :2008/11/28(金) 23:28:41 ID:GUz35KBi0
ちょっと違うかもだが、
>>436 の前の方の用な感じで、
全体を@try{}で囲み、
否定が来たら、returnするのではなく、理由付きの例外を発生させる。
んで、@catch{}で、何故否定されたのか見れるようにする。
こうしとくと、後々検証に便利。
443 :
名称未設定 :2008/11/28(金) 23:49:35 ID:/Q9QB/Oa0
俺は条件に合わない時は
早々に退場願いたいので
if(!([self なんたら]
&& [self こうたら]
&& [self どうたら]
&& [self ふんたら]
&& [self ちんたら])){
return booooo;
}
// OK牧場
>>442 例外使う意味が分からん。
NSLog()で十分な気がするんだが。
444 :
名称未設定 :2008/11/29(土) 00:01:57 ID:jESPa+9z0
>>442 そういうことをしたいなら、NSAssertを使った方が、ソースが綺麗になると思う。
445 :
名称未設定 :2008/11/29(土) 04:55:28 ID:5SNi5rkK0
悶絶するようなコード笑ったw 昔書いてたから余計にw
446 :
名称未設定 :2008/11/29(土) 06:19:50 ID:nZKJ5UOy0
あれ、
>>435 は、実際にはそれぞれの if の中には多少の処理があるんじゃないの?
それともそれは [self どうたら] とかの中に入ってるの?
>>436 return したくないときもあるわね。
>>442 ifの条件が別に例外じゃない場合はよくないよね。まあ「何が例外か」問題があるわけだが。
>>444 >>442 に引きずられているのかもしれないが、
assertは本来事前条件の検証をするためだけのもので、プログラムの条件分岐に使うものでは
ないと思う。
447 :
名称未設定 :2008/11/29(土) 08:38:53 ID:TUbod1RH0
>>443 ちょっと待ってw
それ途中でぬけます?
処理時間が微妙に増える恐怖が襲ってきました
理屈じゃないですw
448 :
名称未設定 :2008/11/29(土) 08:53:47 ID:+QW0vt7S0
条件で除外して行く様な処理はdo while(0)で書くね。 単純なif文では間に処理が挟まると書けなくなる。 スコープ明示して可読性上げる目的でも有効な手法 do { if (除外条件1) break; : if (除外条件2) break; : if (除外条件3) break; // 全条件を満たした }while(0);
449 :
名称未設定 :2008/11/29(土) 21:26:44 ID:YVMtZIRG0
450 :
名称未設定 :2008/11/30(日) 00:13:49 ID:hhtkbghE0
>>448 do while(0) は目から鱗。
今まで goto で頑張ってたのが必要が無くなった。
これで gotoを全廃できそうだ……
451 :
名称未設定 :2008/11/30(日) 00:53:06 ID:sGbGiZTZ0
>>448 はCなんかのバッチ処理のmain関数でよく使う手ですね。
途中の処理で落ちたらbreakで抜けて異常終了とか。
452 :
名称未設定 :2008/11/30(日) 04:17:53 ID:hSGWx1Tc0
XCodeでentityを追加する時に押すボタンのように、 スライダーの左にボタンを起きたいのですが、 どうやればいいのでしょうか?
453 :
名称未設定 :2008/11/30(日) 11:32:42 ID:yoqGZQDC0
ごめん。なんで while( 1 ) や for ( ; ; ) でなく do while(0); なの? do while() 句は、長文になったとき抜け出す while 条件の見通し(今回は while(0) だけど)が悪くなってしまうから、ループでの使用順位として低い位置にあるとおもう。普通に while(1) {}; でいいと思うのだけど。
454 :
名称未設定 :2008/11/30(日) 11:53:00 ID:Sn0/sJgv0
while(1) や for(;;) は無限ループだけど、 do{ ...} while(0); は一回だけ実行。 { ... } とほとんどかわらないけど、break で脱出出来るということを使っている。
455 :
名称未設定 :2008/11/30(日) 11:58:07 ID:bVIoA/Vw0
>>454 >do{ ...} while(0);
複数行のマクロでよくみるけどこんな使い方もあるんだな
456 :
名称未設定 :2008/11/30(日) 14:11:33 ID:R4fMeWPr0
>>454 なるほど、それは便利かも。今度使ってみよう。
しかしほとんどCocoaと関係ないww
457 :
名称未設定 :2008/11/30(日) 18:53:58 ID:is5S+TiE0
Cocoaからアプリケーションの「パッケージ内容を表示」するには? NSWorkspaceだとアプリケーション自体が表示されて パッケージ内を開いてくれません。
458 :
名称未設定 :2008/11/30(日) 20:15:19 ID:8UXDFhzQ0
多分用意されてないと思う ちなみにパッケージ内を見せる別の方法として NSSavePanel で setTreatsFilePackagesAsDirectories:YES するってのはある
459 :
ネタですよ :2008/11/30(日) 20:28:41 ID:NRo7NNXS0
質問です。 cocoaの隠しAPI、NSBoomって何に使うのですか?
460 :
名称未設定 :2008/11/30(日) 20:38:11 ID:xGKlfZKq0
>>459 BoomというSteveの声にあわせてExposeが動く。
461 :
名称未設定 :2008/11/30(日) 20:50:01 ID:v52HvDmO0
>>457 NSString *path = @"/Applications/Safari.app/Contents/Info.plist";
BOOL flag = [[NSWorkspace sharedWorkspace] selectFile:path
inFileViewerRootedAtPath:nil];
無理矢理だけど、これで/Safari.app/Contents/が開く。
462 :
457 :2008/12/01(月) 00:15:19 ID:bRkyOVlu0
>>458 ないですか、残念。
>>461 パッケージ内にあるフォルダなら普通に開けるんですよね
NSString *path = @"/Applications/Safari.app/Contents";
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:path];
463 :
名称未設定 :2008/12/01(月) 11:07:48 ID:Y2za4y4W0
>>450 gotoの替わりに使ったりしないで、使いたい時はgotoでいいんじゃない?
はっきりラベルで行き先が明示されている方が可読性も良いと思うし。
breakで抜けるループが1重ならいいけど多重になってたりするとわけ解らなく
なりやすいよ。
464 :
名称未設定 :2008/12/01(月) 11:21:31 ID:/OHo/hwy0
NSTableViewで40行程度の表示をしようとしています。 Tableの大きさは8行程度でその部分は表示できているのですが、 縦スクロールバーが機能してくれません。 どのように設定すれば、スクロールバーとTableの中身が同期するのでしょうか?
465 :
名称未設定 :2008/12/01(月) 11:40:47 ID:FFcDafTQ0
>>464 インターフェースビルダーで作ったら何もしなくても
自動でスクロールがきくはずだけど。
配置したところでインスペクタを開いて、
何回かクリックしていたら順に
スクロールビュー、テーブルビュー、テーブルカラムの順に設定出来るので
そのへん確認してください。
466 :
名称未設定 :2008/12/01(月) 13:31:33 ID:tfI3OpAZ0
>>464 スクロールをOFFにしてない?
TableViewを作り直した方が早いかもしれない。
467 :
464 :2008/12/01(月) 15:15:48 ID:/OHo/hwy0
TableViewを作り直しても、うまく行きません。。。 どこかの僕が勝手にいじってしまう可能性もあるので、今回設定したのは Scroll View AttributeのShow Horizontal Scrollerのチェックを外した。 Table Headerに文字を入れた。 Table Column attributeで各Columnのidentifierを設定した。 だけなのですが、まず縦のスクロールバー自体が表示されません。 (Automatically Hide Scrollerはチェックしていないのに、Hide状態になっています)。 一体何がどうなっているのでしょう?
468 :
名称未設定 :2008/12/01(月) 15:56:05 ID:tfI3OpAZ0
>>467 それは面妖な。
IBで実行した時点でスクロールバーが消えてますか?
469 :
464 :2008/12/01(月) 16:44:53 ID:/OHo/hwy0
>>468 さん
IBの時点でバーの矢印と青い丸は表示されていません。
そこで縦スクロールバーをクリックして、
Scroller attributeをEnableにすると、矢印は出ますがやはり青丸は出ません。
その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
さらにアプリ起動中にスクロールバーをクリックすると青丸が出現します。
しかしその青丸をスライドさせても、TableViewの中身は変わりません。
現状こんな具合でさっぱりです orz
470 :
名称未設定 :2008/12/01(月) 17:18:39 ID:9aAmboBn0
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView; - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; の実装はどうよ?? - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { return 8; } とかって事はないだお??
471 :
名称未設定 :2008/12/01(月) 17:23:10 ID:9aAmboBn0
あるいはデータソースを呼び出すメソッド名を間違えてるとか。 デリゲートとか、非形式プロトコルだとそーゆー場合はエラーでないよ。
472 :
464 :2008/12/01(月) 17:52:34 ID:/OHo/hwy0
すいません、訂正です。
>その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
この行は、「矢印有り青丸無し」の間違いでした。
>>470 さん
TableViewをいっぱいに広げると下の方まで表示されているので、
その二つのメソッドに問題は無いと思います。
データソースを呼び出すメソッドとは何でしょうか?
僕はIBでTableViewからdataSourceに青線を繋ぐ方法で呼び出してるつもりです。
473 :
名称未設定 :2008/12/01(月) 18:38:40 ID:tfI3OpAZ0
>>470 データソースが空でもスクロールバーは表示されると思うけどね。
こんな症状は初めて聞いたかも知れない。
474 :
名称未設定 :2008/12/01(月) 21:43:33 ID:4xQMOEp30
これからCocoaアプリに初挑戦する者です。 アプリケーションを設計前ってところなんですが・・・ MVCモデルに照らすとコントローラの数と言うのはひとつのアプリにひとつに するべきなんでしょうか? それとも、スレッド数分とする方が良いのか、いくつあろうと構わないもの なんでしょうか?
475 :
名称未設定 :2008/12/01(月) 22:05:19 ID:ocl8xgfY0
>>474 コントローラの数は、1アプリにつき1つにする必要もないし、スレッドに関係する訳でもありません。
コントローラの数は、アプリケーションの規模によります。
小規模なアプリなら、1つで足りるかもしれません。大規模なアプリなら、複数必要になるでしょう。
476 :
名称未設定 :2008/12/01(月) 22:05:40 ID:Y+dyBgaw0
477 :
名称未設定 :2008/12/01(月) 23:40:24 ID:b7ZJ0Q1q0
お、デベロッパページの日本語化がだいぶ進んできた? て、フレーム内の「リファレンス」が全部リンク切れw
478 :
名称未設定 :2008/12/02(火) 12:44:09 ID:DiP/2Yku0
>>472 XCode のバージョンと OS のバージョンは?
とりあえず XCode の最新版を再インストールしてみるのはどうでしょう。
それはあきらかに IB の挙動がおかしいとおもう。
最低限症状が出るプロジェクトをかためてアップローダにおいてください。
こっちでチェックできるので。
479 :
名称未設定 :2008/12/02(火) 13:23:02 ID:qRW1sZo10
nibファイルが壊れてるとかね 挙動がおかしいときは別フォーマットで保存で治ることもある
480 :
名称未設定 :2008/12/02(火) 17:58:15 ID:N8ybeWLx0
ファイルやフォルダのアクセス権の変更ってできますでしょうか… AppleScriptからUNIXコマンド実行しないと無理?
481 :
名称未設定 :2008/12/02(火) 19:09:33 ID:N8ybeWLx0
あ、てかNSTaskで実行すればいいのかw
482 :
名称未設定 :2008/12/02(火) 19:32:22 ID:r/ZHQGK80
NSFileManagerでなんかなかったっけ?
483 :
472 :2008/12/02(火) 20:50:22 ID:if+xUuvJ0
484 :
名称未設定 :2008/12/02(火) 22:39:55 ID:qRW1sZo10
>>483 listManagerが無いのにdataSource繋げるからいかんのか
IBのdataSourceリンクを外して、
listManager = [[ListManager alloc] init];
のあとに
setDataSource
すればおk
485 :
名称未設定 :2008/12/02(火) 22:44:57 ID:qFEE5ZYl0
こんばんは。
>>452 ですがクラス名など分かりましたら教えてほしいです
486 :
名称未設定 :2008/12/02(火) 22:51:42 ID:BP+tmKAT0
>>483 >>484 のでもいいし、dataSourceアウトレット切らなくて済む方法としては
listManager = [[ListManager alloc] init]; のあとに
[tableView reloadData];
でもいいし、
AppControllerのinitのときに
-(id)init {
self = [super init];
listManager = [[ListManager alloc] init];
return self;
}
でもいいけどとにかくawakeFromNibの呼ばれるタイミングと、TableViewのDataSourceメソッドが呼ばれるタイミングの問題じゃないかな。
487 :
名称未設定 :2008/12/03(水) 13:15:23 ID:EynOQwwp0
>>486 ていうか IB で listManager を実体化して
(Objectのアイコンをライブラリからドラッグ&ドロップして、
インスペクタでクラスを ListManager に変更)
しまえば、awakeFromNib とのタイミングとの問題もなくなると思うし、
コードも二三行短くなるかな...
488 :
472 :2008/12/03(水) 17:26:51 ID:O7b6E22H0
おお、あっという間に様々な解答が! タイミングの問題だったのですね。自分だけで考えてたらわからなかったと思います。 皆さんありがとうございました。 今は484さんのコードにして、ちゃんと動いております。
489 :
名称未設定 :2008/12/03(水) 19:12:38 ID:G3lcVDRU0
>>488 listManagerは、そのアプリケーションの中で、モデルという位置づけにあるように見えるので、
>>486 の言う通りinitの中で生成するのが正攻法だと思います。
awakeFromNibは、基本的にnib内のオブジェクトを初期化するコードを書きます。
nibファイル内には、通常モデルは配置しません。
490 :
名称未設定 :2008/12/03(水) 23:15:10 ID:EynOQwwp0
データソースはコントローラだとおもうんだけど。 だから nib 内で作っても問題ない... と言ってみる
491 :
名称未設定 :2008/12/04(木) 00:20:15 ID:OWKazUoG0
>>490 ソースを見ると分かる通り、AppControllerがNSTableViewのデータソースです。
もちろんこのプロジェクトは単なるサンプルでしょうから、本来の構造がどうあるべきかは分かりませんが、
どっちかというとlistManagerはモデルだと思われます。
コードを短くしたいならこの場合、AppControllerとlistManagerを合体させてしまえばいいんですが、それが目的ではないでしょう。
492 :
名称未設定 :2008/12/04(木) 20:28:32 ID:HGZjTiEG0
-(void)mouseDown:(NSEvent*)evを実装したいんですが、 ただXコードで書いただけではなにも反応がありませんでした。・・・当たり前ですけど。 で該当するViewのデリゲートにコントローラを登録してみたのですが、 これもだめでした。 どうすればいいのでしょうか?
493 :
名称未設定 :2008/12/04(木) 20:51:12 ID:AvJljesh0
494 :
名称未設定 :2008/12/06(土) 17:10:09 ID:9Wq0jq3Y0
Cocoa applicationのテンプレートで作成されたMainMenu.xibの File's owrnerとapplicationの違いは何ですか? どちらのdelegateにクラスを接続してもNSApplicationのデリゲートとして動く。 優先度がapplicationの方が高いだけで同じ?
495 :
名称未設定 :2008/12/06(土) 17:54:57 ID:k7xoKMxV0
意味は違うけど、ものは同じ。 両方に違うオブジェクトをdelegateにすると多分、 File's Ownerが最後にsetDelegate:されると思うから、 File's OwnerのDelegateが最終的にNSAppのdelegateになるんじゃないかな? あれ? File's Ownerが一番最後と決まってるのはawakeFromNibだけだったっけ?
496 :
494 :2008/12/06(土) 19:56:31 ID:kd/tvFHS0
delegateの優先度はApplication > File's Owner awakeFromNibの呼び出され順はIBでの順番みたい とりあえず気にしないことにします ApplicationのdelegateにClassAをセット File's OwnerのdelegateにClassBをセット ClassAのawakeFromNibが呼ばれ ClassBのawakeFromNibが呼ばれ ClassAがdelegateになった(AB共にapplicationShouldTerminateAfterLastWindowClosedを実装して確認) ApplicationのdelegateにClassBをセット File's OwnerのdelegateにClassAをセット ClassAのawakeFromNibが呼ばれ ClassBのawakeFromNibが呼ばれ ClassBがdelegateになった(AB共にapplicationShouldTerminateAfterLastWindowClosedを実装して確認) IBのObjectの順序をClassA,ClassB入れ替えたらawakeFromNibの呼び出され順序が入れ替わった
497 :
名称未設定 :2008/12/07(日) 14:10:48 ID:q2ACHXTU0
>>494 MainMenu.xibに限っていうならば、ApplicationとFile's Ownerは、同一のオブジェクトです。
498 :
名称未設定 :2008/12/07(日) 16:03:01 ID:ZU8ZGfPL0
>>493 返信非常に遅くなり申し訳ございません。
何とかNSViewに貼り付けることで右クリック操作によるコンテキストメニューの
表示に成功させることが出来ました。
ここで気になるのはこれは、レスポンダーチェーンが関わっているのでしょうか?
またそこで今度はNSTableViewで選択行を右クリック→コンテキストメニュー→削除
を実現させようとトライしたのですが、
この際NSTableViewコントローラにmyTableViewを貼り付けました。
右クリックでコンテキストメニューは表示させることができるのですが、
行が選択できません。
データソースは別のモデルmyTableViewDataSourceで用意しています。
myTableViewを貼り付けなければ行が選択できるのですが・・・・
それだと右クリックしたときコンテキストビューを表示させるのに
どうしたらいいのか分からないので・・・・
499 :
名称未設定 :2008/12/07(日) 16:22:26 ID:hZLd1O/h0
>>498 とりあえず落ち着いて、最終的な目的から書いてくれ。正直何がしたいのかさっぱり分からん。
NSTableView上で右クリックしたらコンテクストメニューを出すようにするには、コードを書く必要は無い。
IBで別にNSMenuを作り、NSTableViewのmenuアウトレットをそれに繋げるだけでいい。
NSTableView上で右クリックしたら、その行を選択した上でコンテクストメニューを出したい場合は、
NSTableViewサブクラスで右クリックしたときの処理を追加する。
- (void)rightMouseDown:(NSEvent *)theEvent {
NSPoint locationInWindow = [theEvent locationInWindow];
NSPoint locationInSelf = [self convertPoint:locationInWindow fromView:nil];
int row = [self rowAtPoint:locationInSelf];
if (row < 0) return;
[self selectRow:row byExtendingSelection:YES];
[super rightMouseDown:theEvent];
}
こんな感じで、右クリックした行を選択範囲に追加する。
500 :
名称未設定 :2008/12/07(日) 16:29:52 ID:ZU8ZGfPL0
>>499 最終的な目的は選択した行を削除することにあります。
そこでコンテキストメニューの項目で「削除」をクリックすれば
選択されている行を削除しようとがんばっています。
IBでMenuをコネクトすればいいとのことですが、
menuとコントローラを接続できずに断念しました。
501 :
名称未設定 :2008/12/07(日) 16:35:55 ID:ZU8ZGfPL0
>>499 右クリックしたときに
選択できるようになりました。
これを左クリックしたときに選択できるように自分でやってみます。
502 :
名称未設定 :2008/12/07(日) 16:39:57 ID:ZU8ZGfPL0
503 :
ネタですよ :2008/12/07(日) 20:40:21 ID:GT/IU0+g0
質問です。 XMLの解析で <entry> <title>TITLE</title> <link rel="REL" type="TYPE" href="HREF"/> </entry> の場合、linkのrel,type,hrefの値を取るにはどうすればよろしいでしょうか? titleの取り方はわかったのですが。
504 :
名称未設定 :2008/12/07(日) 21:31:39 ID:dk74pp3E0
うは、前にネタ書いた時の名前が残ってるw すいません、ネタではなく真面目な質問です。 お恥ずかしい限りで・・・
505 :
名称未設定 :2008/12/07(日) 21:35:24 ID:K/k+Z42t0
>>499 selectRow:byExtendingSelection:はもうダメだべ。
selectRowIndexes:byExtendingSelectionに換えるべ。
506 :
名称未設定 :2008/12/07(日) 21:44:31 ID:vMU1Eyyg0
どこがネタなんだろうと悩んでしまったじゃないか...w
507 :
名称未設定 :2008/12/07(日) 22:37:34 ID:uBxirYjF0
508 :
名称未設定 :2008/12/07(日) 23:08:20 ID:1orqG+Pz0
>>503 titleはどうやって取り出しましたか?
509 :
名称未設定 :2008/12/07(日) 23:13:41 ID:curmvucM0
>>503 せめて使ってるパーザ位書きなよ。
んで、NSXMLParser使ってるとして
parser:didStartElement:namespaceURI:qualifiedName:attributes:メソッドを
デリゲードで実装すれば、属性が得られる。
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"link"]) {
NSLog(@"rel = %@, type = %@, href = %@",
[attributeDict valueForKey:@"rel"],
[attributeDict valueForKey:@"type"],
[attributeDict valueForKey:@"href"]);
}
}
510 :
名称未設定 :2008/12/08(月) 03:28:42 ID:U49CM7Oh0
cocoa事始めで ボタンクリックで、Hellow Worldウィンドウを出すことすらできない。 どこかで似たようなチュートリアルありませんか?
511 :
名称未設定 :2008/12/08(月) 03:48:04 ID:g5ShzTpC0
Cocoa事始めってどこ?
512 :
名称未設定 :2008/12/08(月) 11:18:37 ID:WhRI485B0
事始めて→今年初めて じゃない?
513 :
名称未設定 :2008/12/08(月) 13:01:28 ID:KSfoz0Yz0
・・・
514 :
名称未設定 :2008/12/08(月) 13:13:13 ID:6I8yRHaT0
たのCocoLeopardじゃないか? あの本最初ボタンクリックでHello World出すところから始まるし。 永遠にHellow Worldウィンドウは出ないと思うけどな。
515 :
名称未設定 :2008/12/08(月) 14:45:57 ID:KSfoz0Yz0
揚げ足を取りたくてたまらない私
516 :
名称未設定 :2008/12/08(月) 16:27:55 ID:2m2l4A690
意味の無い書き込みは見てて不快 発言するなら書く、そうでないならROMっててください 勘違いなレスを見かけた時もそうです
517 :
名称未設定 :2008/12/08(月) 16:31:06 ID:fWhZhvgy0
そうですね。
>>510 さん、ボタンを押すと新たに画面を表示させたいのでしょうか?
518 :
名称未設定 :2008/12/08(月) 16:35:36 ID:fWhZhvgy0
返事を待つのもだるいので、そうだとして仮定して質問に答えると まずIBのほうで NSWindowのVisibleのチェックをはずしてください。 そこで新たにモデルのほうで IBOutlet NSWindow* newWindow; //こいつはIBで該当Windowと結ぶ - (IBAction)openWindow:(id)sender { [newWindow makeKeyAndOrderFront:self]; } これで一発ででるはず。
519 :
名称未設定 :2008/12/08(月) 16:39:17 ID:KSfoz0Yz0
520 :
名称未設定 :2008/12/08(月) 16:46:07 ID:0OjgUTpN0
521 :
名称未設定 :2008/12/08(月) 17:07:19 ID:2m2l4A690
>>519 私のレスはあなたに対する明確な意志表示があります
あなたとは違うんです
522 :
名称未設定 :2008/12/08(月) 18:34:54 ID:WTYb+ld20
キモチワルイ
523 :
名称未設定 :2008/12/08(月) 21:05:02 ID:IzfmZjnO0
>>508 >>509 ありがとうございます。自己解決できました。
NSXMLParserは使わずに NSXMLNodeのchildrenから取ってくる方法で自作しています。
>>503 の場合、簡単に書くとこんな感じです。
NSXMLNode *entryNode = 〜entryノードを取得
// getChildNodeは引数ノードのchildrenからnameが一致するNSXMLNodeを取得する自作
// NSXMLNodeからNSXMLElementにキャストして取得
NSXMLElement *element = (NSXMLElement*)[self getChildNode:entryNode name:@"link"]; attrHref = [[elemLink attributeForName:@"href"] stringValue];
NSString *rel = [[element attributeForName:@"rel"] stringValue];
NSString *type = [[element attributeForName:@"type"] stringValue];
NSString *href = [[element attributeForName:@"href"] stringValue];
NSLog(@"rel=%@, type=%@, href=%@", rel, type, href);
NSXMLNodeからNSXMLElementにキャストって大丈夫なんですかね?
エラーもワーニングも出なかったもので。
524 :
名称未設定 :2008/12/08(月) 21:06:59 ID:IzfmZjnO0
あ、重ねてすみません。 attrHref = [[elemLink attributeForName:@"href"] stringValue]; はゴミです。
525 :
名称未設定 :2008/12/08(月) 22:36:04 ID:kFKjusSQP
初歩的なことかもしれないのですが 日本語が含まれるNSArrayをNSLogで表示させたときに ユニコード値が出てくるのはどうにもならないのですか?
526 :
名称未設定 :2008/12/08(月) 23:11:41 ID:/HG0hJ4t0
527 :
名称未設定 :2008/12/09(火) 12:40:37 ID:7rIjPTyl0
Safariのダウンロード画面に出てくるインジケータみたいに 後ろに流れて行くようなインジケータバーを表示させたいのですが、 NSIndicatorではその「後ろに流れて行く」表示が設定できませんでした。 なにか他のクラスがあったりするのですか? それともNSIndicatorの設定の問題でしょうか?
528 :
名称未設定 :2008/12/09(火) 12:44:56 ID:c+xotcrO0
>>527 後ろに流れていくというのがアニメーションのことなら、startAnimation:とstopAnimation:を使う。
Binding使うと自動でやってくれたと思う。
529 :
527 :2008/12/09(火) 13:26:01 ID:7rIjPTyl0
すいません、NSIndicatorじゃなくてNSProgressIndicatorでした。 やりたいのはdeterminate progress barを増やしつつ、後ろに流れて行く表示なんです。 startAnimationはIndeterminateだけですよね? Safariのダウンロード表示なんかはそうなっているので、出来なくはないと思っているのですが どうなのでしょう?
530 :
名称未設定 :2008/12/09(火) 13:31:04 ID:c+xotcrO0
>>529 Determinateなら値が設定されていれば勝手にアニメーションしてると思うけど。
あれ、これ10.5だけなのかな?
531 :
名称未設定 :2008/12/09(火) 13:48:59 ID:nhlJuWQy0
こだわる必要性をさほど感じない部分ではあるな
532 :
名称未設定 :2008/12/09(火) 16:04:31 ID:PzccxqHg0
NSTimerの scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: メソッドを別のスレッドを建てて、そのスレッドで起動させようとしたら撃沈されました。 上記のメソッドは呼び出されると実行ループに登録してすぐに終了しちゃうんですね。 そのおかげで子スレッドも終了しちゃいます。 まぁわざわざ別スレッド上で起動させる必要もないんですが、 解決策ってありますか?
533 :
名称未設定 :2008/12/09(火) 16:12:27 ID:c+xotcrO0
>>532 timerWith...のほうで作ってNSRunLoopのmainRunLoopにaddTimer…したら駄目だってリファレンスに書いてあった。
534 :
名称未設定 :2008/12/09(火) 16:16:37 ID:c+xotcrO0
>>532 ん、ひょっとしてスレッド内でTimerを使うってことかな。なら自分でRunLoop作ればいいよ。
535 :
名称未設定 :2008/12/09(火) 16:21:53 ID:vViia8LOP
>>526 過去ログ漁って
NSLog(@"%@", [NSString stringWithCString:[[array description] UTF8String] encoding:NSNonLossyASCIIStringEncoding]);
でいけました。
536 :
名称未設定 :2008/12/09(火) 16:23:19 ID:PzccxqHg0
>>533-534 すばやい回答ありがとうございます。
>>スレッド内でTimerを使うってことかな
子スレッド上でTimerを使おうと画策しました。
ただこいつは時期が来るまで眠っていてくれるから
そんな必要性はほとんどないんですけどね。
自分でRunLoopを作ってそこに登録せよってことでしょうか?
537 :
名称未設定 :2008/12/09(火) 16:31:44 ID:c+xotcrO0
>>536 うん。そもそもscheduledTimerなんちゃらって、Timer作ってカレントのRunLoopに登録するものだから。
でもTimer使うためだけにRunLoop回すくらいなら、NSThreadでsleepUntilDateすればいいんじゃないかな。
538 :
名称未設定 :2008/12/09(火) 16:37:27 ID:PzccxqHg0
>>537 なるほど休眠させるという手もありますね。
実はその辺悩ましいところなんです。
ただプログラムは同じ動作が得られるなら簡単な方でという原則に従うなら
まちがいなく休眠させておいたほうがいいですよね。
わざわざ実行ループをみずから作成するよりは・・・・・・
539 :
名称未設定 :2008/12/09(火) 16:48:19 ID:nhlJuWQy0
むしろスレッド内でNSTimerを使う意味は何も無い気がする。
540 :
名称未設定 :2008/12/09(火) 16:54:39 ID:PzccxqHg0
自分が作成しているのはシュミレーションモデルなんですよね。 だから その部分はメインと切り離して、動作させないとモデルに忠実にならないっていうジレンマがあるんです。 ただプログラム内部でそんなことをする必要性があるのかっていうと 僕には分からないです。 ありますかね?一応大学の卒論なんですが・・・・教授に相談するべきなんでしょうか?
541 :
名称未設定 :2008/12/09(火) 17:01:26 ID:7aJT8/WT0
卒論でCocoaで提出していいのか...羨ましいな。
542 :
名称未設定 :2008/12/09(火) 17:02:00 ID:PzccxqHg0
そんなわけがない・・・・・。
543 :
名称未設定 :2008/12/09(火) 17:11:39 ID:+/JU880n0
setUsesThreadedAnimation: じゃダメなの?
544 :
名称未設定 :2008/12/09(火) 23:23:18 ID:JuNa1S6u0
Cocoaで 「マウスカーソルを任意の座標に持って行き」 「そこで右クリックする」 ということをソフトウェアからコントロールすることは可能でしょうか? NSEvent あたりのリファレンスを調べましたが,それらしいメソッドが見つかりませんでした。 Leopard の Automator で「操作の記録」をして再生すると,このようなマウスイベントの再現ができているので, 方法がないわけではないと思うのですが…。Automator はどうやって実現しているのでしょうか…。
545 :
名称未設定 :2008/12/09(火) 23:27:09 ID:yHQ0Sslf0
>>540 >>541 ,542を見て「え、だめなんですか」とか言う前に
学校で使っているパソコンのOSがMacOS Xであることを確認しといて。
それ以外だったらだめ。
546 :
名称未設定 :2008/12/09(火) 23:59:55 ID:ESJXlCz60
それ以外でもだめなことないだろ。 プレゼンできればいいし、プログラムそのものを提出するんじゃなくてそれについての卒論でしょうよ。
547 :
名称未設定 :2008/12/10(水) 00:33:46 ID:2N5XkSrD0
>>544 プログラムで「自動的に」
マウスを任意の位置まで持って行き右クリックさせるプログラムを作ろうとしているのですか?
イベント処理はNSResponderで定義されているとか・・・そんなことは聞いてないんですよね。?
548 :
名称未設定 :2008/12/10(水) 00:51:56 ID:xSuG9smw0
549 :
名称未設定 :2008/12/10(水) 01:00:06 ID:2N5XkSrD0
550 :
548 :2008/12/10(水) 01:22:42 ID:6aI1OQjr0
>>549 目的は
>>500 なんでしょ?
もはややり方が回りくどすぎて意味不明になってるよ。
世の中のCocoaアプリがコンテクストメニュー一つ出すのにそんな回りくどいコード書いてるわけないのは分かるでしょ。
だったら方法が間違ってることも分かるでしょ。
そこで方法を質問しないで、自分が考えたトンデモ解決法を実現しようとして、その過程で行き詰まって質問したところで
まともなアプリは出来ないよ。
551 :
548 :2008/12/10(水) 01:27:21 ID:6aI1OQjr0
んで
>>500 ね。
menuとコントローラを繋げない…とあるけどコントローラにはすでに削除の処理を実装したアクションメソッドがあるのね?
ならNSMenuItemからコントローラにアクションを繋げればいいよ。コントロールキー押しながらドラッグね。
552 :
名称未設定 :2008/12/10(水) 01:29:26 ID:3bh9sFCU0
>>544 void rightClicOn(CGPoint mouseLocationFromTopLeft)
{
CGWarpMouseCursorPosition(mouseLocationFromTopLeft);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, true);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, false);
}
こんなんで逝けるハズ・・・。
553 :
名称未設定 :2008/12/10(水) 01:30:35 ID:3bh9sFCU0
うはっ、関数名の綴り間違ってる。
554 :
名称未設定 :2008/12/10(水) 01:34:01 ID:2N5XkSrD0
>>550 勘違いされています。
544さんは私ではありません。
自分もイベント処理で苦しんだので、もしかて544さんも
同じように右クリックしたいのかなと思っただけです。
555 :
名称未設定 :2008/12/10(水) 01:39:47 ID:2N5XkSrD0
参考にと今見させていただいたんですが、 QuartzのAPIですか・・・・ どうやったらそんな所まで扱えるようになるんですか? cocoaでアップアップです。
556 :
名称未設定 :2008/12/10(水) 01:42:40 ID:u8v8vRLL0
>>552 なんでCocoaは左下でCoreGrapchics?は左上なんだろ。統一してくれりゃいいのに。
変換関数とかってあるのかな?
557 :
名称未設定 :2008/12/10(水) 03:00:28 ID:fRwjglTW0
ビットマップ画像扱う場合必然的にCoreGraphics使う事になるよ
558 :
544 :2008/12/10(水) 05:18:06 ID:0LtvEto10
>>552 ありがとうございます!
ID:2N5XkSrD0 さんの質問内容と似ていたために,混乱させてしまった人がいたようですみません。
私がやりたかったのは,AppleScript からの右クリックなのですが,これで可能になりました。
AppleScript では,tell application "System Events" で,キーストロークや左クリックのイベントは送信できるのですが,
右クリックだけは手段が用意されておらず,control + 左クリック を送信しても再現できずに困っていたのです。
CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これで,右クリックからしか呼び出せないアプリの機能を使用する,アプリ操作自動化スクリプトが作れそうです。
559 :
名称未設定 :2008/12/10(水) 05:42:45 ID:GLeH1aY40
つうかそもそもコンテクストメニューからしか呼び出せないコマンドを持った アプリなんてそんなにないんじゃ...
560 :
名称未設定 :2008/12/10(水) 09:16:15 ID:4cshTNqV0
>>540 とりあえず、趣味レーションじゃなくて、シミュレーション、な。
561 :
名称未設定 :2008/12/10(水) 09:50:33 ID:lt7oGnOb0
>>558 >CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
>それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これってなんか面白いプロセス間通信じゃない?
もしかしてマウスイベントってこうやって外のプロセスから勝手に発生できる?
ログインしているユーザと同じユーザIDである必要はあるのかな。
562 :
名称未設定 :2008/12/10(水) 10:10:37 ID:0LtvEto10
>>559 それが,あるのですよ…。
具体的には,Safari に SafariStand を組み込んだときにコンテクストメニューに現れる,「PDF形式で書き出し...」というコマンドです。
「PDF形式で書き出し...」は,メニューバーのメニュー項目には一切現れず,コンテクストメニューにしか現れません。
AppleScriptからPDF化を行うには,
http://www1.odn.ne.jp/~cge02410/backnumber/2008/05/09024005.html のようなCUPS-PDFを使う方法もありますが,この方法だと,A4用紙サイズの場所でページ分割された,マルチページのPDFが生成されます。
それに対し,SafariStand の「PDF形式で書き出し...」コマンドで生成されるPDFは,ページ全体が1ページになった,縦長のPDFです。
印刷が目的でなく,iPhone画面上での閲覧が目的のPDFの場合,ページごとに切られるよりも,
HTMLのようにページの概念なしで縦長に繋がっていた方が便利なので,
この「PDF形式で書き出し...」をAppleScriptから使いたくて,「ソフトウェアから右クリックするには?」という疑問に至ったわけです。
それとも,自分で PDFKit を扱ってどうにかなるものでしょうか?
563 :
名称未設定 :2008/12/10(水) 10:19:21 ID:tqbTqlML0
>>559 iTunesにはコンテクストメニューからしか呼べないコマンドかなりあるぞ。
564 :
名称未設定 :2008/12/10(水) 11:36:17 ID:3bh9sFCU0
>>556 描画環境については原点左下で統一されてます。
>>552 はデバイス上での座標です。ややこしいですな。
それよりも、CocoaとCoreGraphicsとで
微妙に挙動が違うとか、マジ勘弁。
565 :
548 :2008/12/10(水) 14:27:13 ID:xSuG9smw0
566 :
名称未設定 :2008/12/10(水) 21:34:47 ID:0FGfVHqN0
荻原剛志さんの『詳解 Objective-C 2.0』を購入したのですが、 手元にある同じ荻原さんの『Objective-C Mac OS X プログラミング』は 処分してしまっても大丈夫ですか?
567 :
名称未設定 :2008/12/10(水) 23:14:04 ID:fRwjglTW0
好きにするがよろし
568 :
名称未設定 :2008/12/10(水) 23:58:21 ID:zWsFgxMm0
>>558 AppleScriptでdo shell scriptするならNSTask使えば良くね?
てかコマンドラインツール作らなくてもCGPostMouseEvent()って普通にカーボン?ならそのままコード書けば良くね?
と思った。
あんまちゃんと読んでないんで的外れだったらスマソ。
569 :
名称未設定 :2008/12/11(木) 09:37:47 ID:SLO1lTjD0
>>566 新しい奴では分散オブジェクトのとことか前のものから省略されてる部分が
あるけど、それでもいいなら捨てればよろし。
570 :
名称未設定 :2008/12/11(木) 10:21:22 ID:LfDuzN4X0
>>565 そんな便利なものがあったとは……!
>>568 いえ,そういうことではなくて,元々AppleScriptがメインで,AppleScriptで色んなアプリを自動操作しているスクリプト中において,
右クリックを自動化したい場合に,do shell script で CGPostMouseEvent() を呼び出すコマンドラインツールを呼び出す,という話です。
571 :
名称未設定 :2008/12/11(木) 10:37:08 ID:ZEYSuhvK0
>>570 AppleScriptがメインなわけね
>>544 でCocoaでって書いてあるから勘違いした
572 :
名称未設定 :2008/12/11(木) 11:54:56 ID:LfDuzN4X0
>>571 勘違いさせてしまってすみません。
Cocoaで実現可能な機能であれば,
http://pc11.2ch.net/test/read.cgi/mac/1223026902/171 のように AppleScript から RubyCocoa 経由で呼び出せるので,そういう方法はないかと模索していたわけです。
今回の右クリックも,
require 'osx/cocoa'
OSX.require_framework '/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework'
pos=[10,40]
OSX::CGPostMouseEvent(pos, true, 2, false, true)
OSX::CGPostMouseEvent(pos, true, 2, false, false)
というRubyスクリプトをワンライナーで do shell script から走らせることによって可能ではありました。
しかし,このRubyスクリプトを走らせた後,最初に Finder 上でファイルをドラッグしたときに,
ドラッグが離せなくなるという謎めいた現象が起こりました。
ファインダー上で一度手動で右クリックすれば解消するのですが。
どうも,この現象はRubyCocoaのバグなのかと思われます。
仕方がないので,コマンドラインツールを作ってAppleScriptから呼び出す方法をとったわけです。
573 :
566 :2008/12/11(木) 20:15:07 ID:aKreviH/0
>>569 ありがとうございます。
自分で判断がつくまではおいておくことにします。
574 :
名称未設定 :2008/12/12(金) 03:44:47 ID:IpphkAOm0
575 :
名称未設定 :2008/12/12(金) 10:26:53 ID:Vt9WDSMO0
performSelectorOnMainThread:withObject:waitUntilDone:を使う。
576 :
名称未設定 :2008/12/12(金) 10:36:04 ID:jo4yNZOw0
>>574 メソッドの実行に同期・非同期はあるけど(分散オブジェクトかマルチスレッド(
>>575 )の場合)
メソッドが他の処理をトリガーして、その処理が非同期の場合はもちろん方法はない。
クラスによっては、同期処理と非同期処理のメソッドを分けているものもある。NSURLConnectionの
sendSynchronousRequest:returningResponse:error:と
connectionWithRequest:delegate:のように。
だから実際に何をやりたいのか書くと調べられるかも。
577 :
名称未設定 :2008/12/12(金) 11:20:55 ID:Lqy+6jQB0
メソッドを分けたり条件式を足したりすることで実現できそうだけどなぁ
引数の問題はあるけど例えばメソッドAを分けたり、
待機の部分をなんらかのループにしておいて別スレッドのやつにループを抜ける条件を成立させたり
まぁ後者はうまいことやらないとループの間パワー使いまくるからアレだけど
(false)でスレッドをスリープさせて起きたらgotoとかで戻ってまた条件式をチェックして
(true)なら以降の処理へ、とかだったらいけるんじゃない?
で、やはり
>>576 さんの言う通り、もうちょっと具体的な話しがないとみんな答えにくいと思う
578 :
名称未設定 :2008/12/12(金) 11:31:37 ID:vTLMpfhJ0
>>577 それってフツーに条件付きロックじゃないの?
579 :
名称未設定 :2008/12/13(土) 03:04:23 ID:pWDzXHA/0
>>575-578 ありがとうございます。
>>576 具体的に書いた方が良かったですね、すみませんorz
WebViewにもそういうのがあったら…
>>577 その手があったか…
確かに負荷が心配ですね。
[NSThread sleepUntilDate:]を使って、0.1秒ごとにしたら大丈夫かな//
具体的には、NSTableViewのデリゲートの
- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(int)row{} (図:メソッドA部分)
から、[webView setMainFrameURL:](図:メソッドB部分)を呼び出し、
webViewから非同期で呼び出された、
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{}(図:メソッドC部分)
で、WebViewの表示結果に応じた画像がセットされるまで、- (void)tableView:(NSTableView *)tableView willDisp(略を待機させて置くようなことを考えています。
- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(int)row{}
のメソッドが終了してしまった後だと、[cell setImage:]を行っても表示に反映されないみたいで…
580 :
名称未設定 :2008/12/13(土) 05:21:59 ID:n2oMHeo80
>>579 >確かに負荷が心配ですね。
うーん、リアルで条件付きロックを知らないのか? じゃあちょっとコードを書いてみる。
実は pthread しか使ったことがなかったのだが、インターネットのヤホーで検索したら
ココアにはコソディショソロックというのがあることを発見したのでちょっと調べてみました。
初めて使うので間違ってたらごめんね。
なお、ココアのUIまわりは基本、スレッドセーフじゃないみたいなので、それは別途注意。
うーん、でもなんかちょっと違う気がする。まあいいや。
581 :
名称未設定 :2008/12/13(土) 05:24:03 ID:n2oMHeo80
改行が多いと言われるので、ほんとは一個のファイルなんだけど分けます。 #import <Cocoa/Cocoa.h> NSConditionLock *lock = nil; const int OK = 1, NG = 0; @interface Hoge : NSObject { } - (void)methodB; - (void)methodC; @end @implementation Hoge - (void)methodB { NSLog(@"methodB begin"); [NSThread detachNewThreadSelector:@selector(methodC) toTarget:self withObject:nil]; NSLog(@"methodB end"); } - (void)methodC { NSLog(@"methodC begin"); [lock lock]; NSLog(@"sleeping in methodC for 10 seconds:"); [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]]; [lock unlockWithCondition:OK]; NSLog(@"methodC end"); } @end
582 :
名称未設定 :2008/12/13(土) 05:25:39 ID:n2oMHeo80
int main(void) { lock = [[NSConditionLock alloc] initWithCondition:NG]; Hoge *hoge = [[Hoge alloc] init]; [hoge methodB]; NSLog(@"before barrier"); [lock lockWhenCondition:OK]; NSLog(@"after barrier"); exit (0); } コンパイルは cc -fobjc-gc -framework Ccocoa でよろしく。
583 :
名称未設定 :2008/12/13(土) 05:59:47 ID:pWDzXHA/0
>>580-582 ありがとうございますm(_ _)m
こんな便利なのがあったんですか…、助かりました。
584 :
名称未設定 :2008/12/13(土) 10:32:27 ID:JcdjU/On0
>>579 もしかしてtableView:willDisplayCell:forTableColumn:row:で指定されたNSCellをそのまま保持して、
後で画像を設定しようとしたのではないですか?
NSTableViewのCellはしょっちゅうコピーされるので、このメソッドで渡されたCellと実際に表示に使われるCellが
同じインスタンスとは限らないんです。
私だったら、そもそもそういう戦略をとりません。NSImageをインスタンス変数に持つモデルを作成し、
それを格納したNSArrayをNSTableViewにBindingします。
webView:didFinishLoadForFrame:が呼ばれたら該当するモデルのNSImageをsetしてやれば自動で表示も変わります。
表示が必要な部分だけ読み込みを行いたいならば、この場合もtableView:willDisplayCell:forTableColumn:row:を
受け取って該当するモデルのみ読み込ませる必要はあるかと思いますけどね。
WebVIewの読み込みが極端に遅かったりした場合にフリーズ同然の状態になるようでは使ってられません。
585 :
名称未設定 :2008/12/13(土) 22:29:36 ID:grgosdrm0
メモリーリークーを静的解析するツールはないのでしょうか? メモリーリークーだけまともにできない静的解析ツールならあるらしいのですが
586 :
名称未設定 :2008/12/14(日) 00:05:13 ID:mgsCXS5c0
587 :
名称未設定 :2008/12/14(日) 00:39:03 ID:u82y2nJj0
588 :
名称未設定 :2008/12/14(日) 02:03:29 ID:0NmjHAe60
589 :
名称未設定 :2008/12/14(日) 02:16:02 ID:Q/f3QCtB0
>>584 Cellではなく、TableViewにbindingですか…、なるほど。
>>588 画像そのものでしたら、それで良いのですが、
WebViewで表示したhtmlのスクリーンショット(dataWithPDFInsideRect)を表示させたいと考えています。
590 :
名称未設定 :2008/12/14(日) 16:33:29 ID:SOBNa9070
知り合いのソースコード見てたら NSLogデバッグで告白文が書かれていて笑ってしまった。
591 :
名称未設定 :2008/12/14(日) 17:07:31 ID:NC7/Gvub0
>>590 で、付き合うの?付き合わないの?
え?違うって?
592 :
名称未設定 :2008/12/14(日) 20:02:42 ID:x0LVuiPM0
ウホッ
593 :
名称未設定 :2008/12/14(日) 20:14:24 ID:wBq7QeXL0
>>585 チャラララン♪
ドラえもん「メモリーリークー」
594 :
名称未設定 :2008/12/14(日) 22:18:14 ID:EMo+k0m90
よく見ておくがいい、プログラマが告白(confess)をするというのは、こういうことだ! NSLog(@"Error at %s line %d", __FILE__, __LINE___); 笑っていただけたでしょうか。
595 :
名称未設定 :2008/12/14(日) 22:27:05 ID:E2vidIer0
UNIX板でその手のスレッドがいつもそれなりの頻度で立ってるな。 確認してないけどクリスマスに向けてまた立ったんじゃないかな?w
596 :
名称未設定 :2008/12/14(日) 23:16:25 ID:nL5ZmCvA0
597 :
名称未設定 :2008/12/14(日) 23:56:48 ID:vUlSNKMI0
たのココ読んで頑張っています。 質問させてください。 Xcode起動して CocoaApplication を新規プロジェクトで作成して、 すぐにビルドして実行しても以下のエラーが発生してしまいます。 CopyStringsFile /Users/hoge/Desktop/work/TestCocoa/build/Debug/TestCocoa.app/Contents/Resources/English.lproj/InfoPlist.strings English.lproj/InfoPlist.strings error: can't exec '/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings' (No such file or directory) Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings failed with exit code 71 どのように解決していけばよいでしょうか? 宜しければ教えてください。
598 :
名称未設定 :2008/12/14(日) 23:58:00 ID:U9Ih6wbO0
___ /_ノ ::::ヽ、_\ ミ ミ ミ o゚<●>:::::::<●>゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) マカがwwww | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
599 :
名称未設定 :2008/12/15(月) 00:08:18 ID:ONvQ5Bfu0
>>597 IBはどこもいじってないわけだよね?
後、たのココのどの部分を読んでいるのかとか、Xコードのバージョンとかも書いてもらえないですか?
もしかしたら再度インストールしたほうがいいかもしれない。
600 :
名称未設定 :2008/12/15(月) 00:14:06 ID:ONvQ5Bfu0
>>597 検索で
/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings
そしたらあなたと同じように最初にビルドした際にこんなエラーが出たって言う悩みがいっぱい出てあったよ。
601 :
名称未設定 :2008/12/15(月) 00:17:52 ID:YWho2ACc0
レスありがとうございます。 IBは思い当たるような設定変更はしていません。 ただ、気になるのは以前にiPhoneのSDKをインストールしているので、 デフォルトとは言い切れません。 たのココはRSS Readerのサンプルを作っています。 本に載っていたサンプルコードを一気に書き上げて、 ビルドしたら上記のエラーが発生しました。 おかしいな、と思って切り分けのために 全く新規に空のプロジェクトを作って見ても同じエラーが 発生したので、異常を感じて調べていたところです。 バージョンは3.1.1 です コンポーネントのバージョン Xcode IDE: 1115.0 Xcode Core: 1114.0 ToolSupport: 1102.0
602 :
名称未設定 :2008/12/15(月) 00:19:36 ID:i+oeVcfk0
そうですか。とりあえず、自分でも調べるけど、 2ちゃんねるに投げておけば、誰かが調べてくれる。ということで 書いていたんですね。
603 :
名称未設定 :2008/12/15(月) 00:19:37 ID:ONvQ5Bfu0
604 :
名称未設定 :2008/12/15(月) 00:20:24 ID:YWho2ACc0
>>600 ありがとうございます。
copystrings などで検索してたので上手く引っかけれてませんでした。
しばらく読んでみます。
605 :
名称未設定 :2008/12/15(月) 00:28:26 ID:YWho2ACc0
完全に私の検索スキルの低さが原因だったようです。 あっという間に解決しました。 簡単に説明しますとエラーが発生している copystrings でrubyが 使用されているのですがそのパスが /usr/bin/ruby 固定でした。 私は macports でrubyをインストールしていたので パスが違うのが 原因でした。 シンボリックリンクを /usr/bin/ruby において解決です。 なんだか皆さんの気分を害されたら申し訳ないです。
606 :
名称未設定 :2008/12/15(月) 00:37:34 ID:ONvQ5Bfu0
607 :
名称未設定 :2008/12/15(月) 00:39:00 ID:uX3YJL520
macports って ruby をいれると /usr/bin/ruby が削除されるの? そんな無茶苦茶な。
608 :
名称未設定 :2008/12/15(月) 00:47:22 ID:aU8GlMMf0
世の中にはPATH環境変数ってのがあってだなry)
609 :
名称未設定 :2008/12/15(月) 01:21:01 ID:uX3YJL520
う〜ん、でも、copystrings のスクリプトの先頭は #!/usr/bin/ruby に なっているので、PATH 環境変数の問題では無い気が... わかってなくてすみません。
610 :
名称未設定 :2008/12/15(月) 01:28:54 ID:qsoULL6B0
この場合、PATHは関係ないね。 それよりも、/usr/bin/rubyが無いのが異常に気になる。 macportsの所為では無いと思うんだけど・・・。
611 :
名称未設定 :2008/12/15(月) 19:04:22 ID:CwNz3R3E0
MacPorts で Ruby 入れる ↓ $PATHの関係で /usr/bin 以下のRubyが起動される ↓ むきー ↓ sudo rm /usr/bin/ruby と予測
612 :
名称未設定 :2008/12/16(火) 13:40:23 ID:ZJJ0pZ8kO
>>612 オヤスミ…
<⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
613 :
名称未設定 :2008/12/18(木) 03:55:29 ID:5NHEEkjy0
x-codeで printf("\n")で改行させたいんですが、どうすればいいですか? 一応エンコーディングはshift_jissでコトエリで バックスラッシュを¥になるように設定しています。 バックスラッシュ+n では改行できるんですよね・・・・・・。
614 :
名称未設定 :2008/12/18(木) 05:52:12 ID:8C6l/M/x0
バックスラッシュと円記号の関係を再認識したほうがいいと思うな... あくまで C の規格的には、バックスラッシュ+n が改行。 Shift-JIS でそれが円記号+n に見えるのは、 Shift-JIS ではバックスラッシュの「値」をもつ記号が 円記号のように「表示される」というきまり。 日本語ウィンドウズだとパス名に円記号がいっぱいはいってるけど、 英語ウィンドウズだとそれが全部バックスラッシュになります。 しかしユニコードではバックスラッシュと円記号はちがう文字です。 日本語 Mac で昔標準だった MacJapanese もバックスラッシュと 円記号はちがう文字です。というわけで、悪い事は言わないから バックスラッシュと円記号を混同するのはやめたほうがいいです。 まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが 円記号に見えないのはなんか変な気がしますね
615 :
名称未設定 :2008/12/18(木) 10:04:04 ID:gsSyM0EO0
Cocoaでprintfなんぞ使った事は無いが。
616 :
名称未設定 :2008/12/18(木) 11:04:36 ID:LQ3bq09a0
>>614 >まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
>円記号に見えないのはなんか変な気がしますね
え? 円記号に見えるでしょ。
もしかして CP932 (日本語 (Windows, DOS)) と勘違いしてない?
>バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
617 :
名称未設定 :2008/12/18(木) 14:17:49 ID:brBSoHTs0
>>614 ものすごく参考になりました。
その辺、ちょっと調べてみます。
ただwikiをみると何のことかさっぱりで・・・:・・。
618 :
名称未設定 :2008/12/18(木) 15:01:53 ID:HPiuHPLV0
>>617 OS 9時代、7ビットASCIIの一部は表示文字を各国が自由に指定できた。
バックスラッシュがその一例で、日本のフォントやPCメーカーは
バックスラッシュの代わりによく使う円マークを表示するように設計した。
データ的にはバックスラッシュと同じなんで¥nでも問題がなかった。
OS XになってからはUnicodeを使うようになった。
こいつはバックスラッシュと半角円が別々に定義された。
ゆえにデータ的に見ても別物だから¥nは使えなくなった。
こんな感じでおk?
619 :
名称未設定 :2008/12/18(木) 19:12:09 ID:PDgvlNo80
OS 9時代と表現に違和感が。 つーか、MacJapaneseではちゃんと区別してたよ。
620 :
名称未設定 :2008/12/18(木) 21:38:28 ID:brBSoHTs0
>>618 本当にありがとうございます。
wikiしかりいろんなサイトを見回ってunicode等調べたのですが、
なかなかバックスラッシュが使えたり、使えなかったり
¥マークが制御文字になったりならなかったりする理由を見つけることができませんでした。
でもおかげさまで明確に理由がわかりました。ありがとうございます!
621 :
名称未設定 :2008/12/18(木) 22:46:09 ID:8C6l/M/x0
>>616 XCode 3.1.2 で Shift-JIS (Windows, DOS でなくて) にしても
円記号にみえないよ... むむむ。
622 :
名称未設定 :2008/12/18(木) 22:52:14 ID:pOmvbV3i0
つまり日本が悪いってことだね?
623 :
名称未設定 :2008/12/19(金) 00:16:59 ID:kZ9hkPkf0
>>621 MacにMSゴシックやメイリオを入れても円マークはバックスラッシュになっちゃうんだよね。
624 :
名称未設定 :2008/12/19(金) 01:29:19 ID:dr8c9lPo0
0x5Cの字形がバックスラッシュか円記号かはフォント依存の問題。 Unicodeではバックスラッシュ(U+005C)と円記号(0+00A5)は別。
625 :
名称未設定 :2008/12/19(金) 01:58:06 ID:5xiiw0t00
626 :
名称未設定 :2008/12/19(金) 02:05:22 ID:piXJ3bSu0
>>624 >0x5Cの字形が
フォントのグリフを語る際に、
文字コードを指定せずに 0x5C の字形が、っていっても意味がなくない?
ユニコードでひとつコードを決めると、
グリフは(芸術性をのぞいて)決まってるべきだけど。
あと、シフトJIS の規格って、よく知らないんですが、
各コードのグリフ形状まで指定してないんですか?
指定してるとすると、 0x5C をシフトJIS で表示するときは、
どんなフォントをつかってるにしても、グリフはバックスラッシュでなくて
円記号のグリフを使うべきだと思うんだけど。
627 :
名称未設定 :2008/12/19(金) 05:28:58 ID:PqTjwco00
>>621 1. 0x5cを含むファイルを作成。
2. Xcode の環境設定でフォントのデフォルトを全てMonaco、エンコーディングのデフォルトを
「日本語(Shift JIS)」にする。
3. Xcode の「開く...」で1.で作ったファイルを開く。
で、円記号が見えるけどな、自分とこでは。
>>623 Vistaから(ピー)してきたメイリオではU+005Cを円記号で表示するけど。自分のとこでは。
MSゴシックは確かMacのOfficeに付いてくるのとWindows純正ので違ったような気が。
628 :
名称未設定 :2008/12/19(金) 15:06:35 ID:lttihNqB0
>>626 そもそも1Bbyteコードって
シフトJISの定義域ではない。
シフトJISを使用するときに
1Byteコード領域は概ねJIS X0201を使う事が多いだけ。
X0201には標準字形は定義されているが
ビットマップ時代の制定だから、グリフの概念がない。
大体、漢字を16Dotで表現するのにグリフなんて考えすらないよ。
629 :
名称未設定 :2008/12/19(金) 16:43:35 ID:i3qBricn0
NSString→NSStringへの文字コード変換ってどうんな感じでやればいいんでしょうか…
630 :
名称未設定 :2008/12/19(金) 16:48:36 ID:HMXc5t5u0
>>626 純粋な Shift JIS じゃなくて、Windows 上の Shift JIS の実装(拡張)、いわゆる CP932 だと
話はある意味
>>624 の言う通りで、
0x5c は論理的には reverse solidus (バックスラッシュ)。なんだけど対応する文字(グリフ)は
日本語の Windows 上では円記号で表示される(ことが多い)。
確かに「文字コードとグリフのデザインは別の概念」とはいえ、なんだかなあと思ってしまう。
歴史的な互換性の維持とはいえ。
http://www.microsoft.com/globaldev/reference/dbcs/932.mspx Mac OS X 上だと CP932 の 0x5c はバックスラッシュのグリフで表示されて(ことが多い)、
こっちの方が純粋というか素直なような。
631 :
名称未設定 :2008/12/19(金) 17:37:33 ID:1nt96Eco0
>>629 NSString は(実装はともかくとして)
常に Unicode で文字列を格納していると思うべきです。
そこから char* として取り出すときに encoding を指定して取り出す、
そこに char* からデータをいれるときに encoding を指定して入れる。
+[NSString stringWithCString: encoding:]
と
-[NSString cStringUsingEncoding:]
を参照。
632 :
629 :2008/12/19(金) 17:45:58 ID:i3qBricn0
ふんふん。 やっぱ、間に一発C文字列への変換が必要という事か… ほいでまたNSStringに戻すと。
633 :
名称未設定 :2008/12/19(金) 18:57:29 ID:AFDCyKKm0
>>632 > やっぱ、間に一発C文字列への変換が必要という事か…
> ほいでまたNSStringに戻すと。
ようするに、NSStringからNSStringへの文字コード変換は、無意味という事なのだが。
629はその辺、分かってるのかな?
634 :
名称未設定 :2008/12/19(金) 19:01:52 ID:Mt5zlTWV0
多分 >そこに char* からデータをいれるときに encoding を指定して入れる。 で指定したエンコーディングになると思ってるんだろう。 俺もわかってないんだが要するにcStringUsingEncoding: でC文字列が何でエンコードされているかを判断するってことだろ?
635 :
名称未設定 :2008/12/19(金) 19:04:52 ID:VujcLHpJP
なんか勘違いしてる… NSStringに入れた時点で内部的にはUnicodeに統一される だからNSStringとして操作する上では、 char型に取り出したり、ファイルと入出力するような場面以外に 文字コードを意識することはないし、 NSString間の文字コード変換ってのもできない(ありえない)よ
636 :
名称未設定 :2008/12/19(金) 19:23:42 ID:Mt5zlTWV0
そういうならまずはcStringUsingEncoding:の正しい使い方から教えてくれや
637 :
名称未設定 :2008/12/19(金) 20:27:22 ID:wF57mWA70
638 :
名称未設定 :2008/12/20(土) 00:46:03 ID:Niwi5dnC0
Objective-Cってもっとシンプルに書けるようにならないかな Dictionaryも dic[key] = value; とか書ければなぁ KVCの場合は若干気持ち悪いかもしれん C++でWrapしてみるか...
639 :
名称未設定 :2008/12/20(土) 01:57:12 ID:eDv0h37G0
>>638 C++だったら連想配列といわず、行列の積なんかもシンプルに書けるよね。C++万歳!
そのぶん言語自体が激しくシンプルじゃないのは皆さんご存知の通りですがw
C++で wrap って、key や value には Objective-C のオブジェクトを入れるの?
だったら You 最初から STL 使っちゃいなよw
640 :
名称未設定 :2008/12/20(土) 02:01:54 ID:UW2/XF4a0
.netを趣味でやっていたものとして言わせていただければ Objective-cは最高だと思う。 なんたって無料で全ての機能を提供してくれているし。 知れば知るほど奥の深さに魅了されてしまう。
641 :
名称未設定 :2008/12/20(土) 04:16:49 ID:R19Od2LJ0
objcつかcocoaはコードがだらだら長くなって見づらくなるのが難点。 入力も面倒になってくる。
642 :
名称未設定 :2008/12/20(土) 05:52:03 ID:WdjszjrV0
確かに名前空間を使用したプログラミング言語に比べてそこが一番の欠点だよな。 覚えきれん・・・・・・・。 それに一字でも間違ってたらもうアウトなわけだから デリゲートメソッドとか悲惨。 エラーどころか警告すら出ないんだから。
643 :
名称未設定 :2008/12/20(土) 07:35:31 ID:KNV2xQr00
delegate method は確かに悲惨だよね。 でもそれ以外は XCode なら入力補助があるから 別に長くても問題なくない? 長いメソッド名だから半分強制的にコメントかかされているみたいなものなのも 半年後に自分のプログラムを読むときに案外役に立ってる気がする。 最近はすっかり汚染されてしまって、 自前のオブジェクトのメソッド名もすごい長くして 英語の文章として読めるようにしている。
644 :
名称未設定 :2008/12/20(土) 07:45:55 ID:WdjszjrV0
でもVisual.NETしていた人間にとってはX-codeの入力補助なんて糞。 まぁ僕みたいな凡人でトーシローのことですけど・・・・ 皆さんは満足ですか? あの入力補助で・・・・・。 ものすごく邪魔になることも多いんですが。
645 :
名称未設定 :2008/12/20(土) 09:35:37 ID:Niwi5dnC0
VCの入力補完も糞じゃね? C#やVBなららくちんだろうけど。
646 :
名称未設定 :2008/12/20(土) 11:51:03 ID:zY1fsqkk0
入力補完なんてふつうOFFだろ。鬱陶しい。
>>640 Objective-cに限らずgccは普通に全ての機能を無料で提供だろ。
647 :
名称未設定 :2008/12/20(土) 12:47:41 ID:7wiP5m1V0
こんぱいらはね
648 :
名称未設定 :2008/12/20(土) 14:03:40 ID:/70q+NvK0
>>639 もちろんメインはSTLやboostで書いているけどUI周りがねー。
649 :
名称未設定 :2008/12/20(土) 14:47:22 ID:eDv0h37G0
>>648 だったら UI は PowerPlant でしょ。え、Cocoa Binding? Core なんちゃら? 何のことですか?
ソースがあるから頑張ればこれからも Mac OS X に追随できる (かも)。
ま、CodeWarrior に付いていたコードは Leopard でコンパイルすると deprecated 警告の嵐で引くけどw
オープンになった方はそこら辺改良されてたり... しないか。
650 :
名称未設定 :2008/12/20(土) 17:36:34 ID:ElTiCEex0
弘法は筆を選ばず
651 :
名称未設定 :2008/12/20(土) 18:44:35 ID:WdjszjrV0
ん? 誰か俺を呼んだ?
652 :
名称未設定 :2008/12/20(土) 23:35:09 ID:9hlRQq980
工房は筆を下ろさず
653 :
名称未設定 :2008/12/20(土) 23:39:41 ID:pVSz5R1L0
俺のアプリは「made with simple text」のロゴが入ってるよ。
654 :
名称未設定 :2008/12/21(日) 01:03:07 ID:03GYYjSC0
SimpleTextじゃぁ自慢にならんよ。 自慢したいんならedでコーディングしてなんぼ
655 :
名称未設定 :2008/12/21(日) 01:08:59 ID:kHbQDWZQ0
そんなの何の自慢にもならんだろ。 自己満足以外の何ものでもない。
656 :
名称未設定 :2008/12/21(日) 02:07:29 ID:BKOVdXos0
WebKitを使ったプログラムでFlashプレイヤーのプラグインを使用すると コンソールに「Debugger() was called!」と出力されますね。 Flashプレイヤー9の時は出なかったのですが、10に上げたら出るようになった感じ。 非常にうざったいです。
657 :
名称未設定 :2008/12/21(日) 14:53:14 ID:qkj38C460
若干スレチ気味だけどデータの型からサンプルコードではない正式な使い方を記した文章を知る事は出来ないの? 使いたいAPIの引数にHogeHogeRefみたいのがあったときに、 どうやったらそれを作れるのかがsee alsoで書いてくれたり HogeHogeRef自身が詳細へのリンクになってたりすると楽なのに。 例えばリファレンスでAPIの引数にCodecTypeって見つけて、 確かにリンクにはなってるんだけど、飛んでも typedef OSType CodecType; とだけしか書かれてないとか。 型の詳細もだけど、どんな値を入れたらいいのか知りたいんだよ!と。
658 :
名称未設定 :2008/12/21(日) 15:16:33 ID:YL4QjoBD0
ReferenceじゃなくてProgramming Guideを読めばおk
659 :
名称未設定 :2008/12/21(日) 15:41:09 ID:uX+Fb44J0
QT関連は複雑な上にドキュメント不足は否めん。 QT7で追加されたAPIとかになると悲惨。
660 :
名称未設定 :2008/12/21(日) 18:58:24 ID:1bYWKW200
ココア(←なぜか変換できない)
661 :
名称未設定 :2008/12/23(火) 10:35:34 ID:AMg5R5ie0
Xcode3.1.2なんですがボタン上の文字のフォントを変えるにはInterface Builderのどこをいじればいいんでしょうか。設定が見つからないですorz
662 :
名称未設定 :2008/12/23(火) 10:55:29 ID:8y6CxMf40
>>661 IBでボタンを選択して、FontメニューからShow Fonts。
普通のアプリと同じ。
663 :
名称未設定 :2008/12/23(火) 11:25:11 ID:PGYHkvA30
>>661 ていうかフォントを変えるな。
ほかに非標準のフォントをつかったボタンがあるソフトがありますか?
独自性とかいってかえれば良いってもんじゃありません。
664 :
名称未設定 :2008/12/23(火) 14:54:44 ID:AMg5R5ie0
>>662 ありがとございます。
ボタンはできましたが、NSBoxのラベル部分が変わらないなあ。
>>663 やっぱり変えないほうがMacらしいんですかね。Cocoaの本読んでるんですがLeopardになってからかNSBoxのラベル部分の文字が薄くて読みにくい感じがしてBoldにしてみようかなと。
665 :
名称未設定 :2008/12/23(火) 15:14:26 ID:8y6CxMf40
>>664 NSBoxはIBからじゃ変えられないですね。
setTitleFont:するしかなさそうです。
666 :
名称未設定 :2008/12/23(火) 15:23:37 ID:AMg5R5ie0
667 :
名称未設定 :2008/12/23(火) 15:56:58 ID:b+ysoZu80
つうか、GUIのフォントってデフォルトから変えていいのか? ガイドライン的に。
668 :
名称未設定 :2008/12/23(火) 15:58:13 ID:b+ysoZu80
スマソ、スクロール足りてなかったorz
669 :
名称未設定 :2008/12/23(火) 16:28:20 ID:Ch41JxbW0
自分で使う分には構わないだろ。 人様に使わせるのはどうかと思うが。
670 :
名称未設定 :2008/12/23(火) 16:52:51 ID:9kr1H59b0
>>667 システム環境設定→ユニバーサルアクセス
671 :
名称未設定 :2008/12/23(火) 19:43:10 ID:2buqxug+0
萩原剛志さんの本はプログラミング初心者には難しいと聞いたのですが C言語の基礎を知ってる程度では、やはり難しいでしょうか? 「詳解 Objective-C 2.0」を買おうかと思っています
672 :
名称未設定 :2008/12/23(火) 19:49:25 ID:hxngkr3k0
>>671 メモリ管理の話とか、オブジェクト指向の話とか、例外処理とかある程度知ってな
いと読むのつらいと思う。
でもまあ齧った程度でも知ってるのならばなんとかなる。
つーかおれはなった。
673 :
名称未設定 :2008/12/23(火) 20:20:10 ID:2buqxug+0
>>672 C言語のこと以外は全く知らないのでやめときます
別の本を探します
674 :
名称未設定 :2008/12/23(火) 20:36:00 ID:I2LctYge0
Objective-Cに他の本はあるの?
675 :
名称未設定 :2008/12/23(火) 20:36:57 ID:CzyIQtOV0
>>671 その本は、Objective-Cを多少知ってないと辛いと思うよ
たのCocoあたりから読むと良いと思います。
676 :
名称未設定 :2008/12/23(火) 21:42:54 ID:Ch41JxbW0
たのココは語尾がムカツク
677 :
名称未設定 :2008/12/23(火) 21:43:59 ID:IWcOJZP00
あの口調はネットだから許される。 紙媒体では無理。
678 :
名称未設定 :2008/12/23(火) 22:20:20 ID:CzyIQtOV0
>>676 それは、確かにw
内容は良いのに残念なんだぜ!
679 :
名称未設定 :2008/12/23(火) 22:23:22 ID:m5cu4oUi0
680 :
名称未設定 :2008/12/23(火) 22:25:53 ID:JS+9dWrN0
参考書無しのネットだけでここまで来たぜ! で、自作の電卓が動かないんですけど。
681 :
名称未設定 :2008/12/23(火) 22:33:54 ID:hxngkr3k0
682 :
名称未設定 :2008/12/23(火) 23:26:43 ID:cFsVUxjvP
sourceforgeに上げようぜ
683 :
名称未設定 :2008/12/24(水) 00:13:05 ID:ej1MZ/+00
質問です。 入力された文字列が数字のみかどうかのチェックをしたいのですが、 よろしいのでしょうか? NSTextField上でも入力された後の処理でもかまいません。 よろしくお願いします。
684 :
名称未設定 :2008/12/24(水) 00:34:59 ID:NHt4bY8g0
formatterを使えばいいのではないか。
685 :
名称未設定 :2008/12/24(水) 00:58:03 ID:YvN7oXnF0
お手軽な入力フィルタだったら NSTextFieldのサブクラスで textView:shouldChangeTextInRanges:replacementStrings: を実装すれば逝けると思います。
686 :
名称未設定 :2008/12/24(水) 01:57:36 ID:94m8GJXM0
具体的にプログラムを作るって話になると木下本読まないと厳しいが、 Obj-Cについてもう少し知ろうとすると、萩原本は必須になるとおもうよ。 柴田本は昔のはあれだった印象があるが、今のは使えるのか>詳しい人
687 :
名称未設定 :2008/12/24(水) 08:41:08 ID:rdLNE9qM0
688 :
名称未設定 :2008/12/24(水) 09:55:33 ID:3pqZJ+9a0
>>686 本屋で立ち読みした限りでは買う価値は依然としてない。
>>679 の本はわからんが、多分、アレだろう。
柴田って古いMac OSとか絶滅したAppleIIとか古い話ばかりでいい加減消えて欲しい。
昔はBeOSの本とか出してたな。もう新しい技術についていけないお払い箱ライター。
689 :
名称未設定 :2008/12/24(水) 19:57:44 ID:pU6O2/Rq0
俺の同僚がcocoaアプリケーションチュートリアルだけで 目的とするプログラムを書き上げていた。 そいつは、 プロパティどころか、アクセッサメソッドすら理解していなかったけど・・・・・。 それどころかメソッドの書き方も分かってなかった。 もちろん起動しなかったけど、あれだけであそこまで完成させていたのには ちょっと驚いた。
690 :
名称未設定 :2008/12/24(水) 20:07:45 ID:rdLNE9qM0
691 :
名称未設定 :2008/12/24(水) 21:11:18 ID:2Q4M0dVc0
>>689 チュートリアルだけ呼んで、動きもしないプログラムを書くぐらいなら君にも出来るさ
692 :
名称未設定 :2008/12/24(水) 23:19:17 ID:PMjOK3gJ0
693 :
名称未設定 :2008/12/25(木) 01:01:09 ID:DWj5DZ1R0
694 :
名称未設定 :2008/12/25(木) 02:34:18 ID:Nt+Z4c6J0
>>689 起動しなきゃ理解してないってことじゃん。
それって単にオブジェクト指向プログラミングのテクニックを知ってるってだけじゃないの?
695 :
名称未設定 :2008/12/25(木) 10:18:41 ID:WmzR4NXU0
696 :
名称未設定 :2008/12/25(木) 11:11:30 ID:92TaARB20
697 :
名称未設定 :2008/12/25(木) 13:37:57 ID:s26TIzeM0
ウンコ連中によるM−1敗者イジリがスタートしたな
698 :
名称未設定 :2008/12/25(木) 14:28:10 ID:WTPPCtl00
↑西野乙
699 :
名称未設定 :2008/12/25(木) 15:11:15 ID:CqvJET2e0
Appleのサンプルコードに下のような方法で値を返してるのがあるんだけど、 xxxRef系って実装はObj-Cのオブジェクトなの? ていうかCから扱うためにあるんだろうに、勝手にGCされちゃうわけ? HogeHogeRef func() { HogeHogeRef r; // ... rの作成 return (HogeHogeRef)[(id)r autorelease]; }
700 :
名称未設定 :2008/12/25(木) 15:16:32 ID:SqNR9yg50
トールフリーブリッジ(toll-free bridge)といいます。 クラスによってはキャストだけでどっちにも使えます。 GCは使ってないから分かりません。
701 :
名称未設定 :2008/12/25(木) 15:17:07 ID:9U2YaQaT0
702 :
名称未設定 :2008/12/25(木) 16:30:31 ID:D/fdkldl0
「勝手に」GCされたりはしないだろ。
703 :
名称未設定 :2008/12/25(木) 21:10:59 ID:wIrcpCJz0
CoreFoundationのCF〜RefとFoundationのNS〜ではtoll-free bridgeのものが多くあります。 しかしだからといって、それ以外の〜Refも同等のObj-Cのオブジェクトがあるとは思うべきではありません。 基本的にはそれぞれの適切な関数で解放すべきです。
704 :
名称未設定 :2008/12/25(木) 21:15:39 ID:5IYO0foX0
CFなんたらって何ですか? 怖くてNSなんたらしか使ったことないんですが。 ネットで拾って参考にしてるコードでもコピペでしか使ったことないですw
705 :
名称未設定 :2008/12/25(木) 21:24:07 ID:bUlVH57f0
>>704 >CFなんたら
Core Foundationでそ
706 :
名称未設定 :2008/12/25(木) 21:31:31 ID:9U2YaQaT0
>>703 CFTypeRefの関数が使えるものならNSCFTypeRefが面倒見てくれますよ。
707 :
名称未設定 :2008/12/25(木) 21:46:54 ID:9HW4c/IQi
NSって何の略でそか?
708 :
名称未設定 :2008/12/25(木) 21:49:09 ID:wIrcpCJz0
NextStep
709 :
名称未設定 :2008/12/25(木) 22:18:29 ID:O7EHv8wm0
710 :
名称未設定 :2008/12/25(木) 22:26:36 ID:uTnwU5K00
500とかRとか付いたり
711 :
名称未設定 :2008/12/25(木) 22:32:21 ID:jC1CCwNf0
>>710 中古でしか手に入らん上にえらい高いんじゃw
あと50も思い出してあげて。
712 :
名称未設定 :2008/12/25(木) 23:21:28 ID:CqvJET2e0
ありがとうございました。 Toll-Free Bridgeというものがあって、いくつかそれに準拠しているわけですね。 ある型がToll-Free Bridgeかというかどいうのはどこかに明記されているのでしょうか。 それとも調べるしかないのでしょうか。
713 :
名称未設定 :2008/12/25(木) 23:38:36 ID:uTnwU5K00
>>711 確かに、50が一番最後まで残ってたわけだし、一番いろんなモデルがあったしね。
714 :
名称未設定 :2008/12/25(木) 23:52:26 ID:kBcDv0rN0
>>714 リファレンスの最初の方に載ってる。例えばNsStringの項目をみると、CFStringとキャストするだけでおk、と書いてある。
toll-freeで検索するといいよ。
715 :
名称未設定 :2008/12/25(木) 23:53:11 ID:kBcDv0rN0
716 :
名称未設定 :2008/12/26(金) 03:06:07 ID:py8HyFHM0
NSStringにclassnameかけるとNSCFStringが返ってきたりするね。
717 :
名称未設定 :2008/12/26(金) 17:59:20 ID:Gs8UicIM0
そんなことわざわざしてみたりするんだ・・・・ でもNSArrayとかに最後にnil入れ忘れたりすると、 NSCFArrayエラーとかになるよね。 やっぱりnilはCFとの互換性のために必要なんだろうか。
718 :
名称未設定 :2008/12/26(金) 18:18:16 ID:sdS5y8k+0
nil無いと個数が判らんだろ。
719 :
名称未設定 :2008/12/26(金) 18:40:44 ID:1VG5u8OV0
>717 可変引数の使い方知らない?
720 :
名称未設定 :2008/12/26(金) 18:42:42 ID:yOYP+wqH0
NSほげが実際にはCFほげを呼んでたりする、というのはそれでいいとして おもしろいことにCFのフレームワークの中にNSほげのメソッドの実体が入ってたりする(Leoprad 限定)。 なんでそんなことをしているのか興味深いし、そもそも中の人がフレームワークをビルドするときに どうやって依存性を解決しているのかもちょっと不思議だったりする。
721 :
名称未設定 :2008/12/26(金) 18:44:02 ID:Gs8UicIM0
あー可変引数の関係か。 そうかメソッドだもんな。あんまりメッソドって意識がなくなっていた。そっか。 文字列定数とかだったら最後にnullを書く必要とかないでしょ。とか言う感覚でいってしまった・・・ORZ。
722 :
671 :2008/12/26(金) 19:28:07 ID:7HRNK0zL0
「たのしいCocoa」読みました なんていうか、ラーメンズが出てたMacのCM思い出しました レスくれた方ありがとうございました
723 :
名称未設定 :2008/12/27(土) 11:53:19 ID:6vw8P5nD0
NSArrayControllerが持ってるcontentArrayの追加/削除された差分が欲しいんだけど、 arrangedObjectsやcontentへのbind:/addObserver:だと配列丸ごとしか受け取れないっす。 差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って それとbind:するしか無いですか? というか何故NSArrayControllerは差分(NSKeyValueChangeInsertionとか)を 送ってくれないですか?
724 :
名称未設定 :2008/12/27(土) 14:19:24 ID:1ymko+SU0
>>723 間にNSArrayControllerを入れずに、ViewとModelを直接バインドする。
725 :
名称未設定 :2008/12/27(土) 15:10:32 ID:6vw8P5nD0
>>724 どうもです。
ModelがNSMutableArrayを持ってるわけじゃなくて、
そのModelがNSMutableArrayの中に入ってて、その数の増減をobserveしたいんです。
要するに
> 差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
> それとbind:するしか無いですか?
ですよね?(カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装)
このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしか
いないので、こいつがNSKeyValueChangeInsertionを通知してくれれば助かるんですが、
してくれないんですよね?
726 :
名称未設定 :2008/12/27(土) 16:00:30 ID:1ymko+SU0
>>725 MVCパターンにおいては、Modelコンポーネントは1つです。たとえ、それが複数のクラスで構成されていたとしても。
今回のケースは、Modelの内部に配列を含んでいるという話なのでは?
> このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしかいない
NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?
> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
これをModelとして実装すればよいのではないかと思います。
まあ、あえてこの機能をControler側に実装するなら、NSArrayControllerのサブクラスを作ることになりそうですが。
727 :
名称未設定 :2008/12/27(土) 16:03:14 ID:wr2ktw9Z0
>>683 です。
>>684-685 ありがとうございます。自己解決できたのでお役にたてればと。
// 数字以外のキャラクターセット
NSCharacterSet *decimalInvertSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
// 上記セットがあるか
NSRange rng = [string rangeOfCharacterFromSet:decimalInvertSet];
if(rng.length > 0){
// 数字以外が含まれている
}else{
// 数字のみ
}
728 :
名称未設定 :2008/12/27(土) 16:18:18 ID:wr2ktw9Z0
>>723 NSArrayControllerのcontextがCoreDataなら
NSManagedObjectContextObjectsDidChangeNotificationで
NSInsertedObjectsKey、NSUpdatedObjectsKey、NSDeletedObjectsKey等でわかるかもしれません。
NSArrayControllerのみでもいけるのかな?
詳しくはググって見て下さい。
729 :
名称未設定 :2008/12/27(土) 17:51:40 ID:HOyebOs70
NSURLConnectionを使っています。
なぜか接続に失敗するのですが、そのときに
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
が呼ばれ、
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
の出力により
> Connection failed! Error - ネットワークの接続が解除されました
http://example.com/hoge と出ているのですが、そのアプリを終了させても
どうもセッションをはって何やらダウンロードが続いているようなのです。
netstat で ESTABLISH になっていますし、ネットワークの下りは一定の速度でダウンロードしているようです。
質問は二つあります。
1. アプリを終了させても接続が続くとは、
Mac OS X や NSURLConnection は一体どのような仕組みになっているのでしょうか。
2. 失敗しても安全にダウンロードが終了できるような NSURLConnection の使い方に何かこつがあるのでしょうか?
どなたかご存知の方いらっしゃいましたらどうかお教え下さい。
730 :
名称未設定 :2008/12/27(土) 18:25:21 ID:6vw8P5nD0
>>726 ありがとう。
> 今回のケースは、Modelの内部に配列を含んでいるという話なのでは?
繰り返しですが、これは
>>725 の通り、ModelはNSMutableArrayを持ってないです。
Modelインスタンスが複数存在して、その変化をobserveしたいんです。
これをNSArrayControllerがやってくれるかな、と思ったんですが。
> NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?
NSArrayControllerのprepareしたcontentにModelを addしているので、
Modelにバインドはしてないんです。objectClassにModelクラスをあててます。
>> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
> これをModelとして実装すればよいのではないかと思います。
やっぱり、監視用に別のModelを作って監視したいModelへの対多リレーション持つしか無いんですね。
これだとNSArrayControllerは必要ない、というかあまり便利じゃないんだよなぁ。
なぜInsertion/Removalを通知してくれないんだろうか。
>>728 ありがとう。
でも残念ながらCore Dataではないです。
731 :
名称未設定 :2008/12/27(土) 18:38:40 ID:6vw8P5nD0
連投すいません。
>>723 です。
例えばNSTableColumnは NSArrayController.arrangedObjects.modelKeyとbindすると
model.modelKeyをその分だけ表示しますが...
このNSTableColumnのようにmodelの数だけ何かを表示する
カスタムビューを作るのを想定してくれると、やりたいことをわかってもらえるでしょうか?
この時NSArrayControllerは差分を送って来ないので、
カスタムビューは自分で差分取らなきゃいけない、これが差分だけ追加/削除できたら
ありがたいのに、という話なんですがどうでしょうか?
これを実現するのにmodelに対してリレーションを持つ別のmodel2が必要なんだとすると、
NSArrayControllerはいらなくなっちゃうし、便利じゃないような気がするんですが。
732 :
名称未設定 :2008/12/27(土) 19:51:29 ID:dunn+fh10
>>729 具体的に connection が死ぬ URL を教えてくれないと何とも言えんよ。
憶測で書くけども、
2. は didFailWithError: のなかから [connection cancel] を読んでみたら?
1. NSURLConnection は別スレッドでいろいろ動いているので、
メインスレッドが終了して app が終了したつもりだけど
副スレッドが終了してないから全体は終了していないのかもしれない。
733 :
名称未設定 :2008/12/27(土) 23:23:38 ID:1ymko+SU0
>>731 NSTableViewみたいなカスタムビューを作りたいのは分かったけど。
結局のところ、そのカスタムビューに表示させたい項目って何?
ある配列の追加/削除された差分のみを表示したいなら、その差分のみの配列を作って、それにバインドするのが良いです。
もし、カスタムビューに配列の全ての要素を表示させ、パフォーマンス改善のために差分のみが欲しいという話をしてるのなら、カスタムビューの設計が間違っているか、もしくはパフォーマンス改善のためのアプローチが間違っている気がします。
734 :
名称未設定 :2008/12/27(土) 23:31:53 ID:53GKO3UPi
>>732 しかしメインスレッドの終了時にそこで作成されたサブスレッドは終了されるんじゃないの?
そのDLされてるってのは全く別件な予感。
735 :
名称未設定 :2008/12/28(日) 00:57:58 ID:cC5PCGpR0
>>732 ちょっとはばかられる URL なもので一般論ですみません。
とりあえず [connection cancel] をしてみても同様にプロセス終了してもなお通信していました。
あと書き忘れましたが、一度スリープさせればその通信は切れます。
そうこうしているうちにその URL 群が全くエラーがでなくなってしまいました(それでいいんですけど)。
>>734 さんの意見も関連して、NSURLConnection によって作られたスレッドは
メインのプロセスが終了しても生き続けるものなのでしょうか?
このようなことが絶対に起こらない、NSURLConnection の正しい書き方があるのでしょうか。
736 :
名称未設定 :2008/12/28(日) 01:18:56 ID:Y9TmE8bu0
737 :
名称未設定 :2008/12/28(日) 01:32:53 ID:Y9TmE8bu0
僕は以前NSSocketを使ってリモート間のコンピュータを制御したいなぁと 考えていたんだけど、時間が無くて諦めてしまった過去がある。 なんかそんなAPIを使うよりCFSocketを使ってるみたいだね。ボンジュールに関係して・・・・・ マァ結局Cで用意されているBSDSocketを使ってやったんだけど、 いつまでたっても原始人扱いっす。
738 :
名称未設定 :2008/12/28(日) 02:15:09 ID:v0QJFQvm0
NSSearchFieldにキーボードから入力→ 1文字打つごとにデリゲートメソッドを呼んでインクリメンタルサーチさせてます。 結果を入れたNSMenuはNSSearchFieldの虫眼鏡アイコンをクリックすれば表示できるのですが、 クリックしなくてもメニューをビロッと出したいんです。 Spotlightみたいな動作はどんな風にやれば可能かわかる人います??? 虫眼鏡をperformClick:してもだめでした。
739 :
名称未設定 :2008/12/28(日) 03:42:46 ID:V8qdzKYEP
740 :
名称未設定 :2008/12/28(日) 06:27:37 ID:v0QJFQvm0
>>739 朝早くからヒントをくれてありがとー。
popUpContextMenu:withEvent:forView:で解決したんだけど、位置決めするのに使うNSEventの
生成とか冗長で面倒でした。キー入力が少し間を置くと、ファーストレスポンダがNSMenuに取られて
しまうのでその辺を改善していこう..
741 :
名称未設定 :2008/12/28(日) 08:30:32 ID:suc3Lt/M0
>>733 えっと、カスタムビューの話は例ですが、
最初
>>723 でも書いてる通り、差分だけ受け取る方法は
NSArrayControllerを使わないで、ModelのNSMutableArrayを持つ
通知用オブジェクトを別途作ればできることはわかってます。
やってみるとわかるけどビューに限らず、NSArrayController.arrangedObjects.modelKeyと
bind:なりaddObserver:したオブジェクトが差分を受け取れないというのは凄く不便。
modelなりmodelKeyなりが全部くるのでそれぞれが何かを適用済みかどうか
判断しなきゃいけない。
<
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html >
の例でもやはりobserveしたオブジェクトが、保持している以前のものと
比較して差分を取ってます。
>>723 で言いたいのは、実現するための別の解決策があるかどうかではなくて、
NSArrayControllerが差分を送らないんだけど、オプションなり使い方で
どうにかなんないかな?ということを聞きたかったです。(丸ごとしか受け取れないのか?ということ)
こんなだとNSArrayControllerの有用性って、それこそNSTableColumnとbind:するとき
以外に見いだせないんだが、誰かNSTableColumn以外とbindして便利に使ってる人いませんか?
bind:の時はまぁ色々としょうがないとしても、せめてaddObserver:の時は
Insertion/Removalで通知してほしいわけだが、なんでこんなんになってんのかなぁ...
この辺がわかるbindingの神様の出現を待ちます。
742 :
名称未設定 :2008/12/28(日) 11:04:56 ID:UzeGKi4d0
NSArrayController がそういう仕様なんだから仕方がない。 API にだって至らない点はあるさ。Apple にバグレポートをかいて、 10.6 で直ってることを期待するしかない。 だいたい問題の解決策を知ってるんだからあきらめたら?
743 :
名称未設定 :2008/12/28(日) 11:39:36 ID:7HqAPOGr0
>>741 結局のところ、何をしたいのかがさっぱりです。
NSArrayControllerは、ViewとModelの間に置くものです。
今回は、Modelとは接続していないそうですが、カスタムビューとも接続していないとなると、いったいどういう使い方をしてるんですか?
> やってみるとわかるけどビューに限らず、NSArrayController.arrangedObjects.modelKeyと bind:なりaddObserver:したオブジェクトが差分を受け取れないというのは凄く不便。
> 実現するための別の解決策があるかどうかではなくて、 NSArrayControllerが差分を送らないんだけど、オプションなり使い方でどうにかなんないかな?
別の解決策があるのに、あえてNSArrayControllerにこだわる理由はなんですか?
NSArrayControllerでは、どうにもならないことは自身で確認済みなのでは?
744 :
名称未設定 :2008/12/28(日) 12:06:39 ID:suc3Lt/M0
>>742 ありがとう。NSArrayControlerがそういう仕様なんだとすると、
NSTableColumn以外とのbindで役立つケースが見つからないので、
本当にそうなんだろうか?というのが質問のきっかけです。
自分が知らないだけかもしれないので。
>>743 やりたいことや解決策、NSArrayControllerにこだわるわけじゃなくて、
最初のレス通り、NSArrayControllerが差分を送らないのはなんなんだ?
差分じゃないなら他のModelやNSObjectControllerを使う方が便利、
だとするとNSArrayControllerの存在意義はNSTableColumnだけ?
というのを疑問に思ったんです。
既にNSArrayControllerを持っているのに、役立てることができず
回避策を取るのは美しいとは思えないし、
考え方のプロセスとしては、
回避策があるのでそっちを使う→そうするとNSArrayControllerをどうにも便利に使えない
→NSArrayControllerは不便なもの?→いや、自分が便利な使い方を知らないだけなのでは?
という感じです。
この辺誰も不便に思ってない事が不思議なんですが。
NSTableColumn以外とbind:してかつ便利な使い方あるよって人、
もしくは、いや不便だよそういうものみたいだよって人の意見聞きたいです。
とは言え、レスくれた人ありがとう。
ここはNSArrayControllerを便利に使うために納得いくまで調べたいです。
年明けになりそうですが。
745 :
名称未設定 :2008/12/28(日) 12:09:46 ID:UzeGKi4d0
>>744 >ここはNSArrayControllerを便利に使うために納得いくまで調べたいです。
>年明けになりそうですが。
いや、Apple がくれた API をそんなに神聖視してもしかたがないよ。
自分が使いかた知らないだけのばあいもあるけど、
実際 API に機能が足りないこともあるわけでさ。
NSArrayController はむしろ CoreData に接続してつかうのが主目的で
Apple はつくったんじゃないの?僕はそうやって
NSTableColumn に bind して便利に使えてるけど。
746 :
名称未設定 :2008/12/28(日) 12:33:30 ID:suc3Lt/M0
>>745 どうもどうも。
> いや、Apple がくれた API をそんなに神聖視してもしかたがないよ。
もちろんそうなんですが、まず自分の無知を疑うというのは自然だと思うんです。
Cocoa bindingの考え方と実現方法はNSBinderを含め素晴らしいと思うので、
なおさらNSArrayControllerの不便さを不思議に思ってたわけです。
主目的はわかるけど、NSArrayControllerを名乗ってるのに
NSArrayの扱いでNSObjectControllerや他のModelに劣るようだと
NSTableColumnでしか使えないNSArrayControllerって何?
いや自分がおかしいでしょJK、という発想になると思いまして。
やりたいこと、解決したい事があるわけではなくて
NSArrayControllerが不便なのが納得いってない、という感じなので、
ブラックボックスな部分でそういう不便な実装がなされている、
ということを少しでも垣間みることが出来たら、それで満足すると思います。
#できれば、便利な使い方がある、と言う方を期待してはいますが。
そういう先人がいたらと思って質問しました。
747 :
名称未設定 :2008/12/28(日) 13:56:00 ID:hmFht9Ut0
調べると出てきたと思うけど、ここの「(Missing) KVO notification old and new values」には
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html "The change dictionary doesn't contain old and new values.
This is not your fault, it's due to a bug in the controller.
This bug will not be fixed in the forseeable future."
って書いてあってねえ…
なぜAppleがこの挙動のままにしているのかは俺も不思議。
748 :
名称未設定 :2008/12/28(日) 14:47:11 ID:7Qwd5CJii
>>747 サンクス!
そこ読みとばしてた。ホントありがとう。ホント感謝。
あーもう俺のバカっ
付き合ってくれた人達にもほんと多謝。
良い年末を。
749 :
名称未設定 :2008/12/28(日) 16:18:48 ID:7HqAPOGr0
>>746 > NSArrayControllerを名乗ってるのにNSArrayの扱いでNSObjectControllerや他のModelに劣るようだとNSTableColumnでしか使えないNSArrayControllerって何?
NSArrayControllerは、MVCのうちControllerに当たるものです。それをModelとして扱おうとしてませんか?
それだと、根本的にうまくいきませんよ。
>>747 それは、バグじゃなくて、仕様だと思います。
NSArrayControllerは、Viewに対して配列を見せるためのものだと言う事を理解してください。
Viewにとっては、配列に追加/削除された項目を知ってもしょうがないです。
画面にリストなんかを描画するために、常に配列全体を要求するでしょう。
750 :
747 :2008/12/28(日) 16:54:32 ID:4MFolM6V0
>>749 NSArrayControllerのリファレンス見るとarrangedObjectsのところに
"This property is observable using key-value observing."
なーんて書いてあるから当然差分も受け取ることができると期待してしまうんだよ。
あと多分あんた釈迦に説法やってるぜ。
751 :
名称未設定 :2008/12/28(日) 20:00:12 ID:stOPgQeC0
NSMutableArrayにバインドしたNSArrayControllerの 追加や削除ってNSMutableArrayで行うもんじゃないの? NSArrayControllerはそれに追従したりソートして見せかけたりするもので 直接追加や削除をしないもんだと思ってるんだけど。
752 :
名称未設定 :2008/12/28(日) 22:31:51 ID:kMfgkKcQ0
>>746 NSArrayControllerのbind相手にはNSTableColumn, NSTableViewの他にも
NSPopupButton, NSMatrix, NSCollectionView, IKImageBrowserViewがあります。
更に、GraphicsBindings(Cocoa Bindings Examples and Hints)のような自前の
カスタムクラスもあります。
change Dictionaryから情報がとれないのは、カスタムクラスとNSArrayControllerを
bindする時に余分な手間がかかることになりますね。
配列の要素のプロパティをobserveするのに必要な情報がchange Dictionary
からは得られないのは困ったものです。
現状ではGraphicsBindingsのような方法をとるしかないようです。
ただモデルオブジェクトのプロパティが変化したことの通知を受けるのに
arrangedObjects.propertyをobserveすることで、代用できる場合もあります。
どのオブジェクトかは不明だけどプロパティが変化したことは通知がきます。
私はNSMatrixのサブクラスで、iTunesのartWork viewerの様なものを作っていましたが、
LeopardでIKImageBrowserViewが導入されたので、IKImageBrowserViewに切り替えました。
753 :
名称未設定 :2008/12/29(月) 08:10:15 ID:Y2X+4dQpi
754 :
名称未設定 :2008/12/29(月) 08:13:23 ID:Y2X+4dQpi
755 :
名称未設定 :2008/12/29(月) 08:17:58 ID:drZoORpn0
本人かどうか知らないけど、 そんなくだらないレスするな。
756 :
名称未設定 :2008/12/29(月) 11:36:38 ID:Xwc+0ccb0
>>747 mmalcってもしかしてあの英語がちょっとなまっている人か。
だいぶ前にバグとして認知されているのに直されないというのは、あまりインパクトがないと
認識されているか、fix が結構面倒くさいとか、何か理由があるんだろうねえ。
757 :
名称未設定 :2008/12/29(月) 16:33:53 ID:TKk5E2Xt0
>>756 英語下手なもんで mmalc さんの英語はまったく流暢にみえるんだが、
ちなみにどの辺がなまってるのか勉強のためにおしえてください
758 :
名称未設定 :2008/12/30(火) 01:24:22 ID:I5OBkT890
>>757 そのウェブページじゃなくて本人のしゃべり(発音)のこと。
759 :
名称未設定 :2008/12/30(火) 14:20:27 ID:1+yUgkxZ0
ああ、なるほど。本人にあったことないから判らないよ :p
760 :
名称未設定 :2008/12/30(火) 17:30:33 ID:gOZWRIBD0
バインディングについて基本的なところは分かってきました。 でもこんなことやっちゃていいのか!と思ってしまう。 でも便利なんだよねー。 特にNSTableViewに対して応用が利きそうだ。
761 :
名称未設定 :2008/12/30(火) 20:52:08 ID:DGdbKMqz0
a.アプリケーション間の通信について質問です。 [NSDistributedNotificationCenter defaultCenter] というのがあるようなのですが、イマイチ具体的な使い方が見つかりません。 とっかかりに便利なサンプルコードをご存知でしたら教えてください。 b.さらにググっていたら、 [[NSWorkspace sharedWorkspace] notificationCenter] っていうのを使っている例を見つけたのですが、これは [NSNotificationCenter defaultCenter] というのとは違うものなのでしょうか? この辺の飲み込みが悪くて・・・アドバイスをお願いします。
762 :
名称未設定 :2008/12/31(水) 00:24:36 ID:OE+Yuv650
すみません、年末に質問です。 NSTextViewのコンテキストメニューを自作しているのですが、 control+クリックでデフォルトメニュー(Search in Spotlight..)が表示されてしまいます。 サブクラスを作成して、- (void)rightMouseDown:(NSEvent *)theEventで 右クリックの場合は自作のメニューが表示できたのですが、 - (void)mouseDown:(NSEvent *)theEvent { // control click if([theEvent modifierFlags] & NSControlKeyMask){ [self rightMouseDown:theEvent]; } } で右クリックの処理に飛ばしてもデフォルトのメニューが表示されてしまいます。 control+クリックでデフォルトメニューを消して自作メニューを表示させることは 出来ないのでしょうか? ちなみに、setMenu:で自作メニューをセットすると、デフォルトメニューの下に 自作メニューが表示されてしまいます。
763 :
名称未設定 :2008/12/31(水) 01:48:33 ID:OE+Yuv650
すみません。
>>762 です。
NSViewのmenuForEventでいいのですね。あっさり解決しました。
スレ汚しすみません。
764 :
名称未設定 :2008/12/31(水) 09:57:52 ID:JHc0H2Kf0
>>761 a.
NSDistributedNotificationCenterのリファレンスにあるRelated Sample Codeは見ましたか?
b.
NSNotificaitonCenterはdefaultCenterのみとは限りません。自分でインスタンスを作って使うことも出来ます。
NSWorkspaceのリファレンスには他のクラス同様にNotificationの一覧がありますが、これはdefaultCenterではなく
NSWorkspaceのnotificationCenterを使って通知されます。
APIリファレンス読めば大抵のことは解決するんですよね。
765 :
名称未設定 :2008/12/31(水) 13:05:09 ID:VM+WRBUK0
>>763 Leopardならdeleage methodsの
- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex;
を使ってコントローラから制御できます。
release noteにしか記載がありませんが、使えます。
NSTextView.h
- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex;
// Delegate only. Allows delegate to control the context menu returned by menuForEvent:. The menu parameter is the context menu NSTextView would otherwise return; charIndex is the index of the character that was right-clicked.
766 :
名称未設定 :2008/12/31(水) 15:35:14 ID:Hoil/CeQ0
いきなり話ぶったぎるけど NSMutableArrayまでthread unsafeになってるけど 正しくlockかけて使えばsafeな仕様なのかな? それもだめならmain thread内で回しておいて最後にNSArrayにinitWithArrayすりゃいいんだけどそんなコストはなあ まあthread内でNSEnumerator使っててconsoleにエラーログ大量に出てたんで 調べてみたらNSFileManager , NSEnumerator , NSMutableArrayが対象になってたのは分かった。 NSEnumeratorはまあ使わなくてもなんとかできるがNSFileManagerはそうはいかん。 でもってNSFileManagerの部分だけ取り出してthread回してみたら どうにもこいつだけは回避できそうにもない POSIX的にやるしかないんかね>thread内でファイル操作
767 :
名称未設定 :2008/12/31(水) 15:43:39 ID:pWiXouOZ0
で、要約すると?
768 :
名称未設定 :2008/12/31(水) 15:50:23 ID:oXdRdpSS0
>>766 何が問題なのかさっぱり解らん。
もう少し具体的に書いたら?
769 :
名称未設定 :2008/12/31(水) 16:12:37 ID:Hoil/CeQ0
>>768 いや書いたまんまなんだけど。
回避できない以上NSFileManagerを使わずにやるしかないのかなって話。
NSMutableArrayはテスト用のコード書き中。
770 :
名称未設定 :2008/12/31(水) 16:15:23 ID:PCjQWXJZ0
>>766 まずは Threading Programming Guide を読んでから質問しなさい
771 :
名称未設定 :2008/12/31(水) 16:23:13 ID:Hoil/CeQ0
>>770 とっくに読んでるって。
ちなみにNSAutoreleasePool関連の問題ではないよ>NSFileManager
ただの煽りなら消えてくれ。
772 :
名称未設定 :2008/12/31(水) 17:20:46 ID:YdpY9GEO0
>>771 何を回避したいのか全然わかんねぇよ。逆ギレしてるし。
要点をまとめて整理して書かないと誰にもわからん。
773 :
名称未設定 :2008/12/31(水) 17:30:59 ID:BlFHlIMw0
>>766 >NSMutableArrayまでthread unsafeになってるけど
NSMutableArrayぐらいthread safeにしとけって?
明らかにマルチスレッドでアクセスしない場合にもいちいちロックをかけられたりすると、
パフォーマンスが落ちるだけで嬉しくないんだけど...
>正しくlockかけて使えばsafeな仕様なのかな?
「正しく」使えばねw
NSMutableArray自体に同時アクセスしないことは当然として、要素の寿命にも気をつかわないと
いけないけど(あるスレッドで参照中に別のスレッドのせいでreleaseされるかもしれない)。
とりあえず部分レス。
774 :
名称未設定 :2008/12/31(水) 17:31:23 ID:34R3NV1F0
確かに
>>766 では誰も分からないよ。
まぁ詳細にかけない事情があるのだろうと察するけど。
それでも要点を絞って書くことは出来るはず。
ここは2チャンネルにしては珍しく、丁寧に答えてくださる方が結構いるほうだと思うよ。
ほかのプログラムスレは悲惨だけど。
775 :
名称未設定 :2008/12/31(水) 18:43:53 ID:A5zFe/us0
>>764 有り難うございます。こんな理解であっていますでしょうか。
[NSDistributedNotificationCenter defaultCenter]はタスク間で共有され(るもののラッパ)、
[NSNotification defaultCenter]はアプリケーション単位で用意され、
[NSWorkspace sharedWorkspace]もアプリケーション単位で用意され、
[[NSWorkspace sharedWorkspace] notificationCenter]はworkspace側で
使われるnotificationCenterで、[NSNotification defaultCenter]とは別物
distributedの方はポインタ渡しが出来ないので高コスト、NSstringで代用されている
なので、タスク間で共有する場合以外はNSNotificationを使えばよく、
Workspace依存するもの以外はdefaultCenterでよく、
別途必要な場合のみ別途インスタンス化する
776 :
名称未設定 :2008/12/31(水) 19:31:04 ID:OE+Yuv650
複数のNSTableView間でドラッグ&ドロップを実装しているのですが、 自分のテーブルにドロップ出来ないようにするには、どうすればいいのでしょうか? それぞれのNSTableViewのregisterForDraggedTypesで同一のペーストタイプ名を 登録しています。
777 :
名称未設定 :2008/12/31(水) 20:16:52 ID:JHc0H2Kf0
>>775 多分。あと[NSNotificationCenter defaultCenter]ですね。
>>776 - (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id <NSDraggingInfo>)info
proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)operation
で、
id draggingSource = [info draggingSource];
のdraggingSourceが自分かどうかチェックすればいいと思います。
778 :
名称未設定 :2008/12/31(水) 20:40:36 ID:OE+Yuv650
>>777 >>776 です。ありがとうございます。
NSTableViewのサブグラスに実装して
// 自分のテーブルなら無視する
if ([info draggingSource] == self) {
return NSDragOperationNone;
}
で、行けました。
779 :
名称未設定 :2008/12/31(水) 21:01:43 ID:JHc0H2Kf0
>>778 dataSourceに実装するメソッドですので別にサブクラスを作る必要はないですよ。
780 :
名称未設定 :2008/12/31(水) 21:57:09 ID:GejtfmAN0
昨日バインドについて少しずつ分かってきたとのたまった者です。 私は阿呆でした。 荻原さんのObjective-C2.0のp507ページなんですが、 3行目に「辞書オブジェクトは"content"というキーで参照できます」 とあります。 これはそのまま受け取っていいのでしょうか? それともそれは荻原さんが、そのプログラム内部でそう定めているから そうなのでしょうか? あほな私に助言していただければ幸いです。 後、唐突ですが、今年一年皆様に本当にお世話になりました。 来年もよろしくお願いします。
781 :
名称未設定 :2008/12/31(水) 22:31:39 ID:MjZqxFiz0
>>779 ええ、ただサブクラスとデータソースとデリゲートをひとつのクラスにまとめて書いています。
テーブルが多いのでそれぞれを分けて書くと多くなるので。
782 :
名称未設定 :2008/12/31(水) 23:56:43 ID:GoahojC00
>>780 みんなが荻原さん本持ってるとは限らないので、
質問内容が本を持ってない人にも分かるように質問してみたら?
そうやって頭の中を整理する過程で判るときもありますよ。
783 :
名称未設定 :2009/01/01(木) 00:24:40 ID:JsmL13+v0
2008年も無事終了。
皆さん、明けましておめでとうございます。
>>782 バインディングについて勉強中です。
キー値コーディング(KVC),キー値監視(KVO)については大体分かってきましたが、
その総決算とも言うべきcocoaバインディングに取り組んでいます。
windowにはtextFieldを配置し、こいつをNSDictionary型のdicとバインディングさせるだけのプログラムを作ってみました。
- (void)awakeFromNib
{
dic = [[NSDictionary alloc] initWithObjectAndKeys:@"value1",@"key1",nil];
objController = [[NSObjectController alloc] setContent:dic];
[textField bind :@"value" toObject :objController withKeyPath :@"content.key1" //これです。このContentがないとアクセスできません。コレは何?
options :nil];
}
これでビルドするとtextFieldにValue1の値が入っている。
ただそれだけのプログラムなんですが・・・・
784 :
名称未設定 :2009/01/01(木) 00:46:12 ID:nr1t9X2O0
>>783 その「content」はNSObjectControllerのcontentプロパティのことなんです。
content.key1で、そのNSObjectControllerのcontentであるオブジェクトのkey1プロパティを指定してます。
IB上ではController KeyとModel Key Pathに分けて設定しますが、実際のところこれは一つのKey Pathです。
785 :
名称未設定 :2009/01/01(木) 00:49:01 ID:NZvHn75T0
正月からココアかよ!
786 :
名称未設定 :2009/01/01(木) 00:57:45 ID:JsmL13+v0
>>784 さっそくレスありがとうございます。
なるほどー。
そういうことだったんですね。
IBでもやろうと取り組んでいたんですが、
Controller keyが一体何のか分からなかったんですよ。
ありがとうございます。
787 :
名称未設定 :2009/01/02(金) 16:00:52 ID:y7bSH71J0
ObjCのメモリ管理って難しいですね。バグの温床になりそうです。こうなるとGCを使いたい気も しますが、これはこれでプログラムの内容によっては別の問題を引き起こしそうな気もします。 ところでautoreleaseにしたobjectはframeworkが適当なタイミングで解放してくれるという ことですが、運悪くretainする前に解放されてしまうことは起こりえないのでしょうか?
788 :
名称未設定 :2009/01/02(金) 16:37:12 ID:dyxTOEUj0
>>787 autoreleaseは、今ではないいつか、自分ではない誰かにreleaseされるというだけです。
より具体的に言えば、autoreleaseメッセージを送られたオブジェクトはNSAutoreleasePoolに登録され、
当該NSAutoreleasePoolが解放されるときにreleaseされます。
通常NSAutoreleasePoolはRunLoopごとに生成と解放を繰り返していますが、自分で生成・解放することも出来ます。
参照カウントによるメモリ管理はとっつきにくいかもしれませんが、一度理解すると簡単です。
789 :
名称未設定 :2009/01/02(金) 18:22:04 ID:v8vXElzP0
IB3.1ですがボタンをOption+ドラッグでコピーしてもNSMatrixが作られないんですがどのようにすればいいでしょうか?
790 :
名称未設定 :2009/01/02(金) 18:25:38 ID:v8vXElzP0
>>789 メニューからLayout->Embeded Objects in->Matrixでできました。なんでこんな方法に・・・
791 :
787 :2009/01/02(金) 19:21:43 ID:anFlbT+C0
>>788 解説ありがとうございます。(数日前にObjCを調べだしたばかりなので勉強になります。)
RunLoopごとということはイベント待ち状態に入るようなメソッドを呼び出した後は
autoreleaseなobjectは解放されてしまっている可能性があるということでしょうか。
そのような関数を呼び出す前にretainしておけば問題ないということですね。
> 参照カウントによるメモリ管理はとっつきにくいかもしれませんが、一度理解すると簡単です。
色々なclassを見て理解を深める必要がありそうです。今は@""で作られるNSString objectは
autoreleaseなのかな? Class methodから返されるobjectは普通autoreleaseになっていそう、
などと頭を悩ましています。
792 :
名称未設定 :2009/01/02(金) 19:34:28 ID:dyxTOEUj0
793 :
名称未設定 :2009/01/02(金) 21:43:21 ID:7tH047C60
自分でallocを記述しない限りreleaseを気にすることはないないなあ。 allocしてもautoreleaseで勝手にしてちょ状態だし。
794 :
787 :2009/01/02(金) 23:16:09 ID:warDD5wN0
>>792 補足の説明と資料へのpointerと補足ありがとうございます。Webには日本語版も
あるのですね。いくつか疑問に思っているところについて当たってみたいと思います。
>>793 慣れてしまうとそういうものなのでしょうか。今のところの印象としては常にカウンタの
動きを意識していないと解放してしまっている領域にアクセスしてしまいそうで少し怖い
というのがあります。
795 :
名称未設定 :2009/01/03(土) 01:09:56 ID:W5I29rEl0
ToolbarのToolbarItemについての質問です。 マックの「全般」もしくは「一般」みたいなイメージアイコンを使用したいのですが、 そういった情報が紹介されているサイトとかご存知の方、ぜひ教えてください。
796 :
名称未設定 :2009/01/03(土) 07:54:36 ID:syVneJlP0
たしかicons.hだかいうヘッダファイルに定義があったと思う。 違ってたらスマソ
797 :
名称未設定 :2009/01/03(土) 10:10:44 ID:eDRVrGAa0
>>795 IBのLibraryウインドウのMediaで探せばいい。そのアイコンならNSPreferencesGeneralって名前で表示されてるはず。
コードから利用するなら、[NSImage imageNamed: @"NSPreferencesGeneral"]]
798 :
名称未設定 :2009/01/03(土) 10:56:55 ID:36pLQ2/L0
初めまして。最近cocoaに興味を持ち始めたものなのですが、 旧版の楽しいCocoaプログラミングを読みました。これだけでは 次は詳解objective-Cを読もうと思っているのですが、Cの知識が 足りないのではないかと不安です。気にせず次の本に行ってしまって 構わないか、それともお勧めのCの本があれば教えて下さい 店頭で探したところ、MS-DOSでの操作法を書いたものばかりなので 使い難そうだなと思い、お尋ねしました。よろしくお願いします
799 :
名称未設定 :2009/01/03(土) 11:09:53 ID:zpr/dVhB0
気にせず進んで、足りないなと思ったらそのとき C の勉強したらいいと思います。 Objective-C で必要な C の知識は、C だけでプログラムする際に必要な C の知識 と重点が異なってくるので、C のためだけの本をまず読んで次に進むというのは 遠回りになると思います。もちろんいろいろ知っていて損はないんだけど。 それよりも、読むだけでなくて、じゃんじゃんサンプルコードを 実際に XCode でプログラムしてみることだと思います。
800 :
名称未設定 :2009/01/03(土) 12:12:04 ID:Y07nrpBw0
>>796-797 本当にありがとうございます。
明日、直ぐに確認します。
こういうときに手元にmacがないのが悔しいです。
3月に引越しするので、今PCを買うとどうかなと思って買えずにいるんですよ。
今は大学でminiを使っているんですが、proか自分でカスタマイズしたPCにOSをインストールして
これからもmacを使って少しでもObjective-Cの普及に貢献できればと思っています。
801 :
名称未設定 :2009/01/03(土) 12:41:44 ID:5AoBrdvQ0
>>798 どうしてもCの勉強をしたいなら「やさしいC」がオススメ
他の本と同じくWinを基準にした文章だけど、特に問題ないと思う
自分は大丈夫でした
802 :
名称未設定 :2009/01/03(土) 12:54:13 ID:eEQ3v3z20
>>798 たぶん大丈夫です。Obj-cしばらく使ってからようやくCのポインタ配列とか勉強
しましたし。
逆によほど特殊な場合じゃないと、使わないってことです。
803 :
名称未設定 :2009/01/03(土) 15:47:37 ID:36pLQ2/L0
>>799 >>801 >>802 解糖ありがとうございます。Cは必要に迫られて、という感じです。教えていただいた本は
ObjCを進めて行き詰まった時にでも読んでみます
サンプルコードを読めということですが、自分はXcodeの使い方がまだ分かっていないのか、
IBとXcodeで書いたファイルがどうつながるのか分かっていないようでアプリが作れない状態です
根本的な所が抜けているようなのでもう少し勉強してみる事にします
804 :
名称未設定 :2009/01/03(土) 16:57:04 ID:RLKgqpNV0
>>800 つMacBook
大学へも持ち運び出来るぞ。
805 :
名称未設定 :2009/01/03(土) 18:35:16 ID:1ihLZGSiP
最近は白いやつなら安いしなー
806 :
名称未設定 :2009/01/03(土) 18:42:26 ID:QXEUHyuB0
しかも明日もっと安いの出るかもよー。出ないかもよー。
807 :
名称未設定 :2009/01/03(土) 20:33:29 ID:zpr/dVhB0
>>803 たのココって XCode を一歩一歩触りながらアプリを作る方法のってないの?
それができないと詳解 Obj-C とか読んでも仕方がないよ。
まずはちいさいアプリでも実際に作れるようになるのが先決です。
808 :
名称未設定 :2009/01/03(土) 22:17:32 ID:I13K2saa0
やっぱり!とかHMDTとか? まーどうでもいいや。 まだやる気ないし。 と803とは別の人が呟きました
809 :
名称未設定 :2009/01/04(日) 09:22:57 ID:BZdMHx080
まずはハローワークと電卓、次にアドレス帳。 これくらい目をつぶって組めるようになってから次のステップへ。
810 :
名称未設定 :2009/01/04(日) 09:29:13 ID:xb752OFL0
811 :
名称未設定 :2009/01/04(日) 13:10:37 ID:z8GtUapb0
printf("職業安定所!");
812 :
名称未設定 :2009/01/04(日) 17:03:25 ID:IYJUQxJt0
何か作ってみたいアプリの構想があれば モチベーションも高まるってもんだ。
813 :
名称未設定 :2009/01/04(日) 18:28:25 ID:X15JVpsT0
NSWindowの中にNSSplitViewがあり、その中(subviewsの0番目)にNSButtonを配置した場合、 NSButtonのorigin.x,origin.yをNSWindowからの座標に変換したいのですが どうすればよろしいのでしょうか? NSButtonをクリックした時にNSButtonの直下にメニューを出したいのですが、 メニューの表示位置を計算したいのです。 NSButtonのorigin.x,origin.yにsuperviewのorigin.x,origin.yを足すという方法で できましたが、もっと簡単にできそうな気がして。 よろしくおねがいします。
814 :
名称未設定 :2009/01/04(日) 19:10:02 ID:rKUNGzcH0
単純にポップアップメニューじゃダメなの?
815 :
名称未設定 :2009/01/04(日) 19:45:53 ID:X15JVpsT0
それでも良いのですが、mail.appのギアメニューの様に格好つけてみたいなと^^) 一応、今はこんな感じでNSButtonがどこのビューの中にあっても計算しています。 NSButtonのサブクラスで - (void)mouseDown:(NSEvent *)theEvent { // ボタンの座標 NSPoint point = NSMakePoint([self frame].origin.x, [self frame].origin.y); // 親ビューがなくなるまで足し込む id parentView = [self superview]; while(parentView){ point.x += [parentView frame].origin.x; point.y += [parentView frame].origin.y; parentView = [parentView superview]; } // メニューを出す処理 }
816 :
名称未設定 :2009/01/04(日) 19:51:36 ID:KIvKzhm+0
>>813 - (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView
817 :
名称未設定 :2009/01/04(日) 21:25:14 ID:aIp3df6Mi
右クリックのイベントを送ってみれば?
818 :
名称未設定 :2009/01/05(月) 00:05:05 ID:tFtDkYn10
>>815 私はNSPopUpButtonとNSPopUpButtonCellの独自サブクラスを作って、画像を描画するようにしました。
こうすると位置計算もメニューを出す処理も書く必要がないので。
819 :
名称未設定 :2009/01/05(月) 17:58:40 ID:tF97tr6n0
OS10.5 XCode3.1 アプリを最小化(ウィンドウの黄色いボタンを押す)とドックにアプリがしまわれるのですが 2秒くらいするとふっと無くなってしまう… なんぞこれ…
820 :
名称未設定 :2009/01/05(月) 18:35:28 ID:V0Vz2ggy0
OS 10.5.6 XCode 3.1.1 だけど、再現しないよ。 変な機能拡張でも入れてるんじゃないの?
821 :
名称未設定 :2009/01/05(月) 18:45:54 ID:tF97tr6n0
い、入れてるつもりはないんだけどなぁ… 他のアプリは大丈夫だったんだけど、今回のをテスト中に発見してしまって… 普通に作ってるつもりなんだけどなぁ… ウィンドウは最小サイズが設定してあるくらいで…(設定しなくても結果は同じだったけど)
822 :
名称未設定 :2009/01/05(月) 18:50:43 ID:zTUusY0j0
>>819 要はクラッシュしてるんだからデバッガに接続されるでしょ自動的に。
スタックトレースはどうなってるの?
823 :
819 :2009/01/06(火) 10:16:13 ID:CJhYtPzU0
遅くなってすいません… クラッシュはしてないんですよ アイコンだけがしばらくしたらふっと消えて再表示できないんです。。。 最小化してすぐにアイコン押したら大丈夫なんですけど…w
824 :
名称未設定 :2009/01/06(火) 10:49:13 ID:hMNt9Wtt0
>>823 とりあえずダミーのウインドウを作ってDockに格納してみれば?
それが消えないならプログラム側、
それも消えるようならOS側に問題があると思う。
825 :
名称未設定 :2009/01/06(火) 10:54:15 ID:CJhYtPzU0
テキストボックスとボタンがあるだけのものを作って最小化しても大丈夫でしたw プログラム(IB?)の問題なのだろうけど、一体なんなんだw
826 :
名称未設定 :2009/01/06(火) 11:01:02 ID:AOo5/KXS0
よく分からないけど、 その2秒ぐらいしたらドックから自動的に消えてしまうアプリをアップしてみれば・・・・・。 てか見てみたい。
827 :
名称未設定 :2009/01/06(火) 11:10:09 ID:hMNt9Wtt0
どこかでreleaseしてるんじゃないかな。 コード見直してみれ。
828 :
名称未設定 :2009/01/06(火) 11:19:24 ID:CJhYtPzU0
見せてあげたいんだけど、コレはダメなんすよ… ふむ、releaseか。 ちょっとさがしてみるかな。 3画面あるんだけど、漏れなく消えるw (1画面毎に次へボタンがある) ただ、最小化してすぐにアイコン押したら大丈夫なのが気になるんだよなぁ。。。
829 :
名称未設定 :2009/01/06(火) 11:20:18 ID:CJhYtPzU0
×:見せてあげたいんだけど ○:見てほしいんだけど 偉そうですんません(´・ω・`)
830 :
名称未設定 :2009/01/06(火) 11:20:40 ID:MJRSG4Lp0
GCオンなのにNSWindowがどこからも参照されてないとかそんなオチじゃないの。
831 :
名称未設定 :2009/01/06(火) 11:24:03 ID:AOo5/KXS0
ガーベッジコレクションの関係ならそれもありえるんじゃない?
832 :
名称未設定 :2009/01/06(火) 11:33:43 ID:CJhYtPzU0
……
GCオフにしたら大丈夫ですた…w
あの…お騒がせしました。。。
>>830 さんの言うように
NSWindowがどこからも参照されてない
って可能性があるっつーことか。
ソース見直してみますw
833 :
名称未設定 :2009/01/06(火) 12:11:05 ID:y4lhZh9G0
これは最小化するとNSAppからも切り離されるってことか? じゃあ、-[NSApplication windows]には最小化されたウインドウは含まれないの、かな? そもそも陽に持ってるんじゃなくて、何かあるたびにWindow Serverから持ってきてるのかもしれないが。
834 :
名称未設定 :2009/01/06(火) 13:08:07 ID:CJhYtPzU0
そうなんですよ!! 皆のおかげで原因は分かったんですが、何かスッキリしない… なんでGC動くんだ。
835 :
名称未設定 :2009/01/06(火) 22:19:00 ID:8agq5WXD0
なんかawakeFromNibが2回呼ばれるんだが… なんじゃこりゃ。
836 :
835 :2009/01/06(火) 22:30:40 ID:8agq5WXD0
解決。 すげー分かりにくいけど、すげーばかなミスでした。失礼。
837 :
名称未設定 :2009/01/06(火) 23:44:06 ID:mNgBuEAy0
このスレオススメの「たのしいCocoa」を読んだけど この本はかなり端折った内容なんだよね? 思ったよりもサラッと読み終わってしまった 次は「詳解 Obj-C 2.0」読んでみるぜ
838 :
名称未設定 :2009/01/07(水) 03:14:41 ID:PUe3X3920
あっそう
839 :
名称未設定 :2009/01/07(水) 03:42:22 ID:zw5G2LPC0
たのここなー。悪くはないんだが、初心者があれを読んでも、載ってるサンプルが作れるようになるだけだよね。やっぱりドキュメント読んで、たくさんコード読んでいくのが一番だ。
840 :
名称未設定 :2009/01/07(水) 09:20:37 ID:qTUD8mWg0
たのここ初心者にはいいと思うよ いきなり萩原本とか読んでもつまづくだけだし
841 :
名称未設定 :2009/01/07(水) 09:35:22 ID:nkNMGSQi0
ヒレガス本の10.5対応日本語版が出れば最強
842 :
名称未設定 :2009/01/07(水) 13:29:49 ID:GWYL2Ube0
>>841 狂おしく同意。
柴田さんとか、自分の本を書くより訳者に回ってくれないかな…
843 :
名称未設定 :2009/01/07(水) 18:17:31 ID:HhZ+tLxQ0
バインディングについて質問です。 Windowに設置したNSTableView ←bind→ Modelで定義したMyTableView これでMyTableViewで実装した -(id)init;
844 :
名称未設定 :2009/01/07(水) 18:21:21 ID:yaAaH/hI0
>>843 書きかけだろうけど予測レス
・Bindingの使い方を勘違いしている
・Nibに置いたViewのinitは呼ばれない
845 :
843 :2009/01/07(水) 18:23:36 ID:HhZ+tLxQ0
申し訳ございません。 途中で書き込んでしまいました。 これでMyTableViewで実装した -(id)init; //テーブルのラインナップを整える - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView; - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; が呼び出されてNSTableViewに描画されるっていうウマーな話を思い描いているのですが、 そんなことは出来るのでしょうか? 本来の目的はMyTableView1とMyTableView2がそれぞれあり、 ボタン一つでNSTableViewとのバインドを切り替えたいのですが・・・・・。
846 :
843 :2009/01/07(水) 18:24:33 ID:HhZ+tLxQ0
>>844 あーそうか。
そうですよね。
てことは全然的外れなのか。
847 :
843 :2009/01/07(水) 18:27:59 ID:HhZ+tLxQ0
>>844 バインディングについての使い方が間違っているということですが、
僕のバインディングについて思っていることは
ViewとModelを直接結びつけることができると考えているのですが・・・・
これは全然違いますか?
848 :
名称未設定 :2009/01/07(水) 18:37:50 ID:yaAaH/hI0
>>847 直接結びつけたらMVCにならんでしょ。
そもそも
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView;
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;
これはdataSourceのメソッドでBinding時には使わない。
Bindingはモデルのメソッドを限定しないもの。ただのNSStringがモデルだってかまわない。
そして何故モデルにMyTableView1とかいう名前をつけるんだ。それじゃNSTableViewのサブクラスみたいじゃないか。
849 :
名称未設定 :2009/01/07(水) 18:41:26 ID:GBm8FivP0
Model A <--bind--> NSTableViewのテーブルカラム(必要な分全部) Model A <--bind--> MyTableViewのテーブルカラム(必要な分全部) で両方のテーブルビューはModel Aの内容を表示します。 切り替えはビュー自体をすり替えるだけです。 ただし、Model Aの実装が面倒だと思うので NSArrayControllerを間に挟むのが普通です。 Model自体が配列である場合は、NSArrayControllerをサブクラス化してそれにあわせる。
850 :
名称未設定 :2009/01/07(水) 18:43:35 ID:HhZ+tLxQ0
>>848 一応MyTableViewはNSTableViewのサブクラスなんです・・・・。
だから両者をbindすればOKかな・・・・なんて考えた始末です。
手元にマックがないから頭の中で必死に考えた末に思いついたんですが・・
アホですね。
851 :
名称未設定 :2009/01/07(水) 18:44:51 ID:HhZ+tLxQ0
>>849 それでやっていたんですが、
めんどくさいので、もっと簡単にできるんじゃないのかと・・・・・・。
でもそれでいこうかなと思います。
852 :
名称未設定 :2009/01/07(水) 18:48:15 ID:yaAaH/hI0
>>850 BindingはView同士を結びつけるものじゃないです。
ModelとViewを結びつけるものです。
二つのViewで表示内容を同じにしたいのなら、共通のModelとBindします。
DataSourceを使うんなら共通のDataSourceを使えばいいです。
853 :
名称未設定 :2009/01/07(水) 18:51:22 ID:yaAaH/hI0
勘違いしている人もいるのですが、Cocoa BindingはModelとViewを対等に扱ったりはしません。 ていうかBindingは双方向なんかじゃありません。二つのオブジェクトをシンクロするものじゃないんです。
854 :
名称未設定 :2009/01/07(水) 18:55:00 ID:HhZ+tLxQ0
>>852 ViewとかModelとかの概念なんですが、
NSTableViewを継承させているMyTableViewでも
Xcodeで記述されているだけならModelだと考えています。
つまりMyTableViewModelと・・・・・・・・
これは大きな間違いでしょうか?
それでViewはIBでWindowに設置したNSTableViewに対してMyTableViewを継承させたときに
MyTableViewがいわゆるViewになるのだと・・・・・。
855 :
名称未設定 :2009/01/07(水) 19:05:08 ID:HhZ+tLxQ0
>>853 そうなのか・・・・・。
思いっきり勘違いしていますね、僕は。
難しいです、本当に。
バインディングに関するいろんなサンプルを見ても
本当にバラエティに富んでいるんですよね。
だからこんなことも出来るんじゃないかなぁって思って今回ここで聞いてみたんです。
バインディングを勉強すればするほど、次から次へと謎がでてきます。
もう一度リファレンスをしっかり読み直して見ます。
本当に皆様ありがとうございます。
856 :
名称未設定 :2009/01/07(水) 19:23:19 ID:yaAaH/hI0
>>854 ,855
確かにNSTableViewだろうがなんだろうがModelにはなりますよ。
けれど、NSTableViewとNSTableViewを、ViewとModelとしてBindして、内容を同一にするなんてことは無理です。
というかやる意味がありません。
そもそも
>>845 を読んでいて違和感を感じるのですが、まさかNSTableViewに独自の内容を表示させるために
わざわざサブクラス化したりはしていないでしょうね。
BindingはMVCのうちControllerの部分で楽をするためのものであって、Bindingを使う使わないに関わらず
ModelとViewの実装するメソッドが変わるものではありません。
ですからBindingよりむしろ、MVCをちゃんと理解するべきのような気がしますね。
857 :
名称未設定 :2009/01/07(水) 19:28:42 ID:HhZ+tLxQ0
そもそも
>>845 を読んでいて違和感を感じるのですが、まさかNSTableViewに独自の内容を表示させるために
わざわざサブクラス化したりはしていないでしょうね。
今回、あくまでもバインディングについての勉強として
サブクラスで独自の内容を表示させるようにさせました。
普段はマウスイベントを使用するためでサブクラスを定義することはしていますが・・・・。
858 :
名称未設定 :2009/01/07(水) 19:32:07 ID:HhZ+tLxQ0
>>856 ただでも自分でも生兵法でコーディングしていることは認識しております。
.netで階層空間のプログラミングはやってきたのですが、
MVCはまだ始めて3ヶ月と少しぐらいなんで・・・・・・・。
859 :
名称未設定 :2009/01/07(水) 20:37:24 ID:yaAaH/hI0
>>858 .NETのBindingとCocoaのBindingはこれもまた違いますからね。
860 :
名称未設定 :2009/01/07(水) 21:23:47 ID:ZH+Mi0nG0
861 :
名称未設定 :2009/01/08(木) 00:55:35 ID:qoiKl4330
間にControllerが入ると凝った事はできるけど面倒だよね Railsみたいにもっと簡単にならないかな 1、モデルクラスを作る。 2、GUIと関連付ける。 ここまでで永続化もサポート 3、必要であればコントローラでチェックなどを行う。 (チェックはモデルで行うべきかもれないけどGUIの制御がメインになるだろうから)
862 :
名称未設定 :2009/01/08(木) 03:57:17 ID:0jGZjHE+0
863 :
名称未設定 :2009/01/08(木) 09:48:41 ID:0jGZjHE+0
ID:HhZ+tLxQ0さんのレスを読む限りから推察すると KVO,KVCの個々の知識に関しては、基礎的なところは理解されていると思います。 でもそこからcocoa bindingに持っていくところであやふやになっているんだと思います。 例としてNSTableViewのカラムとNSArrayControllerのバインディングについて考えてみましょう。 NSArrayControlerはその名前の通り、controllerの集合を持つことが出来るcontrollerです。 controllerとは、あるクラスを実体化した具現物つまりオブジェクトですよね。 で、NSArrayControllerにadd:でデフォルトで追加されていくオブジェクトとは NSMutableDictionaryなんです。(これはsetObjectClass:で変更することができます。) IBでのインスペクタを確認していただければ、ClassでNSMutableDictionaryとなっているはずです。 さらにそこを見たいただくと、Keyという項目があります。 この項目に各カラムに対応するkeyを作成し、 各カラムの所で、各々keyと対応してNSArrayControllerとbindingすることにより、 NSArrayControllerにadd:を送信するたびに 上記で作成したキーをもつNSDictionaryがNSArrayControllerに追加され NSTableViewに項目が追加されていくってわけです。
864 :
名称未設定 :2009/01/08(木) 09:51:56 ID:0jGZjHE+0
すみません。
>>863 で、
>controllerとは、あるクラスを実体化した具現物つまりオブジェクトですよね
と言いましたが、Objective-Cではクラス自体オブジェクトと考えるので、
NSArrayControllerに追加されていくオブジェクトとはこちらの方ですね。
申し訳ございません。
865 :
名称未設定 :2009/01/08(木) 10:11:04 ID:0jGZjHE+0
866 :
名称未設定 :2009/01/08(木) 10:15:44 ID:0jGZjHE+0
867 :
名称未設定 :2009/01/08(木) 10:28:28 ID:Ge4+MYY90
>>866 わざわざありがとうございます。
基本的に retain, release の組み合わせで使用するのであって、
dealloc は呼ばず、このメソッドはインスタンス変数を解放するため
だけにオーバーライドして使う、という様な位置づけでしょうかね。
だいたい分かってきました。
ついでに質問なのですが、IBOutlet 系の記述をインスタンス変数に
していたとして、これは既に retain されていると考えていいのでしょうか?
それともイニシャライザなどで retain する必要がありますか?
868 :
名称未設定 :2009/01/08(木) 11:52:32 ID:OLJocZWN0
>>863-864 神様と呼んでいいでしょうか?
なるほどー。
いまいちNSArrayControllerについて掴めていなかったんです。
う〜ん、分かりやすい解説本当にありがとうございます。
この予備知識をもとにもう一度、Controller関係のリファレンスを読み直して見ます。
>>866 ですが、
deallocはそのインスタンス変数がどこからも参照されなくなったときに
勝手に呼び出されるメソッドです。
で
>>867 ですが、大体にして正しい認識だと思います。
例えば、あるクラスでdeallocをオーバーライドします。
そのクラスがどこからも参照されないつまり、retaincountが0になった際、
オーバーライドしたdeallocが呼び出され、その際にそのクラスが保持しているインスタンス変数を
明示的にreleaseしておきます。
そうしておけば、そのインスタンス変数の参照カウンタを−1してくれるというわけです。
後、質問ですが・・
>IBOutlet 系の記述をインスタンス変数に
していたとして、これは既に retain されていると考えていいのでしょうか?
そんなことを考えたことがないのですが、自分で明示的にreleaseしてみたらいかがでしょうか?
ただWindow上から参照されているんじゃないんですか?よく分からないですけど・・・(大阪人風に)
869 :
名称未設定 :2009/01/08(木) 12:25:17 ID:sI11vY5U0
870 :
名称未設定 :2009/01/08(木) 12:32:10 ID:Sg9pArN50
>>869 “無償で”と言うなら本を無料にしろ、と思った。
871 :
名称未設定 :2009/01/08(木) 13:21:41 ID:btDFxywG0
872 :
名称未設定 :2009/01/08(木) 14:56:37 ID:Ge4+MYY90
>>871 @property で retain を指定していれば release しなければいけない
のは分かるのですが、IB で作ったクラスは普通アクセサまでは定義
されていないですよね?
この場合はどうなるのでしょうか…
873 :
名称未設定 :2009/01/08(木) 15:00:31 ID:Ge4+MYY90
あ、すいません、レスが何個か続いてるんですね。 もう少し読んでみます。
874 :
名称未設定 :2009/01/08(木) 15:20:53 ID:Ge4+MYY90
>>871 メーリスを読んでみると、やはり release しろと言っている様ですね。
あと下記の様なコードを書いて実験してみました。
(1)
IBOutlet UITextField *field1;
まず、これに適当な UITextField を結びつけると retainCount は2
でした。さらに、
(2)
IBOutlet UITextField *field1;
IBOutlet UITextField *field2;
として、(1) で結びつけたのと同じ UITextField に結びつけると
retainCount は3になりましたので、やはり release はすべきだって
事なんでしょうね。
875 :
名称未設定 :2009/01/08(木) 17:01:10 ID:OLJocZWN0
でもさぁ AppControllerのIBOutletのインスタンス変数をreleaseしてしまうと IBでコネクトしたtextFieldの値を取ってこれなくなるよ。 そんなことする必要は実践上ではありえないですよね。 そういったIBOutletを宣言しているインスタンス変数は アプリケーション終了と同時に開放されるんだから、 アプリケーション実行中にわざわざ開放する必要はないわけですから。
876 :
名称未設定 :2009/01/08(木) 17:10:39 ID:ClLk7fAY0
何この流れ… アウトレットをreleaseとかしませんよ。 もしView同士がアウトレットをお互いに接続していて、アウトレットをretainしているなら、 立派なメモリーリークの完成でしょ。 ただしNSObjectControllerのcontentアウトレットを接続すると、勝手にsetContentされてretainされるけど。
877 :
名称未設定 :2009/01/08(木) 17:48:51 ID:OLJocZWN0
>>876 まぁ多分参照カウンタの勉強中なんだと思われ。
GCを使えば、releaseは意識しなくなるんだけどね。
878 :
874 :2009/01/08(木) 18:09:24 ID:Ge4+MYY90
?? なんでですか? IBOutlet に接続した段階で retainCount が一つ増えているのに、 何故 release しないんですか? ちょっと誤解があるのかもしれませんが、何も接続していない状態 でもカウントは1なんですから、IBOutlet から参照されなくなった時点 で release してもカウントが2から1に戻るだけだと思うんですが…。
879 :
名称未設定 :2009/01/08(木) 18:20:44 ID:ClLk7fAY0
>>878 そりゃ@property使ってるからじゃないの。
普通IBOutletに@propertyなんか使わないけど。iPhoneだと使うわけ?
880 :
名称未設定 :2009/01/08(木) 18:23:59 ID:JxaWu1aX0
GCは予備くらいに考えて、 自分で管理した方がいいと思うけど…
881 :
名称未設定 :2009/01/08(木) 18:42:06 ID:eQdSAwLm0
>>878 自分で alloc copy retain したもの以外は無視する。
のが、正しい管理方法です。
で、そういう風にドキュメントで明言されています。
もし仮に、retainCountが増えるのがバグであったとすれば、
Appleはそれを当然黙って直すでしょう。直した後に変更したよ!って言うだろうけど。
で、上の管理にしたがっているアプリには何も問題が生じない。
したがっていなかった場合は、何かが起こる可能性が非常に高い。
あなたは、それでも retainCountにこだわりますか?
これ -- ドキュメント沿わなかったため、突然不具合が生じる -- は、
この場面以外にも起こりえることですよ。
882 :
名称未設定 :2009/01/08(木) 18:42:18 ID:xlI+OYgT0
パフォーマンス考えなきゃGCで良いと思うが。
883 :
名称未設定 :2009/01/08(木) 18:48:23 ID:OLJocZWN0
僕の場合 IBOutlet NSTextField* textField; - (void)awakeFromNib { [textField setIntValue:[textField retainCount]]; } こいつの結果は7でした。いろんなところから参照されているんでしょうね。 で、次に明示的にreleaseしてみます。 - (IBAction)releaseTextField { [textField release]; [textField setIntValue:[textField retainCount]];//こいつの結果は1 } releaseTextを2回呼ぶとメモリーリークを引き起こしました。 当たり前ですけど・・・・・・。 ただ最初は7でreleaseすると1になるってどういうことなんでしょうね? }
884 :
名称未設定 :2009/01/08(木) 18:54:10 ID:1ht1kdmT0
>>883 > ただ最初は7でreleaseすると1になるってどういうことなんでしょうね?
ようするにawakeFromNibのタイミングでは、7だった。ということじゃ?
885 :
名称未設定 :2009/01/08(木) 18:58:12 ID:Qm5mTMX+0
僕の場合、 NSLog(@"ageてもいいけどなるべくsageてね");
886 :
名称未設定 :2009/01/08(木) 18:59:46 ID:ClLk7fAY0
>>883 自分のコード以外にも様々なオブジェクトがretainしたりreleaseしたりautoreleaseしたりしているというのを忘れてはいけない。
awakeFromNibのタイミングではおそらくnibを読み込んだ後AutoreleasePoolがまだ解放されてない。
ちゃんとInstrumentsやなんかで見ればいいだけの話。普段どうやってメモリーリークのチェックしてんの?
あとメモリーリークってのはちゃんとメモリを解放しないことであって、過剰にreleaseすることではない。
887 :
名称未設定 :2009/01/08(木) 19:02:07 ID:OLJocZWN0
>>884 それは分かるんですけど・・・・・・。
ただ当然参照カウンタは1だろうなと思っていただけに「?」です。
それにreleaseしたのに1残っているのも気になりません?
まぁIBOutletを明示的にreleaseするなんてことは僕はやりませんけどね。
888 :
名称未設定 :2009/01/08(木) 19:05:56 ID:OLJocZWN0
>>886 そうですね。
メモリーリークの使い方が違います。すみません。
889 :
874 :2009/01/08(木) 19:15:06 ID:MmQKyqNZ0
>>879 @property は使ってないです。
>>881 「自分で alloc copy retain したもの以外は無視する。」ってのは
単純明快でいいですね! その考えでいこうと思います。
なので IBOutlet についてはほっとく事にします。
どうせ開いてる間は dealloc される事はないんでしょうし、
みなさん release していなくてもリークは起きていないんでしょうし。
そういう考えですよね。
他に(仕様とは言え)知らぬ間にカウントが増えてそうなのは
@property の retain くらいでしょうか?
いつも気を付けている点などお教え頂けると助かります。
890 :
名称未設定 :2009/01/08(木) 19:25:22 ID:OLJocZWN0
891 :
名称未設定 :2009/01/08(木) 19:38:03 ID:ClLk7fAY0
892 :
名称未設定 :2009/01/08(木) 20:03:35 ID:sI11vY5U0
>>890 あなたのいっている事は正しいが、>874 を混乱させる気がする。
>>874 知らぬ間にカウントが増える?のでよく使われるようなインスタンス、例えば
NSNumber *hoge = [[NSNumber alloc] initWithBool:YES];
NSNumber *piyo = [NSNumber numberWithBool];
なんかは、hoge == piyo で YES が返ってくるし、retainCount もいっぱい。
release しても減らないので、シングルトンになっていたりする。
あとは、NSArrayやNSDictionary などに登録すると勝手にretainが送られる。
ArrayやDicを開放するときに個別にreleaseする必要があるかといえば、そうではなく
Array, Dic にreleaseを送ると勝手に中身にもreleaseが送られる。
だから、release対象は基本的には alloc, retain, copy のみ。例外はあるが、それは
後々学べば良いと思う。
893 :
名称未設定 :2009/01/08(木) 20:05:50 ID:wPFlxuiD0
retainCountなんて気にするべきでない。Cocoaで定められたルールに従ってプログラムを書けば良い。
894 :
名称未設定 :2009/01/08(木) 20:13:46 ID:sI11vY5U0
あ、>892 だが間違った。 ×Array や Dic に release を送ると勝手に… ○Array やDic が dealloc されると勝手に…
895 :
名称未設定 :2009/01/08(木) 21:04:40 ID:HCepVkRQ0
>>889 >みなさん release していなくてもリークは起きていないんでしょうし。
>そういう考えですよね。
そうではなくて、自分が所有権をもってないオブジェクトは
release したら「ダメ」なんです。
いろいろあげられてるページをよんで勉強したほうがいいと思いますが、
まとめておくと、retain/release/autorelease メカニズムというのは、
各オブジェクトに対して所有権をもっている「人」
(Cocoa のフレームワークの他の場所だったり、
読み込まれてるNib ファイルだったり、あなただったりしますが)
が retain することで retainCount が増えて、
いろんなひとが release して最終的に retainCount がゼロになったら
だれもそのオブジェクトを持ってないことになるので、
そこで自動的に dealloc が呼ばれるという仕組みになってるわけです。
874 さんはあなた以外の Cocoa フレームワークが、
あなたの触っているオブジェクトを
retain することがあるというのを認識したほうがいいとおもいます。
>ただ当然参照カウンタは1だろうなと思っていただけに「?」です。
>それにreleaseしたのに1残っているのも気になりません?
というのがおかしいということです。
896 :
名称未設定 :2009/01/08(木) 21:35:30 ID:OLJocZWN0
>>895 いわれなくても分かってるよ。
まぁやるまでは1だと思ってたけどさぁ。
いろんなところから参照されているんだろうなってことは
結果で分かったよ。
897 :
名称未設定 :2009/01/08(木) 22:35:30 ID:Sg9pArN50
この豹変ぶり
898 :
874 :2009/01/09(金) 01:06:41 ID:Dd+2WhY50
>>892 ありがとうございます。
>>895 ちょっと表現が悪かったです。
IBOutlet のせいでカウンタは増えますが、それは自分が retain したもの
ではないし、リークは起こっていないだろうから自分が release すべき
ものではないと判断した、という意味です。
やはりオーナーといいつつ結局カウントされてるだけなのはちょっと
不便と言うか…分かりにくいと言うか…。
899 :
名称未設定 :2009/01/09(金) 01:26:30 ID:l9JHXxJ60
何が判りにくいのか判らん。 1. 長期間保持しないといけないものは所有権を主張しないといけない。 2. alloc / copy / retain によって所有権が発生する。 3. 所有権がいらなくなったら release する。 これを全ての人 (プログラムしてる自分と、 Cocoa ライブラリを書いた Apple の技術者) が全て守ってたら、自動的に全員が所有権を放棄した時点で retain count がゼロになって、dealloc されるわけでしょ。 >やはりオーナーといいつつ結局カウントされてるだけなのはちょっと >不便と言うか…分かりにくいと言うか…。 ひとつのオブジェクトを保持出来るのが一人だけだったら 判りやすいのにということ??
900 :
名称未設定 :2009/01/09(金) 01:35:24 ID:/x/ASYWh0
まずはちゃんとドキュメント読まずに思い込みでコード書くのをやめないと。
901 :
874 :2009/01/09(金) 01:44:59 ID:Dd+2WhY50
>>899 その理屈は分かります。
ただ、IBOutlet を配置した時点で retainCount が一つ増えている事実に
対して、release を自分以外の誰かがきちんと呼んでいるという保証が
欲しかっただけです。
今は、自分が retain していないんだから他の誰かの責任なんだろう、
という理解で落ち着こうとしていますが…。
>ひとつのオブジェクトを保持出来るのが一人だけだったら
>判りやすいのにということ??
ある retain を呼んだオーナーを逆探知?できたらいいのにな、と
思いました。今は数値としてのカウントだけしかないからできませんよね?
902 :
名称未設定 :2009/01/09(金) 01:52:14 ID:0pBZGpT40
>>901 IBOutletによる参照と、retainCountの増減に因果関係はないと思いますよ。参照を持ってるクラスがretainしない限りは。
もし参照しただけでretainされるなら、循環参照しただけでそのオブジェクトたちは解放されないことになるでしょう。
また自分自身を参照したらそのオブジェクトは解放されないことになりますが。そのような設計をすると思います?
903 :
874 :2009/01/09(金) 01:59:32 ID:Dd+2WhY50
>>902 いえいえ、さすがに参照を格納した時点で勝手に retain されているとは
思っていないです。格納した後に明示的に retain しているんだとは思い
ますが、それをちゃんと release しているのかどうかが気になりました。
今更ですがやっとみなさんが言っている意味が分かってきた気がします。
クラス変数とは言え、自分で alloc した訳ではないから release する
必要はないって事ですよね。
インスタンス変数は自分で解放する必要がある、ってキーワードに振り回されて
た気がします。インスタンス変数の中で、自分で alloc などしたものは dealloc
メソッドをオーバーライドして release すべき、それ以外は release しない、
つまりそういう事ですよね?
904 :
名称未設定 :2009/01/09(金) 02:06:32 ID:0pBZGpT40
>>903 そうです。自分がretainかcopyかalloc/initしたもの以外はreleaseしない、というのが原則ですね。
905 :
名称未設定 :2009/01/09(金) 04:03:55 ID:YNAUuz7D0
906 :
名称未設定 :2009/01/09(金) 05:48:36 ID:YNAUuz7D0
874さんは、ある段階から結構伸びていくタイプですね。
ただ挫折するタイプでもあるんです。気をつけてください。
>>868 さん、
僕は神様的なレベルじゃないです。
GCに頼りすぎているせいか
現に管理カウンタ方式によるメモリー管理は、かなり怪しいところもあります。
まぁallocしたやつは、儀式のようにreleaseしてますけど・・・・・・。
参照カウンタとか意識したこと無いです・・・・・。
907 :
名称未設定 :2009/01/09(金) 17:57:34 ID:8GY6ok/A0
ADCに有る、Cocoaセミナーのレパ対応版資料を見たが 初心者が勉強するなら、これだけで充分だな たのCocoなんていらなかったんや!
908 :
名称未設定 :2009/01/09(金) 20:33:02 ID:BtnEJOVs0
またすぐそういう極論を言う。 本には本の良さがあるよ。
909 :
名称未設定 :2009/01/09(金) 20:52:56 ID:Rsd8WitQ0
autoreleaseって怖くね? 油断しているといつの間にか解放されるんでしょ。
910 :
名称未設定 :2009/01/09(金) 21:07:01 ID:xStOCSoZ0
油断しなければいいだけの話だ
911 :
名称未設定 :2009/01/09(金) 21:11:38 ID:BtnEJOVs0
俺の背後には立つな
912 :
名称未設定 :2009/01/09(金) 21:12:29 ID:bMk2YxZl0
>>907 それも見て、たのCOcoも読んで、ヒレガスも半分くらいやったのに
未だにアウトレットが分からない俺はそろそろ挫折しそう
913 :
名称未設定 :2009/01/09(金) 21:17:34 ID:GyYeJ94n0
単なるポインタじゃないですか。
914 :
名称未設定 :2009/01/09(金) 21:30:19 ID:6OsmI+IL0
勉強し始めの頃、Cocoaはやたら気持ち悪かった。 とりあえずIBでウインドウつくって、何か数行書いたらそれなりに動く。 動くんだけど、なんでそれで動くのかがさっぱり分からない。昔ToolBoxを齧った ことがあったから、逆にイベント処理も何もしないのにボタンが反応してメニュー も動作するというのがえらく不気味だった。 今は慣れた。アウトレットも慣れるよ。
915 :
名称未設定 :2009/01/09(金) 21:37:21 ID:8GY6ok/A0
>>908 いや、マジでいらないと思ってるわけじゃないんで
すいませんでした
本も大切ですよね
>>914 分かるわぁ
なんていうか、自分がちゃんと理解してるか不安になる
知らなくちゃいけないことを飛ばしてるような気がしてくる
916 :
名称未設定 :2009/01/09(金) 22:30:40 ID:Pt57QXE80
NEXTSTEPプログラミングの本でそれだと最初何が起こっているのかわからないから 全部ソースでウインドウから何から出す例から始まってその後 Interface Builder を 使って意味を理解するというのがあったよ 僕はその本で入門したから実にスムーズだった
917 :
名称未設定 :2009/01/09(金) 22:35:04 ID:bMk2YxZl0
918 :
名称未設定 :2009/01/09(金) 22:35:25 ID:9OE+nkWi0
>>906 オブジェクトプールと手動参照カウントなんて20年前の手法だから、GC使えるなら
そっち使えば良いよ。
NeXTSTEP当時はCとの互換やマシンパワーの関係でこの実装しかできなかった
化石仕様だから。あえて拘る必要も無い。
919 :
名称未設定 :2009/01/09(金) 22:36:06 ID:VLWY2O3M0
よくわからん。C が出来た直後も、 printf("...") とやるだけで、アセンブラでいろいろ書かなくても 文字が表示されるのが気持ち悪い、何が起こってるのかわからない。 コンパイルされた実行ファイルのアセンブリコードを読んで はじめて意味が分かった。といった人が多かったのでは ? それといろいろかかなくても GUI が動くというのの違いは 単に程度問題だと思うのだが。
920 :
名称未設定 :2009/01/09(金) 22:41:52 ID:VLWY2O3M0
>>918 retain/release メカニズムは OpenStep 仕様策定に伴って
NSObject とともに導入されたので、NeXTStep 1.0 とかの
Object クラスはもっと原始的だったきがする。
あと iPhone は GC つかえないんよね。
921 :
名称未設定 :2009/01/09(金) 22:47:25 ID:Pt57QXE80
922 :
名称未設定 :2009/01/10(土) 00:10:08 ID:uvf0UZtR0
>>919 >コンパイルされた実行ファイルのアセンブリコードを読んで
>はじめて意味が分かった。といった人が多かったのでは ?
マジレスすると単に call printf してるだけだろうからそれではまだ意味が分からんと思うけど。
じゃあ libc 部分をディスアセンブルですか?
で頑張った挙げ句、一つの到達点は「ソフトウェア割り込みをする」だと思うが、さてそれで
分かった気になれるのかなあ。掘り方が足りない?
(あ、ちなみに今は割り込みじゃなくて sysenter かも)
923 :
名称未設定 :2009/01/10(土) 01:47:28 ID:TP6njaty0
IBは言語が複雑になったHyperCardってところでしょうか。
924 :
名称未設定 :2009/01/10(土) 02:33:38 ID:o+cTwXnw0
>>923 私が思うに全然違いますね。
IBやCocoaはあくまで、C言語+オブジェクト指向を理解している人には簡単です。
理解していない人には、手順は簡単でも何が起きているのかさっぱり分からない。
例えばCocoa Bindingを使えばHyperCardより書くコードを少なくしつつ同等の機能を実現出来ますが、
初心者が処理の内容をイメージしやすいのはHyperCardのほうでしょう。
HyperCardに相当するものが無くなったのは本当に惜しい。
925 :
名称未設定 :2009/01/10(土) 02:49:29 ID:K35gM2cR0
そんな年齢がばれちゃう様な会話は、外では出来ません。(≧ε≦)
926 :
名称未設定 :2009/01/10(土) 02:56:05 ID:6LAx8ouX0
AutomatorにGUI拡張がついたものがあればイメージとしては近いか?>HyperCard HyperCardとOpenDocはなくなったことが惜しまれる2大技術だよな。 と思いっきり年齢がバレるような会話をしてみた。
927 :
名称未設定 :2009/01/10(土) 03:49:19 ID:R6paoEyt0
よーし、おじさんmagicってコマンド入れちゃうぞ!
928 :
名称未設定 :2009/01/10(土) 05:01:09 ID:TP6njaty0
929 :
名称未設定 :2009/01/10(土) 05:06:19 ID:TP6njaty0
でもさぁ。 HyperTalkやってて今cocoaやってて、って、だいたいどこの誰だか 察しがつく気がするんだけども…。 みんな実は知り合いなんじゃないですか?
930 :
名称未設定 :2009/01/10(土) 12:12:39 ID:iJgNObLj0
OpenDocは惜しい技術だった。開発コードはリリバンド?だったっけ? 開発バージョンのデモを見た時はスゲーと思ったけど、製品になって 出てみるとかなり退化してたのでガッカリした。 HyperCardねぇ・・・Ver.1.0.0をMac Plusで使った時の印象が悪くて 結局最後まで好きになれなかった。rolodexだもんなぁ。
931 :
名称未設定 :2009/01/10(土) 12:19:30 ID:b1IDWYDF0
OpenDoc も、CyberDog も、X 何とかなんとか いう検索情報の3D的ブラウズ手法のでもとか 面白いの色々あった。
932 :
名称未設定 :2009/01/10(土) 15:21:05 ID:H8pV9z5i0
モモデーラーズブランドとかチバレイとか 懐かしい単語がワラワラ出てくる。 そういや何時だったかCocoaっていう オーサリングツールもどきも、あったっけ。
933 :
名称未設定 :2009/01/10(土) 15:56:26 ID:aY7xpBek0
>>932 >あったっけ
だんだんスレの中身が「apple苦難の時代を懐かしむスレ」
にちかづきつつあるな
934 :
名称未設定 :2009/01/10(土) 16:37:40 ID:cql5/Y0h0
コードウォーリアの頃は恐れおおくてMacでのプログラミングに手が出せなかった。 高かったし。 Xcodeで敷居が低くなって始めたよ。
935 :
名称未設定 :2009/01/10(土) 16:49:01 ID:4yK0RIPG0
936 :
名称未設定 :2009/01/10(土) 17:46:22 ID:Zc741NJa0
937 :
名称未設定 :2009/01/10(土) 18:03:31 ID:SJikL2Yl0
みなさん詳しいですね 自分はMacBook買ったらタダでXcodeが付いてきたんで なんとなく勉強始めたっていう輩なんで プログラミングの歴史はチンプンカンプンです
938 :
名称未設定 :2009/01/10(土) 18:26:02 ID:U/4SUMVX0
OgreKitのLeopard PPC版がなんとか動いた makeルールをleopardに合わせて書き換えればいいだけだった
939 :
名称未設定 :2009/01/10(土) 18:53:58 ID:lw+k6dKB0
俺だったら素直にboostのRegexpを使うなぁ 標準で正規表現ができないのが問題だよ
940 :
名称未設定 :2009/01/10(土) 19:05:26 ID:/z0IkXwh0
正規表現あたりのクラスって アップルは追加しないのかな?
941 :
名称未設定 :2009/01/10(土) 19:07:30 ID:U/4SUMVX0
>>939 俺も標準でないのはさすがにどうかと思ってる。
942 :
名称未設定 :2009/01/10(土) 19:15:52 ID:xkFZ49sz0
943 :
名称未設定 :2009/01/10(土) 19:24:32 ID:pK5oi2pH0
>>934 お年玉ためてコードウォーリアーのアカデミック買ったらXCode発表。
かなり窪んで10.4ぐらいまでプログラムやめてたw
944 :
名称未設定 :2009/01/10(土) 19:35:08 ID:8yg1wzhW0
50のおっさんばっかりでがっかり。
945 :
名称未設定 :2009/01/10(土) 19:59:25 ID:SJikL2Yl0
私女だけど、男は50からだと思う
946 :
名称未設定 :2009/01/10(土) 20:04:35 ID:/v6TyET/0
947 :
名称未設定 :2009/01/10(土) 20:20:50 ID:BM7xz4Jq0
プライベートメソッドなんかの引数で fp8とかfp12とかいう表記を見かけますが、fpってどういう意味でしょう?何かの略称でしょうか?
948 :
名称未設定 :2009/01/10(土) 21:45:56 ID:TP6njaty0
>>945 言い方が違うんじゃないの?
「ねだって金を吸い取れるのは50から」
じゃないの?
949 :
名称未設定 :2009/01/10(土) 22:41:09 ID:6LAx8ouX0
950 :
名称未設定 :2009/01/10(土) 23:33:04 ID:rL1nMuQ/0
漢字トークもHyperCardもOpenDocも使った高3が通りますよ。 NSObject * hoge = [[[NSObject new] autorelease] retain]; メモリ管理?なにそれおいしいの?
951 :
名称未設定 :2009/01/10(土) 23:35:58 ID:TP6njaty0
new?
952 :
名称未設定 :2009/01/10(土) 23:37:01 ID:Vr/Y4GdZ0
953 :
名称未設定 :2009/01/10(土) 23:54:15 ID:cMo5rYNx0
NSObjectのインスタンスを作るという発想は新鮮だな。 何にも使えないけど。
954 :
名称未設定 :2009/01/11(日) 00:02:40 ID:sYslBzIH0
それ以前に autorelease] retain] はnoopだろ。
悪いこと言わないから
>>950 はGCのお世話になっときな。
955 :
名称未設定 :2009/01/11(日) 00:16:30 ID:liED/MGr0
冗談が通じないスレですね^^
956 :
名称未設定 :2009/01/11(日) 00:34:24 ID:ZIEuSZzQ0
まさかの冗談宣言
957 :
名称未設定 :2009/01/11(日) 00:41:08 ID:VT7VaHiEP
>>916 荻原本で簡易画像ビューアをIBなしで作ってるよ。
IBで作り直してるかどうかは忘れたけど。
958 :
名称未設定 :2009/01/11(日) 01:36:00 ID:Sbnu5PyN0
そうそうSYMANTEC C++ だったー。
959 :
名称未設定 :2009/01/11(日) 02:36:16 ID:RHR/Lyrf0
>>957 その本持ってるー
丁寧に解説されてるんだけどREALbasic止まりなオレには
やっぱりわかりにくいっすorz
>>932 モモデラゆうと
>>935 とスーパカの代理店だったとこか。
いまFutureBASICいうとカッパラボでもStazでもなくFB2Cなんだよね
>>934 ,943
そこでMPWっすよ。
ビギナーには向いてないけどナーorz
960 :
名称未設定 :2009/01/11(日) 11:21:32 ID:5+kPkzqm0
モモデラはModEになった後つぶれたんだっけ?
961 :
名称未設定 :2009/01/11(日) 14:03:19 ID:ODo4a9iK0
Apple謹製の『Cocoaアプリケーションチュートリアル』
ttp://developer.apple.com/jp/Documentation/Cocoa/Conceptual/ObjCTutorial/ObjCTutorial.pdf をやっているのですが、チュートリアル通りに進まない点があるので教えてください。
チュートリアルの
p.47 nibファイルにConverterControllerクラスを追加する
というセクションで、p.48からの手順に
1. 「File」>「Read Class Files」を選びます。
2. ConverterController.hファイルを選択して「開く」をクリックします。
3. ライブラリで、オブジェクト項目をMainMenu.nibウインドウへドラッグします。
というふうに説明がされてあり、図5-3には
新しくインスタンス化されたConverterControllerのインスタンス
がMainMenu.nibに追加されている様子が紹介されています。
しかし、2.の操作をしたのに、ConverterControllerのインスタンスがMainMenu.nibに現れません。
そのため、先に進むことができません。
どなたかお助けを。
なおバージョンはLeopardです。
962 :
名称未設定 :2009/01/11(日) 14:13:32 ID:7jqDutqf0
>>961 それもううんざりするぐらい見慣れた質問。
ファイルリストのところにMainMenu.nibがあるから、それダブルクリックして呼び出して。
963 :
名称未設定 :2009/01/11(日) 14:16:07 ID:7jqDutqf0
>>961 ごめん質問間違えた・・・・otz
ライブラリーにある青い箱をドロップアンドドラック
964 :
名称未設定 :2009/01/11(日) 14:24:31 ID:aGmK15Ub0
Xcode3.0からの変更点だっけ? 「Xcode 3.0 インスタンス化」とかでぐぐれば出るのに
965 :
名称未設定 :2009/01/11(日) 15:16:12 ID:ODo4a9iK0
>>964 ありがとうございます。でてきました。
ttp://kakkasoyo.blogspot.com/2008/01/xcode-2x3.html 【Xcode 3】
Interface Builderの「ライブラリ」ウィンドウにあるNSObject(青いキューブ)をnibウィンドウにドラッグ&ドロップする。
そうするとnibウィンドウに「Object」という名前で追加されるので、これを選択する。メニューから[Tools]→[Identity Inspector]を選択(もしくはコマンド+6)するとObject Identityウィンドウが表示されるので、
Class Identityの部分に名前(例えばAppController)と入れて確定すると、Objectの名前が変わる。
966 :
名称未設定 :2009/01/11(日) 18:57:06 ID:pZea1df00
QTKitを使って動画からサウンドトラックを抜き出して保存するアプリを自作しているのですが、 AIFFしか作れなくて困っています。 QTmovie *movie = 〜ファイルパスから作成 NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], QTMovieExport, [NSNumber numberWithLong:kQTFileTypeAIFF], QTMovieExportType, [NSNumber numberWithLong:SoundMediaType], QTMovieExportManufacturer, nil ]; [movie writeToFile:[@"~/Desktop/aaa.aiff" stringByExpandingTildeInPath] withAttributes:attr]; 一発でAACに変換、エクスポートする方法はないでしょうか? (上記で一時的にAIFFファイルを作成して再読み込み->上記のパラメタを変えた形でMP4で保存という ローテクな方法なら思いついたのですが)
967 :
名称未設定 :2009/01/11(日) 19:23:34 ID:nzMkLOKV0
>>947 バイナリをクラックしてプライベートメソッドの存在を調べるとき、メソッドの引数の変数のタイプは
わかるのだが、変数名は実際のヘッダーやソースがないからわからんので、便宜的に変数名を
付けているというか。
fp の略? なんだろ。field parameter とかなんとか? しらん。class-dump の中の人に聞くべしw
後ろの 8 とか 12 とかは、Objective-C のメソッドの低レベルな詳細に関係がある。よい子はそんなこと
知らなくてもいいんだが、プライベートメソッド云々やってる時点でもうよい子じゃないなw
木下氏が以下で解説している。
http://journal.mycom.co.jp/column/objc/020/index.html
968 :
名称未設定 :2009/01/11(日) 19:32:42 ID:kfqvxSyw0
>>967 うわああこれ読んでみましたけど木下氏すご過ぎですね
情報サンクスです
969 :
名称未設定 :2009/01/11(日) 19:57:12 ID:FuXovhSx0
OgreKit使うのやめた 理由は実装に怪しいところがかなりあるのが最大の理由、次にメンテナンスされておらず放置プレイな所。 結局boost::regexpをラップするクラス作って終了。 特にどうということもなく使えるのは助かる。
970 :
名称未設定 :2009/01/11(日) 20:20:07 ID:Sbnu5PyN0
file pointer で使ってたな C ではね。>fp
971 :
名称未設定 :2009/01/11(日) 20:32:01 ID:zPckJlu/0
>>967 fp=frame pointerでしょ。
local stack frameを示すレジスタ経由でアクセスする際のオフセットを示してる。
972 :
名称未設定 :2009/01/11(日) 21:27:18 ID:sYslBzIH0
>>969 RegexKitとというのがあってだな。俺はこれを使っている。
973 :
名称未設定 :2009/01/11(日) 23:23:24 ID:nzMkLOKV0
>>971 まあそーかもしれんなーと最初ちょっと思ったがちょっと深読みしてみたのだったw
例えば今 Intel Mac 上で ObjC のメソッドをチェックすると第一引数は fp8 と出るが
実際には 16(%ebp) だし、それをそのまま frame pointer からのオフセットと言っていいのかとか。
あとこのエンコーディングは構造体にも適用するよね、とか。
でも今見たら構造体の場合要素は _field1 とか表示するのかw
ま、どうでもいいねw
974 :
名称未設定 :2009/01/11(日) 23:57:56 ID:liED/MGr0
>>966 kQTFileTypeAIFFを他のファイルタイプにするだけじゃダメ?
fp…function pointer?
975 :
名称未設定 :2009/01/12(月) 23:04:59 ID:RUX9yHMv0
>>966 QTKitはあまりしらないけど、QTPlayerProで変換する方法は
mp4で書き出すを選択して
videoはなし、audioはAACか、そのままを選んで、拡張子をm4aにすれば変換できます。
拡張子をm4aにすれば、iTunesに取り込む時に便利です。
976 :
名称未設定 :2009/01/12(月) 23:20:24 ID:vXex9itW0
>>966 Cocoaですらないけど
tell application "QuickTime Player"
activate
export document 1 to "/適当な保存パス/export.m4a" as iTunes using default settings
end tell
とかをアプリケーション化した方が早くないか?
977 :
名称未設定 :2009/01/12(月) 23:40:47 ID:+pmYHhCA0
>>919 マジレスすると初期のCコンパイラはバイナリではなく、アセンブラソースを
吐いた。
まあ、Objective-CコンパイラもバイナリではなくCソースを吐いたがね。
978 :
名称未設定 :2009/01/13(火) 00:00:47 ID:XA9bEvhQ0
979 :
名称未設定 :2009/01/13(火) 00:10:46 ID:X8Fw6Fwq0
>>966 です。
>>974 kQTFileTypeMP4もあるのですが、動画部分もあればエクスポートされてしまいます。
>>975 さんの言うような、内部的にビデオトラックを削除してエクスポートすれば行けそうなのですが、
QTTrackの削除方法がわからず。
>>976 さんのようにappleScriptでもいいのですが、ドロップして一括とか、変換設定もできたら
いいなとcocoa化にチャレンジしています。
980 :
名称未設定 :2009/01/13(火) 00:21:25 ID:rzo4bgLj0
>>979 AppleScript でドロップレットすりゃあええやん……
激しくスレチスマソ
981 :
名称未設定 :2009/01/13(火) 01:08:14 ID:X8Fw6Fwq0
>>980 まあそうなんですけどね。
調べたら意外とあっさり行けました。
// QTMovieからサウンドトラックのみをエクスポートする。
NSArray *tracks = [movie tracks];
int i;
for(i = 0; i < [tracks count]; i++){
// QTMediaTypeSound以外のQTTrackを無効にする
if([[[tracks objectAtIndex:i] media] attributeForKey:QTMediaTypeAttribute] != QTMediaTypeSound){
[[tracks objectAtIndex:i] setEnabled:NO];
}
}
あとは
>>966 のコードを組み合わせて書き出し。
ただ、これだと44.1KHz/ 128kbps固定なのであとは調べます。
いろいろヒントありがとうございました。
982 :
名称未設定 :2009/01/13(火) 02:17:50 ID:XVq5hGo60
自作アプリから別のアプリにメソッドを実行させたり、もしくはキーコマンドを送ったりはできますか?(⌘Dなど) AppleScriptだとかなり制限があるので他にそういった方法はないのかなと思いまして。
983 :
名称未設定 :2009/01/13(火) 03:42:23 ID:+jGRHSnD0
任意のオブジェクトをさわるっていうのはセキュリティ上の問題もあるしなかなかむずいだろ。キー入力を送るぐらいはインプットマネージャ書けばできるとおもうけど。
984 :
名称未設定 :2009/01/13(火) 04:03:59 ID:H0hDNQK00
AppleEventかInputManagerハック
985 :
名称未設定 :2009/01/13(火) 09:15:22 ID:OaO9RHfv0
ui部品の初期化として あちこちからawakeFromNibを呼び起こしているのですが・・・・ 問題ありですか? initだと駄目だから苦肉の策かなと思っているのですが。
986 :
名称未設定 :2009/01/13(火) 09:29:06 ID:BGIuO9i10
>>985 nibで初期化されるオブジェクトはinitではなくinitWithCoderを使う。
987 :
名称未設定 :2009/01/13(火) 09:40:51 ID:Odul5VRs0
>あちこちからawakeFromNibを呼び起こしているのですが・・ あちこちからって、意味が分からないのですが。 1つの部品のawakeFromNibをそんなに何回も呼ぶのか?
988 :
名称未設定 :2009/01/13(火) 09:45:49 ID:OaO9RHfv0
>>986 無事解決しました。
この辺のAPIはノータッチできたので、これから少しリファレンスを読んで調べてみます。
本当にありがとうございます。
989 :
名称未設定 :2009/01/13(火) 10:19:13 ID:BGIuO9i10
990 :
名称未設定 :2009/01/13(火) 10:57:57 ID:f46B+cww0
>>989 ごく当たり前のことだが、つまづく人は結構いそうだね。
事例の場合は、複数回呼ばれないと困ることもあるから
複数回呼ばれるのは正しい動作だと思うけど。
991 :
名称未設定 :2009/01/13(火) 11:14:43 ID:Czh9gure0
あちこちからと言う表現がプログラミングスレには不適切かと。
992 :
名称未設定 :2009/01/13(火) 11:21:32 ID:BGIuO9i10
表現厨があらわれた
993 :
名称未設定 :2009/01/13(火) 12:29:40 ID:XVq5hGo60
>>983 , 984
ありがとうございます、調べてみます
994 :
名称未設定 :2009/01/13(火) 15:19:25 ID:YqDA0fDL0
NSFileHandle使ってreadlineのコード書いてたら単純そうでなかなか面倒だった readline位は実装しててほすぃ
995 :
名称未設定 :2009/01/13(火) 18:26:48 ID:oXhyJ1WE0
一喝して読み込んで改行で配列にしてまわす。
996 :
名称未設定 :2009/01/13(火) 18:53:06 ID:+jGRHSnD0
997 :
名称未設定 :2009/01/13(火) 18:58:18 ID:8r7GE9ie0
「なめんなよ!」と蹴りを入れて喝を入れることから始める
998 :
名称未設定 :2009/01/13(火) 20:01:44 ID:YqDA0fDL0
>>996 もう動いてるからいいんだけど、その方法でもいいな。
999 :
名称未設定 :2009/01/13(火) 22:28:58 ID:TtNlCCCM0
1000 :
名称未設定 :2009/01/13(火) 22:41:09 ID:JOSXnRSV0
[Cocoaはさっぱり!!! version.11 release];
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。