Cocoaはさっぱり!

このエントリーをはてなブックマークに追加
936928:02/10/24 12:14 ID:jqFE3bsX
>>933
>>934
mouseMoved と setAcceptsMouseMovedEvents で検索したら
以下のページにヒットしました。
もしかして、バグなのでしょうか?

http://cocoadevcentral.com/pipermail/cocoa-pro/2002-August/000043.html
937928:02/10/24 12:38 ID:cHmcbWTl
viewDidMoveToWindowで以下の行を追加したら動作しました。
[ [ self window ] makeFirstResponder:self ];

お騒がせいたしました・・・
938_:02/10/24 16:32 ID:UBEe0PPy
英語がよめないので調べきれなかったのですが、
Objective-Cで正規表現をつかえるAPIってありますか?
939名称未設定:02/10/25 18:37 ID:d03XCTLD
Cocoa初心者です。
ソースを読んでおおまかな処理の流れはつかめるのですが、いざ自分で
書こうとするとさっぱりです。

わからないのは変数?やクラス?の定義で名称の先頭に*とか@とか付けて
ますが、これはどういう意味なんでしょうか。
それと、{}と[]の使い分けも分かりません。

普通のC言語ではこのような定義で*を付けたりメソッドを[]で囲ったりとか
はしないと思うのですが、こういったObject-C独自の文法解説をしている
サイトって無いでしょうか?
940名称未設定:02/10/25 19:02 ID:GqNBZecg
941名称未設定:02/10/27 23:13 ID:3Da+pIKd
>> 939
もうちょっと、わからないことを具体的に書いてみな。
たとえば、

@interface
...
@end

なら、クラスのインタフェースの宣言をしているということ。

インターフェースの宣言をしたら、実装をしないといけない。
で、実装は、

@implementation
...
@end

の間に記述する。こんなのでも参考になる?

942名称未設定:02/10/28 23:05 ID:+WolWPmm
きょう、オライリーの "Learning Cocoa with Objective-C 2nd Ed."か届いた。
中身が旧版とえらい変わってるぞ。
2nd Editionといいながら、全く別の本じゃないか。
序文と目次をぱらぱら見ただけだがかなりよさげなので紹介しておく。
943名称未設定:02/10/29 11:52 ID:oH37oYTB
project builder 使って何かプログラム(Cで)作ろうと思うのですが、使える関数がわかりません
関数一覧みたいなのってどこで見れるんでしょうか?
944名称未設定:02/10/29 14:02 ID:XoEhsQpc
/Developer/Documentation にいっぱいあるよ。

いっぱいありすぎて、どれ読んだらいいか分からないと思うので、
最初はまず入門書を読むことをお勧めします。
945名称未設定:02/10/29 17:17 ID:vhq78Nla
>>944
はい、そうします
946939:02/10/30 21:20 ID:V78yDhSP
>> 941
たとえば書籍版「Cocoaはやっぱり!」のP105に

NSString* str = @"Temple";

とありますが、この「*」の意味がわかりません。
また、同じくP108のソースでは

NSString *sdName = 〜

と、変数側に「*」が付いていて、その使い分けもわかりません。
というわけでコーディングのかなり初歩の段階で躓いています。
947名称未設定:02/10/30 22:02 ID:LhLkcfV3
>>946
「*」はC言語のポインタと同じですね。
「NSString* str」 と、「NSString *str」は、単に書き方の違いで、
意味は同じです。どちらかというと、
後者の書き方をしている人の方が多いような気がします。(単なる印象ですが。)
948名称未設定:02/10/30 22:24 ID:KzlkCEWg
>>947
>後者の書き方をしている人の方が多いような気がします。

たとえば、同じ型で複数の変数を宣言するとき、

 NSString* str1, *str2;

