Cocoaはさっぱり!!! version.11

このエントリーをはてなブックマークに追加
416名称未設定
マックから異なるサーバに
メッセージを書き込みに行くときに
日本語が含まれていると、かなり酷い文字化けして格納されるよね。

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
なんか Cocoa じゃないですね、皆様失礼しました。Mac でプログラミングスレ
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
に移動しましょう。以下返信はそちらにします。
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
>>448

なるへそ!

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/が開く。
462457: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を作り直した方が早いかもしれない。
467464: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で実行した時点でスクロールバーが消えてますか?
469464: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
あるいはデータソースを呼び出すメソッド名を間違えてるとか。
デリゲートとか、非形式プロトコルだとそーゆー場合はエラーでないよ。
472464: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
端的に言うと山盛り一杯?

一口にコントローラって言っても色々有ったりします。
これどうぞ。
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/AppArchitecture/

http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/
「Cocoaのデザインパターン」の「Model-View-Controllerデザインパターン」
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でなんかなかったっけ?
483472:2008/12/02(火) 20:50:22 ID:if+xUuvJ0
>>478さん
XCodeは3.1.1 OSは10.5.5、どちらの最新のはずです。
関係する所だけを集めたちっちゃいプロジェクトを作りました。
http://gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=743
DLKeyは table です。
よろしくお願いします。
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 とのタイミングとの問題もなくなると思うし、
コードも二三行短くなるかな...
488472: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
>>492
NSViewから派生させたクラスで、mouseDownメソッドをオーバライドしたってこと?

なら、IBで、ウインドウにCustomView貼って、クラス名を変更すれば動くはず。

カスタムコントロールについては、
ttp://www.stripe-net.jp/cocoa/documents/chapter2/chapter2-1.html
が分かりやすかったです。
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だけだったっけ?
496494: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
>>499
できました。
ありがとうございます。
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
>>503
>>459の人かw
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
>>516
オマエモナー
520名称未設定:2008/12/08(月) 16:46:07 ID:0OjgUTpN0
>>519
王道なんだが、ちょっとは自重しろw
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
>>522
お前のレスが一番キモチワルイよw

>>525
過去ログにあるよ
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使うと自動でやってくれたと思う。
529527: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
まさか>>544>>492,498と同一人物じゃあるまいな。
549名称未設定:2008/12/10(水) 01:00:06 ID:2N5XkSrD0
>>492,498は>>547です・・・・・私です。

えーそれならって思って・・・
550548:2008/12/10(水) 01:22:42 ID:6aI1OQjr0
>>549
目的は>>500なんでしょ?
もはややり方が回りくどすぎて意味不明になってるよ。
世の中のCocoaアプリがコンテクストメニュー一つ出すのにそんな回りくどいコード書いてるわけないのは分かるでしょ。
だったら方法が間違ってることも分かるでしょ。
そこで方法を質問しないで、自分が考えたトンデモ解決法を実現しようとして、その過程で行き詰まって質問したところで
まともなアプリは出来ないよ。
551548: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使う事になるよ
558544: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とで
微妙に挙動が違うとか、マジ勘弁。
565548:2008/12/10(水) 14:27:13 ID:xSuG9smw0
>>562
Coral使えばいいじゃん。
http://hmdt.jp/coral/index.html
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から呼び出す方法をとったわけです。
573566:2008/12/11(木) 20:15:07 ID:aKreviH/0
>>569
ありがとうございます。
自分で判断がつくまではおいておくことにします。
574名称未設定:2008/12/12(金) 03:44:47 ID:IpphkAOm0
Objective-C / Cocoaで、
http://mac.hitobashira.org/up/src/maka0123.png
このように、非同期の処理が終わる間、呼び出し元のメソッドAを待機させたいのですが、
方法はあるのでしょうか…
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
>>585
解析しなくてもコード書くときに気づけ
587名称未設定:2008/12/14(日) 00:39:03 ID:u82y2nJj0
>>585
http://clang.llvm.org/StaticAnalysis.html

