1 :
名称未設定 :
03/09/12 00:47 ID:8ue/kw6d
2 :
名称未設定 :03/09/12 00:51 ID:8ue/kw6d
3 :
名称未設定 :03/09/12 00:54 ID:xFtJ+SdA
4 :
名称未設定 :03/09/12 01:01 ID:VMDyLOXV
[
>>1 sendMessage: "乙" ];
5 :
名称未設定 :03/09/12 01:19 ID:QACoJ0KQ
6 :
名称未設定 :03/09/12 01:27 ID:BOCgM/4R
7 :
名称未設定 :03/09/12 08:11 ID:Rs5hdxNu
8 :
名称未設定 :03/09/12 14:06 ID:KdDjq9P/
>7 option-M押しても、前単語選択にしかならへん。
9 :
7 :03/09/12 21:40 ID:Rs5hdxNu
10 :
名称未設定 :03/09/14 00:28 ID:5a/4RCFa
[[NSThread currentThread] age];
11 :
名称未設定 :03/09/14 07:32 ID:WZrztSl9
NSWindowControllerを継承したクラス内で [window setTitle:@"hogehoge"]; としたら、 そんなもんいきなり使うっていわれてもなー。 といわれましたがなぜなんでしょう? 同じメソッド内で [self showWindow:self]; が通るのに、不思議。 どちらも継承元のNSWindowControllerで定義されているので 継承したオブジェクトからも使えそうなもんですが。 もしかしてprivateなOutletなのかな?
12 :
名称未設定 :03/09/14 08:12 ID:4t5YX5+h
>>11 [[self window] setTitle:@"hogehoge"];
なら怒られずに通るような気も。
13 :
名称未設定 :03/09/14 08:13 ID:4t5YX5+h
NSFileManager を使ってファイル操作をしようとしています。 この際、Finder で不可視のファイルについては操作を加えないようにしたいのですが、 可視/不可視を判定する良い方法は無いでしょうか。
14 :
名称未設定 :03/09/14 09:36 ID:ucWzBMQu
ヲレも今、FileManagerを読んでいるところなので質問。 ファイル一覧の習得 必要なファイルの確認 一覧をユーザーに掲示 選択されたファイル群を順に処理。 って結局、NSStringファイル名で各行程を受け渡していくしかないのでしょうか?
15 :
名称未設定 :03/09/14 11:31 ID:5a/4RCFa
>>13 componentsToDisplayForPath:
は駄目だったの?
>>14 話が見えにくいんだが、どう困ってるんだ?
16 :
名称未設定 :03/09/14 21:40 ID:WZrztSl9
>>12 ごめんよ、書いてからすぐにクラスブラウザ眺めてて気づいたよ…
でもInterface Builderだとアウトレットのところにwindowって書いてあるのはなんでだろう…
17 :
名称未設定 :03/09/14 21:43 ID:WZrztSl9
ついでに質問しまっするが - (id)initWithFile:(NSString *)aFile { self = [self init]; // ←ここでinitWindowNibNameなどを呼び出してる [[self window] setTitle:aFile]; return self; } とやったとき、aFileをretainする必要はありますか? つまりはsetTitleした時に、ポインタをコピーするのか、それとも 文字列自身の複製を行うのか、どっちなんでしょうかねということなんですが。
18 :
名称未設定 :03/09/14 22:55 ID:7iGV5H+O
>>17 >とやったとき、aFileをretainする必要はありますか?
ないよ。というか、この場合はレシーバ(NSWindow)側が copy / retain
しなくてはならない。どっちをやってるかは分からないし、関係ない。
いやまあ、俺様も同じことで悩んだのだけれど。
19 :
名称未設定 :03/09/16 17:30 ID:PfhTi4Pw
>>16 NSWindowControllerのリファレンスをよく読もう。
-[NSWindowController window]メソッドを呼ぶまではnibがロードされないのです。
だから、いきなり[window setTitle:@"hogehoge"]とかやっても「そんなもんいきなり
使うっていわれてもなー」ということになるのだ。
20 :
名称未設定 :03/09/18 20:08 ID:DyN3ww9w
>19 いや、そうじゃなくてNSWindowControllerの宣言が @private NSWindow *_window; になってるからなんだけど。 IBは_windowとか_delegateとかの_を削除するようなしないような不思議な実装になってたよ。 自分で作ったIBのPaletteに_delegate付けたら delegateと_delegateが同時に現れて変なことになった記憶がある。
21 :
名称未設定 :03/09/18 21:44 ID:i0AO7t69
Cocoa・・・Cocoa・・・・・・。 そういや昔、今のSqueakの原型みたいなのが Cocoaって名前でAppleから出てなぁ・・・。 ふと思い出したのでCocoaスレでネタフリしてみるテスト
22 :
名称未設定 :03/09/18 22:20 ID:E7zkIKcG
23 :
20 :03/09/18 23:37 ID:DyN3ww9w
24 :
名称未設定 :03/09/19 13:51 ID:c7PL/2LH
>>21 CocoaとSK8とまだウチのHDDに残ってる(藁
が、あんま関係ないぞ(w
25 :
名称未設定 :03/09/19 20:04 ID:5eXeIJxQ
なんだ、関係ないのか。(´・ω・`)
紛らわしい名前付けんなよ > Apple。
しかしながら、
>>24 のディスク内を
しばらく探険みたいなぁ・・・。ドキドキ
26 :
名称未設定 :03/09/21 11:36 ID:L1OOQJIW
[[NSThread currentThread] age];
27 :
名称未設定 :03/09/23 01:42 ID:4CYZpi1Z
サーバー側がNSFileHandleConnectionAcceptedNotificaionを使って接続を 受け付ける場合、接続された時のクライアントのアドレスを知る方法って なにかありますか?
28 :
さっぱり :03/09/29 17:57 ID:5dAeGj01
29 :
名称未設定 :03/09/29 21:51 ID:Q/6ho6ad
>27 Unix的手法ですがgetpeername(2)を使えばいいと思う。 #include <sys/socket.h> #include <netinet/in.h> int socket = [filehandle fileDescriptor]; struct sockaddr_in addr; int length = sizeof( addr ); if( (getpeername(socket, (struct sockaddr*)&addr, &len)) < 0 ) { // error } else { NSLog(@"address->%s¥tport->%u", inet_ntoa(addr.sin_addr),ntohs(addr.sin_port)); }
30 :
名称未設定 :03/09/30 16:25 ID:QtzbCLLW
プログラム側から自身のアプリを終了したい時はどうすればよいのでしょうか? NSTerminate:Nowみたいなのがあるのでしょうか?見つけられません。 1アプリ終了を通知(ここが分かりません。誰に何を送れば良いの?) 2「ほんとに?」のダイアログ表示 (NSRunAlertPanelかな?) 3windowを全て閉じる(窓位置を保存) 4後始末処理(applicationWillTerminate ??) 5終了 (??) みたいな流れになる予定。
31 :
名称未設定 :03/09/30 16:57 ID:Our0Qs9+
[NSApp terminate:nil]でいいんでないの?
32 :
名称未設定 :03/09/30 17:11 ID:xieOMbY1
>>30 >>31 +applicationShouldTerminate:だな。
NSApplicationクラスを調べれ
33 :
30 :03/09/30 18:12 ID:QtzbCLLW
ありがとうございます。 NSAppというオブジェクトがあるわけですね しらべてみます。 あと、 applicationWillTerminate: applicationShouldTerminate: の区別がつかないかも
34 :
名称未設定 :03/09/30 18:20 ID:DbNBm54R
35 :
名称未設定 :03/10/01 02:07 ID:QlbhOD5f
さぁ、盛り上がって参りました
36 :
名称未設定 :03/10/06 21:43 ID:9PyVqaRO
厨な質問ですいません。 秋の夜長にCocoaでもと思い、全く知識が無いままCocoaのお勉強をしようと思う んですが、今買うとすればCocoaはやっぱり!でしょうか、それともHMDTでしょ うか?それとも、それ以外でしょうか?教えてください。
37 :
名称未設定 :03/10/06 21:59 ID:qFbHEZim
後発の強みとしては HMDT かなぁ。 あとは荻原本。
38 :
名称未設定 :03/10/06 22:30 ID:Fvl4aF9p
ヒレガス本もオススメ。
39 :
名称未設定 :03/10/06 22:34 ID:qFbHEZim
あとは Cocoa のヘッダファイル。 あれが読めないと自分の作りたいものは作れない。
40 :
名称未設定 :03/10/06 23:02 ID:lZ74qdJw
英語が読めるならO'reillyのLearning Cocoa with Objective-C 2nd Edition。 内容的にはヒレガス本より初心者向け。 ひとつひとつのチュートリアルが短くて勉強を進めやすい。 ステップアップの仕方もいい感じだし。 初版のイメージでこの本を見ないように。 一から書き直した全く別の本だから。
41 :
36 :03/10/07 19:34 ID:lzpDd0V+
>>36-40 ありがとうございます。昨日、部屋を掃除してたら3500円分の図書券が発掘された
もので(w
早速書店で見てきたいと思います。もっとも、田舎なんで全部見れるか分かりませ
んが…お世話になりました。m(_ _)m
42 :
名称未設定 :03/10/12 15:09 ID:3jXCimTH
43 :
名称未設定 :03/10/14 18:56 ID:1AUSNjMU
どうもコンパイルが遅いと思ったら、GCCコンパイラ設定の コンパイラのバージョンでは切り替わってなくて、コマンドラインから gcc_selectしたらちゃんとプリコンパイルが効くようになってゲキ速になった。 漏れんとこだけかな。
44 :
名称未設定 :03/10/15 09:15 ID:EiOngqDO
Cocoaで新しいフォルダを作るときは、 Carbonの助けを借りないといけないの? あと、使用できるファイル名の最大長はいくつなのでしょうか? 日本語フォルダ名の処理もさっぱりでつ。
45 :
名称未設定 :03/10/15 09:53 ID:aL5cN4ii
>>44 フォルダを作るにはNSFileManagerのcreateDirectoryAtPath:attributes:を
使うといいと思うよ。ファイル名の最大長は256?
46 :
名称未設定 :03/10/15 13:49 ID:EiOngqDO
>45 助かりました。Cocoaのドキュメント探索に、まだ慣れなくて //CocoaBrowserが、全検索に対応してくれれば、ありがたいのですが。 あと、ファイル名長さは、ファイルシステム依存なようなので、 さがしてみます。
47 :
名称未設定 :03/10/15 21:55 ID:bHi6IZfN
48 :
名称未設定 :03/10/16 09:35 ID:QvP+XpxJ
>47 ちらっとみたけどどうだかなあって感じ。 id型をオブジェクト型みたいな書き方してるけどそうじゃないだろ。 なんかObj-Cを誤解されそう。
49 :
名称未設定 :03/10/18 13:28 ID:IqG902TP
logファイルリーダーでファイル一覧を出す部分で詰まってます。 ヘッダだけ読み込んで種類別に一覧をだすのですが、ファイル数が 数10になった時点で長時間虹色カーソルになってしまいます。 多数のファイル(の先頭数バイト)を読み込む時のコツってありますか? セーブプログラム側は、1日に何度かログファイルを作成するプログラムです。 日付け+カウンタでファイル名を決定してセーブしています。 参考になりそうなプログラムソースを探たのですが、Carbonしかみあたらなくて。 似たような実装しているはずなのに。CarbonとCocoaで速度が違う?
50 :
名称未設定 :03/10/18 15:37 ID:troFacQ3
>>49 こんなのだろ?
for (i = 0; i < [array count]; i++) {
NSFileHandle *h = [NSFileHandle
fileHandleForReadingAtPath:[array objectAtIndex:i]];
NSData *d = [h readDataOfLength:16];
[h closeFile];
NSLog(@"%@\n", d);
}
ファイル数1000でG4/400で5秒くらいだったぞ。
時間がかかるのは何か別のとこだろうな。
ファイル数を極端に増やして、Sharkで調べれば一発で分かるぞ。
apple chud sharkでぐぐってみ。
51 :
名称未設定 :03/10/18 16:25 ID:AT68cfvn
>49 -(void)readLogAtIndex:(NSNumber*)indexNum { unsigned index = [indexNum unsignedIntValue]; id log; if( 0 > index || index >= [logsArray count] ) return; log = [logsArray objectAtIndex:index]; ... [self performSelector:_cmd withObject:[NSNumber numberWithUnsignedInt:index + 1] afterDaley:0.0]; } とか。
52 :
49 :03/10/21 21:47 ID:B3t2pI4n
>50,51 ありがとうございます。 どうやらファイルの処理だけにすると、短時間で済むようです。 表示更新関連の処理がまずいのかもしれません。 CHUDインストールしたのですが、まだ原因追跡中です。
53 :
名称未設定 :03/10/25 22:46 ID:LjLKkzJ6
だれかNSSearchFieldの解説して〜
54 :
名称未設定 :03/10/25 23:17 ID:LAgJLJNR
>>53 メソッドはrecentSearches関係しかないじゃん。
あとはNSTextFieldと同じように使える。
カスタマイズしたいんだったらNSSearchFieldCellを使えばよさげ。
55 :
53 :03/10/25 23:26 ID:LjLKkzJ6
カスタマイズしなきゃいけなさそうなんで、がんばって-setSearchMenuTemplate あたりを読んでみますー。
56 :
名称未設定 :03/10/26 14:20 ID:Z08cHU7n
いくら試してもデバッグシンボルを作ってくれない・・・。 プロジェクトを選んで、インスペクタ→スタイル→デバッグシンボルを生成する で、いいんだよね??
57 :
名称未設定 :03/10/26 15:27 ID:Sc1yCy2Y
>56 その逆でデバッグシンボル外せない。。 古いプロジェクトだからか?
58 :
名称未設定 :03/10/26 21:56 ID:LKDRLUQM
>>56 とりあえず、コンパイルフラグに-gを入れておけば?
>>57 この場合はあとでstripするしかないかも。
59 :
名称未設定 :03/10/27 00:14 ID:VuyA3xy8
製作途中のプロジェクトファイルを Xcodeに乗り換えるときの注意とかありますか?
60 :
名称未設定 :03/10/27 01:50 ID:t0eHMPlt
>>59 従来のProjectBuilderのターゲットとXcodeネイティブのターゲットがあって、ターゲットをアップグレードするといろいろ新機能が使えたりするらしい。
61 :
名称未設定 :03/10/27 01:54 ID:gshUILbp
Pantherの開発環境にはWebkit SDKはデフォで入ってるの?
62 :
名称未設定 :03/10/27 06:45 ID:6/w/szGf
>>61 入ってる。
アップグレードしたら挙動が変わってしまった。直さなきゃ。
63 :
名称未設定 :03/10/27 18:48 ID:wnDTzYZU
64 :
名称未設定 :03/10/27 19:18 ID:dL5Q4fuk
C++の場合、"戻値の型 クラス名称::メンバ"の形式で記述します。 この"::"が非常に美しくありません。 一体何なのでしょうか? 何故に"::"を選んだのか私には全く理解出来ません。 4個の"黒点"が均等に並んでいます。 :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: 殺戮凶器に昆虫の大群です。 不気味極まりないですね。 考えているうちに寒気がしてきました。 ……精神病院行った方が良いと思う。
65 :
名称未設定 :03/10/27 19:22 ID:gN9jSAWF
>>63 狂ってるなw
だが着目点はなかなかおもしろい
66 :
名称未設定 :03/10/27 20:53 ID:euR+kMdl
このWebページには理不尽な表現及び不可解な内容が含まれています。 あなたの健全な精神と平穏な社会生活に悪影響を及ぼす場合があります。 このWebページはリンクフリーですが、 過去に大量投稿による荒らしを受けた経緯がありますので 2ch BBS関連の掲示板にはリンクを張らないでください
67 :
名称未設定 :03/10/27 21:28 ID:QvyjIU96
前スレの終わりのほうで馬鹿にされてた日記があったな
68 :
名称未設定 :03/10/27 21:39 ID:gVY3dPF1
>>63 太陽神のOS
OpenWindowsセッションを開始するとまず、蒼く晴れ渡った画面に
将来のバージョンでは OpenWindows 環境は
サポートされなくなります。
CDE(共通デスクトップ環境)に移行することをお勧めします。
なんとも悲しげな悲壮感漂うメッセージが表示されます(fig5)
OpenWindowsの開発者は手塩に掛けて育て上げたOpenWindowsの打ち切りが決まり
このメッセージを表示するコードを書いた時、どんな気持ちだったのでしょうか。
ほの暗い深夜のオフィスでエディタに向かって最期のメッセージを打ち込む
最期のプログラマの寂しげな後ろ姿が目に浮かび、私は目頭が熱くなりました。
もらい泣きしちゃったYO!
脱線スマソ
69 :
名称未設定 :03/10/27 22:36 ID:RMUURkD0
正直萎えた。。
70 :
名称未設定 :03/10/27 23:02 ID:vJrRsZnR
イカ
71 :
名称未設定 :03/10/28 19:49 ID:+PIFsiv5
ネタを書くためにこれだけ勉強するという行為がネタだな。w
72 :
名称未設定 :03/10/28 20:40 ID:oqJwi6pV
粉末はなぁ(藁 まぁ、M橋みたいな一見あれな物で毒電波垂れ流してる奴よりはいいけどな。 最初っから毒電波って謳ってるわけだし(藁 でも、Objective-Cに関して着眼点は面白いかもしれないってのだけは同意しとく(w てか、こいつも歴史認識がいい加減なんだよなぁ(w
73 :
名称未設定 :03/10/28 22:36 ID:S7AYvpIG
すげぇ
74 :
名称未設定 :03/10/29 00:10 ID:eyc+9Iff
>そもそも私の頭は十代から叩き込まれたCOBOLとアセンブラでガチガチになっていますので 日本で一番モチベーションの高いCOBOLerだなw 別ページでObjective-C使ってMotif使ってたが、アレもある意味すごいw
75 :
名称未設定 :03/10/29 01:26 ID:IBofPNMx
プログラマー板以外でCOBOLerの文字列をみかけるとは……
76 :
53 :03/10/29 01:48 ID:2Bd9N9OH
NSSearchFieldで苦戦中。 プレースホルダーを変えようとして - setPlaceholderString: を呼ぶとselector not recognized になる。NSTextfieldでも同じ。ちゃんとヘッダファイルからコピペしたからスペル違いじゃない はず。なんでだろ。 あと、IBでサーチ範囲のメニューと最近の検索を組み合わせたNSMenuをsearchMenuTemplate としてくっつけてみると、resentsが追加されるたびにmenuItemのstateがリセットされるから、 ユーザの選んだサーチ範囲の保存に役立たない・・。しかも後でsearchFieldにくっいている メニューを取得する方法もないっぽい。 サーチ範囲のメニューを選ぶと、選ばれたメニューアイテムのみにチェックをつけ、後の サーチの時にチェックのついてるメニューアイテムはどれかを調べてその範囲でサーチする、 という実装を目指しているのだけどうまくいきません。 何かヒントがあれば教えてくださいー。
77 :
名称未設定 :03/10/29 19:13 ID:bCcw8BSC
オリジナルのフォントを/Library/Fontsや~/Library/Fonts以外の 任意の場所(Application.app/Contents/Resourcesとか)に置いて使う にはどうすればいいんでしょうか?
78 :
名称未設定 :03/10/30 07:43 ID:i+2L5WC/
>77 エイリアスを置くくらいしか思い付かん。
79 :
53 :03/10/30 14:46 ID:Xnho0X1L
あいかわらず、プレースホルダーが変えられません。 setPlaceholderStringを使うには何か前準備が必要なんでしょうか・・・ みんな使えてるの?
80 :
名称未設定 :03/10/30 15:26 ID:IEd9v5t8
>53 しゃぁねぇなぁ。 そのメソッドを宣言してるクラス名を目をかっぽじってよく見ろ。 継承関係もよく確認しろ。
81 :
53 :03/10/30 21:19 ID:Xnho0X1L
>>80 ありがとう、ありがとうございます!
[ [textField cell] setPlaceholderString:@"anString" ]でいけました。感激です。
思い込みって怖いな・・。
あと、メニューから検索範囲を選ぶというのも解決しました。
IBでsearchFieldにMenuTemplateとしてくっつけたメニューにACTIONを設定し、そのアク
ションメソッドの中でMenuTempleteの中のsenderに対応するMenuItem自体にチェックを
つけて、実際に検索する段階ではMenuTemplateの中をどのMenuItemにチェックがついてる
かを確認してその範囲で検索します。
ただ、MenuTempateにチェックをつけるだけでは、現に表示されているメニューには
チェックがついていないので、[sender setState:NSOnState]で、そこにもチェックを
つけておきます。
次からそのメニューにRecentsが加わって更新される際には、MenuTemplateにつけた
チェックがつかわれるので適切に表示されるはず。
・・これでいちおう動いたけど、間違ってたらごめんなさい。
82 :
名称未設定 :03/10/30 21:23 ID:NoFrTNj3
XCode でプレフィックスヘッダファイルの名称を変更するには どうしたら良いのでしょうか。 単にファイルの名称を変更しただけでは、 ビルド時に「Missing file or directory: Hoge_Prefix.h」というエラーが出るので、 何処かで設定を変更しなければならないのだと思いますが、 何処で設定したら良いものか分からないのです。
83 :
名称未設定 :03/10/30 22:35 ID:PzWqXuSo
>>82 プロジェクト->情報を見る->ビルド->プレフィックスヘッダ
では?
84 :
名称未設定 :03/10/31 08:06 ID:RCFiV/y6
XCodeって書くやつ大杉。
85 :
名称未設定 :03/10/31 15:55 ID:RF5UB+yc
すいません、質問させてください。 NSSoundを使ってサウンドをループさせて鳴らし続けるアプリを作ろうと思うんで すが…どうすればサウンドをループさせられるかさっぱり分かりません。 バンドルされたサウンドを、playで再生し、stopを押すまでループさせ続けるとい う感じのアプリです。 一応コードを書いてみたものの動かしたら止まってしまいました… 聴かぬは一生の恥なんで、右も左も分からないまま書いたコードを貼ります。 #import "application.h" @implementation application int stopsound; - (IBAction)play:(id)sender { NSSound *mySound = [NSSound soundNamed : @"sound.aiff"]; stopsound = 0; while(stopsound = 1) {[mySound play]; } } - (IBAction)stop:(id)sender { stopsound = 1; } @end
86 :
名称未設定 :03/10/31 18:27 ID:3z9Nfggr
>>85 こんな感じで。
aSound と repeat はインスタンス変数。
-(IBAction)play:(id)sender{
[aSound release];
aSound=[[NSSound alloc] initWithContentsOfFile:@"/System/Library/Sounds/Glass.aiff" byReference:YES];
[aSound setDelegate:self];
repeat=YES;
[aSound play];
}
-(IBAction)stop:(id)sender{
repeat=NO;
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat) [aSound play];
}
87 :
名称未設定 :03/10/31 18:32 ID:3z9Nfggr
>>83 プロジェクト->情報を見る->ビルドまでは見つかるのですが、
ビルドの中にプレフィックスヘッダを設定する項目が見つからないのです。
プロジェクトファイルの
情報を見る->スタイル->共通設定の中にプレフィックスヘッダを設定する項目があるので、
こちらで新しいファイルの名称を設定してみましたが、
やはり同じエラーが出てしまいます。
88 :
83 :03/10/31 20:05 ID:OvxxCFRM
>>87 あ、これはxCodeで0から生成したプロジェクトの場合ね。
PBで作ったプロジェクトだと
プロジェクト->情報を見る->ビルド->共通設定->プレフィックスヘッダをプリコンパイル
っていうチェックが無い?
こいつにチェックを入れてプレフィックスヘッダの名前を入れると
現在の設定の方にも出てくるみたい。
それだとどう?
89 :
名称未設定 :03/10/31 20:22 ID:3z9Nfggr
>>88 プロジェクト->情報を見る->ビルド
という項目が見つからないのですが……
プロジェクト->情報を見る->スタイル
とは違うのでしょうか?
プロジェクト->情報を見る->スタイル->共通設定の
「プレフィックスヘッダ」にファイル名を入力し、
「プレフィックスヘッダをコンパイル」にチェックを入れてビルドしてみましたが、
やはり同様のエラーが出ます。
90 :
89 :03/10/31 20:37 ID:3z9Nfggr
プロジェクトファイルのパッケージの内容を表示させて project.pbxproj ファイルをテキストエディタで開いて 古いプレフィックスヘッダファイルの名称の書かれている部分を 新しい名称に書き換えることにより解決しました。
91 :
名称未設定 :03/10/31 21:36 ID:qZVFWWW0
92 :
88 :03/10/31 21:57 ID:OvxxCFRM
>>89 >プロジェクト->情報を見る->ビルド
>という項目が見つからないのですが……
失礼、
ターゲット->情報を見る->ビルド
でした
93 :
85 :03/10/31 22:20 ID:RF5UB+yc
>>86 ありがとうございます。早速実装してみたんですが、なぜか2回以上ループしませ
ん…どこか私の設定や記述に問題があったんでしょうか…
94 :
名称未設定 :03/10/31 22:31 ID:3z9Nfggr
>>93 aSound=[NSSound soundNamed : @"sound.aiff"];
こんな具合にしているのであれば、
aSound=[[NSSound soundNamed : @"sound.aiff"] retain];
こうするとか。
95 :
85 :03/11/01 01:04 ID:5K4drtJX
>>94 ありがとうございます。色々試行錯誤した結果
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat) [aSound play];
}
を
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
aSound=[NSSound soundNamed : @"sound.aiff"] ;
[aSound setDelegate:self];
if (repeat) [aSound play];
}
に変えたら、ループ再生できました。
しかし、結構な勢いでメモリリークするみたいです…なんかだんだん混乱してきま
した。メモリリークの回避方法を教えてください、お願いしますm(_ _)m
96 :
名称未設定 :03/11/01 01:33 ID:Qop2/8To
>>95 これでどう?
-(IBAction)play:(id)sender{
NSSound *aSound=[NSSound soundNamed:@"sound.aiff"];
[aSound setDelegate:self];
repeat=YES;
[aSound play];
}
-(IBAction)stop:(id)sender{
repeat=NO;
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat) [sound play];
}
97 :
85 :03/11/01 08:22 ID:5K4drtJX
>>96 それだとやはり2回以上ループしないみたいです。
うーん…どうしたものでしょうか…
98 :
名称未設定 :03/11/01 17:14 ID:wDxNRsBf
ここらへん詳しくないので適当だけど delegateの外に出すとまわるっぽい。 -(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool { if (loop) { [self playSound]; } } - (void) playSound { [snd play]; } - (IBAction) play:(id)sender { if (![snd isPlaying]) { loop = YES; [self playSound]; } } - (IBAction) stop:(id)sender { if ([snd isPlaying]) { loop = NO; [snd stop]; } } sndの生成はinitとかawake辺りで適当に
99 :
85 :03/11/05 00:20 ID:QcMUfVn5
>>98 ひとまずこんなふうにしてみましたが、やはり2回以上回りません…申し訳ありませ
んが添削していただけませんか?改行制限の関係上読みにくくてすいません
#import "DigitalOutEnabler.h"
@implementation DigitalOutEnabler
- (id)init{
[super init];
aSound =[[NSSound soundNamed : @"Sosumi.aiff"]retain];
[aSound setDelegate:self];
return self;
}
-(void)dealloc{
[aSound release];
[super dealloc];
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat)
[self playSound];
}
- (void) playSound{
[aSound play];
}
100 :
85 :03/11/05 00:22 ID:QcMUfVn5
続き -(IBAction)play:(id)sender{ if (![aSound isPlaying]) { repeat = YES; [self playSound]; } } -(IBAction)stop:(id)sender{ if ([aSound isPlaying]) { repeat = NO; [aSound stop]; } } @end 以上です、お願いします。
うげ、XcodeいじりながらCocoa Recipes読んでるけど、 PBと操作性が違いすぎて訳分かんなくなってきた……。
なんか別スレッドで鳴らしたらうまく行ったけどなんでだろ、こんなん @implementation SoundTest - (IBAction)soundPlay:(id)sender { isLoop = YES; [NSThread detachNewThreadSelector:@selector(playLoop) toTarget:self withObject:nil]; } - (IBAction)soundStop:(id)sender { isLoop = NO; [aSound stop]; } - (void)playLoop { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; [aSound play]; [pool release]; } - (void)applicationDidFinishLaunching: (NSNotification *)notification { aSound = [[NSSound soundNamed:@"sound.aiff"] retain]; [aSound setDelegate:self]; } - (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool { if(isLoop) [NSThread detachNewThreadSelector:@selector(playLoop) toTarget:self withObject:nil]; } @end
>102 それで動くんだったら、 >99-100 の- (void) playSoundを - (void) playSound { [aSound performSelector:@(play) withObject:nil afterDelay:0.0]; } にしても動きそうだね。
104 :
名称未設定 :03/11/05 14:04 ID:HY8nUb6E
すいません 純正アプリのMainMenu.nibとかってインターフェースビルダーで開けないんですか? 昔開けた気がするんですけど?
>104 英語リソースのnibファイルのみ開けるはずだよ どういう仕組みになっているのかは知らんけど
106 :
名称未設定 :03/11/05 16:56 ID:HY8nUb6E
あぅう ショートカット変えれないのかなぁ。。。
>>104 nibパッケージの中身を覗いてファイルが3個あればIBで開ける。
英語版から残りの2個をコピーしてくれば開ける可能性はあるが、
正常に編集できるかは保証できない。
Xcodeを使ってる人に質問。 プロジェクトウインドウとマニュアルウインドウとクラスブラウザと検索とコンソールを 同一ウインドウで表示するにはどうしたらいいんでしょうか。 つまり、ProjectBuilderの「全て一つのウインドウで…」のような操作感にしたいっていうか そんな一杯ウインドウ開いてられないんだよう! 15”のXGAなんだよう! すいません。眠いんで取り乱しました。もうねます。
110 :
名称未設定 :03/11/07 14:16 ID:rmI1DUS4
でも、残念ながらエクスポゼでは使いづらいね。 だってウインドウのタイトルを見ないと中身がわかんないから。 フォトショとかはエクスポゼ、快適だろうなあ。
例外処理ルーチンを書いているんだけど、 アクションメソッドで例外が発生して そのメソッドそのものを中断したいんだけど、 NS_HANDLER NS_VALUERETURN(,IBAction); NS_ENDHANDLER このNS_VALUERETURNの第1引数は何を入れればいい? だいたいIBActionの型の実態は何?
>>112 そういうのはXCodeで調べたい文字列をコマンドを押しながら
ダブルクリックすればすぐ理解るよ。
で、IBActionはNibDeclarations.hで定義されているとおり、
コンパイル時にvoidで置き換えられます。
Cocoa Document Application(Obj-C)で作ったアプリで ウィンドウメニューの全てを手前に移動がBring All to Frontになってしまいます。 MainMenu.nibのメニューはちゃんと日本語化しているんですけど。 どこを直せばいいかわかる人いたら教えて下さい。 Mac OS X 10.2.8 Developer Tools Dec.2002 よろしくお願いします。
115 :
名称未設定 :03/11/12 02:58 ID:0mzE3THN
>>114 リソースのディレクトリ名もEnglish.lprojじゃなくてJapanese.lprojにしてる?
NSFileHandleでファイルをある程度の長さのBufferに読み出して MSMutableDataに追加していくとすると、ファイルの終了時の判定 ってどうすればいいんだい?以下のようにしたらアプリが落ちるん だが。 NSData *buff; NSData *endOfFile = [NSData data]; NSMutableData *fileData = [NSMutableData data]; NSFileHandle *file (中略) buff = [file readDataOfLength:1] if (![buff isEqualToData:endOfFile]) { [fileData appendData:buff]; [buff release]; buff = [file readDataOfLength:1]; } [buf release];
>>116 [buff release];
は不要なような気もする。
118 :
116 :03/11/13 05:43 ID:A1KPKcQK
>>117 最後の一行だよね。
readDataOfLength:は読み込むファイルの内容がなくなると
空のNSDataオブジェクトを返すからこれをreleaseしたつもりだが。
それとbuildは難なく通るアプリなんだが実行時に
”シグナル 10(SIGBUS)により終了”
とでて落ちるんだけど、どう対処していいんかよく分からないので
どなたか素敵なアドバイスよろしく。
くわしくはプログラムってよく知らないのですが いわゆるifって条件が合ってれば中の処理をするんですよね? つていうか、ファイルの終端をバッファサイドでチェックしてるのが分らない けど単にグルグル回してファイルの終端で判定すればいいんじゃないのでしょうか? よくわからないけどforでファイルサイズ分だけ回せばいいのではないでしょうか?
[buff release]; は両方ともいらんだろ。 allocもしくはretainしてないオブジェクトをrelease/autoreleaseしちゃダメ。 buffをすぐに捨てたいんなら ループの最初でNSAutoreleasePoolを作って NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init]; 最後に [pool release]; 解放すれば?
121 :
116 :03/11/13 13:02 ID:A1KPKcQK
>>120 の言う通り[buff release];はなくすと上手く行きました。
ということは、readDataOfLength:はいわゆる一時的なNSData
を返すということですか?
>121 返されたオブジェクトのオーナーシップが呼び出し側にあるものは、 [[OneClass alloc...] init...] [aObject copy...] [aObject mutableCopy...] だけです。(alloc... は常にinit... とペアで使わなければなりません。[MUST]) これは自作クラスでも統一するべきです。[SHOULD]??? // MUST かもしれない。
123 :
120 :03/11/13 13:28 ID:+v4jty8F
>>121 readDataOfLength:に限らずalloc以外で作ったオブジェクトは全てautoreleaseされます。
オーナーシップポリシーについてはあちこちで説明されてるので調べてみよう。
あ、fileDataもほっとくと消えちゃうよ。
後で使いたいときはretainしておくこと。
>>115 >リソースのディレクトリ名もEnglish.lprojじゃなくてJapanese.lprojにしてる?
回答いただきありがとうございます。
nibファイルは全部グローバル化しています。~.lprojに入れておかないと
だめなんでしょうか?
English.lprojしかなかったら英語モードでしか起動できないじゃろ。 一部のメニューが英語で表示されるのは当たり前。
いえ、English.lprojもないんです。全部グローバル化しています。 グローバル化している場合には英語モードで起動しているんでしょうか?
"global"と"localized"の意味をを辞書で調べてから出直してこい。
( `3´)めんどクセェー
>>126 これに限らずメリケンのいうグローバルってのはアメリカであり英語ってことだ。
日本語モードで起動させたきゃ大人しくJapanese.lproj作りなさい。
129 :
116 :03/11/13 18:19 ID:A1KPKcQK
>>122 ,123
"自分で生成したオブジェクトは、自分で解放する "
というのが鉄則のようですね。
それゆねにalloc...,init...,copy....,mutableCopy...
といった自前で生成したオブジェクトは自分で解放
するということですね。
では、readDAtaOfLength:によって返されるオブジェクトは
NSFileHandleのオブジェクトがオーナーと言うことになりますが、
返されたオブジェクトはどのタイミングでreleaseされてるので
しょうか?やはり返す前にautoreleaseしてるんでしょうか?
どこまで保持されるのかよく分からないので。返した後に参照後
即releaseされるのか、返されたルーチンが終了時に消えるのか?
関連することだと思いますが、オブジェクトを返すメソッドは
return [[[object alloc...] init....] autorelease];
とすべきなのでしょうか?
返す前にautoreleaseしてる もしくは NSFileHandleにオーナシップが移らないメソッドでNSDataのインスタンスを生成した 後者の場合はNSDataクラスの中で既にautoreleaseされてる。
>129 >どこまで保持されるのかよく分からないので。返した後に参照後 >即releaseされるのか、返されたルーチンが終了時に消えるのか? 普通は考えなくて良いです。 メソッド抜けてからも使うのであれば保持、使わないのであればそのまま放っておく。 別にオーナーが複数あっても問題はありません。すべてのオーナーがいなくなった時点でdeallocされます。 返されたオブジェクトが他のオブジェクトに所有されている可能性がありますので勝手にreleaseしてはいけません。 >return [[[object alloc...] init....] autorelease]; 使わないのであれば return [aObject autorelease]; で良いです。 保持している必要があり、かつ他のオブジェクトによって変更されてもいいのなら return aObject; でもいいです。 変更されるのがいやなら return [[aObject copy] autorelease]; とか、専用のクラスメソッドがあるなら、 return [NSArray arrayWithArray:aArray]; みたいな。
132 :
77 :03/11/13 19:14 ID:4mAwkCMc
オリジナルのフォントを任意の場所に置いて使う方法やっとわかった。 起動時に(Carbonの)ATSFontActivateFromFileSpecificationを一発呼んでやればよい。 後はNSFontManagerで目的のNSFontが得られるようになる。
例外処理の部分でトラブってるんだけど、 *** Exception handlers were not properly removed. Some code has jumped or returned out of an NS_DURING...NS_HANDLER region without using the NS_VOIDRETURN or NS_VALUERETURN macros. とでてとまってしまう。これはNS_DURING...NS_HANDLER間は return;で返すんじゃなくて必ずNS_VOIDRETURN;または NS_VALUERETURN;で返す必要があるってことでしょうか?
>134 うん。
136 :
名称未設定 :03/11/14 16:32 ID:qbD9Wbbl
ClassAはClassB.hをインポートしていて - (id)method{ return [[[ClassB alloc] initWithClassA: aClass] autorelease]; } というメソッドがあって、 ClassBはClassA.hをインポートしていて - (id)initWithClassA: (ClassA*)aClass{ [super init]; item = [aClass retain]; return self; } と初期化する場合にfatal error: method definition not in class context というエラーがでるのですが、どのように修正すればよいものでしょうか?
137 :
名称未設定 :03/11/14 17:56 ID:BSbaZ2nB
+ (id)method
138 :
136 :03/11/14 21:16 ID:4vixb8te
>>137 簡略して書きましたが、実際にはmethodでClassBを生成する際
自分自身のインスタンス変数を引数としています。
なので出来ればクラスメソッドではなくインスタンスメソッドにしたいのです。
139 :
137 :03/11/14 21:54 ID:BSbaZ2nB
んじゃClassAの方でClassBを生成させるんじゃなくて、 ClassBの方に + (id)classBWithClassA:(ClassA *)aClass { return [[[ClassB alloc] initWithClassA: aClass] autorelease]; } かな。
140 :
136 :03/11/14 22:41 ID:3LYklnlQ
>>139 ありがとうございます、そうしてみます。
しかし、Smalltalkでは問題なく動作するのに
なんでObjective-Cだとエラーになっちゃうんでしょうね。
>>136 普通にできますけど?
> fatal error: method definition not in class context
これって、括弧の閉じ忘れじゃないの?
>しかし、Smalltalkでは問題なく動作するのに
>なんでObjective-Cだとエラーになっちゃうんでしょうね。
比較する意味なし。
142 :
136 :03/11/15 00:19 ID:7sbcU5M4
>>141 試しに
- (id)initWithClassA: (ClassA*)aClass
の部分を
- (id)initWithClassA: (id)aClass
にしたらエラーにならなかったので閉じ忘れではないと思います
143 :
141 :03/11/15 00:42 ID:ptvAMNJd
// ClassA.h #import <Foundation/Foundation.h> @interface ClassA : NSObject - (id) method; @end // ClassA.m #import "ClassA.h" #import "ClassB.h" @implementation ClassA - (id) method { return [[[ClassB alloc] initWithClassA : self] autorelease]; } @end
// ClassB.h #import <Foundation/Foundation.h> @class ClassA; @interface ClassB : NSObject { ClassA *_item; } - (id) initWithClassA : (ClassA *) aClass; @end // ClassB.m #import "ClassB.h" #import "ClassA.h" @implementation ClassB : NSObject - (id) initWithClassA : (ClassA *) aClass { [super init]; _item = [aClass retain]; return self; } @end
// main.m #import <Foundation/Foundation.h> #import "ClassA.h" #import "ClassB.h" int main(int argc, char **argv) { NSAutoreleasePool*ap = [[NSAutoreleasePool alloc] init]; ClassA*a; ClassB*b; a = [[ClassA alloc] init]; b = [a method]; NSLog([b description]); [ap release]; return 0; } /* こういうのじゃないの? インデントは全角空白になってる。 Mac OS X 10.3.1 % cc -o test.o -framework Foundation -I . ClassA.m ClassB.m main.m % ./test.o 2003-11-15 00:36:48.108 test.o[1112] <ClassB: 0x500d70> */
146 :
136 :03/11/15 01:48 ID:7sbcU5M4
@classを使わずに#importを使っていたのが悪かったみたいです。 どうもありがとうございました。
147 :
85 :03/11/15 16:32 ID:8+pVYpYN
すいません、しばらく手を付けられなかったもので…
>>102 さんの方法でうまくいきました。相談にのってくださいました皆さまに御礼
申し上げますm(_ _)m
メタルなウィンドウにNVViewのサブクラスを置き(NSViewWidthSizable)、 - (void)drawRect:(NSRect)rect { NSDrawWindowBackground(rect); } とだけしたのですが、ウィンドウをマウスでリサイズすると、 テクスチャがウィンドウにうまく連動せず、リサイズ前の状態のテクスチャが タイリングされてしまいます。 これをきちんと連動させるにはどうすればよいのでしょうか?
どこかにFileBrowserの良いサンプルコードありますかね? HMDTのサンプルコードを参考にいろいろいじってるんだけど なかなか思うようにいかなくてね。
>>148 - (void)viewDidEndLiveResize{
[super viewDidEndLiveResize];
[self display];
}
これでとりあえずリサイズ終わったら描画し直される。
151 :
148 :03/11/20 07:15 ID:Hy7aMb9u
>>150 ありがとうございます。
色々試して、とりあえず現状はそんな感じ(setNeedDisplay)で
しのいでるのですが、Safariはどうやってるのかなーと思ってるところです。
class-dumpでSafariを見ると、NSWindowのカテゴリに
-(id)scaledBackgroundというメソッドが追加されてて、
Viewはそれを見てるっぽい感じなんですが、
NSWindowでどういう操作をしているのかわからず・・・
152 :
名称未設定 :03/11/20 16:31 ID:srH13EMO
Cocoaでファイルのラベルを取得したいのですが、どうやってやるんでしょうか? もしかしてFSRef使うんですか? あとラベルの名前を取得する方法ってありますか? com.apple.Labels.plistに入っているみたいですが、 (ただし自分で設定した名前のみ) 正規の取り出し方法はあるんでしょうか?
153 :
名称未設定 :03/11/22 16:17 ID:7q0FmrTN
>>153 [NSImage imageNamed:@"Name"];
即レスありがとうございます。 ですよね。ですよね。
156 :
名称未設定 :03/11/24 21:22 ID:n2XZHi2X
SIGSEGVが起きるかもしれないことがわかっている場合、 signal, setjmp, longjumpを使えば補足して異常終了させない ようにすることはできたんですが、 「アプリケーションは予期しない理由で終了しました」 ダイアログを抑止することができません。 これを出さないようにする方法ってあるんでしょうか? NS_DURING, NS_HANDLER, NS_ENDHANDLERを使ってもだめでした。
signalでキャッチしても、ダイアログだけ出ちゃうっとこと?
158 :
156 :03/11/25 01:10 ID:A/7XeI0m
>>157 そうなんです。
ダイアログさえ出なければ、何事もなかったように走り続けられるのですが。
どうしてそういうことをしたいのか気になる・・・
160 :
156 :03/11/26 11:13 ID:SkDocYo4
QuickTimeに壊れたファイルを描画させると落ちることがあるんで。
ttp://www.big.or.jp/~crane/cocoa/0100_imageView/interpole/を参考に ラジオボタンでNSImageInterpolationを変更するプログラムを作ってみたのですが
変更後の画像を見ても補間方法が変わっているようには見えないのです。
ラジオボタンをクリックした時にメソッドが呼ばれて
NSGraphicsContext *gc = [NSGraphicsContext currentContext];
[gc setImageInterpolation: NSImageInterpolationHigh];
とかやってるだけなんですが...NSGraphicsContextの扱い方が間違ってるのでしょうか。
再描画しないと反映されないのでは?
某スレからの流れで質問なのですが、 画像ビューアでよくある、フルスクリーン表示ってどうやって実装したら良いものでしょうか。
>163 やることは至って簡単で画面いっぱいのNSWindowに切り替えればいいだけです。 しかし普通のWidnowをでかくしただけじゃうまくいきませんのでそれ用のNSWindowを作ります。 やるべきことは、 1,(メインの)画面と同じ大きさで 2,タイトルバーを含む境界線がすべて無いNSWindowを 3,メニューバーよりもDockよりも前に表示する です。 1,は簡単 NSRect fullscreenRect = [[NSScreen mainScreen] frame]; これをWindowのFrameにすればいいだけ。 2,NSWindowを作るときのstyleMaskにNSBorderlessWindowMaskを渡してあげる。 3,NSWindowのレベルをNSStatusWindowLevelにしてやると出来ます。 あとは出来たNSWidnowにNSViewを貼り付けるだけです。
例えば (動作を確認してません。また、解像度の変更に対応してません。) -(NSWindow*)fullscreenWidnow { static NSWidnow* result; NSRect fullscreenRect = [[NSScreen mainScreen] frame]; if( ! result ) { result = [[NSWindow alloc] initWithContentRect:fullscreenRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; [result setLevel:NSStatusWindowLevel]; // たいていは黒バックですよね。 [result setBackgroundColor:[NSColor blackColor]]; } return result; } -(void)fullscreenMode { .... window = [self fullscreenWidnow]; // このviewはNibで作っておくのが楽だと思います。 // contentViewのsubViewにせず直接contentViewに設定してもかまいません。 [[window contentView] addSubview:view]; .... [widnow makeKeyAndOrderFront:self]; .... } -(void)normalMode { .... window = [self fullscreenWindow]; [widow orderOut]; [view removeFromSuperview]; // お片づけ .... }
167 :
名称未設定 :03/11/29 20:57 ID:qfxDpF9Q
現在のデフォルトブラウザを知るにはどうすればいいですか? 訳あって、ダブルクリック(-openFile:)ではブラウザで開かれてくれない ファイルをブラウザに投げる必要があるのです。 よろしくお願いします。
>>167 Launch ServiceのLSGetApplicationForInfo()で拾えたような気がします。
どっかで見た気がするんですが、どこで見たか忘れてしまいました。
-(BOOL)openURL:(NSURL *)url でデフォルトのブラウザで開けないだろうか?
URLがfile://の時はopenFileと同じ動きになるよ。
171 :
167 :03/11/29 21:28 ID:qfxDpF9Q
>>168 ありがとうございます。調べてみます。
>>169 やってみたのですけどだめでした。openFile:と同じ結果になってしまって。
172 :
167 :03/11/29 21:54 ID:qfxDpF9Q
うー・・Carbonですか・・つらいっす。でもがんばります。
NSUserDefaults *defaults=[[[NSUserDefaults alloc] init] autorelease]; NSDictionary *dictionary1=[[defaults persistentDomainForName:@"com.apple.LaunchServices"] objectForKey:@"LSPrefsBindings"]; NSDictionary *dictionary2=[[dictionary1 objectForKey:@"U:http"] objectAtIndex:0]; NSString *identifier=[dictionary2 objectForKey:@"LSBundleIdentifier"]; NSString *filename=[[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:identifier]; Cocoa なら、これでデフォルトブラウザのパスが取得できる。 plist の仕様が変わったら使えんけど。
174 :
167 :03/11/29 22:33 ID:qfxDpF9Q
>>173 いけました。ありがとうございます!
それにしても何をしているのか、中身がいまいちわからんのですけど・・。
LaunchServiceともども、追々学習していきます。
168ですが、元ネタわかりました。
http://cocoa.mamasam.com/COCOADEV/2002/09/2/45230.php ここです。
173はおおざっぱに言うと〜/Library/Preferences/com.apple.LaunchServicesを
読み込んで、httpに関連づけられているアプリケーションのidentiferを得て、
それをNSWorkspaceで処理してるってことですかね。
って、173さん、勝手に書いてすいません。あげくにもし間違ってたら重ねてすいません。
とりあえず〜/Library/Preferences/com.apple.LaunchServicesを実際に開いてみたら
理解が進むんでないでしょうか。
あ、すいません。 com.apple.LaunchServicesじゃなくてcom.apple.LaunchServices.plistっすね。
ちょっと訂正させてください。 誤;3,NSWindowのレベルをNSStatusWindowLevelにしてやると出来ます。 正;3,NSWindowのレベルをNSScreenSaverWindowLevelにしてやると出来ます。 こちらの方がよいようです。 また、2点ほど問題がありました。 1点めはcmd+[TAB]、exposeによるアプリの変更に問題を生じる。 これはNSApplicationのdelegateで - (void)applicationWillResignActive:(NSNotification *)notification { if( フルスクリーンモード ) { ノーマルモードに変更 } } で回避可能です。 これをしないとほかのアプリが見えないにも関わらずアクティブになるというきわめて危険な状態になります。 おそらくユーザーはパニック状態になるでしょう。 フルスクリーンを解除しようにもアプリ自体をcmd+Qで終了させようにもイベントはすべて見えないアクティブアプリに送られてしまいますから。 (ただし、Appleはこれに気づいてないようでiPhotoではこの状態になります。) 2点目はexposeです。iTuneのフルスクリーンモードではexposeは無効化されているようです。 少し調べてみたのですが、exposeのイベントはかなり低レベルで処理されているらしくCocoaAPIでは無効かの方法を見つけられませんでした。 動作から考えるとWindowServerがこれをやってるのは確実なんですがドキュメントが見つからない。。。
CocoaでシーケンサーのCoreに使えるぐらいの 正確なクロックを得るにはどうしたらいいのでしょうか。 NSTimerをちょっとためしてみたけど、どうも他の アプリと切り替えたりすると揺れたりします。 アイディア等あれば教えてください。
>>177 今までNSWindowの勉強をさぼっていたせいでかなり難儀しましたが、
なんとか実装できました。本当にありがとうございました。
すいません、初心者なのですが 異なるnibファイル間でメッセージのやり取りはどうやって実現するのでしょうか? 凄い基本的な事かも知れませんがどなたか教えて下さい。
NSNotificationCenter でも使えば?
>>182 もしかすると、FirstResponderに送ればいいかもよ。
このことは簡単すぎて、見過ごしているか書いてないことが多い。
htmlからtextだけを抜き出したくて
NSAttributedString *aString;
NSURL *url = [NSURL URLWithString:@"
http://www.apple.com/ "];
NSData *dat;
NSDictionary *dic;
dat = [NSData dataWithContentsOfURL: url];
aString = [[NSAttributedString alloc] initWithHTML:dat documentAttributes:&dic];
[[textOut textStorage] appendAttributedString:aString];
textOutはOutletです
という感じのコードを書いてみたんだけど
htmlのテーブル部分だけがtext読み込みできない・・・
Viewには表示されてるのに、NSLogで見ると抜けてるのです。
(俺があほ? バグ?)
他に何かいい方法ないでしょうか。
187 :
182 :03/12/06 02:06 ID:nBaoYn0/
>>183-184 すいません。プロバイダ規制等で返事が遅れました。
ノーティフケーションもレスポンダチェーンも幾らか勉強不足なので
今すぐは使えませんが参考になりました。御助言有り難うございました。
ドキュメント側オブジェクトはメインウインドウのデリゲートとしてるので[[NSApp mainWindow]delegate]で取得出来ましたが、
逆からは結局出来ませんでした。
>> 186 俺もHTMLタグをとりだしたいのだが、結局方法がわからなかった。 しかたないので、NSScanner をつかって、地味にきりだしている。
>186 ドキュメント読んでないけど、テーブルとかは NSAttributedString の 属性側に入ってるのでは?
190 :
186 :03/12/06 20:18 ID:aRxxDJ4o
ファイルを捨てる動作をさせたいのですが、 ゴミ箱のpathってどこにあるんでしょうか? あと10.2と10.3では違ったりしますか?
~/.Trash <ゴミ箱
>>191 前にdentomさんとこの板に書かれていたrm安全版という記事にも書かれていたのだけど、
単にmvで、~/.Trashに移動するだけだと同名ファイルが既にあった場合消されちゃうので、
名前も変えてってスクリプトを作ってましたね。
194 :
193 :03/12/07 20:26 ID:F6hElsBJ
で、そのスクリプトが以下の通り。 #!/bin/csh -f if ($#argv > 0) then set WORKFILE = /tmp/jp_dentom_tra_work echo 'tell application "Finder"' > $WORKFILE foreach ARGFILE ($*) echo -n 'delete POSIX file "' >> $WORKFILE echo -n $ARGFILE >> $WORKFILE echo '" as alias' >> $WORKFILE end echo 'end tell' >> $WORKFILE osascript $WORKFILE > /dev/null & endif というやつ。適当な名前で、たとえばtraとでもして tra *.txt とターミナルで入力すれば、*.txtを全部、ゴミ箱にうつします。 osascriptは実行時間が遅いのでバックグランドで動かすようにしてます。
195 :
193 :03/12/07 20:27 ID:F6hElsBJ
↑掲示板のコピペ仕様としたら改行大杉といわれてしまった(w tell application "Finder" delete POSIX file "file-name" as alias end tell この3行がキモ。
〜/.Trash って別パーティションのファイルでも大丈夫なの?
NSWorkspaceRecycleOperation
198 :
名称未設定 :03/12/08 00:51 ID:Dx3gW6//
〜/.Trashの決めうちはまずいよ。 複数パーティションに分けている場合とか。 CarbonだったらFindFolderあたりで探したはず。
Cocoaだったら195のスクリプトをNSAppleScriptと組み合わせるといいかも。
200 :
191 :03/12/08 02:06 ID:Oh8enjz+
>>192 有り難うございます。
以前どこかで知った筈でしたがど忘れしていました。
>>193 〜
ええと、Cocoa専門のプログラム初心者なので
スクリプトもターミナルもCocoaでスクリプトを使う方法もあまり判らないですが、
確かに同名ファイルの場合等、
>>196-198 さんの事態を考えるとスクリプトでFinderに依頼した方が確実かとも思いますので
>>199 さんの方針で書店や図書館等で調べてこようかと思います。
有難うございました。
ちなみに単純にファイル移動のメソッドでゴミ箱に送ろうとしたら出来ませんでした。
単に何か間違えてるのか、そういう仕様なのでしょうか。
197の説明不足じゃないかな。無視したのは。 以下、NSWorkspaceを使ってゴミ箱に捨てるサンプル // /Users/Shared/_removeにあるtemp.c、temp.txtをゴミ箱に捨てる例 NSWorkspace *aWS = [NSWorkspace sharedWorkspace]; NSString *aDir = @"/Users/Shared/_remove"; NSArray *aFile = [NSArray arrayWithObjects:@"temp.c",@"temp.txt",nil]; int aTag; if([aWS performFileOperation:NSWorkspaceRecycleOperation source:aDir destination:aDir files:aFile tag:&aTag]){ NSLog(@"OK aTag=%d",aTag); }else{ NSLog(@"NG aTag=%d",aTag); }
203 :
202 :03/12/08 11:11 ID:tcTg/2hO
おっと、このサンプルはどっかのMLか掲示板で親切に教えてもらったもので わっちの発案ではない。教えてくれた人、ありがとう。
204 :
200 :03/12/09 05:34 ID:HKEiSKNK
>>202-203 おかげで何とか実装出来ました。
移動の際、ドック上のゴミ箱アイコンのアクション
(空アイコンからの更新、入った音の発生)が起こらないのが寂しいですが、これで良しとします。
助かりました、有り難うございます。
>>201 無視した訳では無かったのですが、
「
>>197 NSWork〜がどの様なものか判らないのですが、ゴミ箱処理に関係したものでしたら出来ればもう少し説明をお願いします」
という様な事を書いたのですが編集中に一度消したまま送信してしまいました。
>>197 さん、すみませんでした。
205 :
名称未設定 :03/12/10 09:33 ID:e1rQVPmm
ObjectAllocのバーで青色と黄色の違いは何でしょうか? もう1つ、ObjectAllocで Call Stacksがシンボルで表示されるときと アドレスのときの違いはわかりますか?
>> メニュー 「ObjectAlloc」>「About ObjectAlloc」 Performance 関連の文書にも詳細が載ってたはず。 file:///Developer/Documentation/Performance/Performance.html
>>204 AppleEvent(Carbon) で Finder におねがいするのが一番確実。
もっとも、いまは Cocoa だけで手一杯だろうけど。
自分でファイル移動するとコメント消えちゃうしねぇ。
>>206 どうも。ここは気付かなかったなあ
>About
に色はありました。
ドキュメントファイルがなかった。
こっちはOSX10.2.8だから?
シンボルの有無はなんなんだろうか。。
210 :
204 :03/12/11 13:05 ID:t6gYoeA2
>>207 確かに手一杯ですし、判りませんが頭に入れて置きます。
助言どうもです。
あの、自作ウインドウにマトリクスを貼付けたスクロールビューを張るだけの話なのですが、 どなたかやり方を教授して貰えませんか? 途中、実装出来たのですが、 表示タイミング等の都合からコードの場所をずらしたり等していたら スクロールビューの内容が表示されなくなり、夜中から苦戦しています。 勿論、マトリクス等は先に生成してますし、 マトリクスの内容も直接ウインドウに張ると表示されるので出来てますし、 構文エラーもないのですが、 幾ら見直してもおかしい所が見つからず、混乱しています。 下の様な感じなのですが、厳密に張る順番の様な物が有りましたっけ? PBが破損したのでしょうか? //マトリクス、ウィンドウ生成後(スクロールも含め全てインスタンス宣言済み) myScroll = [[[NSScrollView alloc]init]autorelease]; [myScroll setHasVerticalScroller:YES]; [myScroll setDrawsBackground:YES]; [myScroll setDocumentView:myMatrix]; [myWindow setContentView:myScroll]; //[scrollV setVerticalScroller:YES];
>>211 NSViewのサブクラスの指定イニシャライザはinitじゃなくて
initWithFrame:だったような気が。
>211 IBでスクロールビュー付けちゃダメなの?
WebView を使って簡単なブラウザを作ろうとしてるのだけど、 -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (WebView) ってエラーがどうしてもでてしまってコンパイルできない。テキストフィールドを1つだけバインディングしてるだけだけれど。 何が原因なんだろ? 当方 Xcode 1.0.1、Interface Builder 2.4(v349) です。
215 :
214 :03/12/13 12:28 ID:6z4JXjnn
間違えた。コンパイルはできるけれど、実行するとエラーがでるんだ。
216 :
211 :03/12/13 16:19 ID:ohyp+QwZ
>>212 使ってみましたが駄目でした。
そもそも途中、initで実装出来、順番は変えてもコード自体は殆ど弄ってないので余計原因が判りません。
>>213 メインウインドウのサブウインドウなので自作にしたのですが、
何かIBの使い方を誤解してるでしょうか?
フォルダ内一覧を配列に取得した場合、 配列から「Icon(ニューライン文字付き?)」や 「*.txt]等の一部一致した文字列を消す方法を教えて下さい。 後者の*はワイルドカードのつもりですがcocoaでは使えない様ですし 配列の一つ一つをhasSuffixで参照しても出来ませんでした。 もしくはフォルダ名だけを取得する方法が有れば教えてください。宜しくお願いします。
218 :
217 :03/12/14 15:16 ID:0dqJPMXU
すいません!他の関連処理部分の更新用メソッドの未実装に気付き直したら出来ました! お騒がせしました。本当にすみませんでした。
219 :
名称未設定 :03/12/14 23:43 ID:qSRZfyyj
初めまして。 XCodeはどこにあるのでしょうか? 買ったままの状態ではインストールされてないのでしょうか?
220 :
211 :03/12/15 00:17 ID:vGu8XMuq
出来ました。 マトリクスをスクロールビューに貼付ける前に 中身のセル等に自動リサイズする様セットしたのが原因だった様です。 と、一応同じ所でつまずく人の為に書いておきます。 同じくお騒がせしました。
>>219 Pantherプリインストールマシンなら、/Applicationsフォルダの中にディスクイメージがあるらしい。
あるいはADCオンライン会員になってDownloadする。
222 :
222 :03/12/16 03:01 ID:N+ZEq57g
∧∧ (゚Д゚ ) <おいこそが222ゲトー /◎ ̄旦/ヽ;;;⌒`) /___/ ※/)≡=-;;;⌒`)⌒`) / ※ ※ ※ ※ // ≡≡≡≡= -;;;⌒`)⌒`) (ー―――――_,ノ ≡=⌒`);;;⌒`)≡=-⌒`)  ̄ ̄ ̄ ̄ ̄ ̄ ズザー―――
よくある、テーブルビュー等の項目をダブルクリックするとウインドウが開き、 開いたまま更にダブルクリックするとウインドウが手前に来るというのを実現させたいのですが、 ウインドウが複数に及ぶ場合、ノーティフィケーションやデリゲート等で実現可能なのでしょうか? メニューのウインドウ項目を取得する様な方法が有れば教えてください。 お願いします。
>メニューのウインドウ項目 って、ウインドウメニューの事が言いたいのか? NSTableVIewのdoubleActionから NSWindowのmakeKeyAndOrderFrontを 呼び出せばいいんでないの。
>>223 document-based application
ええと何と言ったらいいか。とりあえず今作ってるものの構造を書くと、 ダブルクリックでウインドウをコントロールするインスタンスを作成して、それがウインドウを生成し、 同時に配列にウインドウ名を追加する事で そのウインドウ名が配列内に無い場合のみウインドウが開く様にして、 同じウインドウを開かない様にしてるのですが(ウインドウを閉じた時に配列からウインドウ名を削除する) ウインドウが多種類あるのでmakeKeyAndOrderFrontを送る名を特定出来ない、という事です。
配列にウインドウ名を書き込んで管理している? そりゃ管理のしかたが悪い。 単純にウインドウなりコントローラなりへの参照そのものを 配列に突っ込んどきゃいいのでは。
確かにそうでした、 すいません、色々勘違いしていました。 (というか結構疲れてるみたいです…)
NSAttributedStringをhtmlに変換する方法って何か無いですか? htmlからNSAttributedStringを作れるんだから反対もできるだろう、というのは安易でしょうか?
例えば Software Update のアップデート画面などでは NSTableView の Cell の中に Progress Indicator が 組み込まれていたりするのですが、 そのような NSTableView を作るにはどうすれば良いのでしょうか。 NSCell のサブクラスの中には Progress Indicator は無いようですので、 普通の方法では実現できそうにないような気もしますが。
>>230 Software Updateの
>Cell の中に Progress Indicator
UI Element Inspectorで見たところ、イメージCELLっぽいから
自分で書いているようだ。
appleのUIに似せようとしてもCocoaには相当する機能がなくって それぞれのアプリで頑張らなきゃならんってのはどうにかなんないもんかね。
>232 Appleがユーザーインターフェースガイドラインを無視して暴走している方が問題だと思うが。 自前でがんばってもOSのバージョンアップでおかしくなる可能性を考えると、 あんまりがんばる気になれないなあ、俺は。
ファイル(orフォルダ)にアイコンをセットする方法を教えて下さい。
>234 AppKit/NSFileWrapper.h
237 :
234 :03/12/21 02:18 ID:Ic9uz2II
有り難うございます。 (しかしNSFileWrapperが何なのか調べてる所です)
238 :
名称未設定 :03/12/21 14:51 ID:kI0w7HxJ
ご存知の方がいらっしゃったら教えてください Expose中とそうでない時を判定するにはどうしたらいいでしょうか。 ここで、Expose中とはF9〜F11でウインドウが縮小したり、外に移動したりしている時 のことです。
プチ疑問。 NSLogを全部とっぱらったら0.1秒位処理が早くなったりするん?
膨大な数を格納した配列にdescriptionさせたりとか。
Cocoaプログラムに初挑戦しております。 重たい処理(処理A)を行うとカーソルが虹色のくるくる回るやつになり、 処理が終わるまでウインドウのボタンが一切きかなくなります。 (処理A中にはキャンセルフラグが1になると中断する仕掛けが組み込まれてますが、キャンセルフラグを1にするボタンを押せないので結局キャンセルできません。) WindowsでいうところのApplication->ProcessMessage()のような関数、 すなわち、一旦処理をOS側に戻す関数などcocoa上にありましたら、教えていただきたくお願いします。
RunLoopかな、これだと遅くなるから、 キャンセルフラグくらいならThreadにしたほうが良いぞ
244 :
242 :03/12/24 21:50 ID:M0n2et9R
>>243 情報ありがとうございます。
スレッドのサンプルを見ながら、処理Aを32分割してみました。
しかし、結局32個のスレッドが終わるのを待つループで
虹色カーソルが出て、なにも受け付けくれず、事態は全く改善しません
でした。よく考えてみると当然ですね。
スレッドが終わるのを待つループの中でrunloopを使えばよさそうだ!
というのは解ったのですが、いまいちrunloopの使い方がよくわかりません。
runloopのサンプルプログラムの情報などありました、
教えていただきたくおねがいします。
便乗でoneway修飾子の使い方を教えて下さい。 単にvoidにくっ付けても効果がない様ですが。
246 :
230 :03/12/25 01:37 ID:k0UO5xPu
>>231 アク禁食らってて遅くなりましたが、ありがとうございました。
自分で描くのは面倒なので断念したいと思います。
>>244 フラグを参照して適宜終了するようなスレッドを
1つだけ走らせれば十分なような気もしますが。
32個のスレッドというのは何か設計に問題が無いですか?
ついでに質問というか疑問なのですが、新たにスレッドを走らせる場合に
NSThread の detachNewThreadSelector:toTarget:withObject:
を使わずに
NSApplication の detachDrawingThread:toTarget:withObject:
を使ったとしたら何か問題があるでしょうか。
後者は自動的に NSAutoreleasePool を用意してくれるので便利なのですが、
どうも名前からすると何かを描画する時に使うことを予定しているようです。
+ (void)detachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument Creates and executes a new thread, automatically creating an NSAutoreleasePool for the thread. This method is a convenience wrapper for NSThread’s detachNewThreadSelector:toTarget:withObject:.
>244 > スレッドが終わるのを待つループ これが無ければうまくいくでしょうね。 さらに>246さんの > フラグを参照して適宜終了するようなスレッドを > 1つだけ走らせれば十分なような気もしますが。 を適用。 あと、NSLockも調べる。
250 :
名称未設定 :03/12/25 10:14 ID:KHRTr3L/
AppleのThreadサンプルは起動までの単純な実装だから、実用には かなり試行錯誤しないと理解できないと思う。 あれで分かりづらいのは、DistantObjectとThreadをいっしょに 書いているところだよ。サンプルも何度か書き直されているから その人も理解していないはず。 通常のアプリでは、2つのThreadの同期で充分だけど、 少し複雑なThread間でメッセージ通信を行いたい時は、DO(Distributed Objects) にして、互いにRunLoopが必要なんだ。 そのとき、onewayは意味がある。 Win32でいう所のSendMessageとPostMessageだな。
251 :
名称未設定 :03/12/25 18:36 ID:pGtjfmI2
MAC OS](v10.2) の音量をいじくるプログラム作りたいんですけど ボリュームコントロールがよくわかりません 教えてください 言語Objective-Cです
VBでいうところのdoevents関数みたいなのってcocoaにはないのかな?
それがあれば
>>242 さんの問題も解決すると思うんだけど
あとNSThreadは広分社のobjective-Cって本に詳しい解説がのってた気がします。
>>250 >通常のアプリでは、2つのThreadの同期で充分だけど、
NSThreadでこういうごくふつうのマルチスレッディングってできるんだっけ?
オレはスレッド間の通信はNSLock系のクラスで排他制御をかけたNSMutableArrayを 使ったけど。DOは高度すぎて、よくわからんかった。
手抜きするなら、同期処理がややこい Thread を使わず、NSTimer 使っ て1秒なり0.1秒なりの単位で繰り返し特定のメソッドを呼び出させる。 もちろん、特定のメソッドではループするのじゃなく適当な単位で処理 できたら即座に return すると。 全て終わったら Timerそのものを invalidate する。 Thread を立てないから Timer で呼び出しているメソッドの実行中は マウスやキー操作には反応しないけど、「適当な単位」を適宜短くして おけば気がつかないよ。
>>253 >NSThreadでこういうごくふつうのマルチスレッディングってできるんだっけ?
こんな質問が出るとは>250さんの言う通りみたいね。
別にNSConnection を使わなくてもいいいんです。
NSRunLoopも必要なし。
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
で普通のメソッド渡してやればそのメソッドは別スレッドで動きます。
NSAutoreleasePoolのインスタンスがいないのでメソッドのはじめで作って最後で捨ててやればいいだけです。
NSRunLoopが走ってないので適宜NSAutoreleasePool を解放してやらないと、
メソッドが終わるまでゴミがたまったままになりますが。
自分でループを回してるんだったら、ループのはじめでNSAutoreleasePoolを確保して、
ループの最後で解放するのが常套手段ですね。
だれかNSThread使ったサンプル書いてやれよ と人に押し付けてみるテスト
>>256 そのへんどうだったかなぁ?
スレッドをdetachするのはいいとして、detachしたスレッドを示すIDが
得られないから、スレッド間通信ができないじゃん、と思った記憶が
あるが。
260 :
名称未設定 :03/12/27 13:41 ID:Bct3uqZr
>>256 NSApplicationの
+ (void)detachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument
を使うとNSAutoreleasePoolの確保と解放をこいつが勝手にやってくれるから便利よ。
.DS_Storeを生成&設定する手段って用意されてるんでしょうか?
>>262 何やりたいのかよくわからんが、FinderにAppleEvent送るしかないんじゃない?
テーブルから文字列をドラッグ&ドロップでテキストエディタなどに 移すことができるようにしようと思っています。 そこで、試しに NSTableView の delegate に -(BOOL)tableView:(NSTableView *)tv writeRows:(NSArray*)rows toPasteboard:(NSPasteboard*)pboard{ [pboard declareTypes:[NSArray arrayWithObjects:NSStringPboardType,nil] owner:nil]; [pboard setString:@"test" forType:NSStringPboardType]; return YES; } というメソッドを書いたのですが、これでは上手くドラッグ&ドロップできません。 NSLog で調べたところ、pboard への文字列の格納は成功しているようですが、 どのようにしたらテキストエディタなどに文字列を受け取らせることができるのでしょうか。
>>265 ありがとうございます。
直ちに実装して解決しました。
他の方のためにも "draggingSourceOperationMaskForLocal" で検索して
参考にしたサイトを貼っておきます。
ttp://wwwa.dcns.ne.jp/ 〜nito/OSPT/DragAndDrop.html
267 :
名称未設定 :03/12/30 12:05 ID:nJzu3GMo
NSTextView等で日本語文字列をダブルクリックしたときにかなり良い精度で文節を選択できてるんですが、 これってどこかにそういうAPIがあるんでしょうか? 今10.3しか環境が無いのですが、こいつにはLAServerにLAJapaneseFastTokenizerってLA環境があるんです。 しかしどこを探してもそれに関する記述がありません。 もしかしてこれが目的の物でかつ隠しAPIでアクセスするようなものなんでしょうか?
>>267 ドキュメントちょっとみた感じだと、NSAttributedStringのdoubleClickAtIndex:→
nextWordFromIndex:forward:がその機能っぽいね。
>>267 UnicodeUtilitiesのUCFindTextBreak()です。
Cocoaの中身は大部分Carbonであることをお忘れなく。
270 :
名称未設定 :03/12/30 22:34 ID:FfmwHk4q
モニタの輝度のコントロールはどのAPIから行うのでしょうか?
271 :
267 :03/12/30 23:18 ID:VmS5H350
>268-269 ありがとうございます。 双方とも期待通りの動作をいたしました。 Wordにだまされたって感じですね。文節なのに。。。 ダブルクリック時の云々と書いてるので確かにこれらのAPIで取得できるのが正しいとは思うのですが。 > Cocoaの中身は大部分Carbonであることをお忘れなく。 全然忘れてません。 とにかくLAServiceしか目に入ってませんでした。。。 もう年かな。。。
272 :
名称未設定 :04/01/02 07:13 ID:QE5QktKM
質問です。NSTableViewのrowがダブルクリックされたらある処理を させたいのですが、そのためのdelegate methodは存在するのでしょうか。 リファレンスを見たのですがどうもそれらしいメソッドはみあたりません。 delegate method以外の方法があれば教えていただけないでしょうか。
…ってすいません、ちょっと前で思いっきりガイシュツでした。 お騒がせしました。
>>272 setDoubleAction:@selector
ProjectBuilderのソースの索引で Cocoaのクラス(NS*が全部)が、突然に作成 されなくなるときがあるんだけど、どうすればいい? クリーンしてもダメなんだよ。 OSX 10.2.8, PB v2.1
プロジェクト名にスペースがあると(例:Currency Converter) ビルドできないみたいなんですが これって普通ですか?
>>276 ProjectBuilder ではできなかったような気もする。
XCode ならできた。
278 :
名称未設定 :04/01/10 13:05 ID:TfU85+hh
複数のサウンドファイルを同時に再生する方法はあるでしょうか。 NSSoundだと独立したスレッドで走らせても他のサウンドが再生中のときは 何もしてくれないようなので……
279 :
名称未設定 :04/01/12 16:17 ID:hPy0VHMn
プログラミングを始めようと思っていて、C言語かJavaらへんから学びたいのですが。 あまりMacの書籍がないので、for Windowsの書籍でも構わないのでしょうか?
すべての言語に対して普遍的なことではないですが、Cでは書籍がWin向けのものでも学べます。 コンパイラの扱い方などは参考になりませんが。 そして基本的な言語仕様を学んだ上で、Macでの考え方を身につけてくださいね。 がんがれ!
>>279 Windows用でもなんでもかまわないと思うけど、要注意なのはGUIを操作する事にばかり注目する
タイプの本だと大半がゴミになると思う。
gccの本とかがいいかもね、OSXでTerminal使ってとかなら。
GUI風味考えるとJavaってのもいいんかね?Java使ってないんでわからん(w
282 :
名称未設定 :04/01/12 16:50 ID:hPy0VHMn
>>280 ,281
本当にありがとうございました。頑張ってみます。
ついでに教えてください。
Windows用Mac用関係なくおすすめの書籍の名前を教えていただけませんか?
できればMac用が良いのですが・・・。
漏れも最近始めますた。 Cocoa+Objective-CでOO勉強しつつ自己満足なシューティング作りたいなとか 思って、この連休にいろいろサイト漁りしてました。 「Cocoaはやっぱり」にあるCocoaXevi弄ってるんですけどさっぱりですね。 自機追加してキー入力受けて動かすところまでやりたかったんだけど 挫折しちまったい。 FlyObjectコピって(継承は混乱するのでとりあえずまんまコピ) MyObjectクラスっての作って XeviViewの初期化メソッドの部分でMyObject初期化して、 drawRectメソッドに自機表示の処理書いて、 ……keyDownメソッドからどうやって自機の座標にアクセスしたらいいんでしょう。 別メソッドでallocしたオブジェクトだし……。ここでallocしたら初期化されてなんのこっちゃわからんし。頭が豆腐状態です。 あっという間にNSLogの嵐ですがな。ええん助けて。 ベーマガ世代の趣味グラマなんで見当違いの事言ってる気がしますが なんか教えてください。具体的な説明頂けなくても抽象的な表現でも構いません。
>>282 MacOS Xプログラミング入門 Objective-C 萩原剛志氏著 広文社刊
が、BASIC育ちな漏れにもなかなか解りやすいです。
つっても半年で283で投稿した程度の理解度ですが、俺の頭の悪さ差し引けば
結構良書かも。すんなり入れます。
質問です。 1) A4の紙の指定の場所(例えば、左から3cm, 上から 4cm)に 文字を印刷するには、どうしたら良いのですか? ViewのRectの単位が分からないんです。 2) 何百ページにもわたる文章を印刷する場合、やっぱり それだけ分の巨大なViewを作成しないといけない? 3) 例えば、カード型データベースを印刷するとして、一人分の データが1ページに収まるか、2ページ以上になるかは、描いて みないと分からない場合の処理は? 4) 上の話にも関係するのですが、ドラフト印刷というか、 (何ページ目とか考えずに)1ページずつ、どんどん印刷 するような処理をしたいのですが、可能?
286 :
283 :04/01/12 23:15 ID:FJaqB447
あー、すみません自己解決でした。 単にMyObjectをXeviViewに持たせればええやん何電波書いてんだ俺 interfaceにMyObject入れて初期化して動きました。 お騒がせスマソ
287 :
282 :04/01/13 00:21 ID:uVP7oe7C
>>283 本当にありがとうございます。参考にさせていただきます。
>>282 Objective CとCocoaフレームワークということだとやはりヒレガス本とかって事になるんだろう
けど、この辺の本の場合前提としてCの知識を要求される事があるので、普通にC言語入門とか
書いてある本をとりあえず1冊買ってきてじっくり読みながら試すというのをやって置くといいん
じゃ無いかな?
IDEの説明とかそういうのが書いてあるやつじゃなくて、できるだけコマンドラインの操作で
済むような(パッと見つまらない感じ?)の本を選べば環境に関わり無く読めると思うのだけど、
途中で日本語の文字列を使うような本は処理系依存の罠があるので、教科書通りに書いたんですが
動きません!とかって質問を2chのスレだのMLだのにポストして過去ログ読め!って怒られる(w
とりあえず素のCの文法を解説してるのを立ち読みして、最後までついてけそうって思える本を
1冊。頑張って最後まで読む(もちろん練習問題とかにでてくる問題を自力でくめるようになるま
で頑張ってみるって意味ね。ただだらだら読むだけじゃだめだろな)。
で、文法のあらましが判ったところでオープンソースのソースをいくつか落としてきてそいつの
ソースをじっくりどういう事をやってんのか理解できるまで読む。で、同じような機能を別の書き方
で実現できるか挑戦してみたり、いろいろ理解を深める方法はあるので、試す。
で、その位行くとObjectiveCの追加部分をちらっと見て、Cocoaのクラスに順に馴染んで行く
感じでやっつけるだけでもだいぶ簡単じゃんか!って思えるようになるとおもう。
とりあえず頑張れ。
Cocoa+Objective Cでゲーム作ろうにも参考になる資料が少ないですなあ。 キー入力判定が巧く逝かない感じでつ。引っかかるというか。 サンプルの豊富さからC+SDLに逃げかけてたり
>289 NSInputServer,NSInputManagerあたりが使えないかな?
を、使えそうですね。 帰ったら早速試してみます。thx
292 :
285 :04/01/13 18:04 ID:orSQqLy9
うう。放置されてる。 printInfo見たら、size in pointと書いてあった。 でも、72point=1in.か、72.27point=1in.か? そこまでは書いてないなぁ。
293 :
名称未設定 :04/01/13 21:17 ID:OZWgBMkD
ProjectBuilder v2.1 (10.2.8)でブレイクポイントで止まった後に GUI上でプログラムカウンター移動できないんだけど、なんかいい方法ない? 赤いバーをドラッグしても、表示は移動されても実際には移動されない。 (gdb) set $pc=XXXでアドレス設定できるけど、行との関連がわからない。
294 :
283 :04/01/13 23:19 ID:VgqRrakK
>>294 変数myがnil(空)になってますよ。
というか、せっかくXcodeにはデバッガが付いてるのですから活用しましょう。
そうすればこのバグも簡単に見つかっていたはずですよ。
レスどうもです。明日早いので仕事明けたら挑戦します。 デバッガ使っても見方が良く解らなかったですが、myが一覧に ないなあとか思ってた所でした。ドキュメント読んでおくます うーむ。なんで空なんだろう。
>>294 チャレンジ3分デバッキング
1. 暫定で myに代入してみるテスト
my = [ [ MyObject alloc ] init ];//自機初期化。
中央に自機と背景スクロールは表示されるようになった。
2.背景表示をコメントアウトしてみると、
- (void) drawRect : (NSRect) rect {
// [ imgGround dissolveToPoint : NSMakePoint( 0, groundOffset ) fraction : 1.0 ];
自機が2機表示されているようだ
3.っていうかLogに「initialized.」が2回表示されているので、
初期処理からして2重起動されてる様子なんですが。
3分終了。
>> 298 nibファイルをIBでリストで見るか、作り直すとわかるかも(GameViewが二つある)
直ったぁぁぁぁぁっ!<会社で試すな my = [ [ MyObject alloc ] init ]; でいいのか……。 MyObject *my=[ [ MyObject alloc ] init ]; とかやって混乱してました。 さらにIB慣れてないせいでGameViewが二つあるお馬鹿な状態を 放置してたみたいです。 二日悩み通した部分を3分でデバがれるとは。。みんなありがとう。 追伸:300げと
301 :
289 :04/01/14 21:44 ID:CWTWds0y
>>290 違うみたい。インプットメソッド関連の模様。
どうしたもんかな。
カーソルキーのコードがマスクで取れなきゃ斜め入力もできない。
NSEventMaskFromTypeで調べてみるとカーソル
NS[Left,Right,Up,Down]ArrowFunctionKeyが
1,2,4,8返してるから、これらの入力を判定できればいいんだけど。
keyEventWithType周り調査中……。
303 :
名称未設定 :04/01/14 23:48 ID:xemtRx3r
>>302 CarbonだけどGetKeys()で全部まとめて取得する方法もある。
いろいろソース公開されてるプログラム漁ってたんですが、、 丁度carbonでgetKeys()ってのばっかりヒットしてました。 carbonのAPIってcocoaベースのプログラムから引っ張れるのかとか さっぱりわかってないんですが、そんな方面を調べてます。 ……もう日付変わっちゃったのか。 続きは明日にします。おやすみなさいー。
指定するファイル名間違ったのでうpしたファイル名慌てて直したなんて そんな事違うですよ?
モテモテ王国みたいな日本語だな
デリゲートって難しい……。
BGMをループさせたいんですが、そういうAPIが見つからなかったんで
「sound:didFinishPlaying:をサウンドオブジェクトからデリゲートされている
クラスに書」きたいのですが(引用:
ttp://www.oomori.com/cocoafw/ApplicationKit/NSSound/sound.html )
慌てて萩原本の該当項目読んでもさっぱりわからんです。
定期的に
if([soundBGM isPlaying]==NO)
{
[soundBGM play];
}
やったら案の定、終わってから再生までが微妙に開くし……。
(一応サウンドファイル自体はしっかりループするように設定してます。
以前アプレットで綺麗にループできてた素材なので。)
BGMループさせるのってどうしたらいいでしょうか。。
デリゲート使うのが正解な気がするので勉強中ですが、見当違いな事
やってるんじゃないかという恐れもあるので。
あ、あれ?Xcode1.1ってObjective C++じゃないの? for(int i=0;i<100;i++){} がエラーになるんですよ。 { int i; for(i=0;i<100;i++){} } は通るのに。 C++だけど変数宣言はC同様ブロックの先頭のみしかダメなのかな。
Objective-CであってObjective-C++ではないと思う。
>>309 このスレか前スレに全く同じ話が出ている。
>>311 ぐぐると拡張子が.Mまたは.mmの場合にObjective-C++になるみたいですね。
明日拡張子変えて試してみようと思います。
やべ、寝ないと明日も会社遅刻しちまう<ダメ人間
おやすまなさい。
>>311 OSX 10.0.xまでのProject BuilderにはObjective-C++無かったけど、サポート済み。
>>314 えっと、Xcodeの設定だと
プロジェクト > 情報を見る > GNU C/C++ Compiler > Language > Compile Sources As
が According to File Suffix (ソースファイルの拡張子を見て判断する)
になっているはずなので、固定したいのなら変更することも可能。
モアII自体には対応してるんだから大丈夫じゃないかな。 リン糞がモアII24M→40Mにアップした事に気づいてないんでしょw NTT接続をISP経由する場合、申込みとかブリッジしてるだけのはず。
317 :
316 :04/01/16 11:08 ID:9vxspmze
誤爆ですスマソ
誤爆ついでに
>>313 をビルドしてみたよ。意外と快適に動ててビックリ。G4-450Dual。
以前どっかで見かけたアメさんのCocoaなシューティングは何だったのかな・・・・。
なんかマウスで動かして操作性悪い上に糞重い奴。
あれ見て、Cocoaでゲームに挑戦するのは難しいという先入観に繋がってた。
俺も何か作ろうかな。Cしか知らんけど。
>>310 ,314
コンパイラに-std=c99与えたら多分通ると思うけど。
C99からそういうやつもサポートされてるから。HMDTでも似たような話を見た気がする。
間違ってたらごめん。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040115.zip 今日やったこと:
・IBでカスタムクラスにアウトレット作る方法探すのに手間取ってみた
・怒られる前に画像リソースを書き起こした。急にヘボくなっちった……。
PNG32そのまま使えるってのはいいですねぇ。
・拡張子を.mmにしてObjective-C++にしてみた
>>311 ,319 拡張子変えると
>>310 の前者で通りました。
なんか警告でてるけど……。
・ゲームの状態遷移の管理方法を仮実装。
無茶苦茶頭悪い事してる気がする。
・デザインパターンの本買ってきた。
買ってきただけ。
明日やりたい事:
・デリゲート使ったサウンドループ処理をがんばる
・弾と当たり判定まで行けたらいいなぁ
・設計見直さないとまずいのが良く解るこのぐちゃぐちゃなソースを
どうにかするのは一旦ゲームとして仕上がってからにしようと思ってたり
>>318 以前Windows+HSPでゲーム作ってたんですが、
それよりは処理速い感じがしますけど、けっこう一杯一杯です。
ゲーム用途で高速化しようと思ったらOpenGLしか無いのかな……?
ふわぁ。道は長い。
お休みなさい。
>>321 最近Cocoa&ObjectiveC勉強し始めたんですが、自分はプログラム覚えるには、まず本を読むより、
他人が書いたソース読むほうが早いと思っているので、大変参考になります。
>320 ガンガレー!
>>321 ループするBGMはNSMovieViewをウインドウに貼りつけて、
NSQTMovieLoopingPlaybackモードで再生してやる方が良いかと。
これなら音量調整なんかも簡単ですし。
325 :
319 :04/01/17 11:28 ID:kHZIIsqO
>>320 Xcode1.1でそのままコンパイルしてみました。
多分.mmにしたせいで、C++関係の警告が出てると思います。いまいちC++のことは
分かってないけど……"initialization to 'int' from 'float'"とか出てるので型のキャスト関係の
警告が出てると。C++ってその辺きついんだったけ?
IBMからコンパイラが出たねぇ。Objective-Cにも対応してるらしいからこれから出てくる
Cocoaアプリが楽しみ。多分高いんだろうなぁ。
>320 とりあえず1点だけ。 初期化時以外に initWithArea: を呼んでますがこれはよくないです。 setArea: を作ってやるのが良いでしょう。 initWithArea: の時もself に対して setArea: を呼べばいいだけです。 やっぱりもう一点(w 共通部分は可能な限りスーパークラスに持たせましょう。 -(void)setArea:(NSRect)area {} // 何もしない 必要ならサブクラスがオーバーライド -(id)initWithArea:(NSRect)area { if( (self=[self init]) ) { // super じゃなく self [self setArea:area]; } return self; } をスーパークラスが実装していたとすると... って言うのもありです。 >325さんのキャストの警告回避はC++的には static_cast<int>(val) ですね。(int)val より安全になりますしね。 ガンガッテ!
Cocoa+Javaはどうなの?
>>325 参考になります。とりあえず警告取れました。
C/C++も合わせて勉強中なので実のところ良く解ってないですが。
>>326 参考になります。設計手直ししてみてます。
共通部分統合してソースがまとまっていくのは楽しいですねえ。
実装は泥沼化してますがw、勉強しつつ頑張ります。
>>327 要はcocoaへのアクセス方法が提供されてるJavaです。
XcodeではJavaのインストラクションは自動補完が効かないです。
利点は手馴れたJavaのAPIも一緒に使える点ですかね。
Cocoaでやるより多少遅い、起動に時間がかかるというデメリットが
あるみたいなのですよ。
たまにJavaのブリッジ部分にバグあると言う方を見かけるのが気になったり。
pure JavaのインターフェイスがInterfaceBuilderで作れたら
面白いのになあ。Java1.5の正式版が出てきたら再挑戦してみようかな。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040117.zip やったこと
・オブジェクトの設計ちょっと見直し
・敵と自分の弾を出す処理
・当たり判定用の空実装
・訳もわからずながらとりあえずビルド警告対処
今晩以降時間取れれば
・当たり判定を処理してみたい
・動く奴らの処理をオブジェクト指向で纏めたいなあ
・ループ処理に
>>324 さんの手法を試してみたい
・敵の弾を自機に向かわせたい
>>322 ゲームの参考になるソースが少ないですよね。
他の方の参考になると嬉しいです。まだまだソース汚いですが、
OOならではの設計勉強しつつやるつもりなので気長に見守ってやってくださいw
アルゴリズムの多くが「cocoaはやっぱり」のwebにあったサンプルそのままなんで、
そちらを参考に書き起こしてみるのもありかも。
さて敵の弾を自分に向かわせるには、と。
設計以前に三角関数ってなんだっけという数学レベルにて脳みそ沸騰中です。
309のリンク先のコードをちょっとだけ変更 @interface Loop : NSObject { int doLoop; } @end @implementation Loop -(void)setLoop: (BOOL) flag { doLoop = flag; } -(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool { NSLog(@"didFinishPlaying"); if (aBool && doLoop) { [sound play]; } } @end これでループはするよ。mp3の20秒ぐらいのファイルではできなかったけど、aiffならできた。(MacOS X 10.3.2+xcode 1.1) mp3でちょっとだけ次のループ時に途切れる。音量コントロールもできないし。
stray "\201"ってなんだ……。 日本語で書いたコメントがパースエラー起こしたりして偉い面倒なことに……。
アプされてるプロジェクトで NSSound を使う方法と NSMovieView を使う方法の両方について BGM をループさせる実験をしてみたけど、 どちらも微妙に切れ目ができる。 サウンドファイルを QuickTime Player でループ再生する時は切れ目はできないので、 実装上の問題という気はするが。
334 :
319 :04/01/18 14:06 ID:mr4QBO2Z
>>328 ,329,331,332
ガンガレ〜。C++はちょこっとかじっただけで自分も勉強中の身でございます。
C++に限らず中途半端もんだけど……Cocoaも最近さわってないし。
日本語のドキュメントがもっと増えてくれるとありがたいけど。
ぬう……。 NSObjectのサブクラスにはNSImageやNSSoundは入れられないのでしょうか。 スプライトクラスっぽいの実装しようとして、charactorオブジェクトにNSImageを 含めたいのですが、Application Kitの持つクラスは無理なのかな。 エラー "error:statically allocated instance of Objective-C class 'NSImage'" に従って static NSImage charactorImage ;とかやったんですがパースエラー。 タスケテー
あ、ポインタ渡せばいいんだっけか。 失礼、もうちょい調査続行しまつ
なんとかなりました。 あー、ポインタこんがらがる……。
質問なのですが 10.2から10.3にアプグレし、 10.2上で作成したプロジェクトを10.3上でXcodeで開いて見るだけして(保存は無し)、 PBで再びビルドした所 warning: Precomp'/System/Library/Cocoa.framework/Headers/Cocoa.P'version number is 15 instead of 25,ignoring precomp の様な他類似のエラーが出、ビルド出来なくなったのですが これは10.3になってフレームワークの位置や仕様が変わったという事なのでしょうか? プロジェクトを開くと同じウインドウが2枚開いたりと動作自体もおかしいのですが。 対処法が全く判らず、大凡でも原因を推察出来る方が居ればアドバイスをお願い出来ないでしょうか?
>>338 そろそろ「Cocoaでシューティングゲーム作るよ!」
みたいな別スレにした方がいいかと。
341 :
338 :04/01/19 13:02 ID:wjqdB2oH
>>339 わからんですが、Xcodeは1.1にうpってますか?
開いて見るだけでもビルド関連のファイルを書き換えられると思うので、
buildフォルダを一旦消してからPBで開きなおしてみては。
>>340 そうですね。まぁ新スレ立てて盛り上げる自信も無いので、
製作記録をweb化しといてマ板かム板あたりの様子をみて移動しようと思ってます。
始めはゲ製作技術の「macでゲームを作るスレ」に移動しようかと思ったのですが、
最近はHSPforMacの話題が中心みたいでちょっと様子見中。
どの道オブジェクト設計の勉強し直しに入ってくるのでしばらくupに至らないかも。
>338 どうしても気になるので。 初期化メソッドで -(id)init.... { [super init]; ... return self; } てな感じでやってますが、危険極まりないので面倒でも -(id)init { if((self=[super init])){ ... } return self; } とやってください。 [super init] が nil を返した場合が考慮された無い。 この場合関係ないが、[super init] が self 以外のインスタンスを返した場合が考慮されてない。 (initメソッドが self 以外を返す場合、 self が release or autorelease されている可能性があります) というのが問題があります。 ややこしい話になりますが、インスタンスメソッド内で使える self というものはあくまで メッセージ送信の送信対象のインスタンスであって [super init] によって上書きされることはありません。 単なる引数と同列のものです。
おお、なるほど。if文の中で初期化とエラー評価を一緒にやっちゃう訳ですね。 参考になります。thx!
>343 問題点はそこじゃないです。。。
>>344 ぎゃあ。
return selfが問題なのかな。。すみません、混乱してます。
NSObjectがinitでself以外 / nilを返す場面というのが
ちょっと解ってないですが、とりあえず鵜呑みでコード直しておきます。
346 :
339 :04/01/19 17:07 ID:bQc/FKYh
>>341 1.1にはうpってます。クリーニングも試し済みですが出来ませんでした。
PBとXcodeって互換性が無いものなのでしょうか?
サブクラスでオーバーライドされてない限り、NSObjectがinitでself以外を返すことはないよ。
>>346 Foo.pbprojをxcodeで開こうとすると
>警告
“Foo.pbproj”は、古いバージョンの Xcode で保存されています。
このバージョンで開くと、プロジェクトは更新され、
古いバージョンの Xcode では読み込めなくなる場合があります。
このプロジェクトを開きますか?
開かない/開く
のダイアログがでるのだが?
ちなみに、xcodeで新規プロジェクトを作ると、プロジェクトファイルは
Foo.xcodeになる。
はう……今日挑戦した大掛かりな設計変更、全部うまく行かずボツテイク。 スプライトクラスのメソッド自体に画像書かせるのも、 キャラクタ配列一つに集約してEnumeratorで一発処理させるのも、 配列オブジェクトの要素削除・生成でキャラクタの存在を管理するのも、 ことごとく失敗。ザコですか俺。 なんでクラスメソッド作れないんだよう。 エラー294個ってなんだよう。 無理に進めるとBASICでやってた時より効率悪くなりそうなんで、 萩原本のサンプルソース全部手打ちしてObjCの理解度上げてきます。 その間ソースのうpしばらく休止ます。。
オイラCをかじったことある程度なんですが ちょっと大きめのモノを設計するのにも やはりフローチャート使うんでつか? それとも今は違う設計図?手法みたいのあるもんなんでそか オブジェクト指向とかだとクラスとかあって 最初にちゃんとしとかないと大変そう
>350 UMLを調べると幸せになれる可能性あり。 #ObjCでCASEツール作ろうとして挫折したのは気のせいだと思う。
>>349 頑張れ、負けるな。
概念の理解っつーオブジェクト指向の最初の壁は突破しとるんだ。
デザインパターン勉強しながら、いったんゲーム離れてツールでも
作ると良いんじゃないかな。
逃げなければ、いつか閃くように書けるようになるさ。
>>349 >エラー294個
括弧の閉じ忘れとか、余ってるとか、#import <Foundation/Foundation.h>してねーからかも
354 :
353 :04/01/21 14:35 ID:F8agScia
訂正 AppKit.h内でFoundation.hもimportされてる。スマソ。
>>338 をビルドしてみた。
Cocoaの描画って重たいねえ。NSImageじゃなくて、
もっと軽い描画用APIは無いのかな?
NSBitmapImageRepクラスの使い方調べてみるか。
ていうかRepってなんだ?
>355 常に全画面描画し続けてるからでつ。 キャラクター移動時に元の領域の再描画、移動後のキャラクターの描画だけにすれば相当早くなるとおもいまつ。 初心者の人且つ作り始めなので最適化までは相当時間がかかると重いまつ。 こういう風に情報小出しにしつつマターリと見守ってあげましょう。 > ていうかRepってなんだ? たぶんレプレゼントのことだと思う。
まぁ、いきなりOpenGLってわけにもいかんだろうし。
そんな貴方にGLUT。 Cocoaとは無関係になっちゃうのが諸刃の刃。 だが素人にもお勧め。(以下ry
OpenGL使って2次元描画するサンプルがめっからなかった訳ですが。 3次元やるにしても、最低限どんだけの数学知識が必要なんだろうと 思うと腰引けまくり。 やっぱDirectX相当の事するにはOpenGL叩くしかないんですよねぇ。うーむ。 ……とりあえずのらくらとgoogleでサンプル漁ろw
ベクトルと行列演算、三角関数は最低限押さえる必要があるかな。 あんまり書きすぎるとスレ違いなのでこの辺で。
>>360 レスthxです。今のうちに三角関数慣れとけば頑張れそうかも。
ム板で参考になりそうなスレ見つけたのでROMっときます。
>>356 その他皆様
ヲチthxです(w。今後とも宜しくでつ。
今のとこ描画性能の最適化より設計手法の勉強中心に考えてたりしますが、
実装が安定したり行き詰まった時とかにいろいろ試してみます。
>>361 メソッドの名前が違うよ〜。
-makeObjectsPerformじゃなくて-makeObjectsPerformSelector。
メソッド名調べるときはCocoaBrowserかDocoaBrowserを使うと楽。
>>361 弾幕がいい感じ。
でもやっぱり軽くして欲しい。
ageていいスレだと思うんだが、sage進行なのは何か理由が?
良スレはsage進行。これ常識。
そんなもんか。了解。
質問です。 Interface Builder でボタンの key equivalent を Return に設定したんですが、 ビルドして、リターンキーを押してみてもうまく機能しません。(クリックすると ちゃんと機能する)ウィンドウ上でちゃんとデフォルトボタンとして点滅している ので、key equivalent 自体はちゃんと設定されていると思うのですが、どうして アクションが呼び出されないのでしょうか? 何か他に設定する必要があるの でしょうか? こちらの開発環境は Mac OS X 10.2.8 に Developer Tools 2002 December です。
369 :
名称未設定 :04/01/23 03:30 ID:bCjcoKh4
質問age
ボタンを貼付けてある Window が Key Window になっていないとか。
371 :
368 :04/01/23 05:44 ID:6zACGKIO
ウィンドウ1つしかないアプリなんで勝手に key window になっている はずなんですが… それに、問題のボタンの隣には command + delete を key equivalent として割り当ててあるボタンがあるんですけど、こっちは うまくいってるんです。あ〜、何が問題なのやら…
firstResponder関係? とか思いつくままカキコ
>>371 隣のボタンとキー設定を入れ替えたらどうなる?
374 :
368 :04/01/23 16:15 ID:8t1l2e8x
>>371 問題のボタンは割り当てた key equivalent に反応しましたが、
今度は Return を割りあてた隣がダメになりました。
どうやら Return だけ、どのボタンに割り当ててもうまくいかないみたいです。
プログラム以外のところに問題があるのでしょうか? キーボード回りとか…
375 :
368 :04/01/23 16:16 ID:8t1l2e8x
376 :
368 :04/01/23 16:40 ID:8t1l2e8x
テスト用にもう一つプロジェクト作ってやってみたらデフォルト ボタンがちゃんと機能した。Interface Builder 上でのテストでも Return に反応してちょっとボタンが点滅しているのがわかる。 もしかして、nib ファイルのバージョンかなんかが問題なのか。 ちょっと古いプロジェクトから nib ファイルだけもってきたのが いけなかったのか?
377 :
368 :04/01/23 17:34 ID:jGHWzLEs
自レス続きスマソ 372 のいうことがずばり正解とですた。 同じウィンドウに TextView があるんですが、こいつのせいでした。 結果を表示させるだけの editable じゃないやつなので、とりあえず ウィンドウの initialFirstResponder を問題のボタンに設定したら うまくいきました。
なるほど。 クイズみたいでおもろい。
379 :
372 :04/01/23 20:14 ID:pRjSSbjn
ヤター。 なんかくれ。そうだなぁ、CocoaのAPI完全和訳キボンヌ
380 :
368 :04/01/23 20:55 ID:jGHWzLEs
でも、ボタンを first responder にするとアクティブなテキストフィールドを 囲む青い枠でボタンが囲まれちゃってなんか変です。点滅はしとるは青い枠で 囲まれとるわで、注意を引きまくりの存在感ありまくりです。 どっかで keyDown: を横取りしてそっからボタンに performKeyEquivalent: でも送るように手を加えようと思います。
>CocoaのAPI完全和訳 俺にもくれ!!
NSTextFieldにアウトレット繋いだビューからsetIntValueしても値が変わらないぃぃ 警告も出ないー 検討つかねぇぇぇ なんでやー うがー なんかInterfaceBuilderの習得に一番時間掛かってる悪寒
>NSTextFieldにアウトレット繋いだビュー て具体的に何ですか? カスタムビュー? アウトレットって普通コントローラと接続しませんか?
あれ、そうなんですか? えーと。 MVCっての調べなおしてきます。ども。
あ、でけた。アウトレット名間違えてただけか……。 ゲームのスコアを表示する部品配置して、ゲームのメインループ担当してる カスタムビューから内容書き換えたかっただけですた。お騒がせしてスミマセン
あ、忘れてた。pキーでポーズできます。
388 :
368 :04/01/24 05:34 ID:Thvaxg1i
結局、NSTextView にカテゴリをあてて対応しました。 ボタンに key equivalent として Return を設定しても機能しないのは 多分、TextView が keyDown: を受け取った際、単に Return だけが 押されていた場合は、テキストの編集に関するものと受け取ってその イベントをそこでトラップしてしまうため。そこで、下のカテゴリで keyDown; を単に次のレスポンダへパスするようにしたところ、問題の ボタンも正常に key equivalent に反応するようになりました。 @interface NSTextView (PassKeyDown) - (void)keyDown:(NSEvent *)theEvent; @end @implementation NSTextView (PassKeyDown) - (void)keyDown:(NSEvent *)theEvent { // 次のレスポンダへイベントをパス [[self nextResponder] keyDown:theEvent]; } @end こういう場合、サブクラスにするべきなんでしょうけど、 そこはめんどくさかったということでひとつ……
ほっとくと実メモリが増えて行くぅぅ……。 ObjectAllocツールの見方を調査中
>>389 それはひょっとして自前のループの中でがんがん一時オブジェクト(生成時に
autorelease されてるやつ)を生成してるんじゃ……
アプリのメインイベントループの終端までいかないと AppKit が用意している
autorelease pool が解放されないんで、一時オブジェクトがそのままメモリ上に
残ってしまっているのでは?
そういう場合は自前で autorelease pool を用意して、ループのブロックを
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// ループ内の処理
[pool release];
}
とかすると幸せになれるかも。
その辺のことがわかってる人だったらゴメソ
>>390 ども。萩原本持ってるんで概念は一読してるんですが、
理解が及んでない感じで試しては落ち試しては落ちを繰り返してます。
けどこの辺は手前で格闘しとかんと身に付かない気もするし、
頑張ってみます。
392 :
390 :04/01/25 15:26 ID:3JLXGqzD
落ちるということはおそらく解放後のオブジェクトを参照しているという ことですよね。一時オブジェクトとして使い捨てるものと、それでは 都合が悪いものとの峻別ができていないのではないでしょうか? どの言語でやるんでもメモリ管理はひとつの山場ですんで頑張って下さい。
誰か俺に frame と bounds の違いをわかりやすく説明してくれ! 毎回混乱する。
両方試して動いたほう採用
>>395 その場はそれでしのげるかも知れんが、そういう不確実な部分を抱えている
というのは何だか不安じゃない? 絶対に自分以外は使わない、というなら
別だけど……
>>393 >frame と bounds
ぐぐったら、はじめに出てきた(w
シューティングおもろい。レベル12以上無理。 けどマジでメモリ使用量増えていくな。 これ、やったら再起動すれば大丈夫? すげー怖いぞゴルァ
>>399 OSまでメモリリークする事はないよ。見たけどそんなヤバいコードは無い。
単にdeallocの設定が「一切」行われていないのが原因。
配布レベルじゃないとは思うけど、勉強中って言ってるんだし多めに見てやれよ。
敵の出現、敵と自機の弾の生成で全部allocのみ。 dealloc release全然無いのね。毎ループ増殖しまくり。 これで動作するんだからOSXが偉いのか良くわからん(w
メモリ管理が全然なのにそこ迄動作を作れるてのも凄いな
メモリ管理とかはアプリのデザインとは関係ない部分だからね そんな部分に時間をかけずに済めば、それに越したことはない
メモリリークしまくりはまずいっしょ。
>404 メモリリークを潰すサンプルと考えればよい。 ゲームで遊ぶスレじゃないんでそこんとこ、よろ。 # サンプルとしては、設計があれだが。。。 # どうしても気になる場合はリファクタリングのサンプルとして。。。
OOP初心者の書き方だな。でも最初がC++でなくて良かったかもな。 変な設計のまま突き進んでる訳じゃないようだし、何度も設計変更 しまくれば経験値上がるだろうな。 ここからソースの整理、メモリリーク潰しの過程を晒してもらえると 価値が出てくるかもな。サンデーグラマーのようだし、まあ煽り気にせず マターリ頑張ってな。
>386のプロジェクトファイルを Xcode1.1で開くと プロジェクトスタイルのGenerate Debug Symbols Onに変更しても デバッグシンボルをONに出来ないんだけど。 PBからXcodeへの変換が不完全? buildしても最初のタイトル画の表示部分でEXC_BAD_ACCESSで実行できないし。
NSProgressIndicatorとviewDidEndLiveResizeメソッドについて質問させてください。 下記のようにviewDidEndLiveResizeメソッド内でプログレスインジケータを回転(アニメーション)させるtestを呼んだところプログレスインジケータは回転しないのですが、回転しない理由と回転させる方法をご存知の方、教えていただきたくよろしくお願いします。 今のところ、viewDidEndLiveResize以外から呼ばれたtestはきちんと回転します。謎です。 -(void)viewDidEndLiveResize { [ self test]; } -(void)test { [progressIndicator startAnimation: self]; //NSProgressIndicator 重く長い処理; [progressIndicator stopAnimation: self]; }
とりあえず viewDidEndLiveResize が呼ばれているかどうか調べてみたら。
質問です。 一部のアプリケーションは、バンドル名自体は TextEdit.app のように英語ですが、 Finder で表示される時には「テキストエディット」のように日本語で表示されます。 自作のアプリであれをやるにはプロジェクトにどういう設定が必要なんでしょうか?
Japanese.lproj/InfoPlist.strings CFBundleName = "テキストエディット";/* This is for the localized "short" name in the app menu bar */ CFBundleDisplayName = "テキストエディット";/* This is for the localized "long" name in Finder, etc */ とか?
412 :
410 :04/01/28 16:40 ID:cs72qT+8
>>411 nib ファイルのローカライズと同じ要領で InfoPlist.strings の日本語 variant を
作成して、CFBundleName と CFBundleDisplayName に日本語名を設定しておけば
いいっつーことですね。サンクス
413 :
408 :04/01/28 20:34 ID:rZceWFIy
>>409 さすがにそういうドチョンボはないです。
isDisplayedWhenStopped=NOなので、非動作時はそもそも画面に
表示されないので。
バックグランドではくるくる回転してるけど、
それがフォアグランドで表示されていないような感じなんだけど...
重く長い処理の合間合間に [progressIndicator display]; を噛ませてみたらどうだろうか。
イベントループが回っていないんじゃ。 ビーチボールカーソルは出ていないのか?
>>413 オーバーライドした viewDidEndLiveResize では必ず
[super viewDidEndLiveResize]
を呼べ。
ってドキュメントに書いてあるけど、これは関係ない?
417 :
408 :04/01/28 23:31 ID:rZceWFIy
>>414 いけそうな気がしたのですがダメでした。
助言していただき、ありがとうございます。
>>415 ビーチボールカーソルって虹色のやつですよね?
虹色カーソルは回っています。
ViewDidEndLiveResize以外のルーチンからtestが呼ばれたときも回っているので,
ViewDidEndLiveResize固有の事象ではないと思って放置していました。
関係あるのですかね?
ご指摘感謝します。
>>416 本件は全くのノーケアでした。
testを呼ぶ前に[super viewDidEndLiveResize];を挿入してみましたが、
状況は変わらず、プログレッシブインジケータは表示されるものの、
回ってはくれません。
この辺のドキュメントを読んでみます。
皆さんありがとうございました。
418 :
408 :04/01/29 00:26 ID:jcEBM6FH
追伸 inLiveResize == YESの時 progressIndicatorが回らないような気がしてきました。 NSProgressIndicatorソースコードって Developerフォルダに入ってたりしますか?
プロセスビュアーって無くなってしまったんでしょうか? 代わりになるのがアクティビティモニタって事なんでしょうか
そうだよ
質問です! id型のオブジェクトにcompare:とかlengthとかのメッセージを送ると multiple declarations for method 'compare' という風に警告を受けてしまうのですが、これを回避する方法って無いでしょうか? 実質的に害はないのですが、なんだか気持ち悪いもので。 ちなみにオブジェクトの中身は動的に決まるのでキャストはできません。
>>421 キャストしない限り警告される。
どうしても嫌ならisKindOfClass:で振り分けてキャストシル
>>408 重たい処理を別スレッドで走らせる方法ですこれをやると虹色カーソルが出なくなると思います
これで解決するかどうかはわかりませんが前にNSThreadの話題が出てた事だし参考までに
-(void) viewDidEndLiveResize
{
[self indicatorStart];
}
- (void)threadTest:(id)obj
{
id pool = [[NSAutoreleasePool alloc] init];
重たい処理;
[obj indicatorStop];
[pool release];
}
- (void)indicatorStart
{
[thinkIndicator startAnimation:nil];
//aTargetはレシーバとなるオブジェクトanArgumentはメソッドへの引数
//よく分からん場合は両方ともselfで動かしてみて駄目な場合はNSThread関係のサンプルを色々参考にして下さいな
[NSThread detachNewThreadSelector:@selector(threadTest:)
toTarget:(id)aTarget withObject:(id)anArgument];
}
- (void)indicatorStop
{
[thinkIndicator stopAnimation:nil];
}
ちなみに私はこの重たい処理が下手すると一時間くらいになっちゃうプログラム書いてます。。。
あの、Xcode 使ってる人に聞きたいんですが、Xcode の補完機能ってクラス名や メソッド名の補完だけですよね。Project Builder のエディタのプラグインである ODCompletionDictionary のようなマクロを展開してくれる機能なんかはあるん でしょうか? もしくは、そういうプラグインをサードパーティが提供することは 可能なんでしょうか? マクロの辞書鍛えまくったんで、Panther にして IDE を Xcode に移行した後も、 なんとかしてこの辞書を使いたいんですが……
>424 マクロもenumもインスタンス変数もローカル変数も引数もC関数も補完します。 展開するとマクロの意味がないので展開はしません。 メソッド、関数は引数並びも補完し ctrl+/ で次の引数に移動できます。 これと ctrl+E での行末への移動を使うとかなり快適ですね。 引数を取るマクロは今のところ使ってないので引数並びを補完するかどうか知りません。
>>408 重たい処理をしているあいだは回らないのは当然。並列してふたつの処理
(きみのコードとプログレスバーの処理)はできないから。
たしか、プログレスバーの描画を別スレッドで行うオプションがあったように
思うが、それは試した?
427 :
424 :04/01/30 13:02 ID:ePJFZd3B
>>425 マクロを展開するというのはプリプロセッサのことをいってるんではなくて、
例えば、init を
- (id)init
{
self = [super init];
if ( self ) {
_initialization_code_
}
return self;
}
に展開する。とかいうようなことです。
自分の場合、クラスやプロトコルの名前をまるごと一般的な実装例に展開するように
辞書に登録しているので、この辞書によるマクロ展開機能が使えないのは痛いなあ
と思っているわけでして……
428 :
424 :04/01/30 13:08 ID:ePJFZd3B
補足して言っておきますと、マクロの展開(といういい方がまずいのか)というのは 補完というよりはかな漢字変換みたいな機能のことです。ODCompletionDictionary の場合、上の例なら init とタイプして escape キーを押すと、下のコードに置換 されます。念のため。
429 :
421 :04/01/30 13:26 ID:1WsMd5qb
>>422 ありがとうございます。
そうなんですか。
せっかくの動的結合なのになんだかもったいないですね。
>>418 ウィンドウリサイズのイベントループの中ではインジケータは動かないってことなのかな?
viewDidEndLiveResizeもDidEndとはいってもイベントの中のはずなんで。
viewDidEndLiveResizeの中で直接呼ばないでNSTimerでもかませたらどうでしょう?
ウィンドウリサイズのイベントは終わらせて、別ループでインジケータを走らせるって感じで。
>>426 インジケータのアニメは何もしなくても別スレッドで動いてるもんだと思ってましたが違います?
>>408 ではviewDidEndLiveResize以外ではちゃんと回るっていってるし。
430 :
名称未設定 :04/01/30 14:40 ID:fwGz9LSp
>> 424 そういうのは「略称展開」とか abbreviation expand とか言うんんじゃないの? xcodeの標準の機能にはないようだけど、AppleScript書いて代用してみるとか、 ことえりに登録するとかかなぁ。 コード書きに専念するならxcodeは使いにくいので、emacs使ってるよ。 で略称展開の必要感じたら abbrev に登録する。 あんましxcode一本だけにこだわらないほうが幸せになれるんじゃないかな。
431 :
424 :04/01/30 15:18 ID:ePJFZd3B
emacs か…… よく聞くけど使ってみたことないなあ。 前から気になってはいたんで、ちょっと触ってみようかなあ。 でも、Terminal から起動できるものやら X11 上で動くもの、今ちょっと調べて知ったん だけど、Carbon 版なんてのもあるね。430 さんはどれ使ってんですか? でも emacs って CUI ベースのエディタですよね。俺、マウスないとなんか不安(笑) 使いこなせればそっちの方が速いとは聞きますけどね。
432 :
430 :04/01/30 15:34 ID:fwGz9LSp
情報が多いのでCarbon版を愛用してるよ。 マウスも*ある程度*は使えるけど、直に使わなくなるでしょう。 一ヶ月辛抱して使ってみそ。
433 :
424 :04/01/30 16:00 ID:ePJFZd3B
ダブルクリックで起動できて Aqua なウィンドウの Carbon 版 emacs なら 比較的すんなり入っていけそう。とはいえ、各種設定やカスタマイズやら、 手になじむような環境を実現するには emacs lisp が必須…… ってわけで、 Web で情報を収集してきまつ。430 さんありがとう。
コレクションクラスについて教えてくダサい NSArrayとNSDictionaryは分かるんですけど、NSSetとCFBug(NSBagってのはないな) っていうのはどんな構成で値を保持するもんなんでしょうか?
あ、CFBug -> CFBag ですね
436 :
名称未設定 :04/01/31 09:39 ID:uABf0LSX
しばらくwindows環境でVBを使ってプログラミングしました。 macに乗り換えたのですが、isightを使ったアプリケーションを 趣味で開発してみたいと思い始めました。 そこで質問なのですが、isightの制御するのにはQuickTimeAPIなど を扱うようですが、RealBasicとCodeWarrirorそれに10.3に付属して いたDeveloper用の開発環境ではどれがベストなのでしょうか?
>>434 NSArray……順序の概念あり
NSSet ……順序の概念なし
CFBag ……シラネ
>>436 開発言語は何? やっぱ Basic でないとダメなの?
AppleScriptあたりから制御できないかな。
Objective-Cでやるとやっぱり最初はオブジェクトの考え方に翻弄されるかも。
まぁ、まずは無料なんだからXcode試してみては。
BasicからCやJava始める時のよく引っかかるポイント
・if文とかでif(a=b){}としても等しさを比較してくれない。if(a==b){}とする。
・行の最後は「;」。
・ポインタで泣かない。
基礎知識得た後でこのページ一読しとくとよさげ
ttp://member.nifty.ne.jp/maebashi/programmer/pointer.html ・クラスで泣かない。
Appleで引っかかるポイント
・MSみたいに日本語資料豊富に用意してないけど泣かない。
438は親切そうだけど実は初心者なので適当に読みながすよろし。
440 :
410 :04/02/02 15:59 ID:BBL616D3
ちょっと前に質問した 410 です。 Project Builder にて InfoPlist.strings の日本語 variant を作り、 CFBundleName, CFBundleDisplayName などにアプリケーションの 日本語名を設定したのですが、ビルドしても、Finder が日本語名で 表示してくれません。他に何か設定が必要なのでしょうか? どなたか、自作アプリに日本語名を付けた方はいませんか?
441 :
439 :04/02/02 16:15 ID:5ZhDcVAF
442 :
410 :04/02/02 16:56 ID:BBL616D3
ああ、わかったわかった! まず Info.plist のエントリに CFBundleDisplayName を登録する必要が あったみたい。日本語 variant をいくら設定しても、肝心のキーが Info.plist に 設定されていないとダメなんだね。Info.plist と InfoPist.strings の関係が ようやくわかったっぽい。 というわけで、無事に日本語名で表示させること成功しました。 439 は的外れなことを言っているが、その情報は役に立ったので一応感謝しておく。
443 :
439 :04/02/02 17:24 ID:5ZhDcVAF
スマンスマン 文頭に「Info.plistの」が抜けてた。
ということでどういたしました。
>>410
質問す。 10.3からターミナルで日本語を入力するとバックスラッシュでエスケープされた文字になるけど、 あれをもとの日本語に戻すにはどうすれば良いの? NSTaskでtarとかzipを実行したときのログを表示したいんだけど、 日本語は全部エスケープされた状態で出てくるもんで。 詳しい人おながい。
10.2で設定していたことを、10.3で忘れているだけだとおもうのだが? “ウィンドウ設定”の“エミュレーション”で“非アスキーをエスケープする”のチェックをはずす。 あとはこの辺の設定 cat .inputrc set convert-meta off set meta-flag on set output-meta on それとも、bashなのにtcshの設定ファイルをいじっているとかか?
446 :
444 :04/02/05 20:15 ID:4cP99Eha
>>445 ありゃ、違うんよ。
ターミナルの話じゃなくて、自作のプログラムでエスケープされた文字を読込みたい、ということ。
分かりにくい書き方でゴメソネ。
NSTaskを使ってtarでファイルを圧縮するとき、
NSPipeをつなぐと圧縮中のパス名がPipeから出てくるんだけど、
10.3からは日本語はバックスラッシュでエスケープされた文字が出てきちゃうんで、
それをそのまま表示しても、どのファイルを扱っているのかわけ分からないよね。
なんでエスケープされた文字を日本語に戻したいんだけど、どうすれば良いんでしょうか?
という質問です。
エンコード一発でOKってものじゃなさそうだけど、何か一般的な方法ってある?
あ、UNIX初心者なんで変なこと言ってたらごめん。
追記。マルチバイト文字のときは途中で分かれちゃうかもしれないから dataを全部つないでからNSStringにしたほうがいいかもしんない。
>>446 自作のプログラムもなにも、既存のtarをつかうのであれは適切なエンコードを知るには
実行するときの優先言語環境が問題であることに変わり無いとおもうな。
450 :
446 :04/02/05 23:22 ID:4cP99Eha
>>447 NSString *string=[[NSString alloc] initWithData:
[handle readDataToEndOfFile] encoding:NSASCIIStringEncoding];
のことをいっているんだと思うけど、
10.2まではNSUTF8StringEncodingを指定することで日本語が読めた。
10.3だとUTF8ではバックスラッシュでエスケープされた文字が出て来る。
もしかしてエスケープを元に戻してくれるエンコーディングがある?
>>449 なるほど。それは全然考えてなかった。
10.2まではUTFだったんであまり気にしてなかったんだけど、
今回はエスケープ前のエンコーディングも問題になるのかも。
(ただエスケープされた日本語は3byteっぽいのでやっぱりUTF8+エスケープのような気もする)
ちなみにさ、優先言語環境ってtarに影響する?
多言語機能はOSX固有の機能かと思ってたけど。
要はどうやってエスケープをしているのかが分かれば、
それを逆にするだけだと思うんだけど・・・
誰か助けてー
Document-Based Application に関する質問です。 NSDocument のドキュメントに以下のようなサンプルがあったんですけど、 - (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType { NSAssert([aType isEqualToString: MyDocumentType], @"Unknown type"); fileContents = [data copyWithZone:[self zone]]; return YES; } これって、なんで渡されてきた data を copy してるんでしょうか? 単純に retain するだけじゃ何か問題あるんでしょうか? copy にかかる手間が 無駄だと思うんですが。
多言語機能の何がOSX固有? LANG= ; tar --help� LANG=ja_JP.UTF-8 ; tar --help� LANG=ja_JP.eucJP ; tar --help�
453 :
447 :04/02/06 00:43 ID:QAOJWovT
>>450 いや、そんなエンコーディングはない。問題点をよくわかってなかったみたいだ。ごめん。
ちなみにpipeからとってきたファイル名ってどうやって表示してる?
標準出力/NSTextViewとか。
>>451 まあ、Apple のサンプルにはけっこう変なのがあるんだけど、
たぶん、以下のどれか。
(1) NSData は immutable だから、copy してもどうせ retain される
だけだべ、と思っている。
(2) data がほんとは NSMutableData のインスタンスかもしれない。
げっ、もしそうだったら、どっかから変更されちゃうかも。
(3) メモリの局所性を高めるために、自身と同じ Zone にメモリを置いておきたい。
まあ、おれは普通に retain するけど。問題が起こるようなら copy
すればいいんじゃね?
てか、まあ、どうせ他のオブジェクトに変換するだろうけど。
455 :
454 :04/02/06 12:55 ID:qKVCxIjL
あ、もちろん全部仮定の話だから。 ほんとに - [NSData copy] が retain するだけかどうか、とか調べてないよ。
457 :
451 :04/02/06 15:06 ID:psDRf9VN
>>454 勉強になります。(1), (2), (3) のすべてが考慮されている
という可能性もありますね。もしそうならなかなか奥深い。
こういうのさらっと書かないでコメントとか付けといて欲しいなあ。
458 :
名称未設定 :04/02/06 16:45 ID:OHXISCUL
>>451 , 454
(4) retatinしてdataをいじると、dataを参照していた別の誰かが
(いた場合に)困ることがあるから。
ってのが妥当じゃない? 誰がどういう data を
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType
に渡して呼びだすかは少なくとも建前上は知らないんだし。
なので、retain ではなく copy をするのがパターンとして正解と思うな。
自前で決してdataをいじらないなら、retainでもいいんじゃない?
どうでしょう?
459 :
458 :04/02/06 16:54 ID:OHXISCUL
あ、NSDataだから自前で変更はできないのか。 ということで(4)は有りえないな。失礼。。。
460 :
458 :04/02/06 16:56 ID:OHXISCUL
と思ったが、(NSData *)なので参照先を変えることは可能か。。。 なんか恥ずかしい。
461 :
446 :04/02/06 17:31 ID:Fc/bbRIG
>>452 そっか、優先言語=NSBundleによる多言語対応、しか頭に無かったもんで
もうちょっと勉強するよ
>>453 とりあえずNSTextViewに表示してる。
最終的には変わるかもしれないけど、まあ最悪はNSTextに展開してコピーということで。
>>456 おおお、これっぽい。
あとで試してみます!
ベリーさんくす
>>454 (3)に一票。
Sketchのコード見てると大体NSDocumentと同じzoneにオブジェクトを確保しようとしてるからね。
(2)だったら・・・鬱
ちなみに(3)に投票しといてこんなこというのはあれだけど、
copyWithZone:は意味無いかも。
NSZone *zone=NSCreateZone(NSPageSize(), NSPageSize(), YES);
NSSetZoneName(zone, @"test_zone");
NSData*data=[[NSData allocWithZone:aZone] initWithContentsOfFile:@"/hoge.html"];
NSLog(NSZoneName([data zone]));//(1)
data=[data copyWithZone:aZone];
NSLog(NSZoneName([data zone]));//(2)
(1)(2)ともDefaultMallocZoneが出力される。
>462 aZoneはいつ確保されるんだろう。。。ドキドキ
これならOKみたいだけど、そうするとcopyWithZoneって??? ------- NSZone* zoneA = NSCreateZone(NSPageSize(), NSPageSize(), YES); NSSetZoneName(zoneA, @"zoneA"); NSZone* zoneB = NSCreateZone(NSPageSize(), NSPageSize(), YES); NSSetZoneName(zoneB, @"zoneB"); NSData* dataA = [[NSData allocWithZone: zoneA] initWithBytes: 0 length: 0]; NSData* dataB = [[NSData allocWithZone: zoneB] copy]; //^^^^^^ [dataA copyWithZone: zoneB]なら(1)==(2) NSLog(NSZoneName([dataA zone])); //(1) = zoneA NSLog(NSZoneName([dataB zone])); //(2) = zoneB
466 :
462 :04/02/06 19:52 ID:lVzefGZf
>>463 なるほど、DefaultMallocZoneで見事に正解だなw
ま、
NSData*data=[[NSData allocWithZone:zone] initWithContentsOfFile:@"/hoge.html"];
NSLog(NSZoneName([data zone]));//(1)
data=[data copyWithZone:zone];
NSLog(NSZoneName([data zone]));//(2)
でもダメだけどね
>これならOKみたいだけど、そうするとcopyWithZoneって???
つうかNSDataだとダメみたい。
NSObjectだとちゃんとzoneをセットできるよ。
>462
>>454 (2)だな。
copyWithZoneの挙動は
NSData* dataA のときは retainして、
NSMutableData* dataA のときは copyしてた
467補足 NSMutableData*をNSData*で受けたときね。
気になって調べてみました。 - (IBAction)test:(id)sender { NSString *classNamesFilePath; NSArray *classNames; NSEnumerator *classNamesEnum; NSString *className; NSZone *zone = NSCreateZone( NSPageSize(), NSPageSize(), YES ); NSSetZoneName( zone, @"zone" ); classNamesFilePath = [[NSBundle mainBundle] pathForResource:@"ClassNames" ofType:@"plist"]; classNames = [NSArray arrayWithContentsOfFile:classNamesFilePath]; classNamesEnum = [classNames objectEnumerator];
while( (className = [classNamesEnum nextObject]) ) { NSString *firstObjZoneName, *secondObjZoneName; Class targetClass = NSClassFromString( className ); id object; NS_DURING object = [[targetClass alloc] init]; NS_HANDLER object = nil; NSLog( @"Can not allocate %@ class!", NSStringFromClass( targetClass ) ); NS_ENDHANDLER if( ! [object respondsToSelector:@selector(copyWithZone:)] ) continue; firstObjZoneName = NSZoneName( [object zone] ); object = [object copyWithZone:zone]; secondObjZoneName = NSZoneName( [object zone] ); if( ! [firstObjZoneName isEqualTo:secondObjZoneName] ) NSLog( @"%@ class is poor!", NSStringFromClass( targetClass ) ); } }
2004-02-06 21:24:35.174 testCopyWithZone[1135] NSAppleEventDescriptor class is poor! 2004-02-06 21:24:35.397 testCopyWithZone[1135] Can not allocate NSNotification class! 2004-02-06 21:24:35.398 testCopyWithZone[1135] NSAttributedString class is poor! 2004-02-06 21:24:35.400 testCopyWithZone[1135] NSNumberFormatter class is poor! 2004-02-06 21:24:35.400 testCopyWithZone[1135] NSCalendarDate class is poor! 2004-02-06 21:24:35.401 testCopyWithZone[1135] NSCharacterSet class is poor! 2004-02-06 21:24:35.402 testCopyWithZone[1135] Can not allocate NSPropertyListSerialization class! 2004-02-06 21:24:35.403 testCopyWithZone[1135] Can not allocate NSProtocolChecker class! 2004-02-06 21:24:35.403 testCopyWithZone[1135] Can not allocate NSProxy class! 2004-02-06 21:24:35.404 testCopyWithZone[1135] NSDateFormatter class is poor! 2004-02-06 21:24:35.404 testCopyWithZone[1135] NSScanner: nil string argument 2004-02-06 21:24:35.405 testCopyWithZone[1135] Can not allocate NSDistributedLock class! 2004-02-06 21:24:35.458 testCopyWithZone[1135] NSError class is poor! 2004-02-06 21:24:35.460 testCopyWithZone[1135] Can not allocate NSKeyedArchiver class! 2004-02-06 21:24:35.460 testCopyWithZone[1135] Can not allocate NSKeyedUnarchiver class! 2004-02-06 21:24:35.462 testCopyWithZone[1135] NSMutableAttributedString class is poor! 2004-02-06 21:24:35.462 testCopyWithZone[1135] NSMutableCharacterSet class is poor! 2004-02-06 21:24:35.462 testCopyWithZone[1135] NSMutableData class is poor! 2004-02-06 21:24:35.464 testCopyWithZone[1135] NSMutableIndexSet class is poor!
2004-02-06 21:24:35.464 testCopyWithZone[1135] NSActionCell class is poor! 2004-02-06 21:24:35.464 testCopyWithZone[1135] NSAffineTransform class is poor! 2004-02-06 21:24:36.043 testCopyWithZone[1135] *** Assertion failure in -[NSApplication init], AppKit.subproj/NSApplication.m:932 2004-02-06 21:24:36.061 testCopyWithZone[1135] Can not allocate NSApplication class! 2004-02-06 21:24:36.080 testCopyWithZone[1135] *** +[NSPasteboard alloc]: selector not recognized 2004-02-06 21:24:36.097 testCopyWithZone[1135] Can not allocate NSPasteboard class! 2004-02-06 21:24:36.114 testCopyWithZone[1135] *** -[NSPDFImageRep init]: selector not recognized 2004-02-06 21:24:36.131 testCopyWithZone[1135] Can not allocate NSPDFImageRep class! 2004-02-06 21:24:36.162 testCopyWithZone[1135] *** -[NSBitmapImageRep init]: selector not recognized 2004-02-06 21:24:36.163 testCopyWithZone[1135] Can not allocate NSBitmapImageRep class! 2004-02-06 21:24:36.163 testCopyWithZone[1135] *** -[NSPICTImageRep init]: selector not recognized 2004-02-06 21:24:36.163 testCopyWithZone[1135] Can not allocate NSPICTImageRep class! 2004-02-06 21:24:36.166 testCopyWithZone[1135] NSBrowserCell class is poor! 2004-02-06 21:24:36.166 testCopyWithZone[1135] NSPrinter class is poor! 2004-02-06 21:24:36.325 testCopyWithZone[1135] NSPrintInfo class is poor! 2004-02-06 21:24:36.342 testCopyWithZone[1135] NSButtonCell class is poor! 2004-02-06 21:24:36.358 testCopyWithZone[1135] *** -[NSCachedImageRep init]: selector not recognized 2004-02-06 21:24:36.375 testCopyWithZone[1135] Can not allocate NSCachedImageRep class! 2004-02-06 21:24:36.398 testCopyWithZone[1135] NSCell class is poor! 2004-02-06 21:24:36.399 testCopyWithZone[1135] NSRulerMarker class is poor!
2004-02-06 21:24:36.626 testCopyWithZone[1135] Can not allocate NSScreen class! 2004-02-06 21:24:36.665 testCopyWithZone[1135] NSComboBoxCell class is poor! 2004-02-06 21:24:36.686 testCopyWithZone[1135] NSSearchFieldCell class is poor! 2004-02-06 21:24:36.713 testCopyWithZone[1135] NSSecureTextFieldCell class is poor! 2004-02-06 21:24:36.726 testCopyWithZone[1135] NSSegmentedCell class is poor! 2004-02-06 21:24:36.726 testCopyWithZone[1135] Can not allocate NSCustomImageRep class! 2004-02-06 21:24:36.727 testCopyWithZone[1135] NSShadow class is poor! 2004-02-06 21:24:36.728 testCopyWithZone[1135] Can not allocate NSEPSImageRep class! 2004-02-06 21:24:36.728 testCopyWithZone[1135] NSSliderCell class is poor! 2004-02-06 21:24:36.728 testCopyWithZone[1135] NSEvent class is poor! 2004-02-06 21:24:38.881 testCopyWithZone[1135] NSFontDescriptor class is poor! 2004-02-06 21:24:39.067 testCopyWithZone[1135] NSFormCell class is poor! 2004-02-06 21:24:39.084 testCopyWithZone[1135] NSStepperCell class is poor! 2004-02-06 21:24:39.110 testCopyWithZone[1135] NSTableHeaderCell class is poor! 2004-02-06 21:24:39.131 testCopyWithZone[1135] NSImage class is poor! 2004-02-06 21:24:39.146 testCopyWithZone[1135] NSImageCell class is poor! 2004-02-06 21:24:39.163 testCopyWithZone[1135] NSImageRep class is poor! 2004-02-06 21:24:39.180 testCopyWithZone[1135] NSTextAttachmentCell class is poor! 2004-02-06 21:24:39.196 testCopyWithZone[1135] NSMenu class is poor! 2004-02-06 21:24:39.211 testCopyWithZone[1135] NSMenuItem class is poor! 2004-02-06 21:24:39.227 testCopyWithZone[1135] NSTextFieldCell class is poor! 2004-02-06 21:24:39.248 testCopyWithZone[1135] NSMenuItemCell class is poor! 2004-02-06 21:24:39.286 testCopyWithZone[1135] NSTextStorage class is poor!
まあ参考程度に。
NSString などは「クラスクラスタ」とよばれていて、alloc で 帰ってくるのはたんなる PlaceHolder(場所取り)オブジェクトで、 その次の init... の...部分や引数の内容で実際のオブジェクト を確保、init の戻り値として返してくるというものだ。 こういったクラスの場合、 +alloc と -init... は同時に呼び、 init...の戻り値を確保してそれを使わないといけない。 + alloc の戻り値を信じていると馬鹿を見る。 以上、参考まで。
質問です。 無謀にもテキストエディタを作りたいと思い立ち、色々調べているうち、 /Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/ BasicEventHandling/Tasks/TextDefaultsAndBindings.html に行き着きました。Cocoa のテキストシステムの振る舞いを色々設定できるらしい んですが、ここで紹介されている Text System Defaults って具体的にはどこでどう 設定するんでしょうか。最初は関数かと思ったんですけど、よく見ると辞書のキーの ようでもあって、なんだかよくわかりません。
NSUserDefaultです。 NSUserDefaultで設定すれば設定したアプリでのみ有効になります。 Terminalで % defaults write NSGlobalDomain NSMnemonicsWorkInText -bool YES てな感じでドメインにNSGlobalDomainを指定すると全アプリが参照するようになります。 確認してませんが、CoreFoundationのCFPreferenceを使うとプログラマブルに設定できるみたいです。
479 :
477 :04/02/09 01:31 ID:aWA9DtdQ
>>478 なるほど。UserDefaults に設定を set して sychronize しとけば、その時点から
変更が反映されるということですね。UserDefaults というのはプログラマが自分の
アプリの設定を保存するために使うものだとばかり思っていましたが、フレーム
ワークの振る舞いを規定しているようなその他の情報も色々と管理しているという
ことですね。
ファイルヤフォルダのサムネイルの取得とセットってどうするんでしょうか?
>480 Finderのカラムビュー、info Panel のそれをいってるのであれば、 取得 -> 根性 セット -> 無理
>>480 フォルダのサムネイルって何?
アイコンのこと?
483 :
480 :04/02/09 23:00 ID:xroJyZPI
すいませんちょっと勘違いしてました。アイコンの事です。 取得は判ったのですが、FileWrapperによるセットがいまいち判らないのですが、出来ればご教授をお願い出来ないでしょうか?
485 :
483 :04/02/12 03:23 ID:EWfhguwc
みんな Cocoa binding つかってる?
>>456 のNSNonLossyASCIIStringEncodingで試しているんだけど、なんかうまくいかない。
エスケープはきちんと処理できてるみたいだけど、日本語は結局文字化けします。
NSNonLossyASCIIStringEncodingの前提がそもそも違うのか、
他に何か問題があるのか、さっぱり分からない・・・
ググってもNSASCIIStringEncodingでエンコードしてる例ばっかりだし。
誰かヘルプ!
489 :
483 :04/02/12 21:17 ID:xQnC2oEm
>>486 情報ありがとうございます。
setIcon:は壊れているんですか・・・
とりあえずこれだけでもFileWrapperで無駄な努力をせずに済んだ様なので助かりました。
iconFamilyの方もDLしてある程度眺めて見ましたが
iconSet:を代行する処理を自作するとなるとRepやBitMap関係の知識が結構要る様ですね。
carbonの知識も皆無に等しいのでもう少し勉強してから再挑戦する事にします。
484さん(=486さん?)、486さんありがとうございました。
ところでiconFamilyはアイコンを付加するソフト位しか概要が判らないですが、
試しに一つ画像ファイルにアイコンを付加してみたらアイコンをセットしても殆ど同じサイズで、
画質が少なくとも目視レベルでは全く劣化していませんでしたがjpegの圧縮処理を画質優先で最適化する様なソフトなのでしょうか?
Cocoaに限った話じゃないような気もするけど質問。 OSXのウインドウについているような、グラデーションのかかった影って 一般的にはどういう風に描画するの? 四角いウインドウに影を書くくらいなら、色と透明度を変えつつ直線を引い たらいいんだろうけど、OSXでは適当な形に作ったウインドウでもきれいな影 がついてるじゃない? あれを自前のViewの中で再現したいんだけどやり方がわからないのです。 リアルタイムで計算しながら描画したいので、最初から半透明のマスクを 作っておく、という以外の方法があれば教えてください。
cocoaってflashのactionscriptと似てるんですかね? 取っ付きやすいなら挑戦してみようかな
493 :
名称未設定 :04/02/13 11:34 ID:sj7vZ0k1
systemlog がすっかりfix_prebindingで埋まっちゃってるんですが、どうにかならないのでしょうか。 >prebinding for iTerm done. >prebinding for firefox-bin done. >prebinding for IPMessenger done. せめてソース公開されている物を、このログがでないように再ビルドしたいのですが 何をkeywordに探していけばいいのでしょうか? dynamically loaded library云々なのはなんとなく行き当たったけどさっぱりわかりません。
>>490 影を付けたいオブジェクトを白黒2値にする。
何回もぼかす。
それをαチャンネルとしてオフスクリーンにαブレンディングで描画する。
その上にオブジェクトを描画する。
実際には、処理速度の関係でエッジ抽出してそれを拡散したりする。
質問です。 どなたか Cocoa の Text System で key bindings をプログラム内で 動的に変更する方法をご存じの方いませんか? input manager が key bindings を定義した辞書を保持しているらしいことは わかったのですが、辞書へのアクセッサがないので、どうしたもんかと悩んで います。NSInputManager のヘッダを見れば、それらしいインスタンス変数が あることはあるのですが @private となっていて触るに触れません。 Project Builder の環境設定パネルで key bindings の設定ができるんですから、 同じ Cocoa を使ってできないはずはない、と思うのですが……
>>493 環境変数 LD_PREBIND を定義(内容は何でもいい)してビルドする。
あるいは、ld に -prebind フラグを渡してビルドする。統合環境から
ならこっちの方がいいカモな。
ただ、PBX や XCode は deployment でビルドすると -prebind をつけて
くれるはずなのだが、ちゃんと Deployment にしてる? development は
それ以外にも開発向けに色々やっててコードの最適化もよろしくないので、
ビルドするだけなら避ける方がよい。
あと、消極的方法だが、環境変数 DYLD_NO_FIX_PREBINDING を定義する
と fix_prebinding は働かなくなる。ただ Prebinding 抜きになるので
これはお勧めしない。
詳細は /Developer/Documentation/ReleaseNotes/Prebinding.html や
man 1 ld の -prebind あたりを見るヨロシ。
>>495 StandardKeyBinding.dict
でググる
498 :
495 :04/02/13 21:14 ID:45Cu5Te3
>>497 StandardKeyBinding.dict や DefaultKeyBinding.dict を置き換えれば変更できる
ことはわかっているんですが、これらがロードされるタイミングってアプリケーションの
起動時ですよね。問題はメモリ上に NSDictionary とかの形で存在しているこれらの
辞書にアクセスすることなんすよ。
あ、でも例えアクセスできても mutable じゃなかったらどうにもならないんじゃ……
もしかして、これは自力でカスタムクラスを作るしかないのか……
499 :
495 :04/02/13 21:17 ID:45Cu5Te3
って mutable じゃなかったら、ごっそりそのまま置き換えたらいいだけか。 アホだな、オレ。でもアクセッサがないんだよう!
500 :
490 :04/02/13 22:36 ID:m0oLQLsS
ありがとう。なんとなく道筋が見えた。 やっぱり直接ピクセルをいじらないと行けないのですね。 ぼかしやエッジ抽出というのが具体的にどうやればいいのかもう少し検討いたします。
501 :
486 :04/02/14 10:30 ID:XAfl+lSX
>>489 I think setIcon: is broken.
なんで断定はしていないが。
>ところでiconFamilyはアイコンを付加するソフト位しか概要が判らないですが、
ソフトじゃなくてアイコンを付加するためのクラスのはず。
(MakeThumnailはiconFamilyクラスを使ってアイコンを付けるサンプルソフト)
ヘッダから想像するにアイコンにしたいイメージを元に
iconFamilyWithThumbnailsOfImage:
でiconFamilyオブジェクトを作成して、
setAsCustomIconForFile:
で目的のファイルにアイコンをセットできるんだと思う。
こいつを使えばわざわざsetIcon:を自作する必要は無いはず。
ただ、使用条件が良くわからないのでHPをよく読んでくれ。
ところで
>>488 に誰か返事くれ
何日もずっとプログラムに打ち込んでたら 流石にリファレンス見るだけでも吐き気がする様になってきた…
>>498 KeyBindingを調べてみても、動的に変更できるようなものはないようだね。
だからアプリ側で実装するんじゃないかな。
たぶん、CocoaのTextSystemもキーテーブルを入れ替えるようには作られていないと思う。
所詮KeyCodeとSelectorの対データだし、PBなどもそうだけど、そのアプリ独自の拡張
しているショートカット機能もあるわけで。
504 :
495 :04/02/14 20:21 ID:Uzhax4pT
>>503 俺も散々調べてたんだけど、現状ではそういうインターフェースはないみたい。
だから自力で実装することにしたよ。その算段は以下の通り。
とりあえず、DefaultKeyBinding.dict と同じ形式の辞書をロードして自前の
ビューに保持させ、keyDown: で Control やなんかが押されていた場合には
その辞書を参照して selector を割り出し doCommandBySelecter: を呼ぶ。
対応する key binding がない場合はその key event を interpretKeyEvents:
へまわす。(そうしないと日本語入力できないし)
ま、こんなもんでなんとかなりそうかな。
505 :
495 :04/02/14 20:36 ID:Uzhax4pT
なんで Text System の key bindings mechanism にこだわっていたかというと、 key event からの対応する編集コマンドの割り出し、実行を interpretKeyEvent: が 一切面倒みてくれるから。調べたところ、Control-X Control-F みたいな連続した キーストロークにも対応してるんで、こちらは辞書を用意するだけで Emacs みたい なキーバインド体系を容易に実現できる。 (対応する編集コマンドを作れるかはまた別の話ね……) と思ったのだが、その肝心の interpretKeyEvent: が参照する key bindings の 辞書に触れず、interpretKeyEvents: へ渡す前に自力で振り分けることに(泣) 連続したキーストロークとか扱おうと思ったら途端に話がややこしくなりそう なんだよなあ。ま、趣味のプログラミングですんで、地道にやろうと思います。 長レススマソ
>>505 やりたいことはなんとなく想像ついてたけど、なんで簡単にできねんだよと思うよね。
ガンガレ
Finderのアイコン表示やPixelCatの様な 画像のサムネイル表示で画像をセットする処理をしてる時の様な 非同期で処理を行う方法を教えて下さい。 スレッドを作らなくても実現出来るらしいですが、 NSTimerとかで実現してるのでしょうか? 具体的な方法が判らないのでご教授お願いします。
>507 、、、えっと、日本語で質問してください。おながいします。
えっと、 サムネイル用に並べたボタン群にそれぞれサム画像を入れる処理の際、 画像のサイズや量がある程度以上だと、ビーチボールが出ますよね。 それを非同期で処理してビーチボールが出ない様にしたい、という事なんですが。 ご教授お願いします。 あとスクロールビュー内にマトリクスを埋め込んだ際、 どうしてもマトリクスが一定以上のサイズにならず、 スクロールが途中迄しか表示出来ないのですがどういった手落ちが考えられますか? 以前自作でウインドウやマトリクス、スクロールビューをセットした時には問題なく出来たので XCodeのバグを疑ってしまうのですが。
>>509 ま、NSTimerかNSThreadですね。
後半は分からんけど、それが10.3の仕様と割り切って、
10.3で正しく動くように書くしかないかと。
>>509 NSTimerだと結局は断続的にレインボウが出ることになると思う。
素直にThreadを使うのが良いかと。
>スレッドを作らなくても実現出来るらしいですが、
の根拠を教えてもらえるとうれしい。
>511 fopen で開いてちょっとずつ読むとか。
>>511 >>スレッドを作らなくても実現出来るらしいですが、
>の根拠を教えてもらえるとうれしい。
イベントループ作ればいい。
for (;;) {
NSEvent* event = [NSApp nextEventMatchingMask: NSAnyEventMask....
//...
[NSApp sendEvent: event];
//...
}
>>509 場合によってはスレッドの方が簡単かも。
>513 2GBのデータを一気に読み込む等をすれば結局レインボーカーソルが回る罠。
>>514 >2GBのデータを...
問題の本質が異なると思われ。
Xcode1.1でIBPaletteの新規プロジェクトを作ろうとすると エラーが出て作成できないのですが、何か間違っていることをしているのでしょうか?
>>516 新規プロジェクトを生成する時、ソースのテンプレのクラス名をプロジェクト名に置き換えるところにバグがある。
と書いても意味分からないだろうがw、
生成されたソースとヘッダをXcodeで直接(プロジェクトファイルは開かない)開いてみると分かる。
518 :
516 :04/02/18 16:08 ID:5WUzmMEx
>>517 どうもありがとうございます。
とりあえず.hファイル3つと.mファイル3つのおかしい所をそれっぽい名前に
書き換えたら問題なく(?)なりました。
他は特に変更しなくてはならない所ないですよね?
519 :
517 :04/02/18 16:59 ID:HT97lAzS
>>518 info.plistとInfoPlist.stringsも一応見とけ。
問題あったかどうかは覚えてないが。
520 :
516 :04/02/18 18:57 ID:5WUzmMEx
Info.plist、InfoPlist.strings、palette.tableは問題ありませんでした。
>515 いや、別に2GBだろうがなんだろうが、でかいファイルを一気に読み込めばレインボーが回るよ。 レインボーが回る原因は、 WindowServer上のそのアプリ用のEventキューに変動がないためであって、 for (;;) { NSEvent* event = [NSApp nextEventMatchingMask: NSAnyEventMask.... // (1) [NSApp sendEvent: event]; // (2) } であっても1,2,の処理が終わらない限りWindowServerからのEventは受け取れないでしょ?
522 :
509 :04/02/19 01:08 ID:bcmVA//7
とりあえずスレッドで回避してみました。
代わりにサムネイル画像貼付け処理の際、処理途中で一時的に使ったメモリがスクロール表示範囲内なら普通に順次解放されるのに
スクロール表示範囲外に隠れたサムネイルボタンの貼付ける処理になると解放されない(スクロールして表示させると解放される)現象や、
読み込み途中でウインドウを閉じても正常に動作する様にする処理に頭を悩ませてます。
この場合、メモリの解放処理に繋げるにはボタンが「画面に表示される」際に行っている処理に代わる何かのプロセスが必要なのでしょうか?
>>510 この辺りはなんだか解決しました。
普通にスクロール内ビューのサイズをsetFrameで変更したら出来たのですが
試行錯誤の最初にやった時は何故か出来なかったので原因が今いちハッキリせずスッキリしてませんが。
>> の根拠を教えてもらえるとうれしい。
すいません、何処かでチラっと見た記憶が有ったのですが覚えてません。
ただPixelCatなんかをアクティビティモニタで見る限りスレッドは使ってない様ですね。
いくらアクティビティモニタでもスレッドまでは見えないぞ。 見えていると思っているのは子プロセスでないか?
>523 スレッド数が書いてあると思ったが... 一回見ただけなので覚えてないが。 top なら th# ってのがスレッド数。
initとawakeFromNibとapplicationDidFinishLaunchingの使い分けの 慣習ってあるのでしょうか?
>525 慣習とかじゃなくて、完全に別物だと思うが...
526>> 呼ばれる時は違いますが、どこに書いてもかまわないコードってあったりしませんか?
528 :
517 :04/02/21 16:21 ID:mmdWQTR1
少なくともinitは全然違うと思われ
529 :
528 :04/02/21 16:24 ID:mmdWQTR1
あ、517は全然関係なし。 nibでインスタンス化したオブジェクトはinit呼ばれないはずだから注意。
>>528 試しにnibにあるコントローラーのinitにNSLog(@"init")と書いたら表示されたのでinitも呼ばれているみたいです。
例えばNotificationの登録はApplicationDidFinishLaunchingに書くのが一般的なのでしょうか?
それとUserDefaultsから読み込んでインスタンス変数に設定する場合 よくapplicationDidFinishLaunchingに書かれているのを見ますが、 もしawakeFromNibでNSTextFieldなんかにそのインスタンス変数を setStringValue:などとしていたら正しい動作をしませんよね? そういう場合はUserDefaultsからの読み込みはawakeFromNibに書くものなのでしょうか?
>>331 は解決した?
stray のエラーはおかしな文字コードが紛れ込んでいるせい。
vi とかでファイルを確認するとエスケープシーケンスが付いている部分でエラーを
起こしてるのがわかると思うけど。
331 じゃないんですけど、今日ちょうど stray エラーで悩まされた。見えない 文字が入力できるようになってるってものすごいなあ > XCode。補完きかない けど、エディタは emacs とか使ったほうがいいかもしれない…。英語環境だと このエラー出ないのかな? この環境がタダなのはすごく嬉しいんだけど。
違うスレにも書き込んでみたんですけど、レスがないのでこちらにも書き込ませてください。 Cocoaでキー判定を行いたいんですけど、どなたか方法をお教え願えませんでしょうか。 また、キーコードなどの調査方法もお教え願えれば幸いです。
init は「そのオブジェクトそのもの」の初期化につかうべし。 awakeFromNib は、Nibファイルからロードされ終わった後に 呼ばれる。注意点は、メインの Nib はアプリの起動時に1回 呼ばれるだけだが、Nibによっては必要時にロードされるもの だってあるって事だ。 例えばちょっと込み入ったドキュメントの場合、ドキュメント を処理するUIを別のNibにまとめておいて、ドキュメントを開 くごとに Nib をロードするという手がある。こういう時に、 awakeFromNib はロードされるごとにそのインスタンスへ送ら れる。 applicationDidFinishLaunching はアプリケーションが起動 されたとき必ず1回実行される。漏れなら、UserDefaultsの 処理はここに書くな。もちろん、時と場合によりけりなので 一概にはいえんが。 単純なNib一個のアプリならどれを使っても一緒に見えるが、 複数Nibを活用した大きいアプリを書く時にこの三つの区別 は重要になる。
init は「そのオブジェクトそのもの」の初期化につかうべし。 awakeFromNib は、Nibファイルからロードされ終わった後に 呼ばれる。注意点は、メインの Nib はアプリの起動時に1回 呼ばれるだけだが、Nibによっては必要時にロードされるもの だってあるって事だ。 例えばちょっと込み入ったドキュメントの場合、ドキュメント を処理するUIを別のNibにまとめておいて、ドキュメントを開 くごとに Nib をロードするという手がある。こういう時に、 awakeFromNib はロードされるごとにそのインスタンスへ送ら れる。 applicationDidFinishLaunching はアプリケーションが起動 されたとき必ず1回実行される。漏れなら、UserDefaultsの 処理はここに書くな。もちろん、時と場合によりけりなので 一概にはいえんが。 単純なNib一個のアプリならどれを使っても一緒に見えるが、 複数Nibを活用した大きいアプリを書く時にこの三つの区別 は重要になる。
長文なのにミスで二重書き込みしちまった。スマソ。
>>534 file:///Developer/Documentation/Cocoa/Conceptual/BasicEventHandling/Concepts/KeyboardInput.html#//apple_ref/doc/uid/20000902
を見るべし。
簡単に言うなら、View などの NSResponder のサブクラスには
keyDown: というメソッドがあり、これにイベントオブジェクト
が引数でひっついてくる。NSView のサブクラス作ったり、delegate
に実装することでこのメソッドを上書きするとキーボードや
マウスからのイベントを奪えるわけだ。
で、ひっついてきた NSEvent オブジェクトに characters を
おくれば(SHIFTなどの修飾キーの影響後の)文字がNSStringで
かえってくる。修飾キーの影響を受けていないのはcharacters
IgnoringModifiers で帰ってくる。
キーコードが欲しければ keyCode メソッドだ。
なお、テキスト入力の場合は IM にイベントを回してあげない
と正しくテキスト入力ができない。手っ取り早く IMに処理を
渡したいなら interpretKeyEvents: メソッドを叩けばいい。
なお、interpretKeyEvents: の引数は NSArray だ。つまり、
一つのイベントごと渡すのではなく、いくつかのイベントを
溜めておいて、NSArray で一気に渡すことができる。まぁ、
あんまり溜めると応答性が悪くなるのでお奨めせんがな(笑)
まぁ、詳しくは NSEvent や NSResponder のリファレンスを
みてくれ。そして、じっくり悩んでくれ。
>>538 thx.
なんせOSXでの初プログラミングですので^^;、、、頑張ってみます。
>>535 >awakeFromNib
質問主じゃないし、
結構ある程度のソフト作れるけど
初心者の頃覚えた少しずれた概念をそのまま深く考えずに修正しないままずーと引きずってた事に気付いたよ
Thx
>>531 UserDefaultsからの読み込みを一カ所にまとめる必要はねえ。
つーか、必要ならどこで書こうが読もうがかまわねーよ。
スレッド分けてる場合は排他制御する必要があるがな。
だいたい、NSWindowなんかは設定しとけばロード、アンロード時に
勝手に自分のFrameを書いたり読んだりしてるだろーが。
>>539 悪いこと言わんから、荻原本とヒレガス本を2冊セットで買おう。
値は張るけど、熟読する価値あり。
539 の今回の質問に対する答えはもちろん、これからぶち当たるであろう、
数々の疑問に対する答えがそこにはある、と思うよ。
最初は素直に本でも買って、体系的にまとまった量の知識を一気に吸収した方が
いいと思う。学習曲線の最も急勾配なところを2ちゃんを頼りに登るなんてのは
あまり賢いやり方と思えない。
以上、あくまで私見ですが、アドバイスでした。
543 :
名称未設定 :04/02/23 11:03 ID:6VTKiI7N
質問。CocoaをやるにはC++も知っておいた方がいいですか? いきなりObjective-Cの参考書を見てもわかるなら、 C++やるのは後回しにしたいのですが。 現状。 Objective-Cの参考書は「C言語の知識が必要」らしいので 荻原本と一緒に高橋麻奈「やさしいC 第2版」を注文したところです。 (まだ届いてない) 今迄のプログラミング経験はPerl、PHPをかじった程度で、 Javaは全く知りません。
Cから説明始めてるC++の基礎本買っといても損はないと思うけど。
>>544 萩原本でOOPを学ぶということだから、必要がなければ混乱をさけるためにも、
むしろC++のことは勉強しない方がよいと思います。
547 :
543 :04/02/23 11:32 ID:6VTKiI7N
レスありがとうございました。 必要がないなら、混乱を避けるためにも、C++は後回しにします。
>>535 , 541
どうもありがとうございました。
簡単な例しかみたことがなかったため、複雑なプロジェクトになった時に
どのように書くと読みやすいのか悩んでいました。
参考にしてよく考えてみようと思います。
Cocoa+Javaで質問です。 NSImageの画像を回転させる方法って無いんでしょうか? 簡単な画像ビューワを作っているのですが、回転させる方法がわかりません。 //新しいNSImageを作って NSImage image = new NSImage(new NSSize(300, 300)); image.lockFocus(); //別のNSImageであるobjimgから画像を貼付ける objimg.compositeToPointFromRect(new NSPoint(0, 0), new NSRect(new NSPoint(0, 0), objimg.size()), NSImage.CompositeCopy); //できればここで回転させたい。 image.unlockFocus();
すみません。549ですが自己解決しました。 drawAtPointとNSAffineTransformでできました。 ってか今日1日潰したのに。。。。 気づくときはあっさりと気づくもんですね。
551 :
名称未設定 :04/02/24 00:06 ID:9csFPGX8
ADCからXcodeをダウンロードしようと思い、 Xcode Tools v1.1CDのDawnloadを押すとでるSegmentsの中のXcode_Tools_1.1.dmg.binを落として 解凍したんですが、ディスクイメージをマウントする際に 「セグメントが見つかりません、所属不明なパート」 とでてマウントできませんでした。 segments内のすべてを落とさないといけないのでしょうか?
>>550 そこが Cocoa のおもしろさであり、怖さなのよね。
10年以上の実績があるだけに、一見面倒でも実はある程度
を越えた時にすごく楽になるようよく考えられてる。気が
ついた時には嬉しいが、それを知らず遠回りしていた事ま
で気づいた時は酷く鬱だ。
>>551 いや、だから segment なんだって。
segment = 部分、切片 ってそのまんまじゃん。
全部落としてから先頭の segment をダブルクリックで自動的に結合されるはず。
segment に細かく分割されているのは回線が遅い人への配慮。
1つのアーカイブになってるやつもあるはずだけど。
ってかネタ?
Cの文法を憶えたくらいの初心者です。 以前買った「やっぱり!」本一冊を見ながら、今になって10.2で勉強しています。 配列データをファイルで管理するようなプログラムを組みたいのですが、 もし、それに近いサンプルがあれば書籍や資料を教えていただけませんか。
>>554 ヒレガス本 4〜6章あたりが良いかもしれません。
KeyTermとしてはNSCoder, NSArchiverあたり。
556 :
名称未設定 :04/02/25 07:54 ID:j2afweZ8
こんなの作ってみたけど、どうよ inline IMP _METHOD(id __obj, SEL __sel){return [__obj methodForSelector: __sel];} // _imp = [_obj methodForSelector: _sel]; <<< g++ Bus error template <typename _Tr = id, typename _Ta1 = id, typename _Ta2 = id, typename _Ta3 = id> class ImpMethod { public: id_obj; SEL_sel; IMP_imp; ImpMethod<_Tr, _Ta1, _Ta2, _Ta3>(id __obj, SEL __sel) : _obj(__obj), _sel(__sel), _imp(_METHOD(_obj, _sel)){} _Tr operator *() {return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel);} _Tr impFunc(_Ta1 __arg1) {return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel, __arg1);} _Tr impFunc(_Ta1 __arg1, _Ta2 __arg2) {return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel, __arg1, __arg2);} _Tr impFunc(_Ta1 __arg1, _Ta2 __arg2, _Ta3 __arg3) {return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel, __arg1, __arg2, __arg3);} };
557 :
つづき :04/02/25 07:54 ID:j2afweZ8
- (void) test { NSMutableArray* ary = [NSMutableArray array]; ImpMethod<void> impAdd(ary, @selector(addObject:)); for (int i = 0; i < 10; i++) impAdd.impFunc([NSString stringWithFormat: @"%d", i]); ImpMethod<> impEnu([ary objectEnumerator], @selector(nextObject)); for (id obj; (obj = *impEnu) != nil; ) NSLog(@"%@", obj); ImpMethod<id, int> impGet(ary, @selector(objectAtIndex:)); ImpMethod<unsigned>impCnt(ary, @selector(count)); for (unsigned c = 0; c < *impCnt; c++) NSLog(@"%@", impGet.impFunc(c)); NSString* str = @"abcdefg"; ImpMethod<NSComparisonResult, NSString*, unsigned, NSRange> impCmp(str, @selector(compare:options:range:)); ImpMethod<unsigned int> impLen(str, @selector(length)); for (unsigned int t = 0; t < *impLen; t++) NSLog(@"match=%d", (NSOrderedSame == impCmp.impFunc(@"c", NSCaseInsensitiveSearch, NSMakeRange(t, 1)))); }
558 :
名称未設定 :04/02/25 12:35 ID:Mp+TlGHm
ここのスレだとHMDTの本は人気ないのかな? 最初の1冊としては一番バランスよくまとまってると思うのだが。 あの本があれば、ヒレガス本要らなくない? 荻原本は一応読んどいたほうがよさそうだけど。
>>558 HMDTは入門書としてはちょっと・・・。Cocoaの全容をごく簡単に掴むには
いいけどね。
個人的に薦めてるのは、ヒレガス本かな。両方読んでも損にはならんでしょう。 ただ、今はCocoa Programming for Mac OS X second edition in April 2004 が出るまでとりあえず保留。 #HMDT本は想定される読者層から外れちゃったので、ちゃんと評価を下せていない(ので、微妙に薦めづらい)。 #“さっぱり本”みたいにWebページが大量削除されれば多少事情が変わるの かも しれないが。
Webが削除されたから人にはすすめられなくなったな。さっぱり本。
>>558 , 560 and all
ヒレガス本しか読んでないんすけど、ヒレガス本と比べた場合、
HMDTのおすすめポイントってどこらへん?サンプルアプリが派手目な点??
個人的にはヒレガス本で漏れてるAppKitの細かい部分を補える中級書が欲しい、
けど、和書ではなかなかなさそう。
ということで、Cocoa Programming (SAMS) を読んでます。
網羅している項目も、すぐに使えるサンプルも多く、なかなか良いです。
難点は1000頁を越えるので、かなり重いこと。通勤電車で立読みはつらい。。。
ttp://www.amazon.co.jp/exec/obidos/ASIN/0672322307/
>>562 マジであんなデカ重本を通勤電車で立ち読みしてるのかよ
バラしてしまえばいいんじゃない? 一度に全部読むわけじゃないし。
OutLineVIewの実装が載ってっとこ
>>562 おお、俺も今読んでるぞ、Cocoa Programming。
荻原本、ヒレガス本ときて、次にこれだけど、いい本だよね。
特に Custom Views and Graphics で200ページ近く割いてくれてるのがいい。
NSBezierPath や NSAffineTransform を使った基本的な描画から、簡単な描画
処理の最適化手法まで、手広く、突っ込み過ぎない程度にカバーしてくれてて、
かなり勉強になってる。
今やっと 563 ページ目。ようやく半分。
確か 26 章のサンプルがテトリスなんだよな、楽しみ。
>>567 いかにして可読性を低下させるか。
および、templateによる、汎化と特化の2面性について。
着想はいいんだけどさ。。。
素直に 普通に IMPとってくりゃいいじゃないのって思う。
569 :
名称未設定 :04/02/26 00:33 ID:2rbLyiR1
HMDTのトップページ 最近、読み込みにやたら時間かかるんだよなぁ なんでだろ
Cocoaで実行中のOSバージョンってどうやって調べればいいのでしょうか? gestaltとかないのかな。
HMDTを参考にdrawrectで表示した矩形をマウスでドラッグして任意の位置に動かし、マウスイベント内で移動量や移動後の座標値 を格納して、ボタンを押すとその移動量とかをテキストフィールドに表示するというのを試しに作ってみたのですが、 矩形は自由にドラッグで移動できるのにボタンを押しても0となってしまいます。 マウスイベント内やdrawrect内ではデバッガで値を見ても格納されているのに、 ボタンを押すところでは他の座標値も含め0になってしまう原因が判りません(;´Д`)
>>556 implFunc(...)のかわりにoperator()(...)って使えないのかな?
メリットとしてはIMP使うので多少は早くなるのかもしんないのと、
IMPを意識しないでつかえるのと、
あとはSTLとかと組み合わせられそうなことかな?
>>570 NSProcessInfo 使うヨロシ
>>571 アウトレットをちゃんとつないでないとか
setStringValue:つかってないとか
ボタンのアクションが間違ってるとか
>>574 あるんだよね、それ。
俺、それで結構長い時間悩んだことあるよ。 (つд`)
571 ガンガレ!
>>573 ありがとうございます。
NSString *versionName = [[NSProcessInfo processInfo] operatingSystemVersionString];
ですね。これって、リターン値の比較用コンスタントってどこかに定義されていまうか?
それと
Available in Mac OS X v10.2 and later.
ってことなんですけど、10.1とかはどうやって判定すればよいのでしょうか?
>>576 >This string is human readable, localized, and is appropriate
> for displaying to the user or using in bug emails and such.
> This string is NOT appropriate for parsing
って書いてあるでしょ。
Backward Compatibility を問題にしているのなら、AppKit の
ReleaseNote を読んでごらん。
>>577 >AppKit の
>ReleaseNote を読んでごらん。
ありがとさん。
#import <NSApplication.h>
if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_0) {
/* On a 10.0.x or earlier system */
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_1) {
/* On a 10.1 - 10.1.x system */
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_2) {
/* On a 10.2 - 10.2.x system */
} else {
/* 10.3 or later system */
}
ってことですね。floorってなんだろう。
The floor() and floorf() functions return the largest integral value less
than or equal to x.
なるほど上は、マイナー番号削って調べる例か。とにかくありがとさん。
NSTextView と NSScrollView に関して質問です。 NSScrollView が表示している文字の範囲を range で得たいのですが、 何か良い方法はあるでしょうか? NSScrollView - documentVisibleRect で rect は得られるのですが、 その rect に含まれる文字の range を得る方法がわからないのです。
>>579 CocoaBrowserのソースにあったと思うよ。
読んでみ。
581 :
579 :04/02/28 10:09 ID:wAzix6uG
>>580 見つけました。サンクス!
他にも色々と参考になりそうな部分がありますね。
( ゚Д゚ )ウマー
NSFormを使っていて、Cellの中身のほうで文字列が特定の条件を満たすとき 赤色の文字を表示するようにしています。しかし、マウスクリックでこの 文字列を選択すると、文字色が黒になってしまい、選択解除しても黒のままです。 AttributedStringで赤色にしているのですが、他に良い方法はありませんか? あるいは、選択/選択解除のイベントがとれればそれを拾って、赤色に戻しても かまわないんですが、NSForm/NSFormCell(とその先祖)には該当する Notificationなどが定義されていないようです。 よろしくお願いします。
583 :
579 :04/02/29 23:22 ID:T2eBHavw
>>582 >文字列が特定の条件を満たすとき 赤色の文字を表示する
Formatter を自作すれば編集中の文字列にあわせてリアルタイムに文字の色を
設定できるよ。Formatter を set するインターフェースは NSControl ( NSForm
の先祖)にあるから、NSForm でも使えると思うけど。
まあ、Matrix ってことで何となくややこしそうではあるね。
上のやり方でうまくいかなかったら NSTextField で代用するのが楽かな。
NSTextField ならデリゲートに textDidChange: を送るようにできるし、
NSControlTextDidChangeNotification も使える。ま、ラベルと一緒に
縦に並べとけば使う側から見て違いもわからんし。
あ、選択/選択解除か。textDidChange: じゃねえや。ゴメソ
>>582 試してないがセルをサブクラス化して、drawXXX:で書くしかない。
>>583 ,584
4行2列でタイトル+文字列を配置したいんですが、NSTextFieldだと
ウインドウリサイズしたときに、横に4つならべることになって、
きれいにリサイズできるようにラバーバンドを設定できないんです。
それと、色を変える条件が行ごとに違っているのでNSFormに一括して
ルールを設定することができません。NSFormCellはNSControl一族では
ないのでFormatterを貼れなくてそれでsetAttributedStringすることに
したんです。
>>585 サブクラス化しかないですか。はぁ。
それを使うようにするのは、NSForm -setCellClass:でやればできるの
でしょうか。っていうかやってみます。
アドバイスいただきありがとうございます。
587 :
583 :04/03/02 04:38 ID:ipzP48JD
>>586 > 4行2列でタイトル+文字列を配置したいんですが、NSTextFieldだと
> ウインドウリサイズしたときに、横に4つならべることになって、
> きれいにリサイズできるようにラバーバンドを設定できないんです。
ううむ。ラバーバンドの設定で自分の思うようなリサイズができない場合、
autoresizing に頼るのをやめ、ウィンドウのリサイズに合わせてマニュアルで
やるというのもありでは。NSWindow のデリゲートメソッド
windowWillResize:toSize: はウィンドウのリサイズ中、mouseDragged:
みたいに何度も送られ続けるので、これを使って4行2列を適切にリサイズ
するようにしてみては? drawRect: の要領です。
って、もう Cell のサブクラス書いちゃった?
解決したんならそれはそれでいいですけど、一応代替案ということで。
>>587 タイトル+文字列をNSViewのSubViewに入れてまとめてしまえば
NSFormCellと同じようにauto resizeできるんじゃないかいな
589 :
583 :04/03/02 07:20 ID:ipzP48JD
>>588 4行2列って
ラベル フィールド ラベル フィールド
ラベル フィールド ラベル フィールド
ラベル フィールド ラベル フィールド
ラベル フィールド ラベル フィールド
こんなのを想像してるんだけど、違うのか?
ラベルとフィールドを組みにしても、2列目の水平位置がやっかいなことに
なりそうじゃない?
つーか、autoresize の機能に proportional な位置決めがあったら
いいなあとかよく思うよ。水平位置は中央、垂直位置は下辺から 1/4 を
維持、みたいな。
流れを読まずコピペすまそ。
これXcodeで作ったみたいですが
そうなるとCocoa?なのかな? 部分部分でCarbon使ってるとか?
全く無知な自分が推測で言っても恥ずかしいだけですが。
>
> ∧∧
>Γ(,,゚Д゚)
>Σ∪【《〓0☆Ξ=∞ =∞ =∞ =∞ =∞ =∞
>〜て ) _)
>(/
>
>MacOSX対応 ネタシュー「スペースギコハリャーン」
>
>ども、お久しぶりです。
>2年半の月日を経てギコハリャーンシリーズ第2弾をリリースしました。
>ついでに、おまえもなーるたいぷも復活。
>
http://www.geocities.jp/adoveproject/ghgikoharri.html >NVIDIA系の検証が少ないですが多分大丈夫でしょう;;
個々のパーツはアマチュアLVなのは置いといて
ポテンシャルはもの凄いと思ったです。
>>590 Cocoaではない。Mach-O Carbonだな
Cocoa でも飲んで、もうひと頑張り! ( ・∀・)つ旦
>>593 ( ・∀・)つ c|_| ホラヨ。マグカップ!
ココアといえばバンホーテン。長嶋さん...
596 :
名称未設定 :04/03/05 03:33 ID:vwJttUL6
別のスレ
【Yahoo!】OSXでメッセチャット【誰か作って!!】
http://pc.2ch.net/test/read.cgi/mac/1078162637 で問題が発生しています。
そのスレにリンクが張られているソフトの改造をして
ビルドしようとするとエラーが3つでます。
NSLayoutManager.h:68: cannot find protocol declaration for `NSGlyphStorage'
こういったものですが、Cocoaのヘッダの中身でエラーがでるのです。
簡単なことならソースを追いかけていくことができるのですが、
NSGlyphStorageでぐぐっても、ほとんどヒットせず
この問題はまったくお手上げで、どうしたらいいか分かりません。
お助けいただける方、智慧を貸して下さい。
Available in Mac OS X v10.3 and later. ということだが、10.2 以前でビルドしようとしているという可能性は?
598 :
名称未設定 :04/03/05 03:44 ID:vwJttUL6
>>597 失礼しました、環境を書いておくべきですね。
私の環境は
・Mac OS X 10.3.2(Panther)
・Xcode 1.1(ヘッダの書き換えとか、勝手な変更は加えていません)
・PowerBook Pismo 500MHz
・RAM : 640MB
ソースは先程のスレのリンクから得ることができます。
改造したポイントもそのスレに書いておきました。
>>598 sudo fixPrecomps
してみるとか? 関係ないかも
>>596 >別のスレ
charla2 ?
これさ、10.2.8 & PBで作成されているよね。
この環境なら、buildできるよ。
Xcodeで互換オプションなかった?(持ってないので試せない)
(1)プリコンパイルヘッダーMyCocoa.h内で宣言されているから外してみるとか
#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_1
(2) 使われないものなら、存在しない宣言、変数などは偽装する
@protocol NSGlyphStorage{} をつくる
ココアといえばコデン
>>599 ,600
レスありがとうございます。
MyCocoa.h
#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_1
というのをコメントアウトし、sudo fixPrecompsしたところ通るようになりました。
これから通信部分を日本語に直す作業にとりかかります。
丁寧に書いていただいたのに、レスが簡素すぎる気がしますので。
>>599 一度に二つのことをしたので分かりませんが、効果はあったかも知れません。
Cocoaのヘッダがおかしいとは思えないので
プリコンパイルヘッダの混乱は妥当な判断だと思います。
今までCodeWarriorでC++/Carbonやってたもので
あまりXcodeやPBには詳しくないのでやり方を知らなかったのですが。
>>600 > charla2
はい、そうです。
自分が使うわけじゃないのですが、面白そうなのでいじってみることにしました。
>Xcodeで互換オプションなかった?(持ってないので試せない)
これは分かりません。
大抵のものはXcodeで手直しなくビルドできていますから
互換オプションのお世話になったことがないのです。
>(2) 使われないものなら、存在しない宣言、変数などは偽装する
荒技ですね。
該当のヘッダが読まれる直前に書くか、
書き込み禁止のヘッダを操作することになるので躊躇していました。
>>587 まだ、実装していません。
自動リサイズ位置決めプログラムのほうが難しそうなんですけど、
なんかサンプルとかありますでしょうか?
>>588 InterfaceBuilderってそういうViewのネストを増やすと、極端に
速度低下してしかも不安定になるので、あんまりしたくないんです。
NSViewのサブクラス化をIBでつくって配置する方法がわかれば
やってみようかとは思うんですけど、よくわからないものですから。
>>589 >ラベル フィールド ラベル フィールド
>ラベル フィールド ラベル フィールド
>ラベル フィールド ラベル フィールド
>ラベル フィールド ラベル フィールド
そうです。一応、同じサイズで作ってNSFormの位置をあわせて
おくと各行の水平位置はあいます。
605 :
587 :04/03/05 22:27 ID:l9OewXIy
>>604 >自動リサイズ位置決めプログラムのほうが難しそう
なんで? ウィンドウの幅から相対的にフィールドの位置と幅なんてすぐに
求められるし、そしたら後は setFrame: するだけでしょ。サンプルがないと実装
できないほどのもんでもないと思いますけど。
つーか、まずはコード書こうよ…… _| ̄|○
606 :
587 :04/03/05 23:18 ID:l9OewXIy
とかなんとか言ってるうちに俺実装できちゃったYO! といっても、1行だけの ラベル フィールド ラベル フィールド っていう構成だけど。なんとか2列目の水平位置もうまいこといった。 でもまあ、こっから行を増やすのなんてどうってことないし。 ま、実現できることはわかったので、後は 604 の頑張り次第かな。 でもまあ、これでやったとしても formatter の自作が残っているわけだが……
609 :
名称未設定 :04/03/07 19:52 ID:kh0UA2Ez
あるNSDataを initWithData でunicode指定でNSStringにして str = [[NSString alloc] initWithData:dat encoding:NSUTF8StringEncoding]; それをそのままwriteToFileでファイルに書き込むんだけど、できたファイルを開いてみると Shift JISでエンコードされてるみたい。どこが間違ってるんでしょ?
>>609 NSStringのwriteToFileは、問題なければdefaultCStringEncodingで書き込む(のかな?)
なので、NSDataのwriteToFileを使う。
str = [[NSString alloc] initWithData:dat encoding:NSUTF8StringEncoding];
としたなら、
[[str dataUsingEncoding:NSUTF8StringEncoding] writeToFile:〜〜];
とでもすればいいだろう(かな?)
できますた!即レスありがとう!
612 :
ito :04/03/08 21:00 ID:eWAEo4De
>>275 さんと同じ症状が出たんですけどだれか直し方を教えてください
command+ダブルクリックで検索できなくなりました。クラスの階層表示も、からになっています。
NS*の索引が出来てないみたいなんです。
クリーニングや索引の再構築をやってみましたが効果はありません。
前になったときは、プロジェクトを作り直して直ったんだけど、毎回作り直すのは面倒なので...
Interface Builderを使ってスプリットバーをクロスさせるにはどうすれば良いのでしょうか? 具体的には、下図のように一つのウィンドウに4つのビューがあって、 横のスプリットバーでAB<->CD、縦のスプリットバーでAC<->BDと移動させたいのですが、 A<->C、B<->DのあとAC<->BDとすると、AB<->CDがうまく動かないです。 かといって、ABCDをまとめるとA<->B<->C<->Dのように一列になってしまいます。 分かりにくい説明で申し訳ないです;; AB CD
>>613 2つの SplitView のバーを同期させたいということですよね。
SplitView のデリゲートメソッド splitViewDidResizeSubviews: が使えるはず。
SplitView にはバーの位置を設定するメソッドがないので、バーの位置を同期
させるには対応関係にある SplitView の subview の frame を直接設定した後、
SplitView の再描画を促せばいいと思います。
615 :
614 :04/03/10 10:51 ID:vJ950ONy
上記の方法でやってみたらできました。 なんかわからないことがあったら聞いて下さい。
>615 ありがとうございます。まだCocoaに詳しくないので、 勉強しながら試してみることにします。 ところでその方法(A<->C、B<->DのあとAC<->BDとして A<->C、B<->Dを同期させる方法)だと、縦方向にスプリットバーが1つ、 横方向にスプリットバーが2つになって外観を損ねたりはしないのでしょうか?
617 :
614 :04/03/11 20:33 ID:hWn4TCr4
618 :
614 :04/03/11 21:08 ID:hWn4TCr4
それから、ここでいう「同期させる」というのは「同時に動かす」という 意味です。splitViewDidResizeSubviews: はバーのドラッグ中、繰り返し 呼ばれるのでこういったことが可能になります。
619 :
名称未設定 :04/03/13 11:40 ID:/U0BUXOt
オープンソースで公開されているPythonスクリプトをパッケージ内に入れて CocoaでGUIをつけようと試みています。 ところが、そのスクリプトは複数のファイルで出来てるんですが、ファイル間の階層構造が保た れていなくてはいけないようなのに、フォルダのままProjectBuilderにドロップ→ビルドすると その中のファイルが全部フォルダから出されてResourcesに入れられてしまいます。 フォルダの階層構造を保ったままResourcesファイルに入れる方法ってありますか?
>>619 Target 設定の一番下の辺りに Build Phases ってのがあるだろ。
そこに Copy Files Build Phase を追加すれば、アプリケーションラッパに
コピーするファイルとコピー先のサブパスを設定できる。
Project メニューに New Build Pahase > ってのがあるからそっから
Copy Files Build Phase を選べば追加されるよん。
621 :
619 :04/03/13 12:47 ID:/U0BUXOt
>>620 素早いレスありがとうございます。
なるほどなるほど。日本語でいう「ファイルをコピー」というのを追加して
その中に件のファイルを入れてしまえば良い訳ですね。
ありがとう。がんばってみます。
622 :
620 :04/03/13 13:21 ID:sZyU6+dG
スクリプトが1つのフォルダにまとまってるなら、そのフォルダ自体を 指定したらいい。そしたらフォルダ内の階層構造もそのまま保存されたはず。
623 :
619 :04/03/13 18:30 ID:/U0BUXOt
フォルダのコピーはちゃんと行けたけど、肝心のスクリプトがうまいこと動いてくれない・・ Pythonなんてわかんないし、あきらめました・・。 ちなみに、そのスクリプトはPluckerというやつで、HTMLをPalmで読めるように整形してくれる スクリプトでした。一応GUI版もあるんだけどあまり日本語のことを考えてくれてないようなので 自分で作ってみようかなーと。 と思いやってみたら、文字だけは変換できるのに画像は出来ないという変な動き・・。 よく調べたらTerminalで動かしても同じ症状が出てました。 なんでだー、元のGUI版と何が違うんだよー・・・ orz
Cocoa とは直接関係ないんであれなんですが…… 画像掲示板に相当する、ソースやプロジェクトを匿名で気軽にアップできる ような板ってないもんでしょうか。質問するにしてもそれに答えるにしても、 ソースやプロジェクトをやり取りできれば便利だと思うんですが。 というか、俺が知らんだけでそういうものは既にあるのかな……
>>624 aaacafeあたりを借りれば掲示板とuploader、wikiなどは置ける。
画像を拡大・縮小した後、そのサイズで保存するには どのクラスのお世話になったらいいですか? NSImageやNSImageRepにsetSizeしても、ファイルに書き出してみると サイズは元のままなんですが...
あまり長いソースだと読むのが大変で 気軽に答えられないからじゃないかなあ。
628 :
名称未設定 :04/03/14 19:05 ID:TQgM8Yu6
ソースって追いかけるものなんじゃないかな。 量が多くても全部読むわけじゃなくて、必要なところだけ辿ってくわけで 聞く方は晒せるなら全部晒した方がいいと思う。 全部必要なのか、部分的にあればいいのかは答える方(上級者)が判断することだし。
>>626 うろ覚えなんで間違ってるかも知れないんですが、
保存したい NSImage を setSize
保存したいサイズの NSImage を新たにもう1つ作り、それに対し
lock focus
setSize した方の NSImage をそこへ draw
unlock focus
こんな感じでいけませんかね。
>>629 ありがとうございます。ばっちり出来ますた!
元のimageにはsetSizeしなくても、drawInRect:で
新しいほうのimageのサイズを指定すれば大丈夫なようです。
631 :
629 :04/03/14 21:51 ID:4l4nKXwL
NSImage や NSImaseRep に対し setSize: しても、それを書き出して みたらサイズが元のままなのは、これらがメモリ上にロードしたイメージ データ(NSImageRep が持ってます)をどんなサイズでレンダリングするかを 指定するものだからです。 NSImage はこのサイズにあわせて、ベストな NSImageRep からキャッシュ イメージを作り、自身の描画を要請された時にはこのキャッシュを使います。 (描画の度に NSImageRep の持ってるデータからサイズ変換してたら効率悪いし) 仮に setSize: で NSImageRep の持ってるイメージデータのサイズを 実際に変換してしまったら、一度サイズを縮小したら最後、縮小に伴って 失われた情報を、もう一度ディスクからファイルをロードし直さない限り 復元することができなくなってしまいます。 そんなわけで、NSImage では setSize: される度に、NSImageRep の データからキャッシュを作り直しているわけです。(実際には、描画の 要請があってからキャッシュを作り直すみたい) NSImage とか NSImageRep とかのあたりはほんとにややこしくて、 自分も完全に理解しているとは言い難いのですが、とりあえず。 詳しい人、補足、ダメだしあったらおながいしまつ。
632 :
名称未設定 :04/03/15 11:57 ID:6Ii7y6yh
FinderのようにOutlineViewを使ってファイルリストを表示させるプログラムを つくっていたのですが、Cocoaでファイル&フォルダの不可視属性を取得することは できるのでしょうか? Carbonを使ってみたのですが、一部のフォルダなどには不可視属性がついていないものも ありったりして、Finderのように表示させることができません。 どなたか、情報をおもちの方がいらっしゃいましたら教えてください。 お願いします。
スクリーンセーバーモジュールのビルド時に、リンカが以下のような 警告を吐きました。 ld: warning dynamic shared library: /usr/lib/libSystem.dylib not made a weak library in output with MACOSX_DEPLOYMENT_TARGET environment variable set to: 10.1 not made a weak library というのは何か重大な問題でしょうか? ビルド自体は成功し、モジュールも問題なく動作しますが、この警告が 気になって仕方ありません。こちらの環境は Mac OS X 10.2.8 Developer Tools December 2002 です。
635 :
633 :04/03/15 19:34 ID:q7l8yECV
>>634 ずばりですね。ありがとん! (・∀・)
636 :
633 :04/03/15 23:18 ID:PZYCuvKo
って、読んでみたけどこの辺の話はよくわからんす(恥 10.1 でも使えるようにしたいので、QA1223 で示されている回避策2で いこうと思ったのですが・・・ 問題の回避策2 >Mac OS X 10.1 以上を対象にビルドする必要がある場合、または、 >ライブラリ A へのウィークリンクを開始したくない場合は、ライブラリ A の >シンボルへの実際には使われない余分な参照を 1 つ作成して、リンカに >ライブラリ A に強くリンクさせることができます。 これって具体的にはどうすることなんでしょうか? ライブラリ A に相当するものは多分インポートしてるフレームワークのどれか であり、それらに含まれる関数を無駄に呼んでみるとか、クラスのインスタンスを 無駄に作ってみるとかすればいいのかと思い、いろいろやってみたんですがどうも 違うみたいです・・・ リンカとか共有ライブラリの仕組とか、全然わかってない…… (´・ω・`) トホホ
>636
%nm /usr/lib/libSystem.dylib
とするといろいろなシンボルが表示されますが、よく見るとただのCの標準ライブラリであることが分かりますね。
ですから、この場合、ライブラリAであるところの、Cの標準ライブラリを直接使ってやればよいことが分かります。
使わなくていいものは別に使わなくてもいいので
if( fclose == NULL ) { fprintf( stderr, "You have no C Lib!!¥n" ) }
// 3つも使っちゃいました! fcloseがなくてfprintfがあるなんてどんなシステムなんだろう(w
とかで十分でしょう。最適化で消えないように気をつける必要がありますが。
警告を無視するのでいいのなら、
>>633 >not made a weak library というのは何か重大な問題でしょうか?
べつに問題ありません。
警告の意味は「ld は弱いリンクを作ろうとしましたが、できませんでした。」
Appleの回避策2は ld に弱いリンクを作ろうとさせない。
ってことですから。
作ろうとしなければ警告は出ませんよね?
638 :
633 :04/03/16 01:50 ID:q57OVuhd
639 :
:04/03/17 08:04 ID:FvBWDMVl
>>632 > 一部のフォルダなどには不可視属性がついていないものも
> ありったりして、Finderのように表示させることができません。
不可視属性がついていないのに表示されないものがある、ということですか?
具体的には何ですかそれは? まさか . で始まるやつとか言うんじゃ……
data = [image TIFFRepresentationUsingCompression: NSTIFFCompressionNone factor:0.0]; bmRep = [[NSBitmapImageRep alloc] initWithData:data]; とやって image から BitmapImageRep を作った後、ピクセルバッファの アドレスを得て、そこから直接ピクセルをいじって画像にエフェクトをかける プログラムを書いています。 32 bit のカラー画像なら、メモリ上で R, G, B, A の順で並んでいて、 plane は 1 つ、という前提でプログラムを書いているのですが、果たして これは保証されているのでしょうか? NSBitmapImageRep のドキュメントを見ても、initWithData: でインスタンスを 作った場合に、ビットマップデータがメモリ上でどのような構成になるかといった ことが一切書かれていないので、ちょっと不安になりまして。 情報、もしくはその在り処を知っている方がいたら教えて下さい。
>641 詳しい情報はもってないけど、どうしても不安なら、 独自のNSImageRepのサブクラスを作ればいいのでは?
>>642 レスありがとうございます。
1 pixel 32 bit RGBA 1 plane で正規化された bitmapImageRep を返すような
クラスメソッドでも NSImage にカテゴリとして追加しようかなあと思います。
いけね。×クラスメソッド ○インスタンスメソッド
下記はeventを一つづつ取り出して、そのイベントが何に対する イベントか判断して実行するか、無視するか決定するルーチンです。 今現在ボタンAなのかスライダーBなのかの判断をイベントが発生した マウスの座標で行っています。 マウス座標で判定する以外の方法でeventを受け取るコントロールを知る方法はないでしょうか? ボタンなどのコントロールの数が多くなると、座標判定ルーチンを記述する のが結構大変です。 もっとスマートな方法をご存知の方は教えていただきたくお願いします。 while(適当にループ){ NSEvent* event = [NSApp nextEventMatchingMask: NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.01] inMode:@"NSDefaultRunLoopMode" dequeue:YES ]; if([event type] == NSLeftMouseDown){ if(ボタンA の位置でイベントが発生==YES){ [NSApp sendEvent: event]; }else if (スライダーB の位置でイベントが発生==YES){ [NSApp sendEvent: event]; } }
>>645 NSView に hitTest: ってのがあるね。
それか、コントロールの一覧を配列か何かに入れておいて、mouse: inRect: あたりで
順番に調べればいいのでは。
てゆうか、なんでそんな変なことがやりたいの?
たぶん目指してるやりかた自体が全然スマートじゃない。
一体何のための Application Kit なのかと小一時間……
Think different.
ああ、なんか古の WaitNextEvent() を思い出しますなあ…… 全然ものにならなかった苦い思い出がっ! それを思えば随分とラクチンになったもんだ。いいね、Cocoa。 645 は Application Kit が裏で何をやっているか理解するためにあんな プログラムを書いているに違いない、 と、好意的に解釈してみる。
651 :
名称未設定 :04/03/23 04:42 ID:oSJY7XQX
CFBundleName, CFBundleDisplayName を設定して自作アプリの 名前を Finder に日本語で表示させるようにしたのですが、Dock では なぜか英語名になってしまいます。Dock にも日本語で表示させるには Info.plist に何か別の設定が必要なのでしょうか?
>>651 Japanese.lproj/InfoPlist.stringsかな
テキストエディットなどを参考にしてください
CocoaはC++ではなくObject Cって本当ですか?
654 :
651 :04/03/23 07:37 ID:oSJY7XQX
>>652 それを参考にして Finder に日本語表示させるところまではきたのですが、
なぜか Dock ではダメなのです。InfoPlist.strings も
CFBundleName = "日本語名";
CFBundleDisplayName = "日本語名";
という感じで、設定に不備はないはずなんですが。
655 :
名称未設定 :04/03/23 10:33 ID:HUVAC8iN
656 :
655 :04/03/23 10:34 ID:HUVAC8iN
Object Cってどんな言語ですか?(藁 Objective-Cなら知ってるんだけど。
>>653 C++というかObjective-C++ならサポートされている。基本はObjective-Cだ。
>>654 本当に設定不備が無いのならキャッシュされているだけかも?
>>657 object Cは存在する。それに“c”と“object”がつく言語はいくつもある。
今回の件には無関係だし、トリビア程度な知識だから知らなくても全然気にするこたぁ、、あるから存分に吊ってくれ。
Objective-C++っても、C++のクラスをO-Cで継承できない、んだよね?
660 :
651 :04/03/23 20:00 ID:vWySDxGT
>>658 それは Dock がキャッシュしてるっていうことですか?
>>660 パッケージの中のContentsフォルダを外に出して、入れてみると、どう?
662 :
名称未設定 :04/03/24 04:58 ID:jRUfl/ai
MainMenu.nib の FirstResponder に独自の Target を追加して 新しいメニューを MyDocument あたりで処理するにはどうすればいいのですか?
>663 tergetを追加する必要はありません。 ClassタブでFirstResponderを選んでactionを追加。 新メニューのアクションをFirstResopnderのactionにつなぐ。 これだけです。 MyDocumentがactionメソッドを持っていて、且つFirstResponderになっていれば MyDocumentにアクションが飛んできます。
>664 ありがとうございます。 おかげさまでメニューの追加ができました。
Safari上に表示された 画像(PNGファイル)をドラッグすると、 (1)画像が半透明になってマウスに追従して動きます。 (2)そのまま、テキストエディットにドロップすると画像がペーストされます。 (3)一方デスクトップ上にドラッグドロップするとABC.pngのようにPNGファイルになって保存されます。 上記(1)(2)(3)を行う機能を実装したいのですが、方法がわかりません。 どなたか御教授いただければ幸いです。 試したこと。 dragPromisedFilesOfTypes:fromRect:source:slideBack:event:を使い、 namesOfPromisedFilesDroppedAtDestinationをオーバライドすることで (3) が実現できました。しかしドラッグ中に表示されるのは(1)の画像ではなく PNGアイコンになります。さらに(2)は実現できません。 dragImage:at:offset:event:pasteboard:source:slideBack:を使った場合は、 逆に(1),(2) は正しく行えるのですが、(3)が実現できません。 Safariのように(1)(2)(3)を同時に行う方法があれば教えていただきたくお願いします。
667 :
名称未設定 :04/03/26 01:09 ID:9hV6Tyd6
>>666 ペーストボードにNSFilenamesPboardTypeでフルパス(の配列)を
入れておけばdragImageで(3)も可能。
668 :
名称未設定 :04/03/26 01:54 ID:S0Bhxg2O
669 :
666 :04/03/26 09:05 ID:r0/r7A0v
>>667 ありがとうございます。
ファイルが存在する場合はそれで良いような気がしますが、
本ケースでは、ファイル自体が存在しないため(アプリーケッション内のデータとして存在する)
当然ながら、NSFilenamesPboardTypeで名前を指定できないのです。
Safariは一旦テンポラリファイルを作っているのだろうか?
>>669 漏れも同じようなことがあって、調べても分からなかったので
一時ファイルを作る方法で対処したことがある。
>>669 NSFilesPromisePboardType を使う。
どう使うかは知らん
ぐぐればCocoaはやっぱりのpdfが見つかるだろう
672 :
666 :04/03/26 18:47 ID:r0/r7A0v
以前FirstResponderについて質問させていただいた者です。 ドキュメントのNSViewないしNSWindowから該当のNSDocumentのポインタを得ることはできないのでしょうか。 できるとしたらFirstResponderをたどる方法なのかな・・この辺ご教授いただけると助かります。
[[window windowController] document]
こんにちは。 灰色の透明なウィンドウ(音量設定みたいなウィンドウ)を作ろうとして、 #import "MyWindowController.h" @implementation MyWindowController - (void)drawRect:(NSRect)rect { [window2 makeKeyAndOrderFront :self]; [[window2 contentView] lockFocus]; NSRect rect = [[window2 contentView] frame/*bounds*/]; [[window2 contentView] unlockFocus]; [window2 flushWindow]; } @end としてみたのですが MyWindowController.m:9: unused variable `rect' ウィンドウ自体を透明にすることはできましたが、このようにでてうまく表示されません。 勉強し始めてまだ四日位なのですが、何か基本的なことを見逃してしまっているのでしょうか。
>としてみたのですが MyWindowController.m:9: unused variable `rect' >ウィンドウ自体を透明にすることはできましたが、このようにでてうまく表示されません。 少し変な言い方でした。 上にかぶせる半透明なウィンドウが表示されない、ということなんです。
何故そういうコードで半透明になると思ったのか 根拠を教えてほしい。
俺も教えて欲しい。
>>675 これで出来たよ。
#import "stdio.h"
#import <AppKit/AppKit.h>
@implementation hoge
-(id)initWithContentRect:(NSRect)contentRect
styleMask:(unsigned int)aStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag {
NSColor *ccol;
ccol=[NSColor colorWithCalibratedRed:1
green:1
blue:1
alpha:0.6];
NSWindow* result = [super initWithContentRect : contentRect
styleMask : NSBorderlessWindowMask
backing : NSBackingStoreBuffered
defer : NO];
//背景にカラーをセット
[result setBackgroundColor : ccol];
[result setLevel : kCGDockWindowLevel]; //Windowの階層レベル(Dock)
[result setAlphaValue : 1]; //透明度をセット
[result setOpaque : NO]; //不透明度
[result setHasShadow : NO]; //影
return result;
}
>>675 >unused variable `rect
って単に変数rectを使ってないよ〜、ってことだと思う。
用意したのに使ってないのは何かのミスかもしれないので
教えてくれるのでしょう。
>>679 ありがとう、やってみますね
>>680 ありがとう
>>681 変数rectでぐぐってみます、ありがとう
>>682 ありがとう
まだ何も分からないのでありがとうしか言えません・・・・
もっと勉強して出直します。どうもありがとうございました!
684 :
名称未設定 :04/03/31 15:24 ID:/FoW4DD2
>683 変数rectじゃなくて C言語がヒットしても良いから 変数 スコープ でググれ。 ていうか、本買え、本。 その状況じゃ3日後には挫折するぞ。
>684 あまりの馬鹿さ加減に興奮して、上げてしまったではないか。 ていうか ガンガレ !
>>684 ありがとう、変数 スコープですね。
本なんですが、実はXcode入門を買ってしまいまして、当分は買えないかなぁ・・・と
687 :
675 :04/04/01 00:16 ID:2uLYEGqq
やっとできました! @implementation some - (void)drawRect:(NSRect)rect { [window makeKeyAndOrderFront :self]; [[window contentView] lockFocus]; NSRect rect = [[window2 contentView] frame/*bounds*/]; ここに何を書くかを設定しなきゃいけなかったんですね・・・・ [[window contentView] unlockFocus]; [window flushWindow]; } やっと気づきました。 根拠を教えてほしい、という言葉が今では身にしみます・・・・・・ もっとCocoaになじめるよう、努力します。
そういう問題じゃなかろうと思うが。
NSMutableAttributedStringを使って、一文字の幅を指定してdrawすることは可能でしょうか。 (文字と文字の間を大きくしたり、逆に文字が重なるようにしたいのです)
文字列を表示したとき、実際にそれが表示されている範囲(Rect)を知るにはどうしたらいいでしょうか。
>>690 氏のリンクはまさにその辺りの話だと思うんですが、ぶっちゃけよくわかりません。
メソッドを関数風に扱う初歩がわかりません……。 List-1(処理内容はサンプル)は正常に動作しますが、同じ動作を期待しつつ、 独立したメソッドで文字列決定を処理させようと思ってList-2のようにすると コンパイルOKですが実行するとエラーになります。 どこをどうしないといけないんでしょうか。 ■ list-1 - (IBAction)myAction1:(id)sender{ NSString*s; if((random()%10) <= 5) { s = @"AAAA"; } else { s = @"BBBB"; } [ myOutlet1 setStringValue:s ]; } ■ list-2 - (IBAction)myAction1:(id)sender{ NSString*s; [ s randomString:5 ]; [ myOutlet1 setStringValue:s ]; } // - (NSString *)randomString:(int)iSeparate{ NSString*s; if((random()%10) <= iSeparate) { s = @"AAAA"; } else { s = @"BBBB"; } return( s ); }
>>692 > [ s randomString:5 ];
s = [ self randomString:5 ];
かな。
694 :
名称未設定 :04/04/02 01:48 ID:ZzfeRsDX
>>692 list-2の、
>[ s randomString:5 ];
って、オブジェクトsにメッセージ"randomString"を送出する、って意味。
NSStringでrandomStringメソッドが定義されていないとだめ。
単に、NSStirng *randomString(int) ; の関数を定義するのではダメか?
- (NSString*)randomString: はどのオブジェクトのメソッド?
695 :
名称未設定 :04/04/02 01:50 ID:ZzfeRsDX
文字の最大の縦幅を得る方法を教えてください。 NSFontの属性が多くてよくわからないです。 試しにfontHeight=[font ascender]-[font descender]としても フォントの種類によってうまくいかないですし・・。
むりやりだが、@"ABC…xyz"にsizeWithAttributes:を送ってみるのはどうだ?
698 :
692 :04/04/02 23:20 ID:ebUl9BJ8
>>693 それです!ありがとうございました。
言われてみると今の自分、「selfってなんなんだろ」状態でした・・。
>>694-695 コンパイルエラーにならないように試行錯誤した結果が
[ s randomString:5 ];なのでした(←ひどすぎますね)。
NSStirng *randomString(int iSeparate)
これ↑の場合も試して、同じ内容で動作するのを確認できました。
両方使い分けてもいいのですね。ありがとうございました。
699 :
名称未設定 :04/04/03 02:33 ID:YIsbXhNT
Objective-CはC++と違って実行時決定で 定義していないメソッドを呼んでもコンパイルエラーにならないから 慣れてないと分かりにくいかも知れない。 そのかわり柔軟なdelegateとか定義できるみたい。 C++でテンプレートを駆使してdelegateやってるのを見ると涙ぐましい。
NSArrayControllerにプログラムでオブジェクト追加/削除していてしかも、オブザーバーにも 設定しているんですが、削除時に以下のエラーメッセージが実行ログ中に出力されます。なんが悪いんでしょうか? An instance 0x35e2f0 of class MyClass is being deallocated while key value observers are still registered with it. Break on _NSKVODeallocateLog to start debugging. 追加削除のコードはこんな感じ - (IBAction)add:(id)sender { MyClass *anObject = [[[MyClass alloc] init] autorelease]; [self registerForChangeNotification:anObject]; [sourceController addObject:anObject]; } - (IBAction)remove:(id)sender { MyClass *anObject = [[sourceController selectedObjects] objectAtIndex:0]; [self unregisterForChangeNotification:anObject]; [sourceController removeObject:anObject]; } - (void)unregisterForChangeNotification:(id)anObject { [anObject removeObserver:self forKeyPath:@"value"]; } - (void)registerForChangeNotification:(id)anObject { [anObject addObserver:self forKeyPath:@"value" options:NULL context:NULL]; } こうしているのは、このクラス(MyClassとは違う)でMyClassの各インスタンスが 変更されたときに処理をしたいからなんですけど。unregisterがうまくできていない感じです。 sourceControllerはNSArrayControllerです。
> - (IBAction)add:(id)sender { > MyClass *anObject = [[[MyClass alloc] init] autorelease]; > [self registerForChangeNotification:anObject]; > [sourceController addObject:anObject]; > } ここで anObject を -autorelease しているが、大丈夫か? sourceController の addObject: で retain されていればいいのだが、 そうでなければ直近の AutoreleasePool が release されたときにこの anObject は dealloc されてしまうぞ。 エラーメッセージから察するに、どこかで retainCount の数え間違い をしていて、既に解放されたオブジェクトを delete しようとしている 感じだ。 ここらへんの問題を解きたいなら素直に ObjectAlloc.app を使うべし。
>while key value observers are still registered with it というところから想像すると anObjectにバインドしているviewオブジェクトがまだあるのに、 勝手にanObjectを解放するな、ということかも。 選択中のオブジェクトを削除するのは - (void)removeObject:(id)object ではなくて - (void)remove:(id)sender を使うのではないか?
>701 ObjectAlloc.app使ってみました。よくわかりませんが、オブジェクトは 消したいところで消えますし、そうでないところではちゃんと残っています。 >702 remove:でも同じです。実は、Master-Detail表示にしているのでそれが 悪いのかもしれないんですけど、よくわかりません。 削除ボタンをNSArrayControllerのremove:に直接バインドしたときには エラー表示はないのですが、別のオブジェクトにもNSArrayControllerの 数が変わったら通知がいくようにしたいので、add/removeともに 別オブジェクト経由にするようにしています。
ふと思ったが > [self unregisterForChangeNotification:anObject]; > [sourceController removeObject:anObject]; これ、逆の順番にしたらどうなる?
>704 同じでした。アドバイスありがとうございます。
ユーザがビューをスクロールさせた場合に、それをnotifyさせることはできないのでしょうか? NSScrollViewにデリゲードがないみたいですので・・。
前にMacOSX−DEV-MLにそんな話題があったよう。 結論は忘れたけど、ぐぐれば出てくるんじゃない?
>> 706 [[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(frameChange:) name:NSViewFrameDidChangeNotification object:[scrollview contentView]]; でどうさ。
>707-708 ありがとうございます。 NSViewFrameDidChangeNotificationではなくNSViewBoundsDidChangeNotification にしたら、上手く動作するっぽいことが分かりました。
710 :
708 :04/04/07 16:25 ID:Yts/wyzN
訂正 (NSClipView *)[scrollview contentView] × (NSView*)[scrollview documentView] ○
>>700 話の本筋からは若干はなれるんだけどさ、
add: remove:の中でノーティフィケーション登録するよりは
MyClassのinit / deallocのタイミングで登録した方がスマートでは?
MyClassがノーティフィケーションを発行するかなにかして。
そうすれば自前のadd: remove:を準備する必要も無いし。
>>700 >MyClass *anObject = [[sourceController selectedObjects] objectAtIndex:0];
って本当に正解?
今似たようなことやってたら
[[NSArrayController selectedObjects] objectAtIndex:0]
で、NSCFDictionaryが出てきたぞ?
俺の問題かもしれんが
713 :
712 :04/04/07 18:23 ID:lSRMgYqr
>[[NSArrayController selectedObjects] objectAtIndex:0] >で、NSCFDictionaryが出てきたぞ? NSArrayControllerのObject Class Nameを設定し忘れてただけだった。 逝ってきます・・・
>711 ありあがとうございます。試してみましたが、うまくゆきません。 An instance 0x3af970 of class MyClass is being deallocated while key value observers are still registered with it. Break on _NSKVODeallocateLog to start debugging. unregisterするメソッドにNSLogを書くとこのメッセージの後にデバッグメッセージを表示します。 そしてその後、アプリケーションは異常終了SIGSEGV。 ちなみに、(修正前の)上記メッセージが出ているだけではアプリケーションは 何事もなく動作を続けています。
715 :
名称未設定 :04/04/09 13:33 ID:MQmqarYG
一つ質問なのですが、別のウィンドウをクリックしてドキュメントが切り替わったときに、 例えば色を薄くするとかの処理を行いたいときは、どこをいじればよいのでしょうか? ・・下がりまくってるのであげます。
色を薄くする対象はウィンドウそのもの?それともウィンドウに載っている部品?
>714 そもそもregisterとunregisterに問題があるのでは? registerしてすぐにunregisterしてもちゃんと動く? >715 NSWindowDidResignKeyNotification NSWindowDidResignMainNotification
>717 ありがとうございます。 もちろん、更新処理は呼び出されませんが、同じようにエラーがでました。 そもそもremoveObserverができていないようです。 マニュアル等見直してみます。
全く関係ない話だけど、マルチドキュメントのアプリケーションを作っていて NSDocument を NSNotificationCenter に observer として登録していたんだが、 NSDocument を閉じる時に observer を解除するのを忘れてしまい、 それでアプリケーションが落ちまくって原因が分からずに困った覚えがある。 NSNotificationCenter が既に存在しない observer に通知を投げようとしてたんだな。
SketchはdeallocでremoveObserverしていたよーな?
俺は登録してようがしてまいがdeallocで必ず [[NSNotificationCenter defaultCenter] removeObserver:self]してる
NSTextVewなどによる文字単位や単語単位や行単位での文字列操作のメソッドを網羅していきたいのですが、 こういう場合に調べる方法がわからないのでアドバイスかヒントをお願いします。 書籍、Webページ、DevelopTool内のファイル、ヘルプなど、どういった物をどのように活用して 「こういうメソッドがあって、こう使える」と理解していけばいいでしょうか。
>722 ADCのページ見れば一目瞭然だが。 「Text & Font」 って書いてあるし。 Cocoa だけじゃ全部は出来ないけどさ。 盲点なのは 「Unicode Utilities」かな。
724 :
名称未設定 :04/04/15 01:56 ID:YUjIVpkv
NSUserDefaultControllerを使ってPreferenceの中のある項目にバインディングしようとしてるんですが Model Key Pathを items.anItem.title のようにドットで区切ってもdictの中を読んでくれません(itemsとanItemはdict、titleはstringだとして) prefを保存すると <key>items.anItem.title</key> というようにそのままkeyにされてしまいます。 どのへんが間違っているんでしょうか?
NSOutlineViewを使ってるのですが、どうもデフォルトでは ダルブクリックで名前変更するみたいです。 Finderのように時間を置いて2回クリックすると名前変更するようにして、 ダブルクリックではまた違う動作をさせたいのですが、どうすれば良いのでしょうか?
>>724 Model Key Pathはdictionaryを指定するんじゃなくてdictionaryのkeyを指定するんだ。
>>725 setDoubleAction:でダブルクリックしたときに呼び出すメソッドを指定。
727 :
726 :04/04/15 20:23 ID:uGbcnDSo
>725 >NSOutlineViewを使ってるのですが、どうもデフォルトでは >ダルブクリックで名前変更するみたいです。 IBでアウトラインビューのヘッダをダブルクリックしてEditableのチェックを外す。 >Finderのように時間を置いて2回クリックすると名前変更する 自分でなんとかする 選択状態でさらにクリックされたら該当するセルを編集状態にする、ってところか。 セルを編集状態に切り替える方法は知らない。 調べたら教えてくれ。 >ダブルクリックではまた違う動作をさせたい setDoubleAction:
>>726 ええと、plistの中に
<key>items</key>
<dict>
<key>anItem</key>
<dict>
<key>title</key>
<string>XXXXXX</string>
</dict>
</dict>
こんな感じに設定が入っていて、UserDefaultController経由で
このXXXXXXにバインディングしたいということなんです。
Controller Keyはデフォで values になっていますから
values.items.anItem.title でXXXXXXが取れるかなと思うんですが...
>>729 plistをそういう構造にする必要があるのか。
バインディングしたいてことはkeyの名前は決め打ちなんでしょ?
<key>items.anItem.title</key>
<string>XXXXXX</string>
てすれば楽じゃん
731 :
722 :04/04/16 16:42 ID:ei118ilA
>>723 どうもありがとう。
ADC広過ぎ深過ぎ‥‥とりあえずしばらく悶々と探索します。
732 :
名称未設定 :04/04/17 12:47 ID:VZY2HDFR
developer.apple.comは検索エンジンにGoogle使ってるから、結構正確で便利。
ファームウェア(みたいなもの)を作ろうと思っています。 (a)Cocoa Application としてIBを使って組んだプログラム。 (b)Foundation Tool として組んだプログラム。 (a)はダブルクリックで、(b)はターミナルからそれぞれ実行できるものとします。 (a)を起動しっぱなしにして、(a)の内部で必要な時に(b)を呼び出して実行する、 という連動方式を考えているんですけど、 (a)から直接(b)を実行するには‥‥どうすればいいのでしょう?
質問です。 appendStringなのですが最初UTF8をエンコーディングに使い、もしnilを返すようだったら 適当なエンコーディングを(MacJapaneseやMacRoman等)推測させたいのですが可能でしょうか。 @implementation NSMutableData (String) - (void) appendString: (NSString*) value; { [self appendData: [value dataUsingEncoding: NSUTF8StringEncoding]]; } @end
凄く初歩てきな質問だと思うのですが・・・ SafariやCocoMonarの初期設定みたいに、 アイコンをクリックするだけでぐにょ〜んとウィンドウが伸びちじみして それぞれのウィンドウを下に表示するのはどうすればいいのでしょうか? どうか教えてください!
NSSizeの定義は typedef struct _NSSize { float width; float height; } NSSize; とありますが、例えば以下のようにして、構造体でオブジェクトを 扱うにはどうすればいいのでしょうか? (以下の定義の仕方は正しいのでしょうか) typedef struct _MYStruct { MyObject *obj; } MYStruct;
>738 > (ry 構造体でオブジェクトを > 扱うにはどうすればいいのでしょうか? なぜそのような奇怪なことがやりたいのでしょう?
>>738 どうすればいいのでしょうかって、そのまんまじゃないのか?
MyObject * はしょせんはポインタなんだから。
奇怪ってこともないと思うけど それでできるだろ、きっと。
>> 737, 741 NSWindowの - (void)setFrame:(NSRect)frameRect display:(BOOL)displayFlag animate:(BOOL)animationFlag 試してないがたぶんこれだろう
>>734 >>736 有難うございますm(_ _)m。
呼び出して待つだけならSystem()、マルチタスクで動かすならNSTask()という感じでしょうか。
後者はタスク管理の壁がそびえ立ってますが、前者なら手近っぽいのでサンプル作ってみます。
探していたらexecve()というのが自分の求めている答えのような気がしてきました‥‥が、
これも試行錯誤してからですね。
exec系は正常に実行できた場合帰ってこないので、fork()してからなんだけど、 初心者にはおすすめできないのでsystem()が手っ取り早い。
746 :
名称未設定 :04/04/20 22:52 ID:+G4q+HL9
ところで、CocoaではSIGCHLDとかSIGPIPEとか、あの辺の 扱いはどうなっているの?
質問ですが、 メニューやボタンからPanelを表示させるにはどうしたらよいのでしょうか?
どういう Panel かにもよる。 具体的に書いたらどうか。
750 :
748 :04/04/21 21:11 ID:hmS4g+cv
>>749 どういう風に・・・
例えばアバウトダイアログをデフォルトのではなく自作のを表示したり、
普通のパネルを出したりしたいので・・・
>>750 悪いが一度自分で調べてから来ることを勧める。
>>745 似た用途の関数にstdlib系とunix系があるんですね。
↓横道にそれます・・・
確認用の単純なサンプルを作ろうと思い、Foundation Toolで自動生成されるソースの、
NSLog(@"Hello, World!");の部分をNSBeep();に置き換えてみると、
エラー Undefined symbols:_NSBeep が出ます。
#import <Cocoa/Cocoa.h>や#import <AppKit/AppKit.h>などを試しても同様です。
何をimportすればいいのか、それとも方法が間違いなのか("Foundation" Toolという
プロジェクト区分が気にかかる……)、よく分かりません。
続け質問ですみませんが、指摘をお願いします。
>>748 NSApp beginSheet: の指定次第でいろいろできるようです。
755 :
名称未設定 :04/04/22 12:40 ID:xdUJmYNF
>>752 importとは別に、必要なフレームワークをプロジェクトに登録する必要がある。
/System/Library/Frameworks/Cocoa.frameworkフォルダを
External Frameworks and Librariesのところにドラッグ&ドロップする。
アクセス規制とけた‥‥
>>754 やっぱそうですね。
>>755 ありがとうございます。frameworkの扱い方の何が自動で何が手動なのか
漠然としていたのですが、助言で視界が開けてきました。
ターミナル無しで実行を確認できるFoundation Toolを(NSBeep()も含め)
数種類作って、Cocoa Applicationからsystem( )で一行コマンドを渡して
それらを実行させてみてみました。問題なしです。
argumentを判別させて結果ファイルを吐き出すところまで動いたので、
あとは結果ファイルをCocoa Application側に読み込ませれば、双方向の
連動ができそうです。
皆様ありがとうございました。m(_ _)m
757 :
名称未設定 :04/04/28 10:02 ID:tfG0xXTy
>>757 をぉやっとかぁ。
まぁ、原文と引き当てながら読んでいけば誤訳はなんとかなるって事で。
要するに無いよりマシってことで。
んじゃやらんぞ。
てか2003年の9月ってなんでもっと速く晒せないんだよorz
原文の日付のままなんじゃねーの?と擁護してみるテスツ。 それよりPDF版がないのはなんでじゃろ。
複数ページのHTML=>1ファイルのPDF、の良いソフト無い?
>>761 英文のもCocoa関係はHTMLオンリーのが増えて来たね。
どうもPDFを晒しておくと自前印刷する奴ばかりで印刷物が売れないとか思ってるのか
オンライン参照しつつコード書けと言いたいのかわからんが。
PDFあると楽だよね。リファレンス系じゃなくてこういう読み物系は特に。
764 :
名称未設定 :04/05/02 02:21 ID:xa+EQfZw
ムービーの上に線や絵を描いてそれをムービーに書き出すことしたいんです。 ようは、テレビのスポーツ番組で解説者がやっているようなことをCocoaとQuickTimeをつかって やりたいのだけれど誰か参考になるようなサンプルしりませんか?
NSって何の略だい?
NeXTSTEP
野島伸司の略
ナショナルセミコンダクター
ナイクロソフト
なんじゃそりゃ
なますて
質問です. 他のアプリケーションがアクティブで、 そのアクティブなウィンドウの座標やサイズを取得するにはどのようにしたらいいのでしょうか。 ご教授お願いします.
776 :
◆x3PtJI4Jik :04/05/08 02:33 ID:evr+56Sy
ななししね の縦読みコピペを表示するプログラムを作ろうしてるんですが、うまいこといきません #import "Test.h" @implementation Test NSMutableString* stringer; NSMutableArray* nanasisine; int cnt; - (IBAction)progress:(id)sender { NSString* bun; NSString* a; bun=[nanasisine objectAtIndex : cnt]; [stringer appendString : bun ]; [stringer appendString :@"¥n"]; [ writeTexts setStringValue : stringer ];
777 :
◆x3PtJI4Jik :04/05/08 02:33 ID:evr+56Sy
cnt ++; if (cnt==5) { [endTexts setEnabled : NO]; a=[[NSBundle mainBundle ] localizedStringForKey : @"Nanasisine" value :nil table : nil ]; [stringer appendString : a]; [writeTexts setStringValue : stringer ]; } }
778 :
◆x3PtJI4Jik :04/05/08 02:34 ID:evr+56Sy
-(void) applicationDidFinishLanching : (NSNotification *) aNotification { NSString* a; cnt = 0; stringer = [NSMutableString string]; nanasisine = [ NSMutableArray array]; a=[[NSBundle mainBundle ] localizedStringForKey : @"Naa" value :nil table : nil ]; [ nanasisine addObject : a ];
779 :
◆x3PtJI4Jik :04/05/08 02:35 ID:evr+56Sy
a=[[NSBundle mainBundle ] localizedStringForKey : @"Nannka" value :nil table : nil ]; [ nanasisine addObject : a ]; a=[[NSBundle mainBundle ] localizedStringForKey : @"Shindahouga" value :nil table : nil ]; [ nanasisine addObject : a ]; a=[[NSBundle mainBundle ] localizedStringForKey : @"Shinoukana" value :nil table : nil ]; [ nanasisine addObject : a ]; a=[[NSBundle mainBundle ] localizedStringForKey : @"Nee" value :nil table : nil ]; [ nanasisine addObject : a ]; } @end
780 :
◆x3PtJI4Jik :04/05/08 02:37 ID:evr+56Sy
/* Test */ #import <Cocoa/Cocoa.h> @interface Test : NSObject { IBOutlet id endTexts; IBOutlet id writeTexts; } - (IBAction)progress:(id)sender; @end ちなみに、endTextsはボタンに writeTextsはテキストフォームにつながってるアウトレットです progress:はボタンをクリックした時に発動するアクションです なぜかうまく動きません
781 :
◆x3PtJI4Jik :04/05/08 02:38 ID:evr+56Sy
782 :
◆x3PtJI4Jik :04/05/08 02:41 ID:evr+56Sy
2004-05-08 02:38:55.554 Foo[2581] *** Assertion failure in -[NSTextFieldCell _objectValue:forString:], AppKit.subproj/NSCell.m:1079 2004-05-08 02:38:55.563 Foo[2581] Invalid parameter not satisfying: aString != nil ボタンをクリックするとこんなエラーが出ます ちなみに そしてテキストフォームにはなんの変化も起こりません
>>776 stringerとnanasisineを生成したときにretainしとけ
Objective-C をやり続けたいなら retain release alloc dealloc init〜 ファクトリメソッド
をしっかり学べ
784 :
◆x3PtJI4Jik :04/05/08 03:19 ID:evr+56Sy
>>783 いまそれを試してみました
[stringer retain];
[nanasisine retain];
をそれぞれ
stringer = [NSMutableString string];
nanasisine = [ NSMutableArray array];
の後に入れてみました
でもやっぱり同じエラーが出ます
>>784 applicationDidFinishLanchingがちゃんと呼ばれているか確認した?
786 :
◆x3PtJI4Jik :04/05/08 05:03 ID:evr+56Sy
>>785 現在解決しました
あなたの発言がズバリでした
呼ばれてませんでした
原因を調べた所
×…-(void) applicationDidFinishLanching : (NSNotification *) aNotification
○…-(void) applicationDidFinishLaunching : (NSNotification *) aNotification
のミスでした
しかし、これってなんでメイクした時にエラーになんなかったんだろう...
applicationDidFinishLanching が何かのNotificationから呼ばれるかもしれないから。
>>786 エラーは出ないけど警告は出てるでしょ?
Obj-Cはダイナミックバインドがあるから、コンパイル時、リンク時に
存在しないメソッドを呼べるのでエラーにできないんだよね。
カテゴリがローダブルバンドル上に存在してるとかあるから。
Interface builderの話なので板違いかもしれませんが、 すごく初歩なところでつまずいています。 簡単なサンプルを作ろうとしてボタンを配置したのですが、 そこからコネクションを張ろうと思い、コントロールキーを 押しながらドラッグしてもコネクションラインがでません... 本見ながらやってるので、見落としはないと思うのですが何か 設定がいるのでしょうか?
>>789 Carbon 用の nib を新規に作ったとか。
791 :
sage :04/05/08 21:23 ID:zr47uqxF
Cocoaまったくの初心者です。 簡単なファイルダウンローダーを作ろうと思い、 NSURL *url = [ NSURL URLWithString : [ vUrl stringValue ] ]; NSURLRequest *req = [ NSURLRequest requestWithURL : url ]; NSURLDownload *dl = [ [ NSURLDownload alloc ] initWithRequest : req delegate : self ] として、みんな自動でやってくれるので凄く便利なのですが、 User-Agentを残さないのも失礼なことと思いまして、 NSMutableURLRequestを使えばUser-Agentを設定できるかと思ったのですが、 サンプルコードもないし、どうにもこうにもなりません。 NSMutableURLRequestの使い方、ご教授願えないでしょうか?
792 :
名称未設定 :04/05/08 21:51 ID:BvQBHnDr
Cocoaはさっぱり森永♪
793 :
789 :04/05/08 23:29 ID:YMMC0UeA
>>790 いやーそれはなかったです。
試しにCocoa-Java Appでもやってみましたが、同じでした。
なんでですかねぇ・・・(鬱
>>789 昔それあってあせった。
再インストールしたら直った。
795 :
◆x3PtJI4Jik :04/05/10 04:07 ID:qK8/nGS9
796 :
名称未設定 :04/05/10 15:56 ID:hX7fF32k
NSTableView内のセルを自前で描画しようと、NSTextFieldCellのサブクラスを 作り、-drawInteriorWithFrameを上書きしてみました。 とりあえず望む通りの描画は出来たのですが、こんどはダブルクリックで 編集状態に持っていくことが出来なくなりました。 これを両立させるのってどうやればいいのですか? NSTextFieldCellのサブクラスにしたのがいけないのでしょうか。
797 :
796 :04/05/11 18:46 ID:1wyLqoTp
誰か・・ヘルプミーあげ。 なお、編集状態に持っていける普通のセルはNSTextFieldCellで間違いないことは その後の調べでわかりました。 かつ、NSTextFieldCellのサブクラスとして作っただけ(何も実装していない)のセルでも やはり編集状態に出来ないということもわかりました。 編集状態に入る前に、セルの-setUpFieldEditorAttributesが呼ばれるらしいのですが 自前のセルの場合は、これを実装しても、ここに処理が飛んできてくれませんでした。 わざわざ「フィールドエディタをカスタマイズするならこのメソッドを上書きして」と 書いてあるくらいだから呼ばれるのが普通だろうと思ったのですが..,。 うーん、むずい。
アホなこと聞くかもしらんけど、setEditable の属性は YES になってる?
799 :
796 :04/05/11 19:25 ID:1wyLqoTp
レスありがとうございます。 一応、NSTextFieldCellでなら普通に編集できているコードで、自前のセルに置き換えてるだけ なので大丈夫かと思いましたが、念のため自前のセルを-isEditableに常にYESを返すように してみました。 特に変化はありませんでした(T.T)
サブクラスの isEditable で YES を返すんじゃなくて、 -(void)awakeFromNib{ [[[hogeTableView tableColumnWithIdentifier:@"piyo"] dataCell] setEditable:YES]; } こんな感じにしてみたらどうなる?
801 :
796 :04/05/11 19:43 ID:1wyLqoTp
あれれれ、いけました!!! サブクラスを作るとデフォルトでeditableがNOにセットされているのでしょうか?? とにかくありがとう!!
ログ読了。 漏れもぷよ発売に合わせてゲームを作りたい訳だがココアからジョイパッドの入力って読めるのか? ADCにあるRed_Rocket.sitはカーボンだがやっぱりカーボンから触らないと無理なのか?
803 :
名称未設定 :04/05/12 23:48 ID:gxwglvKW
質問です。 NSMatrixのなかにNSTextFieldCell。そのフィールドに入力が有ったらメソッド(?)を呼びたいのですが、 デリゲートをつかうんですよね?んでこの辺かなと、、、 -(void)textDidBeginEditing:(NSNotification *)notification - (void)textDidEndEditing:(NSNotification *)notification なんですが、ぜんぜん呼び出されません。 やったことはといえば IBでNSMatrixからFile's Ownerに線を引っ張って、Outlet >> delegate MyObject.mに -(void)textDidBeginEditing:(NSNotification *)notification { NSLog(@"123456""); } なんか基本的に間違ってますか?
NSControlTextDidBeginEditingNotification NSControlTextDidEndEditingNotification を拾ってくればいいんじゃないか。
>803 実はメインの Nib でFile's Owner が NSApplication。
>>803 NSMatrixにつないでも意味無いんじゃね?
NSTextFieldCellを直接つながないと。
>>803 NSMatrixをサブクラス化。delegateと同名のメソッドが
定義されているのでオーバーライドしてdelegateに流す
とかすればいいかな?
809 :
807 :04/05/13 20:31 ID:SDTX2CLf
NSCellにはdelegateもnotificationも無かった。 適当なこと言ってスマソ。 でもNSMatrixは編集は感知しないんじゃないかなあ?
810 :
803 :04/05/13 21:16 ID:f0RPqIvW
>>804-809 さん、ありがとです。
でもさっぱり意味が分かりません(笑)
>>804 さん
-(void)textDidBeginEditing:(NSNotification *)notification
のかわりに
-(void)NSControlTextDidBeginEditingNotification:(NSNotification *)notification
ってことですか?やってもかわりませんでした。
>>805 さん
インスタンスは、NSObjectのサブクラス(MyObject)のインスタンスを一つ作っただけです。
サブクラスはNSObjectのしか作ったこと有りません。っていうかまだ作る意味がわかりません。
>>806 さん
Nibは一つしかありません。File's Owner は NSApplicationだとおもいます。だめなの??
>>808 さん
NSMatrixをサブクラス化。んで、いろいろつないでみたんですけどさっぱりわかりません。
>>807 ,809さん
CocoaBrowserでNSMatrixのInstanceMethodsってとこみると-textDidEndEditingってのが
あるんだけどだめなのかな?
>>805 ,806,808あたりだと思うんだけど、むつかしいです。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
ってのは動いたんだけどな。う〜ん。本みてものってないし。
NSMatrixでNSTextFieldCellをたくさん作って、そこに数字をいれてtabKeyを押すと
その数字を評価してくれるってのを作りたいんですけど。
アフォでもわかるように説明もらえないでしょうか?
>>803 // matrix delegate
- (void)controlTextDidBeginEditing:(NSNotification *)aNotification;
- (void)controlTextDidEndEditing:(NSNotification *)aNotification;
Reference NSControlのDelegate Method Typesをみるよろし
matrixからdelegateにconnectつなげるだけでOk
812 :
807 :04/05/13 21:38 ID:SDTX2CLf
>>810 >Nibは一つしかありません。File's Owner は NSApplicationだとおもいます。だめなの??
なんだ、つないでる先が違うよ。
MyObjectをdelegateにしたいのに、NSApplicationをつないでdelegateにしてもダメだろうに。
MyObjectをNSMatrixのdelegateにしないと。
813 :
803 :04/05/13 21:47 ID:f0RPqIvW
>>811 さん ありがとです。
やってみたけどやっぱりだめです。
NSMatrixのサブクラスのインスタンスは必要なんでしょうか?
NSTextFieldCellになんか書いてtabKey押せば呼び出されるはずなんですよね?
814 :
803 :04/05/13 21:57 ID:f0RPqIvW
できた!!!
てんで見当違いのことやってたようでした。
>>812 ,813さんのいうようにやったらできました。
そうか、そうやってインスタンスってのが増えていくんだな。
ほうほう。なんかうれしいね。
ありがとうでした。
一度参考書を通読した方が良さそうな気もするな。 delegate とかの基本的なことは載ってるだろうし。
816 :
796 :04/05/13 22:27 ID:2lTJ9fe+
ごめんなさい、さらに質問させてください。 自前のセルを描画する時って、強調表示されているかで色を塗り分けないと いけないですけど、、ハイライト中の2種類の状態、つまり 「ウインドウがアクティブ&コントロールが選択中」と 「ウインドウがデアクティブ&コントロールが選択中」というのは どうやって見分けるのでしょうか。 とりあえず、isHighlitedで条件分けすれば、選択中かどうかはわかるの ですが、これではハイライトの2種類の状態を塗り分けることができません。 なにかisHighlited以外の判定メソッドなんかがあるのでしょうか。
>>816 // cellのサブクラス
-(void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView {
if ([self isHighlighted]) {
NSColor * color = [self highlightColorWithFrame:rect inView: controlView];
}
}
NSTableViewでテスト
ウインドウの状態によってhighlightColorWithFrameが
(NSColor*)alternateSelectedControlColor(active)
(NSColor*)secondarySelectedControlColor(deactive)を切り替えて返しますね。
818 :
816 :04/05/14 00:40 ID:cLk32CuJ
>>817 おぉ、ありがとうございます。
質問の内容はシステムカラーをそのまま使う方法なのではなかったのですが
デアクティブのときのカラーがsecondarySelectedControlColorだというのを
教えていただいたおかげで突破できました。
-(void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView {
if ([self isHighlighted]) {
if([self highlightColorWithFrame:rect inView: controlView]==[NSColor secondarySelectedControlColor])
//デアクティブの時の描画
else{
//アクティブの時の描画
}
}
}
こんな感じでいきました。とりあえず動いています。
ありがとう〜。
819 :
817 :04/05/14 20:06 ID:94j9469S
>>816 817の方だと他のviewにフォーカスが移るとinacitveになるので、windowのactive, inactiveのみで選択色をコントロールしたい場合
if ([self isHighlighted]) {
if ([[controlView window] isKeyWindow]) {
color = [NSColor selectedControlColor]; // active color
} else {
color = [NSColor secondarySelectedControlColor]; // inactive color
} }
の方がいいかな。
メニューからアクションでアクションメソッドに飛んだ時に モディファイアキーを押したかどうかをチェックするいい方法は ないですか? senderのNSMenuItemもNSMenuもResponderではないのでどうやって 取り出したらいいものか・・・。今はCarbonと混在させてGetKeys() で取り出すという姑息で感心しない手段を使っています。
[NSApp currentEvent]から取り出すってのはどうだ?
NSEvent *event=[NSApp currentEvent]; unsigned int flags=[event modifierFlags]; こんな感じ。
かぶった……
たしか[NSApp currentEvent]はメニューバーのトラッキングを 始める前からモディファイアキーを押してないと取れない IBのTreat as an alternate to the previous itemを利用して ふたつMenuItemを作って別のactionに繋げれば楽だしメニュー の表示も動的に変わって素敵(panther必須だっけか)
>824 うむ。Treat as alternate...はPanther以降だね。
スクリーンをキャプチャするアプリのソースってどっかにありませんか?
>>826 HMDTにあるやんけ
僕はNSTaskで/usr/sbin/screencaptureしてるが
あ、ありました。HMDTに。 失礼しました。
829 :
820 :04/05/18 10:49 ID:rfdShUYV
>>821 ,822,824
ありがとう。提案された方法で試してみます。
830 :
820 :04/05/18 11:14 ID:rfdShUYV
試してみた結果です。 NSEventを使う場合、824が書かれたようにメニューをクリックする前に モディファイアキーを押していないとイベントを取れず、また、押していた 場合でもメニューをプルダウンしている時にモディファイアキーをはずすと 逆にイベントが残ってしまうという問題がありました。難しいですね。 そこで824の提案のTreat as an alternate to the previous itemを 使うことにしました。ありがとうございました。
NSTableView に長い文字列を表示させようとしています。 その際、文字列を "abc...ghi" といった形で省略して表示させたいのですが、 どのようにすれば可能でしょうか。 Finder のリスト表示などは、そのような形の省略を行っているので、 どこかに設定する項目があるとは思うのですが。
833 :
832 :04/05/19 22:55 ID:7O9X0qdY
表示する cell に NSAttributedString を設定することにより解決しました。 お騒がせしました。
ファビコンってなんですか?
objectがdeallocされて解放されたことを確認する方法ってありますか? retainCountはdealloc後では使えませんし、deallocしてもobjectの ポインタは残骸として残っているのでobjectがnilかどうかでチェック できません。 今はreleaseでdeallocした後、objectの変数にnilを入れてますけど 他に方法はないのでしょうか?
>>835 >objectの変数にnilを入れ
それでいいんじゃない。
Objectの実態はCの構造体のポインターだから、インスタンスがなくなったら
存在自体がなくなるわけで、そうするしかないでしょう。
GnuStepならisaが0xdeadfaceになるようだが、Cocoaだと0x357bになるのか?
>>835 アクセスしてバスエラーが出たら、使われてないよ。きっと
signal()でSEGVトラップしておけば (W
フ ァ ビ コ ン っ て な ん で す か ?
>>835 >解放されたことを確認する
ということであればdeallocにNSLog入れるかNotificationを発行するか。
ポインタが指しているオブジェクトが生きているかどうかを見分けるのは無理じゃない?
解放されていたら何をポイントしているのかまったくわからないわけだから。
0xdeadface 16進数でありながら単語っぽい、すごい発想だなぁ。
843 :
835 :04/05/22 12:12 ID:XsCEnXGV
>>836 ,837,839
やはりnilを代入してチェックするしかないみたいですね。残念。
Objective-Cでは、「メモリはプログラマ側が管理」という立場なので 別にnil代入にこだわらなくても自分で管理しやすいように設計すれば良い。 ただ、AutoreleasePoolにまかせられない局面が多発するような事態は 設計がダメダメな可能性が大
>>842 0xdeadbeefのほうが一般的かと
846 :
名称未設定 :04/05/24 17:30 ID:JgmoDEsJ
Objective-CとC++の混合の仕方が分からないです。 以下のファイルを MyClass.h とします。 #import <Carbon/Carbon.h> class MyClass { public: MyClass(); ~MyClass(); }; としまして、MyDocument.m (Objective-C)に #import "MyClass.h" と表記してコンパイルしても error: parse error before "MyClass" error: syntax error before '{' token とかいうエラーが出てコンパイルできません。 一体どうすれば良いのでしょうか・・。
Obj-Cアプリの動作速度をなんとか上げたいんだけど、手軽な最適化の道は何かありますか? たとえば、mkinoさんとこのObj-C最適化のとこに載ってるみたいな、 クラスメソッドでオブジェクトを作らずに、allocとreleaseを使うとか autoreleaseを使わないとか。そんな感じの。
Computer Hardware Understanding Development Tools (CHUD Tools). とかをつかって、遅い原因が何かを調べる。 原因があってそして個々に対策がある。 それがいやならG5 3GHzが出るのをまてば、お手軽に動作速度は向上する。
小手先の最適化よりもアルゴリズムの見直しが先決。 以前見たのでは配列の先頭から1個ずつちんたら検索せんでも バイナリサーチすりゃいいとか、ハッシュテーブル使えとか アドバイスしたら?はぁなにそれ?とか論外な状況だったことあり。
851 :
848 :04/05/25 08:03 ID:rSbyyP2z
お二人さんありがとう。 CHUD、使い方がよくわからん・・。何かで解説が見れないものだろうか。
>851 ご自身が示したHMDTの訳物の最初の方に書いてる Sampler を使うのが第一歩。 完全なOOP(?)を目指すのか、速度のためにそれを犠牲にするか。 Obj-Cの場合、ダイナミックバインドのおかげでメソッド化せずに、 コピペしまくるほうが格段に速くなったりしますからね。 ある意味コピペ厨最強言語。(w
>>851 アルゴリズム改良にも、どこが遅いのかを知るのは重要。
Shark上げといて、ターゲット実行中(重い処理中)に、Start=>5秒後=>Stopでサンプリング。
あとは見りゃわかるでしょ。
NSView に他のNSViewをsubViewとして追加。 どんどん追加するから、追加でオーバーする分を superViewをsetFrameSizeでサイズ変更ってやると サイズ変更で増えた分の領域になにも表示されなくなるのよね。 再描画のタイミングを何回も見直したんで、その問題じゃないと思うんだけど。 リサイズしないで、superViewのサイズを2000とかにしておくと 追加されたViewは問題なく表示されるので、追加する部分の問題でもないと思う。 順番的には、 追加後のsuperViewのサイズを先に計算 superViewをリサイズ subViewを追加 ってやってます。 誰かなにかアドバイスください。
Object-Cでトリップ検索ソフトが作れますか? と聞いてみる。でもやっぱりC++とかじゃないと無理なのかな?
>>854 全然分からないが、
-(void)setNeedsDisplay:(BOOL)flag;
を YES にするとかは?
>>855 作れるだろうが、既に存在するものを改めて作ってもなあ……
>>856 あれ?Mac用ソフトはターミナル経由のtripperX以外にあったっけ?
>>857 まさに tripperx のことなんだが。
>>858 いや、それはCUIでしょ?
GUIインターフェイスのやつはまだ開発されてないんでしょ?
>>859 たかがトリップを検索するのに GUI が必要なのかという気もするが。
まあ、需要があると思うなら作ってみれば?
>859 Xgridでおながいします。
老婆心ながら、、 べつにC++で普通に開発できますよ。 正確にはC++じゃなくてObjective-C++なんだけど。 まあ、win板で「Cで開発って可能ですか?」と言っている奴もいるしなあ。
NSEditor準拠のサンプルってないですか? 具体的には自作のNSControlで値を編集する時 準拠するにはどうしたらいいのかわからないんですが
といいますか、NSEditorの commitEditing objectDidEndEditing: discardEditing objectDidBeginEditing: の四つのメソッドの使うタイミングが掴めないんです。
>859 ASSで皮でも被せとけ。
NSFontをNSImageやCGContextに描画したりするサンプルってありませんか? DevTools付属のサンプルSketchは見てみたんですが、 NSImageやCGContextを経由しているようには見えませんでした。 文字を書いたOpenGLのテクスチャを作ろうと思ってます。
>>866 NSViewのサブクラス
- (void)drawRect:(NSRect)rect {
NSRect imagerect = {0, 0, 128, 128};
NSImage * image;
NSFont * font = [NSFont systemFontOfSize: 14];
NSDictionary * fontdic = [NSMutableDictionary dictionaryWithObjectsAndKeys: font,
NSFontAttributeName, [NSColor blackColor], NSForegroundColorAttributeName, nil];
image = [[NSImage allocWithZone:nil] init];
[image setSize: imagerect.size];
[image lockFocus];
[[NSColor blueColor] set];
[@"Draw String" drawAtPoint: NSMakePoint(0, 0) withAttributes: fontdic];
[image unlockFocus];
[image drawAtPoint:NSZeroPoint fromRect: imagerect operation:NSCompositeSourceOver fraction:1.0f];
}
NSView&OpenGL関連だがこれ読んでおくといいかも
ttp://developer.apple.com/ja/qa/qa2001/qa1325.html ttp://developer.apple.com/qa/qa2001/qa1325.html
868 :
866 :04/06/02 04:21 ID:qsJaWMAb
その文書は一度目を通したのですが、不可視にしたViewをテクスチャにすることが できないみたいだったのでスルーしていました。 今回、僕がわからなかったのは、 NSImageにlockFocusすることで描画開始できるってことだったみたいです。 とても参考になりました。ありがとうございます。
誰かNSTypeSetterで縦書きする方法知りませんかー?
できない
>>871 Pantherではアラビア文字(右から左)はサポートされたけど、縦書きはまだの様ですが。
>>872 早くできるようになると良いね。
漏れは描画させた後編集の必要が無いので自分で強引1文字つづ描画しました。
ATUIでは確かに実現できるらしいが、サンプル見て挫折。
>>873 さすがにTigerでは縦書きも実装されると思いますが。
>漏れは描画させた後編集の必要が無いので自分で強引1文字つづ描画しました。
この場合、縦書き用のグリフまたはCIDはどうやって取得するのでしょうか?
875 :
869 :04/06/08 17:12 ID:iTkMcTXE
>>874 >>873 さんではないんですが、多分
-drawGlyphsForRange:(NSRange)range atPoint:(NSPoint)point @ NSLayoutManager
でrange=NSMakeRange( location, 1 )で一文字づつ書ける。
グリフのIDはわざわざ取得しなくてもいいかも知れないです。
ただ、これで縦書きすると、一文字分グリフの位置がずれてしまうという面倒が在り、
さらに、縦書きエディタを作ろうとすると、ATOK、或いはプラットフォームの
漢字かな変換サーバーをトラップする時に、NSTextViewのmarkedTextの位置に下線(縦書きだと横線)を
引いたりする処理がやたら面倒。
アップルがNSLayoutManager、NSTextContainerのNSLineSweepDirectionのNSLineSweepDownを
早くサポートしてくれればいいんですが。
>>875 確かに一文字毎に描画できますが、これでは横書き用のグリフを表示してしまい約物とか平仮名カタカナ等縦と横で字形が違う文字で問題になります。
そこである文字コードに対応する縦書き用字形のグリフIDが欲しくなりますが、Cocoaではその方法が提供されていない様ですので諦めていました。誰かご存じないですか?
やっぱりATSUIを直接触らないとダメなんでしょうかね。
877 :
869 :04/06/11 02:13 ID:yaV8bhe9
>>876 今こそこそ仕事の後ドキュメントプリントしながら勉強してまつ。
CocoaからMacプログラムはじめたのでCarbonはさぱーり。
今日は眠いんで寝ますがCocoaからもCarbon呼べるみたいなので、
やり方分かったら書き込みます。
はじめてのネットワークプログラミングに挑戦しています。 socketからNSFileHandleを取得して、そこに -writeDataしてるのですが、送信途中で 相手から接続が切られた場合、SIGPIPEが発生して強制終了させられてしまいます。 ググって見たところ、このSIGPIPEは無視するのが一般的だそうですが、writeDataの時の SIGPIPEを無視する方法が分かりません。 NSFileHandleは諦めて、send()でMSG_NOSIGNALを指定すれば無視できるらしいと知り やってみましたが、MSG_NOSIGNALがOSXでは使えないようでコンパイルが通りませんでした。 これってどう解決したら良いのでしょうか?
879 :
869 :04/06/14 05:55 ID:rAuKGJ6T
>>878 失礼な質問かもしれませんけど、
signal()関数にSIGPIPE用のハンドラ指定してます?
#include<signal.h>
#include<errno.h>
extern int errno;
void sigpipeHandler( int signo )
{
return; // 無視
}
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
errno = 0;
if( signal( SIGPIPE, sigpipeHandler ) == SIG_ERR )
{
if( errno != 0 )
printf("Error: %s\n", strerror(errno) );
else
printf("Unknown error\n");
}
// TODO
これでとりあえずは無視されると思います。
NSFileHandleが-writeData:でサブプロセス、又はサブスレッドを作成しててもその作成前に
シグナルハンドラを指定してやれば、それがそのまま受け継がれるはず。
シグナル関係はピアソンの詳解UNIXプログラミングの10章を参考にするといいはずです。
つかFoundation Kit、シグナル処理用のメソッドを
Target-Selectorの指定でレジスタできると便利と思うんだけど。
@protocol NSSignalHandlerまだー?
どこの冒険家だよ
882 :
878 :04/06/15 00:00 ID:vGxvf9qj
>>879 ありがとうございます。無事、無視してくれるようになりました。
それでもデバッグ中たまにSIGPIPEで落ちるのだけど、これは私がシグナル関係を全く知らない
ためにきっと変な扱いをしてるのでしょう。
ネットワークプログラミングも、やってみれば何とかなるものですね。
やる前はもっと敷居が高いかと思ってました。NSFileHandleのおかげでもあるけど。
あと、おすすめの本(本、ですよね?)はぜひ買って読んでみます。
>>880 カッケー、ヒレガスたん。こんなヒゲが似合う男になりたい。
詳解UNIXプログラミングほしいけど高いよ………
>>883 名前を言えないアノ本を考えたら安いもんだよ。
885 :
869 :04/06/15 10:39 ID:UwK+DliK
886 :
869 :04/06/15 15:25 ID:UwK+DliK
>>876 縦書き用のグリフじゃないかもだけど、NSGlyphのグリフIDなら、
NSFontの内部メソッド_defaultGlyphForChar:で入手できるみたいでつ。
パブリッククラスなら、
#include<objc/objc-class.h>でずるして、
void *iterator = NULL;
struct objc_method_list *m_list = NULL;
int i;
while( ( m_list = class_nextMethodList( theClass, &iterator ) ) != NULL ) {
for( i = 0; i < m_list->method_count; i++ ) {
struct objc_method method = m_list->method_list[i];
SEL method_sel = method.method_name;
NSLog(@"%@\n", NSStringFromSelector(sel) );
}
}
で内部メソッドも入手できるっぽい。
ただ、これだとグリフの描画はNSBezierPathを使うことになるはず。
CocoaPrograming.netのサンプルの14章のTextRenderingを参照してください。
本もってなくてもサンプルはダウンロードできます。
887 :
876 :04/06/15 16:56 ID:2+/Z2c4t
>>886 レスありがとうございます。Cocoa Programingは私も持っているのですが必要に応じて拾い読みしかしていないので、この部分はあまり読んでいませんでした。
そこでじっくり読んでみましたが、残念ながら_defaultGlyphForCharでは縦書き用グリフは無理みたいですね。指定できないですから。
ちなみに現在グリフIDとそれの描画はNSLayoutManagerの以下のmethodを使っています。
- (NSGlyph)glyphAtIndex:(unsigned)glyphIndex;
- (void)showPackedGlyphs:(char *)glyphs length:(unsigned)glyphLen glyphRange:(NSRange)glyphRange atPoint:(NSPoint)point font:(NSFont *)font color:(NSColor *)color printingAdjustment:(NSSize)printingAdjustment;
Cocoaでこの問題をクリアにコーディングするにはNSGlyphStorageのlayoutOptionsに縦書きが追加される事が必要なのかなと考えておりまして、Tigerに期待している状態です。
Tigerのリリースが遅いようならATSUIを勉強しようかな。
888 :
878 :04/06/16 21:26 ID:rpIphs7R
すいません、NSDataを-dataWithContentsOfMappedFileとか-dataWithContentsOfFile で作ろうと思ったのですが、2G以上のデータは作れないとかの制限があったりしますか? どちらのメソッドも2G以上のファイルを指定するとnilしか返ってこないみたいなのですけど・・・。 こんなもの?
889 :
888 :04/06/16 21:28 ID:rpIphs7R
おっと、この場合メソッドの前の記号は+ですね。まあたいした事ではないけど・・。
891 :
888 :04/06/16 21:50 ID:rpIphs7R
うげ、リファレンスは見たつもりだったんだけど見落としてたか・・・。 ありがとうございました。 さて、どうしようかな。CFDataでも作ればいけるのだろうか。 がんばって調べてみます。
892 :
869 :04/06/18 09:23 ID:+PWzOO82
すいません 質問させて下さい テーブルビューに表示させたテキストを ダブルクリックで選択して、テキスト内容を変更したいのですが どうすれば良いのでしょうか?
>>893 1. TableView の dataCell の isEditable を YES にする。
2. -(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; を TableView の dataSource に実装する。
>>894 できましたーー!
ありがとうございました
最近Cocoaを始めたものです いきなりつまずいたので少し質問させてください... コード打ち込み終わりビルドすると、 Linking/Users/×××/test/build/test.app/Content/MacOS/test(1個のエラー) can't locate file for:-Icrt1.o とでてコンパイルできません(泣 (×××はユーザー名、testはアプリ名です) そんなファイル探してもないし... だれか解決法しっていたらおしえてくださひ...
パスの一部に日本語が入っているとダメとかいうバグが昔あったが・・・ プロジェクトの位置を変えてみるとかしてみては? 見当違いだったらすまぬ。
>896 打ち込んだコードを晒せ。
>>897 全部英語にかえても駄目でした...
>>898 どんなコードでもエラーが出るんです(汗
極端な話、雛形をコンパイルしてもでます...
環境がおかしいんでしょうか?
NSViewにfinderからDragされたfileのfilePathを知るには どうしたらいいんでしょうか。
902 :
901 :04/06/19 23:19 ID:3szCbxRH
[ pBoard propertyListForType: NSFilenamesPboardType ]; でできたわ。 調べるのに一苦労。みんなどうやって調べてるの?
Google なんぞでヒントとなるキーワードを検索してからフレームワーク内で検索。 あるいは、その逆。
904 :
888 :04/06/20 18:18 ID:1EkQRQzH
ありがとうございます。 困ってる本人が見つけられなかったものを見つけてしまうなんてすごいすね。 おそらく現在NSDataを使ってるメソッドは、unixのシステムコールで代用が利くと思うので なんとかいけそうな感じです。 あと、知ってる人がいたら自分のIPアドレスを調べる方法を教えてくれるとうれしいです。 SystemConfiguration.frameworkの方でシステム環境設定のネットワークの「IPアドレス」欄に 直に書いてあるアドレスは読めそうなのですが、DHCPで割り当てられたアドレスの取得方法が わからないです。(SystemConfigurationではDHCPで取得する、ということしか書いてない?)
NSHost あたりかな。
906 :
904 :04/06/20 20:55 ID:1EkQRQzH
>>905 即レスサンクスです!
NSHost *host = [NSHost currentHost];
NSArray *adressArray = [host addresses];
で、無事いけました。こんなに簡単だったとは・・(汗)
>>896 >>899 -Icrt1.oじゃなくて-lcrt1.oだろうけど、それ、OSはプリインスコ? だったらOSをCDから
入れ直せば(復元じゃなくて)直るかも。それか10.3ならXcode 1.2を入れれば直るかも。
あるはずの/usr/lib/crt1.oが無いってことだと思うんだけど。
908 :
904 :04/06/21 22:55 ID:RhVacwK0
質問ばかりでごめん。後に貢献するから許して。 Cocoaで、NSImageからJPEGのデータを作成するには、 [[ NSBitmapImageRep alloc] initWithData : [anImage TIFFRepresentation]]とかして、TIFF に変換したあと、[ imageRep representationUsingType:NSJPEGFileType properties:dictionary] などとしないといけないようですが、ここで作ったImageRepがいつまでたっても解放されて くれないようです。 メモリリークにもなってないみたいなのに、画像を一枚変換するごとに5MBづつアプリケーション の使用メモリが増えていく・・・。なんとかなりませぬか。 周辺コードはこんな感じです。 image = [[NSImage alloc] initWithContentsOfFile:anPath]; imageRep =[[ NSBitmapImageRep alloc] initWithData : [image TIFFRepresentation]]; [image release]; [ imageRep setAlpha:NO]; returnData =[ imageRep representationUsingType:NSJPEGFileType properties:dictionary]; [imageRep release];
909 :
904 :04/06/21 23:20 ID:RhVacwK0
補足&自己レス 今検証していて気づいたのですが、いつまでたっても解放されないというのは正確ではなく そのアプリケーションをアクティブにしたら200MBのメモリが一気に解放されました。 いままでtopで監視してただけなので気づきませんでした。 でも、サーバーとして作っているのでアクティブにしないと解放されないのでは困ってしまいます。 強制的にリフレッシュ(?)するような方法ってあるのでしょうか。
>>909 想像で済まないが、
returnDataが AutoreleasePoolに入っていて、Eventが来た(アクティブ)時に解放されている
かな?
これが当たりなら、次のどちらかをやってみる
1.returnDataがループにあるんなら、ループ内でローカルなAutoreleasePoolでかこってみる。
2..returnDataがAutoreleasePoolに入らないように実装する。
911 :
904 :04/06/22 00:49 ID:KB8/D6jW
おぉっ、すばらしい!ありがとう! 今回は1で解決しました。 returnDataは直後でそのまま返り値として使われているのですが、その戻っていった先のメソッド の中を局所的な自動解放プールでかこってやればすぐに解放されるようになりました。 うーん、Cocoaは奥が深い。
912 :
899 :04/06/22 06:12 ID:mGwfFx+A
913 :
名称未設定 :04/06/22 17:11 ID:6uje2EVL
ツールバーにNSPopUpButtonを入れようと思いまして、 NSToolbarItem* toolbarItem; toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemId] autorelease]; NSPopUpButton *button = [[NSPopUpButton alloc] init]; [[button cell] setControlSize:NSMiniControlSize]; [button addItemWithTitle:@"Item1"]; [button addItemWithTitle:@"Item2"]; [toolbarItem setView:button]; みたいな感じにしたのですが、これだと文字の大きさが大きいままなのです。 文字も周りに合わせて小さくするにはどうすればいいのでしょうか? また、選択が変更された場合にメッセージを送るにはどうすればいいのでしょうか?
>>913 やった事無いですがfontのサイズを落とす必要があるのでは。私はPopUpButtonをIBで用意したので簡単にMiniサイズに変更できました。
>選択が変更された場合にメッセージを送るにはどうすればいいのでしょうか?
Action methodを用意してsetAction:,setTarget:で設定すればOKかと。
スクロールビューにカスタムビューを組み込ませて、独自のエディタを 作っているのですが、カスタムビューがスクロールビューのコンテンツ よりも小さい時、余白の部分がグレーで表示されるのですが、このグレー を変更させる方法はありませんか? 貼付けたカスタムビューもdrawRect:内でEraseRect()で消去しないと グレーのままです。毎回EraseRect()を呼び出すのもみっともない・・・
NSDistributedNotificationCenterの4つの定数の意味が全然分かんない... エロい人説明して...
あ”あああぁぁぁっ NSDistributedNotificationCenterのNSNotificationSuspensionBehaviorの4つの定数の意味が全然分かんない... エロい人説明して...
ここの住人、今頃はWWDCか?
919 :
869 :04/07/01 14:52 ID:S1LG9shG
>>918 いえ、早めの夏休みで鹿児島の実家です。
920 :
名称未設定 :04/07/02 01:30 ID:eckU6uvB
(フォーカス固定済み) NSString *s = @"test"; [s drawAtPoint:NSMakePoint(0,0) withAttributes:nil]; こんな感じで文字列は描画できるわけだが、 これだと、左の点から右に文字列が描画されていくよね。 それで、質問なのですが、 「指定した点を中央として、文字列を中央寄せで描画するには どうしたらいいだろうか?」 もしくは、 「文字列の描画するときの、文字列全体のピクセル幅の求め方」 分かる人お願いします。m(_ _)m
>>920 >文字列を中央寄せで描画する
指定した点.x -= 描写したい文字列のwidth / 2;
>「文字列の描画するときの、文字列全体のピクセル幅の求め方」
単一フォントなら
width = [nsfont widthOfString: 描写したい文字列];
使ったことないけどNSAttributedStringなら
-(NSSize)[NSAttributedString Additions size];
-(NSSize)[NSString Additions sizeWithAttributes:(NSDictionary *)attributes];
ですかね。
>>920 drawAtPoint:withAttributes: ではなく、
drawInRect:withAttributes: を使ったらどうだろうか。
1. 指定した点が中央になるように Rect を配置する
2. Attributes の属性として中央寄せの NSParagraphStyle を与える
てな感じで可能だと思うが。
923 :
920 :04/07/02 02:18 ID:eckU6uvB
>>921 ,922
さんくす!
さっそく試してみます!
ありがとうございました。
924 :
名称未設定 :04/07/02 02:53 ID:6TJ7jXed
>>920 「文字列の描画するときの、文字列全体のピクセル幅の求め方」
は[s sizeWithAttributes:nil]でどうでしょう?
これで良ければ
「指定した点を中央として、文字列を中央寄せで描画」
も出来るはず。
便乗質問させてもらってよいでしょうか。 drawInRect...で文字列を表示するときに、システムの設定に関わらず アンチエイリアスを切る方法はどうやればいいのでしょう。 図形を描画するときにはNSGraphicContetxtでアンチエイリアスを切 れるようですがこの場合は効果ありませんでした。
FIleOwnerのCustomClassの一覧で出てくる SCNibObjectInfo ってなんですかね。 検索しても一件もヒットせず。
>>924 >「文字列の描画するときの、文字列全体のピクセル幅の求め方」
ここにいる懸命なプログラマの人にはわかっていると思うけど、
もちろん「ピクセル幅」はそれでは求められないですね。
928 :
921 :04/07/02 23:08 ID:6uEkK0ym
>>920 -(NSSize)[NSAttributedString Additions size]; × 互換維持用ってドキュメントにあった。
-(NSSize)[NSString(Additions) sizeWithAttributes:(NSDictionary *)attributes]; ○
ノイズ スマソ
929 :
921 :04/07/02 23:37 ID:6uEkK0ym
度重なるスレ汚しスマソ [nsfont widthOfString: 描写したい文字列]; × 互換維持用ってドキュメントにあった > -(NSSize)[NSAttributedString Additions size]; × 互換維持用ってドキュメントにあった。 これはなかったことに ...
930 :
924 :04/07/03 09:39 ID:5KXitfUY
>>927 そうですか・・・。では正しい方法を教えてください。
>>927 自身が「懸命」だから、わかってないってことなんだよ。「賢明」じゃないしw
932 :
924 :04/07/03 22:01 ID:5KXitfUY
>>925 文字列のアンチエイリアスはNSGraphicsContextで切れますよ。
↓こんな感じでどうでしょう?
- (IBAction)test:(id)sender
{
NSGraphicsContext *gc = [NSGraphicsContext currentContext];
NSString *s = @"test";
[self lockFocus];
[gc setShouldAntialias:NO];
[s drawInRect:NSMakeRect(0,0,200,200)
withAttributes:[NSDictionary dictionaryWithObject:[NSFont fontWithName:@"Helvetica" size:50]
forKey:NSFontAttributeName]];
[self unlockFocus];
}
933 :
925 :04/07/03 22:43 ID:+FmT0CBP
>>932 あれ、これでいけましたか?
こちらではうまくいかないのですが・・・。
違いと言えば、こちらではNSImageをallocして、それにlockFocusして、setShouldAntialias
してから文字列を描画していることくらいだと思うのですが、うまくいきません。
もうすこし調べてみます。ありがとう。
934 :
932 :04/07/04 00:27 ID:CMWl3gpF
こちらではうまくいっています。 補足ですが 上のメソッドはNSViewを継承したクラスに記述したものです。 したがって,lockFocusはNSViewのものが呼び出されています。一番の違いはここのような気がします。
>>933 NSImage を lockFocus した"あとに" カレントグラフィクスコンテクスト を取得しましょう。
NSGraphicsContext の currentContext メソッドは現在フォーカスを持つグラフィクスコンテクストを取得します。
936 :
925 :04/07/04 07:53 ID:dE9ocDtU
おお、いけました。勉強になります。
>currentContext メソッドは現在フォーカスを持つグラフィクスコンテクストを取得します
なるほど、そういわれれば納得。
いろいろありがとうございました。
>>932 ,935
すいません。質問させてくだい。 アウトラインビューで指定したアイテムを選択させたいのですが、 どうもうまくいきません。 テーブルビューでは行の番号で指定して選択できたのですが、 アウトラインだとその方法ではできませんでした。 助言お願いいたします。
gif2png2.5.1がCarbon/Cocoaで使えたら…と先刻ソースコードを 落としてきたものの、解凍して出来たソレは何をどうしたらいいの かゼロから勉強せねば訳の分からぬ世界でした。 こちらのスレを参考に、頑張ってコンパイルまでたどり着けるよう 頑張ります。
頑張って〜たどりつけるよう勉強します orz まずはオライリーのCocoa本を探しに行かねば。
>>938 gif -> pngって普通にCocoaで出来るよね。
なんで必要なの?
>940 恥ずかしながらそういった事さえ分かっておりませんでした(Xcodeで Cocoaアプリケーションを自分でも作れるらしい、程度の考え方でした)。 現在Photoshop Elementsの「Web書き出し..」.で作成したGIFファイルを PIXTURE STUDIOにて配付されているgif2png 2.3.2でPNGに変換する方法 をとっている(二度手間ですが、不要なヘッダの取捨選択やガンマ値チャ ンクを書き込めたりWeb書き出しのPNG保存より小さく保存できるため)の ですが、この工程をgif2pngそのものをCocoaアプリにする事でAppleScript なりアクションで制御出来ないだろうかと思ったのです。
942 :
940 :04/07/06 16:09 ID:iszmCYsz
Pixadexなどのアイコン管理ソフトやiPhotoのように ScrollVIew内のViewに画像を多数表示させたいんですが いいサンプルか書籍はありますか? 自分でも挑戦してみたんですがスクロールさせると描画が乱れてしまいます。
944 :
869 :04/07/10 16:12 ID:AmAb0xQt
>>943 固定サイズのサブビューをぺたぺた貼っていくのがはやいかもしんない。
変な例だけどDeveloper/Sample/AppKitについてるテキストエディットのMultiplePagesViewあたりを
参考にするとよいのでは。
NSImageCellを使えばええんでないの?
本格的にプログラミングをはじめようと、本のサンプルを参考に 自分なりのメソッドを作って拡張したのですが、 一つの.m、.hファイルに付け足していったので、ソースコードが長くて不便です。 機能ごとにソースファイルを分割したいのですが、まずはじめに 何をすればよいかよくわかりません。 レベル的にもCをちょっとかじった程度です。 自学したいので参考となるURLや書籍、サンプルコードはないでしょうか…
>>946 入門書を読んで勉強するしかないけど、.m, .hで分けるということなら
クラス毎にファイルに分ければいい。Objective-Cで書いてるなら。
入門書はいくつも買わないでとりあえず一つだけ買って攻略する。
あとは慣れ。実践で憶えていくしかない。Cocoaならヒレガス本がお薦め。
HappyMacintoshDevelopingTimeがいいという人もいるけど、あれはちょっと
初心者には向いてないと思う。初心者が読む部分の説明が良くない。
>>946 >機能ごとにソースファイルを分割したい
カテゴリだな。
荻原本読んどけ。
初めは少々難しいが、あとになって必ず役に立つ。
>>947 >クラス毎にファイルに分ければいい。Objective-Cで書いてるなら。
分割したいクラスの部分を既存のソースファイルから切り取って
xxx.h、xxx.mに保存してビルドすれば良いということですか?
分割したファイルと分割元ファイルをimportなりなんなりで
クラス同士の関連付けする必要はないのでしょうか?
>あとは慣れ。実践で憶えていくしかない。Cocoaならヒレガス本がお薦め。
ヒレガス本探してきますλ....
>>948 カテゴリって言うんですね…
検索キーがわからなくて難儀してました。
調べてみます。
>>947-948 色々ありがとうございます(TдT)
951 :
名称未設定 :04/07/13 21:05 ID:/hcMHNhq
メニューバーを探せ。サブメニューじゃないからすぐ見つかる。
953 :
名称未設定 :04/07/13 21:38 ID:/hcMHNhq
あ、なんとなく出来た。。 習うより慣れろって感じっすね。<InterfaceBuilder
ついでに Carbon もさっぱり!!!
>>954 漏れなんかCarbonはきっぱりってつもりだったんだが(w
肝心な所でCarbonでてくるしよぉ(鬱
一つのアプリで2つのウィンドウを生成して、それぞれにImageViewとOpenGLViewを 表示させたいけど起動中に落ちてしまう… インターフェースビルダーで、windowのインスタンスを2つ作るだけじゃダメなんですかね…
>>956 コンソール -> ログ -> 〜Library/Logs -> CrashReporter
で落ちた原因を確認しる。
書いてある通りにやってもできない事が大杉のHMDTの本だが、 初心者の自分も躓いた点を書いとく p282のパネルにボタンを格子状に配置する際、オプションキーを押しながらドラッグ となってるが正しくは、オプションキーを押しながらオブジェクト(ボタン)のリサイズハンドルを ドラッグだった… オプションキーを押しながらオブジェクトをドラッグしてもオブジェクトが コピーされるだけで2時間ぐらい悩まされた(-ωー) Interface Builderのヘルプを検索してようやく気づく… 新しいのは良くなってるんかねえ…
>>958 追加以外のとこも書き直されてるみたいだよ。
(クリックしている絵)
961 :
名称未設定 :04/07/18 08:32 ID:p/suTzR3
いまテキストエディタ書いてるんですけど、 DiskArbitrationRegister failed: 1102 ていうエラーメッセージが必ず出てしまいます。その後問題なく起動します。 AppleのサイトではCarbonのTipsにしか載ってないんですけど、どなたかこのエラーが 何なのか御存知の方いませんか? NSTextViewをサブクラス化してるくらいで、別に変わったことはしてないですけど。
962 :
名称未設定 :04/07/24 03:56 ID:T9KFdhRI
300dpiのimageに下記のように文字を描画すると、 [image lockFocus]; [str drawAtPoint:point withAttributes:dicAttr]; [image unlockFocus]; できたimageの解像度は72dpiになっています。 解像度を落とさずに文字を描画したいんですが、どのように したら良いのでしょうか。ご存知のかたお教え下さい。
dpi というものについて今一度考えた方が良いんじゃないか。
>>962 >解像度を落とさずに文字を描画
自分も同じ悩み持ちです。
読み込んだイメージの解像度を72dpiに変換すると同時に、
倍率を計算して、drawAtPointする時にNSAffineTransform
で倍率指定ってのが回避策か?と妄想中。
>>963 ぜひ、解像度が絡んだ場合の解決方法を教えてくださいまし。
965 :
869 :04/07/24 20:44 ID:3zzuSVAU
>>962 >>964 WindowsのGDI+でもそうですけど、Appleの描画環境は
Device Independent + Resolution Independentです。
つまり、Cocoaレベルから解像度をいじることはできないはずです、多分。
ん??
Carbonで出来るのに? というかQuartzはPDFベースだから・・・
968 :
869 :04/07/26 11:39 ID:qtwfIU8c
ああ間違えたんか俺 ||orz すんません逝ってきます
970 :
名称未設定 :04/07/28 20:45 ID:fGsKXR4Q
NSTaskでUnixコマンドを実行しようとしてるんですが 実行しようとすると「stderr is not a tty」等と怒られてしまいます。 調べてみると出力先の問題だということは何となくわかったんですが こういう場合どうしたらいいんでしょうか?
971 :
名称未設定 :04/07/29 00:15 ID:ETseezzE
実行しようとしているUnixコマンドは何ですか? stderrがttyを前提としているコマンドって何だろう?
>>971 実行した時にパスワードの入力を求めてくるものなので
出力先が端末(?)でないと駄目、というようなことらしいです。
NSPipeだと無理なんでしょうか?
>>972 質問の答えになってませんよ。sudoコマンドとかですか?
いんや、解凍コマンドです。 パスワードがかかってる場合、実行するとTerminalではそれを入力するように いわれるんですが、NSTaskとNSPipeでそれを受けたい&答えたいというわけで。
>972 コマンド名を書けない訳は? とあるコマンドである場合は別な方法で実行できるとだけ書いておこう。
>>976 2chでソフトから個人を特定されたくないってのもあり得るんだから、
あんまり追いつめるのも気の毒。
>>975 有名なコマンドなら直接APIを呼ぶなりソースをゲットするなり
それなりの方法もあるよ。そのぶん面倒臭いけど。
sage
Project Builderのエディタが不安定なんですが。 とにかくよく落ちる。 returnしても落ちるし、""と入力するだけで落ちたりする。 どうも文法を解釈するときが怪しいんだけど。。。 環境設定を変えると不安定になるという噂を聞いたけど、 同じような症状になった人はいませんかね? OSは10.2.8です。
自動インデントを切れ。
ずばり、Cocoaプログラマさんにとって ジャガーまでのProjectBuilderとパンサー以降のXcodeでの違いは?