って、かっこわりーじゃん(w
949名称未設定:02/10/30 22:27 ID:Mw/DqnDM
しかも前者の場合でやってると、
NSString* str1,str2;
としてしまい、激しくミスに陥りやすい罠
950名称未設定:02/11/01 18:13 ID:+ie332jn
質問です。
一定時間処理を止めるにはどうすればいいのでしょうか?
(HyperTalk でいうところの wait、AppleScript では delay に
 相当するものです。)
ループを回して2つの NSDate を比較し続ければ、一定時間が経過する
まで処理の流れをそこでストップさせることができますが、ループを
まわる度にオブジェクトの生成と破棄を繰り返すので、かなり CPU
タイムを浪費しちゃってる気がします。もっとすっきりした方法って
ないもんでしょうか?
951名称未設定:02/11/01 19:17 ID:5KLvP7nc
NSTimerは?
952950:02/11/01 19:42 ID:aodJOBot
NSTimer、NSDate あたりを駆使して時間を管理するクラスを自分で
作るのが一番かな。なんにせよ、NSTimer はそのままではちょっと
使いづらい感じです。一定時間経過後、または定期的に、あるメソ
ッドをどこか見えないところから(笑)呼び出すという形になるの
で、今現在の処理の流れをそこで止めたいという場合にはちょっと
融通がきかない気がします。

Cocoa でゲームとか作ってる人はこの辺どうやっているんだろう?
C の標準ライブラリとか使ってるんだろうか???
953名称未設定:02/11/01 19:54 ID:LCayY6yc
>>950
?[NSThread sleepUntilDate:[NSDatedateWithTimeIntervalSinceNow:10]];
とかではだめでしょうか。
954952:02/11/01 19:59 ID:LCayY6yc
何か変になってました。スマソ。正しくは、こうです。
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];
955名称未設定:02/11/01 20:19 ID:i9HSwX+Y
>>954
main thread でそれをすると、イベント処理が止まっちゃって、
レスポンス悪くなって、虹色カーソルが出たりするよ。

>>950
とりあえず、簡単なアニメーションの例題が
/Developer/Examples/AppKit/CircleView
に転がってる。
956名称未設定:02/11/01 20:32 ID:B2cJ4Yh4
ProjectBuilderの文字って小さすぎるので
せめてソースコードの文字を拡大したいのだが、
メニュー→形式→フォント→大きく、としても全然かわらない。
誰かやり方知っていますか?
ちなみに動作環境はver.2.0.1です。
957952:02/11/01 20:46 ID:LCayY6yc
>>956
メニュー→「環境設定」→「構文の色付け」でしょうか。
フォント→大きくはなんのためにあるのだろう・・・
958952:02/11/01 20:50 ID:LCayY6yc
>>955
そか、mainスレッドのsleepすると、全部止まってしまうわけですね。
そりゃまずいですね。失礼しました。
959956:02/11/01 20:59 ID:B2cJ4Yh4
>>957
ありがとうございます。
助かりました。
960名称未設定:02/11/02 10:37 ID:HBGZQfE2
[ [ NSRunLoop currentRunLoop ] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10] ];
のようにすることで、虹色バルーンを出さずに待ちを入れることができるよ。
961950:02/11/02 10:44 ID:oF59xkFK
>>952, 955, 960
皆さんどうもです。

- (void)wait:(float)sec
{
NSDate *stopDate = [[NSDate alloc] initWithTimeIntervalSinceNow:sec];
while ( [stopDate timeIntervalSinceNow] > 0 )
;
[stopDate release];
}

みたいなのを考えていたんですが、メインのイベントループを回して
待機する 960 さんのやり方の方がいいですね。ちっと NSRunLoop の
ドキュメントでも読んで勉強します。
962950:02/11/02 11:05 ID:oF59xkFK
ついでなんでもうひとつ質問させて下さい。
NSTimer についてなんですが、scheduledTimer を invalidate した
後に、955 さんの言ってるサンプルでは、前もって retain している
のでその分 release していますが、Cocoa はやっぱり!のサンプル
なんかを見る限りでは invalidate したタイマを release していま
せんよね。このタイマーって自動解放されているんですか?
ドキュメントを読んでもどうもその辺のことが書かれていないので
ちょっと心配なのですが。
963名称未設定:02/11/02 20:17 ID:/7EPTMJd
>>962