使ったこと無いので、詳細不明。
エロイ人のレポ期待。
588名称未設定:2008/12/14(日) 02:03:29 ID:0NmjHAe60
>>579
NSTableViewの行に指定したURLから取ってきた画像を表示させたいのですかね?
でしたら、>>584で指摘されているやり方でWebViewを使わずに、NSURLConnectionで
非同期にデータを取得してNSImageを作成することもできます。

NSURLConnection (非同期) [1]
http://www.geekpage.jp/programming/macosX-network/NSURLConnection-async-1.php


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
>>595
クリスマス前はビンビンだな
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
>>597
全く同じ質問がされている。
http://www.mailinglistarchive.com/[email protected]/msg13520.html

2番目の回答ではインストールし直せとかかいてあるけど、
一度全部読んでみて。
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
>>605
http://www.digitalsanctum.com/2008/10/04/xcode-cant-exec-developerlibraryxcodeplug-inscorebuildtasksxcplugincontentsresourcescopystrings-no-such-file-or-directory/

上記のサイトですね。
最初コレを見つけたんですけど、rubyなんて使ってないだろうと思って・・
解決してよかったです。
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
>>613
option+\でよい?
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:]
を参照。
632629: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
>>665
ありがとございます。試してみます。
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
日本語前提でHMDT系じゃない本で情報がup-to-dateなものはこれくらいしか思いつかないなあ...
作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全
http://www.amazon.co.jp/exec/obidos/ASIN/4048676075/
執筆はPeopleに連載持ってる柴田さん。
680名称未設定:2008/12/23(火) 22:25:53 ID:JS+9dWrN0
参考書無しのネットだけでここまで来たぜ!
で、自作の電卓が動かないんですけど。
681名称未設定:2008/12/23(火) 22:33:54 ID:hxngkr3k0
>>680
デバッグしる。
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
>>683
よろしいのでしょうか?

でふいた
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
>>689
起動しないのに完成させたとは?
691名称未設定:2008/12/24(水) 21:11:18 ID:2Q4M0dVc0
>>689
チュートリアルだけ呼んで、動きもしないプログラムを書くぐらいなら君にも出来るさ
692名称未設定:2008/12/24(水) 23:19:17 ID:PMjOK3gJ0
>>691
さすがに芸人を呼ぶのは難しいだろw
693名称未設定:2008/12/25(木) 01:01:09 ID:DWj5DZ1R0
>>689の言いたいことはわかるぞ。わかる。
694名称未設定:2008/12/25(木) 02:34:18 ID:Nt+Z4c6J0
>>689
起動しなきゃ理解してないってことじゃん。
それって単にオブジェクト指向プログラミングのテクニックを知ってるってだけじゃないの?
695名称未設定:2008/12/25(木) 10:18:41 ID:WmzR4NXU0
>>692
お前キングコング並みに寒いぞ
696名称未設定:2008/12/25(木) 11:11:30 ID:92TaARB20
>>695
ザ・パンチに失礼
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
>>699
逆で、Obj-Cのオブジェクトの実装がxxxRef。…の場合が多い。
http://journal.mycom.co.jp/column/objc/038/index.html
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
>>707
No Skin
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
アンカーミス、>>711です
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。
722671: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
>>738
ttp://aerial.st/2ch-log/cocoa/cocoa-005.html#res735 あたりが参考になるのでは。
これはNSSearchField中で↓キーが押下されたときにメニューを表示してるけど、
やることは同じだと思う。
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にとっては、配列に追加/削除された項目を知ってもしょうがないです。
画面にリストなんかを描画するために、常に配列全体を要求するでしょう。
750747: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
>>749-750
根本的に話が噛み合ってないよ

>>751-752
まさにそういう事
754名称未設定:2008/12/29(月) 08:13:23 ID:Y2X+4dQpi
あ、レス番間違えた
でもわかるよね
>>749,751と>>750,752ね
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でできました。なんでこんな方法に・・・
791787: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
>>791
まずはリファレンスを一読することをお勧めします。英語の方が読みやすいですが。
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/

参照カウントを用いたCocoaのメモリ管理については、ここによくまとまっています。
http://wwwa.dcns.ne.jp/~nito/CocoaClub/index.html