自分でallocしていない、retainしていないインスタンスはreleaseしてはいけません。
しかし、
instance = [instance2 copy];
等でコピーしたもの、
instance = [Class new];
によって取得したものについてはreleaseしなければなりません。
964950:02/11/02 21:36 ID:e1F+rUlW
>>963
オブジェクトのオーナーシップの原則については理解している
つもりです。ただ、タイマーの場合、ストップがかかるまで
イベントループが何回回ろうが存在し続けているので、イベント
ループの NSAutoreleasePool はアテにはできないはずですよね。

で、結局 invalidate されたタイマーってだれがどっから
release しているのかなというのが自分の疑問なのですが。
その辺のメカニズムがいまいちよくわからんです (^_^;
965名称未設定:02/11/03 11:27 ID:SyBwP76d
>>964
>イベントループの NSAutoreleasePool はアテにはできないはずですよね。
この場合、タイマーが解除された時点でautoreleaseされるのが自然。

>で、結局 invalidate されたタイマーってだれがどっから
NSRunLoopじゃない?
Programming Topicsとかに話題あったと思う。
966名称未設定:02/11/05 09:01 ID:mPMrNriW
QuickTime フレームワークをインポートしてビルドしたところ
「一部のヘッダの修正日付がプリコンパイルヘッダ作成後のもの
 になっているため、プリコンパイルヘッダを使用できない」
というような内容の警告が出ました。ヘッダのプリコンパイルを
やり直せば解消できそうなんですが、どうやればいいんでしょうか?
967名称未設定:02/11/05 16:21 ID:ijFlIPtG
>>966
Terminal で sudo /usr/bin/fixPrecomps かな。

でも、DevTool をちゃんと install/update すれば
自動的にやってくれたような。。。
968966:02/11/05 18:39 ID:5FIzSaJ7
>>967
サンクス。問題解消しました。
プリコンパイルヘッダについては GNU C Preprpcessor の
ドキュメントに説明がありますね。

にしても、Jaguar にして、DevTools もアップデートし、
そっから何もいじってないはずなんですが。
969名称未設定:02/11/05 19:47 ID:ptBTpwZ+
>>968

QuickTimeのバージョンアップもやってない?
970966:02/11/05 20:02 ID:5FIzSaJ7
>QuickTimeのバージョンアップ
あ… やってますね、そういや。
ソフトウェアアップデートが(以下略)

そうか、QuickTime のバージョンアップでヘッダが新しいものに
置き換わったのか。

ということは今後システムのマイナーバージョンアップなんかで
同じことが起こり得るということですね。で、その時は fixPreComps
ですね。勉強になりました。
971名称未設定:02/11/07 10:38 ID:DPVob6Mv
Project BuilderでCの簡単なコードを
試すのってどうやるんでしたっけ??

C言語入門スレってもう落ちちゃったのかな?
972名称未設定:02/11/07 10:54 ID:SqdlCt9g
>>971
Standard Toolからです。
?setvbuf(stdout, NULL, _IONBF,0);
↑するかバッファを吐いてね。
973972:02/11/07 10:57 ID:SqdlCt9g
コピペしたら?が入っちゃった…。
?は、無しね…。
レス一個余分に使っちゃった…。
ごめんなさいね。
974971:02/11/07 11:36 ID:DPVob6Mv
>>972さん
ありがとうございます!!
えっと、初心者なものでアホな質問で恐縮ですが
setvbuf(stdout, NULL, _IONBF,0);
はmain関数内に記述しておけばいいのでしょうか。

↓このへんを読んでみたんですが使い方がよくわからなかったので..
http://www.bohyoh.com/CandCPP/C/Library/setvbuf.html
http://www9.plala.or.jp/sgwr-t/lib/setvbuf.html
975名称未設定:02/11/07 12:40 ID:XYFB9RGT
かんたんなコードならTerminalからやったほうが
はやいと思われ。
976972:02/11/07 14:19 ID:xR1d9764
急いでま〜す。

>>974
main.c
の変数宣言の後にでも
setvbuf(stdout, NULL, _IONBF,0);
を入れてみてください。

モードね
_IONBF バッファリングしない
_IOLBF 一行バッファリング(文字列\n newlineしたとき)
_IOFBF フルバッファリング(溜められるだけ)

代わりにprintf関数の後に逐一
fflush(stdout);
を入れても表示されます。

まだ、Macだけってところじゃないから
プログラム板を徘徊するのもよろしいかと…。

身内が入院してるもんで、暫く居なくなりますが
がんばってください。

関数の説明を載せているサイトを色々回ってみると
それぞれ、言い回しが違ったりするので説明を
見比べて理解するのもよろしいかと…。
977971:02/11/07 16:28 ID:DPVob6Mv
>>972さん
お忙しいのにありがとうございましたm(_ _)m
いろいろ調べてみますね。

978名称未設定:02/11/07 17:12 ID:ICVe0lVi
NSTimerってクラスクラスタなんでしょうか?
サブクラス作ったんですけど初期化でコケてしまいます。

コンパイルは通ったのですが、実行時に初期化しようとすると
サブクラスの初期化メソッドから NSTimer の初期化メソッドを
super で呼び出した時に

*** initialization method
-initWithFireDate:interval:target:selector:userInfo:repeats:
cannot be sent to an abstract object of class XXXTimer:
Create a concrete instance!

てな感じのログが出力され、初期化できないのです。
自分の知る限り NSTimer がクラスクラスタであるということは
どこにも書いてなかったと思うのですが。それとも他に何か
問題があるのでしょうか?
979名称未設定:02/11/07 17:56 ID:et4drL8O
>>978
class cluster かどうかは知らないけど、
NSLog() で timer を表示すると NSCFTimer とか表示するから、
Core Foundation と toll-free bridge されてるやつはみんな
抽象クラスだと思った方がいいのかもね。

ってか、そもそも NSTimer をサブクラスする必要ってあるの?
メソッド追加したければ、category で充分じゃない?
980名称未設定:02/11/07 18:21 ID:cVdAPS/R
>>979
いや、インスタンス変数を追加したんですよ。
それをカウンタとして使うことで、そのカウンタが 0 になったら
タイマを invalidate するという。自身の終了条件を内包した
タイマなんですけど。

>NSLog() で timer を表示すると NSCFTimer とか表示する
NSCFTimerってプライベートサブクラスってやつですよね。
荻原本でクラスクラスタのサブクラスを作る方法が解説されて
ますけど、それを適用すればうまくいきすですね。ちょっと
試してみます。
981978:02/11/07 21:52 ID:DyLuh7A9
だ、ダメだ…… いろいろあがいてみたものの、結局ムリだった…
方針を変更し、userInfo の辞書にカウンタを含めることにして、
そのカウンタへのアクセサメソッドをカテゴリで追加することに
します。プロトコルと併用すれば型チェックもできるし。

ただ、カウンタへのアクセスがな〜、何度も参照されるものだけに、
できる限り単純化したかったのに、、、

とはいえ、まずは動くものを完成させるのが第一ですね。
979 さんアドバイスありがとうございました。
完成させるのが第一ですね。
982名称未設定:02/11/08 06:44 ID:l1asF/+5
Project Bulder のプロジェクトに例えば画像なんかのリソースを
フォルダごと Resouces に追加しても、ビルド後にアプリの
ラッパを開くと、Resouces の直下に各ファイルが置かれている
のですが、フォルダの階層を残したまま Resouces に追加できない
んでしょうか? 画像は画像、サウンドはサウンドという風に
分類して格納したいのですが。

うちの環境は Jagar とそれに付いてきた DevTool です。
983名称未設定:02/11/08 08:20 ID:Je6zPWNG
>>982

まず、ターゲットタブをクリックして、ターゲットを選択し、
ビルドフェーズのバンドルリソースから、任意の場所に置きたいファイルを削除してください。
次にメニューのプロジェクト->新規ビルドフェーズ->新規コピーファイルビルドフェーズを
選択し、ここにファイルを登録すれば任意の場所に置くことが可能。
984982:02/11/08 10:36 ID:FrMQ3Inf
>>983
ありがとうございました。うまくいきました。
まだまだ IDE を使いこなせてないなー > 俺
985名称未設定
昨日ココアを触りはじめて必死で勉強してさっきNSTextViewに対してメニュー
から定規をつけることに成功。。。

と、思ったら、、、、、、

最初からTextMenuに同じ機能がついてるじゃねーかーー。

乱文乱筆御免。