クラスメソッド、とくにファクトリメソッドと呼ばれるメソッドで返されるオブジェクトは基本的にautoreleaseされているものとして
考えて間違いありません。
例えば[NSString string]などですね。
これは自分でファクトリメソッドを作るときのことを考えれば理解出来ます。

あと@""で作られるNSStringはさらに少し特殊です。基本的に通常のNSStringと同様に扱うべきですが、
実際にはオブジェクト定数と呼ばれる解放されないオブジェクトです。
793名称未設定:2009/01/02(金) 21:43:21 ID:7tH047C60
自分でallocを記述しない限りreleaseを気にすることはないないなあ。
allocしてもautoreleaseで勝手にしてちょ状態だし。
794787: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
>>809
無職に言ってるのか?
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
要はクラッシュしてるんだからデバッガに接続されるでしょ自動的に。
スタックトレースはどうなってるの?
823819: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回呼ばれるんだが…

なんじゃこりゃ。
836835: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は呼ばれない
845843: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とのバインドを切り替えたいのですが・・・・・。

846843:2009/01/07(水) 18:24:33 ID:HhZ+tLxQ0
>>844
あーそうか。
そうですよね。

てことは全然的外れなのか。
847843: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
>>848
> 直接結びつけたらMVCにならんでしょ。

どちらかというと、ViewとModelを直接結び付けるのが、本来のMVCです。
間にControllerが入るのはCocoa独自のものです。

ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/chapter_5_section_4.html


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
>>861
ウム。
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
>>791
こっちへ移動してください。
http://pc11.2ch.net/test/read.cgi/mac/1224960170/
866名称未設定:2009/01/08(木) 10:15:44 ID:0jGZjHE+0
>>865は誤爆です。
申し訳ございません。
さて791さん。

このサイトをdeallocを直接呼び出してはいけないその理由は下記のサイトを読んでいただければ
分かると思いますが、
http://en.wikibooks.org/wiki/Programming:Cocoa/Objective-C_basics#Defining_initializer_and_deallocator

端的に言えば、releaseする際に勝手に呼ばれるという理由だったと思います。
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
新しい柴田本。誰か買うかな、誰も買わないかな? 一応、情報求む。

作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全 (MacPeople Books)
ttp://www.amazon.co.jp/gp/product/4048676075/ref=pe_2102_11225132_pe_snp_075
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は意識しなくなるんだけどね。
878874: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
そうですね。
メモリーリークの使い方が違います。すみません。

889874: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
>>881が全てじゃない。
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
この豹変ぶり
898874: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
まずはちゃんとドキュメント読まずに思い込みでコード書くのをやめないと。
901874: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されるなら、循環参照しただけでそのオブジェクトたちは解放されないことになるでしょう。
また自分自身を参照したらそのオブジェクトは解放されないことになりますが。そのような設計をすると思います?
903874: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
>>897
>>896は別人w。
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
>>916
タイトル教えて!
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
>>917
http://www.amazon.co.jp/NEXTSTEPプログラミング―オブジェクト指向プログラミング入門-アレックス・D-ニェム/dp/4931356079
たぶんこれだったと思うけどちょっと今正確かどうか保証できない
後日でよければ確かめて書き込んどくけど
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
>>927
夕食に食べた焼肉フイタ
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
>>934
FutureBASICを使え
936名称未設定:2009/01/10(土) 17:46:22 ID:Zc741NJa0
ttp://4toc.com/fb/index.htm
5.1.3まで出ているな。
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
>>932
名前を変えて残ってるよ。
ttp://www.stagecast.com
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
>>945
証拠うp!
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
今Apple Confidential引っ張りだしてきて思い出したけどPowerPC移行時にAppleは当初開発ツールの開発をSymantecにRainbowというコード名で依頼していたんだったな。
Symantec PowerMac tools featured in new subscription CD-ROM release.
http://www.allbusiness.com/technology/computer-software/485557-1.html
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
>>950
これはひどい
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
>>975
プログラミングのスレで何やってるの
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
新スレ

Cocoaはさっぱり!!! version.12
http://pc11.2ch.net/test/read.cgi/mac/1231853172/
1000名称未設定:2009/01/13(火) 22:41:09 ID:JOSXnRSV0
[Cocoaはさっぱり!!! version.11 release];
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。