Cocoaはさっぱり!

このエントリーをはてなブックマークに追加
704607とか
エディタを作ってみた
http://isweb44.infoseek.co.jp/computer/cocoedit/

暇だったら使ってみて
705motoko:02/07/19 14:57 ID:nOTSLQAG
プログラミング超初心者です。
あまりに基礎的な質問かと思い書き込みがはばかられましたが、
どうしても困ってまして…

今、cocoaアプリで簡単な計算ソフトを作っています。(私用のため)
通常の計算は、「cocoaはやっぱり」にあるような割り勘アプリの変形でなんとかなっていたのですが、
今回、数値の羅列したテキストファイルから順に数値を読み込み、
その値を計算させてみようと思い、それの実現で今悩んでいます。

似たようなソースでもあれば参考にできるのですが、見つけられなくて(^^;
よろしければ、ご教授お願いいたします。
706名称未設定:02/07/19 17:46 ID:CE7s5j/c
漠然とし過ぎて激しく意味不明だ。
データファイルの読み込みで困っているのか?
707名称未設定:02/07/19 18:22 ID:ktnz64zy
>>705
データファイルを適当なセパレーターを入れた形で保存。
NSOpenPanelでフルパス取得。
[NSString stringWithContentsOfFile:]
でNSStringに格納。
[NSString componentsSeparatedByString:]
でセパレータで分割。



708707:02/07/19 18:30 ID:ktnz64zy
付けたし

[NSArray objectEnumerator]
でNSEnumeratorとってきて
[NSEnumerator nextObject]
がnilになるまでループ。
709704:02/07/19 20:13 ID:DGb4Ac5f
暇な人いないの?
一応ソースも公開してるんだが、、、

ところでCocoaのTextHandlingSystemって枯れてないのかな?
viewのboundsを変更するとNSRunStorageとかがでたり、あとkotoeri関連で落ちたようなことがあった。
特にNSLayoutManagerのバックグラウンドでのレイアウト中に落ちるのが痛かった。何かやり方悪いのかな?
でもTextEditでもページサイズ表示にすると落ちるからなぁ。バグかなー?
710440:02/07/19 22:51 ID:1BUjPvfZ
>>704
ソース落とせないッス。文字化けな画面に移りますが。。。
なんか保存の仕方が悪いのかな?
いちおう書いておくとIE5.2.1。
711704:02/07/19 23:30 ID:DGb4Ac5f
>>710
.dmgなのでリンクをディスクにダウンロードでやってみて下さい。
712名称未設定:02/07/19 23:52 ID:270SkBIx
>>704

ちょっとだけさわってみたよ。
エディタから直接シェルをたたけて、結果をテキストに流し込めるのは面白いね。
もうちょっと操作方を練り込めばかなり便利になりそう。
713704:02/07/20 00:21 ID:3kjfXf3/
>>712
ありがとう。
タスクバーはパッと思い付いた機能なんだけど、思った以上にうまくいったかも。
でもマルチスレッドで苦労したな。
714.:02/07/20 04:04 ID:WRvVPtyF
>>712
>エディタから直接シェルをたたけて、結果をテキストに流し込めるのは面白いね
おお!!それいいね。

>>704 質問
Finderからファイルを開いているVIEWにD&Dすると、アイコンになるけど開けないの?
715704:02/07/20 12:07 ID:3kjfXf3/
>>714
ドラッグドロップはあんまり考えてなかった。
やりかたがよくわかんないけど、NSViewのdragFile:fromRect:slideBack:event:あたりかな?でもこれだとサブクラスでオーバーライドしなきゃいけないような。
つーかdrag dropは意外にめんどくさい。

ちなみにエディタ自体はこれ以上変更する気はないんで、ぜひソース落として改良して下さい。
716名称未設定:02/07/20 13:13 ID:QExk34O/
>>714
それは多分RTFDの添付ファイルになっていると思うんだけど。

NSWindowのサブクラスでvalidateMenuItem:すると
何故かundo;とredo:が引っ掛かるんだけど、
ここでundoManagerからundo/redoMenuItemTitleを貰って
メニュー書き換えようと思ったら変な「&」が先頭に付いてくる。
日本語だとそうでもないんだけど、回避する手段ってある?
717名称未設定:02/07/21 09:54 ID:OfE1csdo
>>704
最初ソースを見てNSDocumentにほとんど何もやらせていないので
「へ?」と思った。
NSWindowControllerに文書の内容の保持までやらせているんだね。
718704:02/07/21 11:03 ID:kFQJidC7
>>717
そうです。

最初、NSDocumentとNSWindowControllerで処理を分担してたこともあったんだけど、だんだん区別がつけにくくなってきて、
わけ分かんなくなったんでNSDocumentの処理をNSWindowControllerに丸投げするようにしちゃった。

WindowControllerを使ったのはスタイルとかのデータも別のWindowControllerを追加して使うかなと思ったからだが、結局やんなかった。

あとオープンの処理もWindowControllerがやってる。
これもWindowControllerを独立できて楽かな〜と思ってやったんだけど、失敗だったかも。

ちなみにクラス等の概要はoverview.txtに書いてあります。
719717:02/07/21 18:44 ID:OfE1csdo
>>718
逆にAppleのサンプルだと大概NSDocに
NSWinConのやる事をやらせてるね。

自分はそう言う時は
ファイルシステム/データモデル関連→NSDoc
ユーザーインターフェイス関連→NSWinCon
で分けている。
データの操作をユーザーアクションからワンクッション置くんで
ちょっとクドくなる嫌いはあるんだけど。
720名称未設定:02/07/23 23:36 ID:nvFuhxWB
どなたかiTteyoshiを何とかしてくだされー。
漏れはプログラム書いたことないのでさっぱりだー。
721名称未設定:02/07/25 06:31 ID:E8YlIBvj
>>720
言うのは簡単、やるのは難しい
722名称未設定:02/07/27 13:38 ID:Q6jAJKZk
ペーストボード履歴アプリケーションを作ろうと思っているんですけど、
他のアプリケーションが、「ペーストボードにコピーした」タイミングを
ハンドリングするうまい方法が思いつきません。
NSPasteboardのドキュメントを見た感じだと、そういうのはなさそうだったので・・・
どなたかお知恵を貸していただけないでしょうか?
723名称未設定:02/07/27 21:08 ID:R6t8SIIN
昔Core Foundationにそう言うのがあったらしいが
今は無いんでポーリングするしか無い。
724名称未設定:02/07/27 22:24 ID:b1CIGy+k
ありがとうございます。
「ポーリング」という言葉、良く聞くのですけど、おぼろげにしか理解できて
いなかったので、ちょっと調べてみたのですが、
ようするに、無限ループを回して、ペーストボードに変化がないかどうかを
常に見張る、みたいなイメージでよいのでしょうか?
CocoaだとNSTimerとかを使うといいのかな?
725名称未設定:02/07/28 08:07 ID:qpqEOdtR
オライリーの「Cocoa 入門」にある「Travel Advisor」で
'NSTextField' does not respond to 'setString:'エラーが連発するんだけど、同じ経験ある人 or 解決方法知ってる人いる?
726名称未設定:02/07/28 09:25 ID:tjCNJZHk
>>725

エラーメッセージにあるとおり、NSTextfieldはsetString:というメソッドを
持っていません。
NSTextfieldに文字をセットするにはsetStringValue:を使います。
setString:はNSTextViewに文字をセットするためのメソッドです。

つまり、文字をセットするのがNSTextfieldかNSTextViewかでこれらの
メソッドをきちんと使い分けなければいけないところを、混同してしまって
いるのではないかと思います。
727名称未設定:02/07/28 13:14 ID:qpqEOdtR
>>726
なるほど、勉強になりました〜、サンクス!
確かに、確かめてみると、
IBOutlet NSTextView *〜 とするところを
IBOutlet NSTextField *〜 にしてしまってました。

ViewとFieldの使い分けって、難しいっす。
この二つ、機能にどんな違いがあるんでしょうか?
728726じゃないけど:02/07/28 14:34 ID:K11WcZ+O
>>727
そんなに使い分けに苦労する?

NSTextFieldっていうのは一行の文字を入力するためのViewで
returnキーを押したりとかフォーカスが外れたりするとアクションが送られるビュー。
NSTextViewっていうのは複数行の文字を入力するためのビューで、
主にテキストエディタとか文書を入力する必要があるソフトを作るときに使われるビュー。

名前は似てるけど用途は全然違うよん。
729名称未設定:02/07/29 07:18 ID:OcMv901q
>>728
なるほど、またまた勉強になりました。
これまでなんとなく長い短いで使い分けていただけなので、スッキリ!

730名称未設定:02/08/05 23:41 ID:JVdy6Gr+
名スレ保守。
731名称未設定:02/08/07 05:18 ID:tZEzDVqg
NSViewでデフォルトでは

原点が左下 右に行くと x が + 上に行くと y が +

になってるのを

原点が左上 右に行くと x が + 下に行くと y が +

に変える方法が分かりません
ずっと前にサンプルコードを見た覚えがあるのですが忘れてしまいました
御存じの方がいれば教えて下さい
732名称未設定:02/08/07 05:39 ID:vhR6Y8uy
>>731
NSViewのサブクラスで isFlipped メソッドをオーバーライドし、
YES を返すようにすると自動的に原点が左上に、上→下の方向が
Y軸の正の向きになる、というようなことがリファレンスに書いて
あります。

NSView > Coordinate System Transformations のまん中から
ちょっと下のあたりを参照。
733731:02/08/07 13:20 ID:E7O/r5hv
さっそくのレスありがとうございました
リファレンスって英語ばかりだから読むのあきらめてました(汗

734732:02/08/07 14:33 ID:9qKypnsX
確かに英語は漏れもツライ!
それにあのクラスの数といったら……(苦藁

だけどまあ激ムズってほどでもないし、
どういう働きをするクラスなのかってとこ(Class at a Glance)と、
どんなメソッドがあるのかだけでもさらっと見とくといいよ。
(最初から最後まで熟読しようなんて考えてもどうせ忘れるしな)
で、必要な時に辞書的に調べる&関連項目も勉強しとくか ぐらいの
スタンスでいいんじゃないでしょうか?

あれくらいの英語だとやってる内に慣れてきて結構普通に読みこなせる
ようになるんで英語だからと頭っから諦めるのは損ですよ。
735名称未設定:02/08/07 23:26 ID:CgxzN3E/
保守age
736名称未設定:02/08/08 22:57 ID:lv5/lBuI
>>728
用途としてはそれでいいけど、NSTextFieldでも
複数行入力できるよ。
737728:02/08/08 23:39 ID:RwSGkMAi
>>736
すっかりそれ忘れてた
スマソ
738名称未設定:02/08/09 00:25 ID:J03zTP5H
ちょっと疑問に思ったので質問。

/Developer/Examples/AppKit/ にある CompositeLab というサンプルで、
CompositeView というクラスにsetSourceColorWell、setDestColorWell、
setBackColorWellというメソッドあって、それがどうやらアウトレットの
設定をやってるらしいのですが、このメソッドの呼び出し元がわかりません。
どこかから呼び出されて実行はされていることは確かなのですが、ソースの
どこを見てもこれらを呼び出している箇所がないのです。

この辺、一体どうなっているんでしょうか?
739名称未設定:02/08/09 02:03 ID:ARhr/M4p
>>738

勝手に呼び出されるみたいだ。outletに対しこんなことをやるとは知らなかった。

どうやらInterfaceBuilderで設定したoutletには"set" + outlet名(先頭の文字をupper case) + ":"というselectorを自動生成し、
respondsToSelector:で確認してmethodを実行しているようだ。
selectorはCの文字列らしいから、これは簡単にできると思われ。

この場合はsourceColorWellとかのインスタンスが設定されるときに"setSourceColorWell:"等を生成して、設定されるインスタンスを引数にして実行してる。

ちなみに-awakeFromNibというmethodも自動で実行される。
これらの自動で実行されるmethodはoutletを初期化するルーチンを書くのに使える。InterfaceBuilderで作ったインスタンスは-init...の時点でoutletはバインドされておらず、nilだったりするから。

740738:02/08/09 03:13 ID:9Xd0/9Yk
>>739 レスどうも。

最初、インターフェースを見たときに IBOutlet が付いてなかったので、
変だと思ったんですよ。これじゃInterface Bulderがアウトレットだと
認識できないんじゃないかと。でも、Interface Bulderの方でアウト
レットを設定しておき、かつInterface Bulderでソースを生成しなければ
こういう形になることもあり得ますよね。後はなんというか、普段
Interface Bulder(Project Bulder?)が自動でやっているところを
あえてマニュアルでやったという感じなんでしょうかね。

まだまだわからんことも多いので自分でも何を言っているのかわからなく
なってきた(藁
741名称未設定:02/08/09 10:52 ID:WCvqs09V
フレームワークを検索すれば出てくるが、
IBOutletの中身は何も無い。IBActionもvoid。

Interface Builderは先ずアクセサメソッドからoutletにアクセスしようとして、
アクセサが見つからなかった場合はpublicなインスタンス変数、
それも見つからなかったらprivateな"_"付きのインスタンス変数にアクセスする。
と、リリースノートかどこかに出てくるぞ。
742ligature?:02/08/11 06:10 ID:ewZUjuMc
どうも、Cocoa修行中のものです。
現在 NSAttributedString のあたりを勉強中。
で、気になったんですが、文字列の属性の1つに ligature って
ありますよね。これは一体何を設定するものなんでしょうか?

いろいろ設定値を変えて描画させてみても、ぱっと見何も変化が
ないようにしか見えないのですが。
743名称未設定:02/08/11 07:09 ID:euYJYosu
私は完全な初心者でまだCを勉強している身ですが、
それはリガチャのことでは?

アルファベットの小文字がくっついて表現されるやつ。
Texteditを使ってAppleChanceryのフォント48ポイントくらいで
「office」と入力すると、よく分かります。

出しゃばり&違ってたらスマソ。
744742:02/08/11 07:51 ID:Lcfbn/n5
どうも。やってみたら、なんとかその効果を見ることができました。
かなり微妙な違いではありましたが((藁
にしてもいまいちその活用方法がわからんのですが。
ま、わかる人にはわかるんでしょうかね。というわけで sage。
745名称未設定:02/08/11 23:47 ID:7JWVPU1n
keyDownイベントで、押されたのがDeleteキーかどうかを判定するやり方が
わからなくて、困っています。
普通のアルファベットキーは、NSEventの、charactersというメソッドを使って

if([event characters] isEqual:@"a"){
// 処理
}

のようにすることができるのですが、Deleteの場合、上の'a'に相当する部分には
何を入れれば良いのでしょう・・・
NSEventのドキュメントを見ると、NSDeleteFunctionKeyなる定数値が用意されていたので、
はじめはこれと比較すればよいのかと思ったのですが、
どうも、この定数は、NSString型ではないらしく、比較しようとすると警告が出てしまいます。
どなたか、教えていただけないでしょうか。
746名称未設定:02/08/12 00:53 ID:xVCW+ME3
>>745
よく知らんのでテキトーだが。
NSLog(@"%x", [[event characters] characterAtIndex:0]);はやってみた? Deleteは7fだったよ。
NSEvent.hをみるとNSDeleteFunctionKey=0xF728となってる。コメントにはUnicodes we reserve for function keys on the keyboardと書いてある。これはファンクションキーらしい。

というわけで
if ([[event characters] characterAtIndex:0] == 0x7f) {
//処理
}
で、とりあえずできると思う。

あと一応NSText.hでNSDeleteCharacter = 0x007fとなってるからこれを使うべきかな?
747名称未設定:02/08/12 01:28 ID:5Ht1N1ok
ありがとうございます!
教えていただいたやり方でうまくいきました。おかげさまで、先に進めそうです。
characterAtIndex:0でとってきた値を比較すれば良かったのですね。
ちなみに実験してみたところ、「NSDeleteFunctionKey」は、「Delete」ではなく、「Del」キーを
表しているようでした。
748名称未設定:02/08/15 04:42 ID:WQWAVCSp
だれか〜、informal ptorocol について教えてくれ〜。

現在の時点でのワタクシ的理解は、

1、インターフェースを見る限りカテゴリと見分けがつかない
2、インターフェースは定義されているが実装が伴っていない
3、プロトコルに適合させるにあたり、全てのメソッドを実装
  する必要はなく、必要なものだけをチョイスできる

ぐらいなんですがいかがなもんでしょ? 多分ダメなんだろな(藁
というか、これって実装し忘れたカテゴリと違うの?
クラスって実装されていないメソッド宣言しとってもええの?
メッセージを送る側は常に対応するメソッドが相手に実装されて
いるか調べてんの? などなどわからんことだらけ。
どなたかアドバイス下さい。
749748:02/08/15 04:45 ID:WQWAVCSp
ptorocol だって… (;TДT)
protocol です、ハイ。
750名称未設定:02/08/15 12:14 ID:PZi4Iw+d
>>748
informal protocolはNSObjectのcategolyとして定義されてるけど、categolyはinterfaceだけでimplementationはなくてもwarningにはならんみたいだ。

informalにするのはprotocolにするとオーバーヘッドが出るか、あるいは単にめんどくさいだけかな?

> クラスって実装されていないメソッド宣言しとってもええの?
interfaceにあるメソッドを実装し忘れたりするとwarningが出るけど、コンパイル自体はできる。

> メッセージを送る側は常に対応するメソッドが相手に実装されて
> いるか調べてんの? 
メッセージの送信はobjc_msgSend()という関数になってるはず。
この関数がレシーバに対してセレクタに対応するメソッドがあるかどうか調べて、あれば実行する。
/usr/include/obj/にあるヘッダをみるといいかも。
751748:02/08/15 18:36 ID:whgta1k/
>>750
おお。レスありがとう。
informal protocol について抱いていたもやもやとした感覚が
ようやく、払拭されたよ。ちょっと乱暴かも知れないけど

informal protocol = 実装後回しカテゴリ

つーことかな。本来 category と protocol は別のものだけど
informal protocol として interface だけを NSObject みたいな
継承の大元となるクラスに adopt させておけば、その interface に
そってメソッドを実装することで、それは一種の protocol として
機能する。

こんな感じでしょうか。
(おかしなこと言ってたらだれか突っ込み入れてね)

> メッセージの送信はobjc_msgSend()という関数になってるはず。
> この関数がレシーバに対してセレクタに対応するメソッドがあるかどうか調べて、あれば実行する。
Objective-Cにおけるメッセージ送信のオーバーヘッドって、つまり
これのことなんだよね。
752748:02/08/15 18:41 ID:whgta1k/
それにしても、英語のドキュメント読んで勉強した人って、
ところどころ日本語に英単語が混じるからすぐわかりますね。
interface とか implementation とか。
753名称未設定:02/08/16 13:12 ID:iQ57Q4RI
NSImage と NSImageRep の関係がいまいちわからないのですが、
どなたか噛み砕いて説明して下さらないでしょうか?

NSImage が複数の representation を持つとは、一体どういう
ことなのですが? 漏れにはサパーリです。
754名称未設定:02/08/16 13:32 ID:xFWIPRLo
NSIMageRepのサブクラスを見ればヒントになると思うが。
755753:02/08/16 14:37 ID:70dfRwN8
スマソ。 Cocoaはやっぱり に NSImage と NSImageRep について
説明してるとこがあった。うぬぬ、わかったようなわからんような…

つーか漏れは「データ」と「機能」を禿しく混同していたことが
判明した(;TДT)
756名称未設定:02/08/17 19:50 ID:wkCVFWcw
757753:02/08/18 03:05 ID:L5HXBkmW
情報サンクス。行ってみるよ。
後一押しという感じなんだ。
758名称未設定:02/08/19 10:22 ID:a9JHm0DO
NSImage関連で質問させてください。

現在、メインスレッド外で描画ターゲットウインドウを使ってNSGraphicsContextを取得、設定し、
NSImageのlockFocusを使ってNSImageに描画後、
メインスレッドにそのNSImageを渡し、
メインスレッドで描画ターゲットウインドウ上のNSViewに描画しようとしているのですが、
なぜか、NSWindowの持つウインドウビュー(?)に描画されてしまいます。
具体的に言うと、描画しようとするビューからの相対位置ではなくウインドウビューからの相対位置に、
描画しようとビューのisFlippedの値ではなくウインドウビューのisFlippedの値を使用して描画されます。

これってNSGraphicsContextの使い方がまずいのでしょうか。
それともNSImageを作成するときは、あらかじめ描画するビューを指定しておかなければならないのでしょうか。

よろしくお願いします。
759758:02/08/20 15:02 ID:yacBMAvp
下がってるのでageながら追記。

NSImageの描画は描画しようとしているビューの-(void)drawRect:で行っています。
ここで描画をしているにもかかわらず、>>758のような現象が起こるのはなぜでしょう。

また、シングルスレッドでは問題なく描画されています。
NSImage作成をメインスレッドで行っている事と、NSGraphicsContextはいじってないだけで
やってる事は同じです。
760名称未設定:02/08/21 18:43 ID:OV8f6FAs
IBでNSImageViewをNSScrollViewのサブビューにした状態で
NSImageViewへと接続したクラスからいろいろ送っても
全部NSScrollViewのほうへ反映されてしまうのですが
どうしたらサブビューのNSImageViewへ正しく送れるでしょうか。

また、10.1に付属しているPreviewのように、画像全体が
表示されたらスクロールバーを表示しないようにしたいのですが
どうしたらよいでしょうか。

よろしくお願いいたしますm(_ _)m
761名称未設定:02/08/21 19:36 ID:FqZejkH6
>NSImageViewへと接続
接続ってIBでアウトレットの結線をやってるんですよね。
接続先のクラスがちゃんと NSImageView になってますか?
NSScrollView の方につないじゃってるのでは?
762名称未設定:02/08/21 19:44 ID:OV8f6FAs
>>761
いえ、ちゃんと中の方に接続しているのですが...(涙
763名称未設定:02/08/21 20:20 ID:FqZejkH6
インスペクタで見たら接続先のクラスがわかるでしょ?
それは NSImageView になってんの?

なんかよくわからんのだが、接続してしまった後に ScrollView の
サブビューにすれば確実なんではないか。
764名称未設定:02/08/22 11:01 ID:xy+T/jXb
ヒラギノフォントの指定をどうやるのか教えて下さい。
「Alphabet」というAppleのサンプルコードをいじってます。

[cell setFont:[NSFont fontWithName:@"Times-Italic" size:small ? 18.0 : 36.0]];

ここを変えればいいと思うんですが。
765名称未設定:02/08/22 12:30 ID:dF8v+gW/
766764:02/08/23 06:31 ID:S6zxHxtc
>765
助かりました。ぬりがとうございます。
767名称未設定:02/08/26 21:59 ID:HpK/5t0b
本家 Cocoa はやっぱり! のサンプル AffineTest に関する疑問。
AffineView の drawRect で

1、スライダーから値を読んでそれを元に affine transform matrix を
  作って concat

2、図形を描画

3、view の transform matrix を初期状態にリセット

ってことをやってるんだけど、3にあたる [atReset set]; をコメント
アウトしても、実は何も問題が起こらない。スライダーが動かされる度に
drawRect が呼び出され、その度に matrix を concat していけば、その
効果が蓄積されていくから、とんでもないことになるはずなんだけど、
そうはならない。なぜ?

view の transform matrix って drawRect の中でいじっても一時的な
効果しか得られないのだろうか? どなたか詳細キボン。
768名称未設定:02/08/30 03:15 ID:6tPrqLdb
プライベートなメソッドってどうやって宣言したらいいんでしょうか?
インターフェースファイルで特定のメソッドを宣言しないでいたら、
selecter が認識できないといわれ、実装ファイルの方に宣言しても
当然ダメでした。隠したいメソッドをそれを内部的に呼び出すメソッド
よりも順序的に先に書いておくと一応問題なく動いたのですが、どうも
しっくりきません。関数のプロトタイプに static を付けるのと同じ
ようなことってできないのでしょうか?
769名称未設定:02/08/30 03:15 ID:3PoU4Yuy
770名称未設定:02/08/30 03:44 ID:SpxcGhY2
>>768
Objective - Cではメソッドのアクセス権を設定することはできなかったと思う。
771名称未設定:02/08/30 05:11 ID:QotEd9Jp
>>768
できないです、ハイ。

関係ないけど、おジャガのDevToolsを使ってる人は
connect.apple.comにちょっとした幸せが...
772768:02/08/30 05:39 ID:8VDcA/lj
メソッドは必ずしも公開しなくてよいとかいうようなことをどっかで
読んだような気がするんですけどねー。フレームワークとか作って配付
したりする時ってコンパイル時に使ったインターフェースファイルとは
別に、配付用のインターフェースファイルを用意したりするってこと
なんでしょうか? アクセス権自体を設定できなくてもメソッドの存在
自体を秘匿できればいいんですが。
773名称未設定:02/08/30 06:02 ID:SpxcGhY2
>>772
おれはこうやってる。
ヘッダファイルを公開・非公開2つ用意して、非公開から公開を#import、
クラスとサブクラスの実装ファイル(.m)は非公開を#import。他のクラスは
公開のみを#import。まあ、警告はでるから。

あるいはJavaでよく使われるように、重要な部分だけでもprotocolのイン
ターフェースのみで操作するか。
774768:02/08/30 06:24 ID:aLdYMvJR
>>773
おー、そういうやり方があるのか。
やっぱヘッダを2つ用意するんですね。

にしても Objective-C でも、この辺もうちょっと融通がきくといいなとか
思うんですけどねー。
775名称未設定:02/08/30 08:11 ID:ODlXisJi
1つのクラスの定義を1つのファイルに書いている場合なら
定義ファイル(.m)の中にCのstatic関数で書けばそれで充分
ではないないでしょうか。
メッセージ送るよりちょっとは早そうだし。

static id aPrivateMethod (id self, id p0, id p1);
776名称無設定:02/08/30 08:24 ID:adsNzKC6
非公開のカテゴリを作ってやればいいだけでは?
実装ファイルに埋め込んでもいいし、ヘッダを分けてもいいし。

外部に公開するときは適当な接頭辞をつけて、
その接頭辞は予約されているとか書いておけば、ぶつかる事は無いです。
777768:02/08/30 11:19 ID:V58lXLnN
皆さんレスありがとうございます。
やり方はいろいろあるみたいですね。

>>775
ちょっとしたユーティリティルーチンなんかはそうするのがベターかも
知れないですね。もはやメソッドではないですが、プライベートに呼び
出す場合、そもそもメソッドである必然性もないですし。(というか、
だから Objective-C にはプライベートメソッドがないのか……)

>>776
そういうカテゴリの使い方もあるんですね。全然思い付かなかった (^_^;


何を今さらな気もしますが、Apple のドキュメントとか読んでても、この
メソッドは他のメソッドが内部的に呼び出すものなので直接呼び出さない
でくれみたいなことが書いてあったりするので、プライベートに使うメソ
ッドとはいえ、何が何でも隠さねばというほどのものでもないのかなとか
も思ったりしてるのですが…(汗

皆さんはその辺どのようなポリシーをお持ちですか?
778名称未設定:02/08/30 16:43 ID:1H5adu6X
カテゴリ作らなくても、@interface にないメソッドを
@implementation に書けちゃったりしますよ。

ただ、どっちにしても、アクセス制御はできないので、
メッセージ送られたら、そのメソッドが呼ばれちゃうけどね。

# この辺、Objective-C はむしろ融通ききすぎって気も
# しないではない。。。
779名称無設定:02/08/30 17:26 ID:adsNzKC6
>>778
>カテゴリ作らなくても、@interface にないメソッドを
>@implementation に書けちゃったりしますよ。

そう言えばそうだった。
実行時チェックだもんね。

でも、メンテや警告抑止には有効です。
と強がってみる。
780768:02/08/30 20:51 ID:1eDM7xxL
>>778
ほんとだ… いけるじゃん
いや、ビルド時に does not respond 云々の警告が出るもんで、それを
鵜呑みにしてその時点で実行を止めちゃってたんですよ。今やってみた
ら別に何ごともなく件のメソッドが呼び出されてるし。

なんだ、それだけのことだったのか… がく。
動的結合ってやつをいま一つ理解してなかったからこんなことになった
んでしょうかね。まだまだ不勉強でした。
781名称未設定:02/08/30 22:35 ID:kOf7VyUN
「入門Cocoa」のp271に、プライベートなメソッドについての話題がのってたよ。
776さんが書いているように、やっぱりカテゴリをつかってるみたいね。
こんな感じで、実装ファイルなり、プライベートなヘッダなりに書いておけばよいそうです。
@interface Foo(PrivateMethods)
-(void)method1;
-(void)method2;
@end
こういうやり方って、Objective-Cの慣用句みたいなものなのかな?
782778:02/09/02 11:54 ID:A1rbmPwY
警告は、呼び出されるメソッドを先に定義すれば抑制できるよ。
C で static な関数を先に定義すればプロトタイプ宣言が
いらないのと同様。複数のメソッドがお互いに呼びあってたら
駄目だけどね。

まぁ、形式を重んじるならちゃんとカテゴリ定義するのも悪く
はないけど、気楽に書けるのが Objective-C のいい所、って
気もしないではない。。。
783名称未設定:02/09/02 13:16 ID:mYHT3ASC
前にも書いた気がするが、真にprivateなメソッドを作りたかったら
@implementationと@endの間にstaticな関数を作ればいい、と思う。
selfは自前で用意、インスタンス変数はそのself経由でアクセス、
と面倒だし、実際にこんなことしている人の話は聞いたことはないが。

あと、プライベートなメソッドとか変数とかの頭にアンダースコアをつける、
ってこともあると思う。
784名称未設定:02/09/07 04:19 ID:5PeR4jPy
@"保守age"

はじめの頃の一断ちは、Cocoaはすっかり忘れた〜になってない?
7851:02/09/07 05:05 ID:x6Bq8+ON
忘れてませんよ、進歩がないだけで…
やりたい事があるけど、何から手をつけていいか分からないからお手上げなんですよね。
学生の頃みたいに時間があれば、プログラミングの勉強に没頭できるのですが…
786名称未設定:02/09/08 17:47 ID:DRIHbYU3
Rbから移ろうかという者で非常に初歩的ですが…
例えば、(NSString *)aString
ってとこの「*」ってなあに? たまに「**」ってなってたりもする…。
(先にCを勉強した方がいいかな。。)
787名称未設定:02/09/09 02:06 ID:MFPReRI/
↑ポインタじゃないんですか?
788名称未設定:02/09/09 02:23 ID:Shgp2vsr
>>786
とりあえずはそんなもんだ、と思ってサンプルを書いて動かしつつ、
初心者向けのC教則本を同時進行で読んでいけばいいです。
789名称未設定:02/09/11 01:42 ID:cpPTYypB
OS Xと開発環境を10.2にupしたら
10.1.xでは問題なかったコードがうまく動かなくなってしまいました
(スタックが壊れている模様)
似たような事例はありませんか
790名称未設定:02/09/11 02:02 ID:G36MIEgz
どんな処理で、どういう風に壊れてるのか教えてもらわないと
似てるかどうかも分かりませぬ
じゃがのせいか、はたまたコードの問題部分が今になって露呈したのか....。
791名称未設定:02/09/11 15:10 ID:V7Ns2l2c
Cocoaはやっぱりの最新更新情報が、
「★ 2002.09.09 : ジャガーの新機能の解説を更新しますた。」
になってるよ。ツルチャンみてる??
792名称未設定:02/09/11 18:01 ID:5hqPcrCO
>>791
ほんとだ。ワロタ
793名称未設定:02/09/13 01:56 ID:H+ItbT1w
しかし、なんでMac OS X 10.1用のDeveloper Toolsはいまだに
Betaなんだ?10.2の方はBetaとれているのに。
そういえばiCalも10.2以上じゃないといかんのだよな。
力ずくでもMacユーザーを10.2へ移行させようと言うのか。
794名称未設定:02/09/13 04:08 ID:1l1Q4qUn
>>793
それ、April 2002 のこと?
だとしたら、それはジャガタンについてるやつのバグ取り、評価、フィードバックの
ためのベータ。
10.1のは December 2001 が正規版最終だと思ったけど。
April 2002 は、普通の開発には使うなとリリースノートに書いてあったはず
795名称未設定:02/09/13 12:18 ID:H+ItbT1w
そです。April 2002です。
そうか、あくまでもジャガのための評価版なんだ。
自分もやっぱりDecember 2001を使ってます。
っていうことは、ジャガを導入しない限り、
Dev Toolsのアップグレードはないわけですね。
December 2001にはいろいろと不満があるのですが。
まあ、ただだし、開発が楽なんで、むしろ感謝しています。
CWのように頻繁にバージョンアップしてプログラム
の方まで作り直さなきゃならん、なんてことがないので
これはこれで安定していていいです。
796名称未設定:02/09/13 13:19 ID:p9remX9s
やっぱり 10.1 を使い続けてる人もいるんですね。
某自作アプリも、しばらく 10.1 のサポートは続けるかな。
797名称未設定:02/09/13 16:08 ID:0O54oeEL
そうですね。さすがに10.0からサポートするのはつらいけど
798名称未設定:02/09/13 18:23 ID:023Z91Zs
Jaguarのプロジェクトビルダーでテクスチャードウィンドウ
を使ったアプリって、10.1.xで動く?
すでに10.1.5にJaguarを上書きしちゃったんでわかんないの・・
799bloom:02/09/13 18:33 ID:hyfVfuen
800名称未設定:02/09/13 18:59 ID:BhSZpBBP
余裕で800ゲト(藁
801名称未設定:02/09/13 19:03 ID:zP2Illo5
>>798
>Jaguarのプロジェクトビルダーでテクスチャードウィンドウ
>を使ったアプリって、10.1.xで動く?

多分無理。
フレームワークが異なるので何らかのエラーになると思われ。

802801:02/09/13 19:08 ID:zP2Illo5
(追記)
Win2000の半透明がNT4で動かないのに近いかも。

ただCocoaは動的解決の傾向が強く
QTプレーヤやiTunes等の背景は隠しAPI臭いので
或いは・・・
803名称未設定:02/09/13 19:10 ID:m/TC4TiC
>>798
試してみるからサンプルアップして。
804名称未設定:02/09/13 19:17 ID:023Z91Zs
>>803
ありがとう。よろしくです。(約140kb)
http://homepage.mac.com/kitanin/cmb.app.sit
805名称未設定:02/09/13 20:40 ID:m/TC4TiC
>>804
10.1.5
予期しない理由で終了しました。

普通のウィンドウになるかと思ったけどだめらしい。
806名称未設定:02/09/13 23:06 ID:rnpErCmO
>>804
そういうときは、File -> Compatibility Checking を使うといいよ
807806:02/09/13 23:07 ID:rnpErCmO
ごめん、>>798 の間違い
808名称未設定:02/09/13 23:15 ID:023Z91Zs
>>805
ありがとう。やっぱりダメかぁ。
現時点で、10.2専用!・・っていうのは、使える人の
人数を考えるとまだ厳しいから、テクスチャードにす
るのはあきらめた方がよいですね。

>>806
そんなことができたなんて、初耳でした。サンクス。
809名称未設定:02/09/14 15:15 ID:k274qRIm
質問でーす。
Cocoaでサウンドのボリュームってどうやって変更すればいいんでしょう?
今、簡単なアラームみたいなものを作ってて、

現在のボリューム値を保存
ボリュームを最大に設定
NSBeep()
ボリュームを元に戻す

みたなことがやりたいんですけど、NSSound のドキュメントとか見ても
それらしいメソッドはないし… やっぱCarbon使わなきゃダメっすか?
810名称未設定:02/09/14 19:13 ID:c59lY16c
>>809
NSSoundには残念ながらボリュームを調整する機能はありません。
CocoaではNSMovieとNSMovieViewを使えばボリュームを調節することは可能です。
簡単なアプリケーションならこれで十分でしょう。


あと、直接サウンドデータを加工してからNSSoundに渡すという手もあるにはあるけど、
これは面倒くさいだけなのでよほどの理由が無い限りおすすめしません。
811809:02/09/14 21:28 ID:K29dQyd+
>>810
ただビープを大きな音で鳴らしたいだけで NSMovie & NSMovieView か,,,
なんか大仰だけど、それが一番楽なんかな。NSTask でシェルを起動して
そっから AppleScript で set volume とかいう手もあるかと思ったんです
が、これもちょっと回りくどいし、それにこれだと現在のボリューム値が
得られない。NSSetVolume、NSGetVolume とかいうそのもののずばりの関数
がなんでないかな〜?
812名称未設定:02/09/15 04:33 ID:+XALr1n5
じゃがなら NSAppleScript を使えるよ。
最初のコンパイルに時間がかかるのがちょっといやだが

[[[NSAppleScript alloc]
initWithSource: @"say \"O ma i La, zen in, Ittae yoh she!\""]
executeAndReturnError: nil];
813812:02/09/15 04:45 ID:+XALr1n5
↑ NSTask経由にしなくても、という意味です。
814809:02/09/15 05:22 ID:Wo7SOCxr
>>812
おお, そんな使い出のありそうなそうなクラスが (^_^
実は今日じゃが入れたとこなんだよ、さっそく見てみよう。

にしても、Apple Event 関連ともども、アプリケーション同士の
メッセージのやりとりに関するところは全然勉強してない。今後
はその辺を中心に勉強を進めるか。

@private
 とかいいながらいつもドキュメント読むことばかりが先行し、
 実際作るとなるとまだまだつまらん小物アプリしか作れない俺
 であった...悲
815名称未設定:02/09/15 18:16 ID:vUv9N2H+
★ 2002.09.13 : ジャガーの新機能の解説を更新しますた。

pdfだと落とし直しが面倒なのです。
816名称未設定:02/09/16 06:37 ID:IKJRNKEL
大変だ! じゃが入れて Developer Tools もアップデートしたら
ODCompletionDictionary が使えなくなっちまった! 
思いっきり辞書鍛えてたのに〜〜〜 (T-T)

これって俺だけじゃないよね?
使ってる人どうですか?
817816:02/09/16 06:40 ID:IKJRNKEL
ちなみに俺が言ってるのはこれです。ひな形となるコードを
まるごと登録していけばかなり便利です。
http://www.obdev.at/products/completion-dictionary/
818816:02/09/16 07:03 ID:IKJRNKEL
追加の自己レス。
コンソールみたら

2002-09-16 06:44:41.357 Project Builder[543] ODCompletionDictionary
(Version 3.1.v212) loaded

とログに残ってて、どうやらロード自体はされている模様。はて?
なんで使えないんだ?
819名称未設定:02/09/16 08:24 ID:0ob45Hsl
>>816-818
うちの環境ではちゃんと動いてるよ。
コンソールに出てるバージョンも同じ。

~/Library/KeyBindings/PBKeyBinding.dictはちゃんとある?
820名称未設定:02/09/16 08:45 ID:jDRgmLEP
>>819
ご、ごめん… 
関連メニュー項目がなくなってたんで早とちりしてました。
今試したら(おぃ)補完自体はちゃんとされます。

ただ、以前は command + shift + X で辞書が編集できたのに、今やると
できないんです。確か Edit メニューの一番下にありましたよね、Show
Dictionaru かなんかの項目が。あれがなくなってるんです。

Project Bulder のメニューが日本語になってるんですけどそれが原因
かなあ? 819 さんは Project Bulder のメニューは英語ですか?
821816:02/09/16 09:35 ID:jDRgmLEP
自己レス。問題の原因がわかりました。
システム環境設定の「言語環境」で英語を一番上に持ってくると、
Edit メニューの一番下に Completion... と表示され、辞書への
登録、編集ができるようになりました。このメニュー項目は
Project Bulder のメニューが日本語表示の時には出てこないみた
いです。なんで? メニューが日本語表示の時って英語のタイトル
をもったメニュー項目は出てこられないようになってるんだろうか...
822816:02/09/16 09:45 ID:jDRgmLEP
うおお! 何度も自己レスすまん!
システム環境設定の言語環境で英語を最優先にしてしまうと Finder を
はじめすべてのアプリのメニューが英語になってしまってちょっとアレ
なんで、思案の結果 Project Buileder のパッケージから
Project Builer/Contents/Resources/Japanese.lproj/PBX.nib
を抜き取るという方法を思い付き、試してみたらうまくいった。
なんか裏ワザ的だけどまあこれで一応解決しました。
もっといい方法あったらだれか教えて。
823名称未設定:02/09/16 10:51 ID:aMezpA7/
>>822
PBX.nibのMainMenuの「編集」を「Edit」に変えるとか。
試してみたら、一応うまく行きました。
ところで、 ODCompletionDictionary知りませんでした。
ありがとう!
824名称未設定:02/09/16 10:54 ID:GHmjdczW
>>822
ProjectBuilder.appの「情報をみる」で、
「言語」の日本語チェックをはずせば良いんじゃないかな?
825816:02/09/16 11:06 ID:CgkRpefq
>>824
おお、そんな方法があったのか。気付かなかった。うまくいったよ。
アプリごとに個別に設定できるとは知らなんだ。これって Jaguar
になってからだよね?

>>823
辞書を鍛えればかなり能率が上がるよ。例えば dragging に対して
インフォーマルプロトコルの NSDragging の実装サンプルをそのまんま
登録しとくとかね。今度自分のアプリでドラッグを実装したい時は
dragging とタイプして esc でどかんと一発入力。後は必要に応じて
細部を修正ってな感じで。
826823:02/09/16 11:14 ID:aMezpA7/
>>825
ですね、いままでCopy&Pasteでやっていたところがかなり楽になりそう。
自動インデントも、ProjectBuilderのものはかなりバグっぽいので切ってたけど、
これで代替できますね。

# 特定言語リソースのON/OFFは以前からありました
827総括:02/09/16 11:19 ID:CgkRpefq
ODCompletionDictionaryはおそらく自分に関するメニュー項目の
追加先を itemWithTitle:@"Edit" とかで探してるっぽいので、
Project Bulder のメニューは英語表示になるように、Project
Builder の「情報をみる」で、「言語」の日本語チェックを
外しておきましょう。
828名称未設定:02/09/16 20:01 ID:K2Lseu/p
NSTableViewに、キーイベントを処理させたいのですけど
これって、サブクラスを作ってacceptFirstResponderを
オーバーライドして・・・っていう方法しかありませんか?
TableViewをサブクラス化すると、何かと面倒なんで
できれば避けたいのですけど・・・。
829名称未設定:02/09/16 21:16 ID:j9cHSpT0
>>828
NSResponderのサブクラスを作り、-keyDown:をオーバーライド

[tableView setNextResponder:myResponder];
これでOKのはず

Responder chainについて調べてみてくれ
830名称未設定:02/09/16 21:17 ID:GHmjdczW
>>828
昔、同じようなことをやろうとして色々調べたのですが、
結局のところサブクラス化以外の方法を見つけることができませんでした。
誰か知ってたら教えて欲しい・・・
831名称未設定:02/09/16 21:22 ID:GHmjdczW
>>829
超名案。感動しました。
832828:02/09/16 21:45 ID:K2Lseu/p
>>829

なるほど!そういうのもアリか〜。名案ですね。
さっそく使わせてもらいます。VeryTHX.
833829:02/09/16 22:08 ID:j9cHSpT0
>>831-832
名案というより、そーゆう使い方を想定して設計されているのだが、、、

Responder chain自体はデザインパターンにもある
http://www.hyuki.com/dp/cat_ChainOfResponsibility.html
834名称未設定:02/09/16 22:36 ID:GHmjdczW
>>833
そ、そうなんですか・・・ハズカスィ
大変勉強になりました。
Cocoaフレームワークってやっぱり洗練されてますね。
835コリン ◆jVColinE :02/09/21 22:01 ID:BIf16rlG
このスレが無くなったら泣いちゃう!!
836名称未設定:02/09/21 22:42 ID:PiS5NM4Y
>>835
じゃああげてくれよ。
837名称未設定:02/09/21 23:59 ID:Ld7wRzZl
すみません、質問があるんですが
April 2002 Mac OS X 10.1 Developer Tools (Betas)と
December 2001 Mac OS X 10.1 Developer Tools
どちらが良いんでしょうか?
教えてちゃんですみませんが、よろしくお願いします
838名称未設定:02/09/22 00:03 ID:fuGqbdig
やっぱり後に作られた法が良いんじゃない?
839837:02/09/22 00:10 ID:zxEP+paX
>>838
そうなんですが、Betasというのが気になって。
どちらか使ってる方いらっしゃらないでしょうか?
840名称未設定:02/09/22 00:42 ID:biBlDJzE
>>839
Jaguar付属のDevToolsを使いましょう。
841837:02/09/22 03:01 ID:zxEP+paX
>>840
Jaguar持ってないんです。
うちのはOSX1.1なので。
842名称未設定:02/09/22 03:18 ID:9WsB41IO
>>841
Jaguar付属のヤツもADCのダウンロードサイトにあると思うが。
Cheetahで起動できるかどうかは保証出来んが。
843名称未設定:02/09/22 03:46 ID:09Cu0eIZ
>>841
初心者が使う分にはどっちでもいいような気がするぞ。正直。
844837:02/09/22 05:53 ID:zxEP+paX
>>842 >>843
レスありがとうございます。
Betasの方を落としてみました。
で、「Cocoaはやっぱり」に沿ってメモ帳を作ろうとしたみたところ
本とかなり違う・・・。
IBでのドキュメントウィンドウにはタブが少なく
インフォパネルもないし、パレットウィンドウにもクラス(?)が少ない。
う〜ん、どうしよう。
845837:02/09/22 05:57 ID:zxEP+paX
>>844
すみません、自己レスです。
↑の原因が分かりました。
恥ずかしい事にCarbonにしてました。
お騒がせしました
846名称未設定:02/09/22 07:59 ID:Pwyq8Oku
>>842
Cheetahって…せめてPumaでしょ?
847名称未設定:02/09/22 18:33 ID:avgxvBUg
次の開発コードは何でしょう。もう決まってるのか。
模様で選ぶならzebraがいいな。
ところで昔フラワーパワーとかブルーダルメシアンという
悲惨なiMacがあったけど、JaguarのiMacならかなり売れた
のではと思うが。
848847:02/09/22 18:35 ID:avgxvBUg

すんまそん。すれ違いです。無視してね。
849kokoa:02/09/23 15:15 ID:+YNPRUwQ
ツルちゃんことに「Cocoa Visual Reference」ってクラスの説明図が
ウプされたんだけど、最後の「ペーストボード」のリンク先がツールバーと
同じになってて見れないYO
www.big.or.jp/~crane/cocoa/_cvr/
850名称未設定:02/09/23 17:21 ID:+gRbuBbG
>>849
そういうことは直接当人にメールを出せばいいんでない?
851名称未設定:02/09/24 02:27 ID:k2njO6jL
「更新しますた」のツルちゃんが来てるかなっていうテストだと思われ
852名称未設定:02/09/25 15:04 ID:nsTs3MK7
>>849
さっき見たら直ってました。ここ読んで直したのかは不明だけど。

# それにしても 1800 とは。1400 と 1600 と 1700 は
# 試したんだけどなぁ。(わらい)

個人的には、NSDocument とか NSWindowController
あたりの解説が読みたいっす。

# MyDocument が巨大化したので、window controller に
# 仕事を振り分けたいけど、うまい分割の仕方が分からないので。
853名称未設定:02/09/25 17:21 ID:GYLdJcAV
それある。
8541:02/09/25 17:22 ID:2U8/R1vk
10ヶ月ぶりくらいにProjectBuilderを起動。
さて、また一から勉強のやり直しだ〜!
今度こそ挫折せずに目的のソフトを作ってみせるぞ。
855名称未設定:02/09/25 17:46 ID:GYLdJcAV
ちなみにどんなの?
8561:02/09/25 18:42 ID:2U8/R1vk
まず第一段階として、座標値から面積を算出するソフトを作りたいのです。

去年チャレンジした時は、Cocoaはやっぱり!に掲載されてる計算機ソフトを
ちょこっと改造して一応はできたんですけど、三角形の面積を計算するためには
三角形用のソフト、四角形の面積を計算するには四角形用のソフトと別々になってしまって。
うまく言えないんですが、セルとセルの関係が一対一になる技しか知らなくて。
ええと、全然説明になってませんね…

臨機応変に三角形でも四角形でも五角形でもそれ以上でも計算できるようになるソフトが
とりあえずは第一段階の目標です。それでも、数カ月は掛かりそうですけど…
8571:02/09/25 19:16 ID:2U8/R1vk
う〜ん、どうも説明が違うなぁ。分からないのセルが勝手に増える方法かな?
いや、何が分からないかもう全然わからないや。

ちなみに、こんなのです。XとYに座標値を入れると勝手に計算してくれるように。
これは四角形ですが、三角形とか五角形とかにも対応させたいのです。
http://isweb43.infoseek.co.jp/computer/nohodame/cgi-bin/img-box/img20020925190810.jpg
プログラムできる人なら一時間も掛からないんだろうなぁ。

Excel使えよって言われそうだけど、Cocoaでやっぱり…
858名称未設定:02/09/25 23:09 ID:pIu3P6y5
8591:02/09/25 23:32 ID:2U8/R1vk
>>858
おお、まさにそれです!
しかも、なんかプログラムの行も短いし案外簡単そう!!
でも、Javascriptのソースさえ読み方が分からない!!!

いつか理解できる日が来るだろうから、ソースを保存っと...
860名称未設定:02/09/26 00:01 ID:0l96W04G
NSLogをつかって変数を表示させたいのですが、
?for(i=0;i<10;i++){
number=[[NSNumber alloc]initWithInt:(i*3)];
[array addObject:number];
[number release];
}

NSLog(@"array=%@",array);
を実行すると、0,3,6....,27が表示されるのを期待していたのですが、
0 : <CFNumber 0x4ca60 [0xa01303fc]>{value = +0, type = kCFNumberSInt32Type}
.
.
.
9 : <CFNumber 0x595f0 [0xa01303fc]>{value = +27, type = kCFNumberSInt32Type}
となってしまします。なにがいけないのでしょうか?
861名称未設定:02/09/26 01:17 ID:FZFE0+ka
for ( i = 0; i < [array count]; i++ ) {
printf( "%3d:%6d\n", [[array objectAtIndex] intValue];
}

ではダメ? そういうことではない?
862861:02/09/26 01:20 ID:FZFE0+ka
スマソ。
printf( "%3d:%6d\n", i, [[array objectAtIndex:i] intValue] );

です。逝ってきます。
863マーシー:02/09/26 09:39 ID:GfZ4nyr/
>>860
NSLog(@"array=%@",array);
これは実質、
NSLog(@"array=%s",[[array description] cString]);
とやっているのと同じことだよ
864名称無設定:02/09/26 11:21 ID:fddi5OKZ
>>1
Objective-Cを存分に且つ大げさに使うのなら例えば、

@interface Area : NSObject
{
NSArray*params;
}

-(float)calcArea; // NOT implement

// こうするとどんな図形でも使える。
-(id)initWithParamsArray:(NSArray*)params;
// これもありかな?
-(id)initWithParams:(float)arg1,...;
@end

@interface Triangle : Area
//特に何も無くてもいい
@end
865名称無設定:02/09/26 11:21 ID:fddi5OKZ
つづき

インターフェイスとしては、ポップアップメニューの選択で動的に
NSTextFieldの数とそのラベルを変更したり。
NSMatrixを使うのがいいですかね。

まず、NSMatrix(NSTextField)の変更で引数配列を作成。
計算時に、

NSArray params; // すでに作成済み

Class areaClass;
float result;
id area;

switch(foo){
case 3:
areaClass = [Triangle class];
break;
case 4:
areaClass = [Square class]; // もちろんAreaのサブクラス
break;
....
}

area = [[[areaClass alloc] initWithPramsArray:params] autorelese];
if( [area isKindOfClass:[Area class]] ) {
result = [area calcArea];
}

とか。
8661:02/09/26 21:39 ID:w43+JMuZ
>名称無設定さん
なんかヒントというか、解答というか、教えて下さってありがとうございます!
しかしながらっ!残念ながら私にはまだまだこれを読めるだけの頭がありません。

今はまだ「はじめてのMacOSX Cocoaプログラミング」という本の真似をしている段階です。
まだこのスレで質問のようなものができるレベルにも到達していないみたいです…
>>1のくせに。。。
867まださっぱり:02/09/27 01:16 ID:Yml/6y56
>>866
おいらもえらそーなこと言うほどべんきょーしてないけど。
やっぱ読んでてわかりやすい解説書ってあるよなぁ。
868名称未設定:02/09/27 18:13 ID:KXadaBpf
>1
僕はアーロン・ヒレガスのMac OS X Cocoaプログラミングで勉強中です。
お互いがんばりましょう。ちなみに1さんが持っている
「はじめてのMacOSX Cocoaプログラミング」(本の題名が似ていてややこしい)
も持ってます。質問の書き込みをするときに本のどのあたりを読んでるか教えて
もらえますか?僕も同じところを読んで勉強させてもらおうと思ってます。
869名称未設定:02/09/27 20:55 ID:KXadaBpf
あるメソッドが「公開」されているときと「非公開」な場合の違いとは、
どういう事なのでしょうか?
870名称未設定:02/09/27 23:29 ID:8K9QwkgX
>>869
堂々と使っていいか、内緒で使うかの違いです。
非公開のメソッドがフレームワークのバージョンアップでなくなっても僕は驚きません。
871名称未設定:02/09/28 00:27 ID:zanMBQGT
>>870
>>869はCocoa + Javaなんじゃない?
非公開のメソッドがフレームワークのバージョンアップでなくなっても誰にも分かりません(w
そういう違いです。
872870:02/09/28 01:00 ID:040k5z3D
>>871
なぜJavaと推測されたのですか?
それからnmって知ってます?
873名称未設定:02/09/28 01:26 ID:hAH24uQ7
ココアはやっぱり森永。
874名称未設定:02/09/28 12:46 ID:dpgPTypf
ProjectBuilder のプラグインを作るための情報を御存知の方、
いらっしゃいますか?

Eclipse (http://www.eclipse.org/) みたいにプラグインで
開発環境そのものをいじりたいのですが、どの辺のドキュメントを
漁ればいいのかもわからないへなちょこなのです。
875871:02/09/28 13:42 ID:zanMBQGT
>>872
ここはCocoaスレで、しかもアクセス制御の質問をしてくるぐらいの
レベルならたぶん、Objective - C++をやろうとはしてないだろう、
と推測した。

>それからnmって知ってます?
おれの揚げ足とっても仕方ないでしょ。
質問者はそんなこと訊いてないんだから。

もっとも、オレもちゃんと答えてないけど(w
876名称未設定:02/09/28 13:59 ID:2hOUk6AS
>>874
おれも知りたい。
pbplugin と pbxplugin の違いはなんだろ。
877名称未設定:02/10/01 00:54 ID:WT+ZkkJH
NSTextViewに書いた内容をある変数にいれたいのですが、
どうしたらいいのでしょうか?
878名称未設定:02/10/01 01:15 ID:7L+wzqk+
>>877
- [NSTextView textStorage]
- [NSText string]

でアクセスできるよ。
879名称未設定:02/10/01 01:46 ID:WT+ZkkJH
>>878
おおー、ありがとうございます。
880名称未設定:02/10/02 02:19 ID:g/tEqt8v
Disclosure Triangle を使いたいです。

ttp://www.mars.dti.ne.jp/~edaisy/tct/diary.html
の、2002.4.10 を見て気になったんですけど、
マジでないんですか?

はじめて Cocoa に挑戦しようと思ってるのに
いきなりつまづいちゃったよ…。
881名称未設定:02/10/02 02:22 ID:g/tEqt8v
下げてしまっていたのであげます。すみません…。
882名称未設定:02/10/02 22:37 ID:164XwRZk
ボタンを押すとNSTextField内の文字列を取得して、別のフィールドに文字数を表示するために

?- (IBAction)mojisuuwoKazoeru:(id)sender /*NSButton mojisuuwoKazoeruを押すと文字列の文字数を数える*/
{
int length;
NSString *word;
word = [mojiwoNyuuryokusuru stringValue]; / *文字列を入力するNSTextField mojiwoNyuuryokusuru*/
length = [word length];

[mojisuuwoHyoujisuru setIntValue:length]; /*文字数を表示するNSTextField mojisuuwoHyoujisuru*/
}
としました。例えば文字列「東京特許許可局」と入力すると「7」と表示されるのですが、
これを「東京特許許可局は7文字です」と表示させたいのですが、うまくいきません。
+stringWithFormatを使うとうまくいくらしいのですが、使い方が分かりません。
どなたかお知恵を貸してください。
883名称未設定:02/10/03 00:24 ID:4NtdwfwL
?>882自己レスです。
NSString *hoyuji;

hyouji = [NSString stringWithFormat:@"%@ has %d letters.",word,length];
を追加して解決しました。が、@" "の中に日本語を入れると、文字化けしてしまいました。
884名称未設定:02/10/03 09:19 ID:IBuKGDlb
885884:02/10/03 09:20 ID:IBuKGDlb
間違えた。
>>883に対してのレスでした。
886parao:02/10/03 09:56 ID:wdQfNrXD
OS10.2になってたとえばscheduledTimerWithTimeintervalで音をならすメソッドを
一定の感覚で鳴らす際に、再生が終わらない内には次のループでも再生、しなくなったのか、
それとも0.4秒以下のループには対応していないのか(まぁ、これはないと思うのですが、)
ご存じの方いらっしゃいます?
887マーシー:02/10/03 11:07 ID:HtafKTKI
>@" "の中に日本語を入れると

@"text"は7bitASCII専用だから日本語は無理です。
やるとすればLocalizable.stringsファイルを使うべきです。
やり方はアーロンヒレガス本の11章ローカライズを参考に。
888マーシー:02/10/03 11:10 ID:HtafKTKI
241の
[ myOutlet setStringValue:[ NSString stringWithCString:"あいうえお" ] ];
も個人的にはどうかな、と思います。というのもファイルの文字コードの設定
を間違えるとうまく行かない可能性がありますし(Unicodeでないと化ける
んじゃなかったっけ?)将来的にも通用するかは怪しいもんです。
889名称未設定:02/10/03 19:22 ID:kHOTM3kK
>>882
慣れないうちはローマ字でもいいと思いますけど
将来的には英語で書いた方がよろしいかと。
890名称未設定:02/10/04 01:07 ID:Bqd7pKS8
Project Builderから何を実行しても、実行ウィンドウに
## Component Manager: attempting to find symbols in a component alias of type (regR/carP/x!bt)
というメッセージが出ます。実行は正常に出来ます。
DevToolをインストールしなおしても同じでした。
原因が分かる方いますでしょうか?
OSX10.2.1、DevToolはOSX10.2についてたものです。
891名称未設定:02/10/04 02:13 ID:1QexOYLu
>## Component Manager: attempting to find symbols in a component alias of type (regR/carP/x!bt)

これ、Terminalからopenコマンド使ってもたまに出てくる。
0S10.2.1。
なんだろう・・・
892名称未設定:02/10/07 11:21 ID:/IbKc47k
みんなどんなマシン使っているの?
ibook 600(Late2001) だと、コンパイルが遅くて泣きそうだよ。
893名称未設定:02/10/08 05:31 ID:IYngMitF
>>892
同じく iBook(Late 2001) だが、泣かないぞ。

そうえいば、コンパイルに G3/G4 の差ってあるのか?
Volocity Engine なんて関係しなさそうだから、単純にクロック速いやつが
コンパイルも速いという理解で正しい?
894名称未設定:02/10/08 06:46 ID:5DDn5fB+
正しい。
ついでにメモリたくさん積んであった方が、ファイル読みに行く処理が減ってさらに早い。
895名称未設定:02/10/08 23:18 ID:V8694tw5
unicode-UTF8の文字をunicode-UTF16に変換する方法ってありますか?
なぜかどのサイトを探してもみつかりませんでした。
896名称未設定:02/10/08 23:46 ID:g8IONEGn
>>895
NSStringかCFStringでサポートされてなかったっけ?
897名称未設定:02/10/09 13:05 ID:Ge8Wcocj
>>890、891
/Library/QuickTime/Toast Video CD Support.qtxが入ってない?はずせば出なくなるとか。
898名称未設定:02/10/12 15:02 ID:GSvT1c9B
このスレもそろそろ900なわけだが、みんなCocoa上達しました?
漏れはまだまだです。というわけで、
もしよかったら、勉強のために題材選んで、みんなでなんか
作ってみたりしませんか?
899名称未設定:02/10/12 16:10 ID:rqaRKTQR
題材ねぇ。
2chブラウザは既にたくさんあるし、YahooBBSブラウザなんてどうよ?
900名称未設定:02/10/12 16:50 ID:KLGSCDT/
>>899
レスタイトル取得が滅茶苦茶しんどそう。
一回に付40個づつしか取ってこれないから
6000レスが付いてたら150回htmlデータを取ってこないといけない。
しかもそれぞれでhtml中の必要な部分の切り出しがあるわけで。
最初の一回だけとはいえ、実用的じゃないと思う。

まあ、投稿データを生で取ってくる手段があれば別だけど。
多分無いよね。

>>898
ML専用メーラーとかはどうよ。
ツリー表示対応。ヘッダ解釈による投稿者自身への返信抑止とか。
MLからのメールはヘッダにいろいろ情報が入ってるから遊べそうだけど。
901名称未設定:02/10/12 19:32 ID:GSvT1c9B
>>900
ML専用メーラーというのがあんまりイメージがわかないんだけど、
それって、特定のMLのメールしか受信しないようにするの?
で、MLごとのローカルルールに合わせてに色々カスタマイズできる・・・
っていうようなアイデア?
902名称未設定:02/10/12 20:57 ID:AXZSrvIu
メーラーでいいんじゃないかな。
Cocoaベースでフリーの開発継続中の奴って純正Mailくらいでしょ。
OMEってのもそうかな、あれはよくわかんないんだけど。

メニューバーとかDockとか使って、2chのメール欄となんか連動できたり
すればおもしろいんじゃないかな。難しい機能はとりあえず抜きでも。

・・・まあ、俺はなんの役にも立たないけどな。
903名称未設定:02/10/12 22:23 ID:GSvT1c9B
メーラーか。どうやってつくればいいのかな・・・
Cocoaに、メール用のAPIなんて都合のいいものはないよねえ。
JavaだとJavaMailっていうのがたしかあったけどな。
904名称未設定:02/10/12 22:59 ID:4omQ1N9J
とりあえず、POP クライアントを作るのが良いのでは?
Unix のライブラリをぱくってきて、POP でメールを取得
するとか。
もしくは、procmail 等の外部コマンドを実行して、GUI
でメールを表示するところから、始めるのが良いのでは?
905名称未設定:02/10/12 23:19 ID:GSvT1c9B
>>904
なるほどです。確かに、まずはPOPクライアントの機能がないことには、
話にならないですね。
その他の機能は、後からつけていけばいいし。
とりあえず、言い出しっぺなので、ドラフトっていうか、
基本になりそうなPOPクライアントを近日中に漏れが作ってうpしてみます。
そのあと、協力してくれる人がいたら、協力してください。
906名称未設定:02/10/13 01:14 ID:UL2hbAob
Cocoaのメーラって、NameraもGyazMailもそうだけど、
1メール1ファイルで、使ってるとどんどん遅くなるでしょ。
これをなんとかできるメーラができたらすごいかもよ。
907名称未設定:02/10/15 01:39 ID:RhF5BtPp
1200ページのCocoa Programmingはどうよ
908名称未設定:02/10/15 03:20 ID:YOkP1iXT
ツルちゃんページでは

Cocoa Programming
 Donald Yacktman, Erik Buck, Scott Anguish 著
  $59.99 : 2001.12発売 : 1300page

となってるぞ。また増えたのかな?
っていうかこの本もう売られているの?
このままページ数の予定だけがどんどん
増えていき、しまいには出版中止とか
いったらおもろい。
909名称未設定:02/10/15 03:24 ID:9GwpCUgF
>>908
もう発売されてるよ、その本。
ツルちゃん本人もすでに手に入れて読んでるところらしい。
(SiteAroの方はみんな読んでないのかな?)
910 :02/10/15 05:54 ID:mFuYPugO
みなさんとこはこれ動きます?
PBXtra
http://www.versiontracker.com/moreinfo.fcgi?id=16470&db=VT
うちでは、Option+Mで前のワードが選択されるんだけど…
911名称未設定:02/10/15 09:45 ID:13GZf9hj
Project Builderプラグインの作り方のドキュメントはどこにあるのかな?
912名称未設定:02/10/15 15:04 ID:NfNxKbrm
http://www02.so-net.ne.jp/~hat/mailer/rfc.ja.html

ちょうどいいの見付けたよ
913名称未設定:02/10/15 21:22 ID://rYivxG
>>910

Option-Mはデフォルトで前の単語を選択するようになってるから。
PBKeyBinding.dictはちゃんとコピーした?
もしちゃんとコピーしてあるなら、PBKeyBinding.dictを編集して
別のキーに割りあてると良いかも。

ちなみに、うちでは>>238のCompletion DictionaryのPBKeyBinding.dictを
編集してF1にPBXtraを割りあてるようにしてる。
こうすればそれぞれのプラグインが共存できるし。
914名称未設定:02/10/19 01:07 ID:ihD4bo43
>>913はIDがコメント
915_:02/10/19 04:50 ID:4/Sln49E
メーラーって、これをベースにするの?
http://www.big.or.jp/~crane/cocoa/messageSend.html
916_:02/10/19 04:52 ID:4/Sln49E
>>915
あ。でもこれ送信だけか。(´・ω・`)ショボーン
917名称未設定:02/10/19 09:27 ID:XwACkTeh
>916
Message.frameworkには、実はPOP/IMAP送受信やmbox操作のクラスも
ちゃんとあるんだよね。公開されてないけど。
918898:02/10/19 09:35 ID:HDlmxbMy
>>917
ま、まじですか?
一生懸命作ってたのに・・・
っていっても、POPはfetchmail+procmailでやってしまっていますが。
ついでに、厨なもので、それでもかなり苦労してますが。
919名称未設定:02/10/21 13:39 ID:RhiAX7go
>>918
後々変更可能なようにバンドルにしちゃうのがいいかもね。
例えば、
MailerEngine.plist
POPClassBundleName="hoge.bundle";
POPClassName="POPclass";
とかを作っといて、POPclassは

@protocol POPEngine
//これは適当。もうちょっとまともに設計してね。
-(void)initWithHostName:(NSString*)host;

-(void)setUserName:(NSString*)userName;
-(void)setPasswd:(NSString*)pass;
-(void)setHostName:(NSString*)host;
-(void)setHostIPAddr:(NSString*)ip;
-(void)setPort:(int)port; //default port is 110.

-(unsigned)mailNum;
-(size_t)sizeOfMailAt:(unsigned)position;
-(NSArray*)sizeOfMails;
-(NSString*)uidAt:(unsigned)position;
-(NSArray*)uids;
-(NSData*)mailAt:(unsigned)position;
-(NSData*)mailAt:(unsigned)position range:(NSRange)range;
-(NSArray*)mails;
-(NSArray*)mailsInRange:(NSRange)range;
@end
とかに適合させておく。

後は起動時もしくは使用時にPOPclassをMailerEngine.plistを元にロードしてやればいい。
920898:02/10/22 00:11 ID:5Khlx241
>>919
なるほどです。POPの実装を設定ファイルで、入れ替え可能にすると
いうことですね。いいですね。カッコイイと思います。

ところで、POPクライアントの方、はりきってやりはじめたはいいのですが、
ヘタレなもので、なかなか思うように進んでいません。ごめんなさい。
このままだと、先に行けないので、
とりあえず以下の3点について話し合いたいと思っているのですが。

1.メーラーの仕様(何を、どこまで作るか)
2.画面設計
3.クラス設計

ただ、Cocoaの話とはだいぶずれてきてしまうので、
別スレ立てた方がいいですかね?
921Java Beginer:02/10/22 01:09 ID:O4XpQGdb
PBでClasspathの設定はどこに書けばいいんでしょう?プログラミングバイブル見ても判らなかった.
922_:02/10/22 02:27 ID:Tf8FmJNL
>>920

せっかく
OSXのみでの環境なので、それをいかしていくといいのでは?
例えば検索やフィルターなんかはPerlの式を直接かけるようにするとか。
MySQLとかにデータを流せるとか。menuextraから操作できたりとか。
923_:02/10/22 04:11 ID:Tf8FmJNL
PBのタブみたいなのを作りたいんですが、
やっぱりカスタムビューで自分でつくっていくしかないんでしょうか。
PBのインターフェイスをIBのみで作れないとは。。。。
だれかいいHP知りませんか?
924名称未設定:02/10/22 10:13 ID:SbK3SIJv
>923
PBXSplitView
925898:02/10/22 22:05 ID:IVp4bnD0
>>922
なるほどです。
MySQLでちょっと思ったんだけど、メールボックス毎にメールの保存先を
代えることができたら便利かな。
例えば、大量に流れるメーリングリストのメールは、MySQLみたいな
データベースに保存して、外出先でもみたいメールはiDiskに保存して・・・
って感じで、用途に応じて色々な保存先を指定できるようにするとか。
926_:02/10/22 23:32 ID:Tf8FmJNL
>924
ぐぐってみましたが、でてきませんでした。。
ポインタくださひ。(゚д゚)
927_:02/10/22 23:34 ID:Tf8FmJNL
>925
それはいいかも。
928名称未設定:02/10/23 13:33 ID:e0TTlieY
mouseDownやmouseDraggedと同じようにmouseMovedを定義したのですが
マウスを動かしても、mouseMovedが呼ばれません。
どなたか教えて下さい。
929名称未設定:02/10/23 13:45 ID:ER9Z+dlw
>>225
良さげですね。
個人的には正規表現を使って検索できると助かります。
(願わくば日本語でも問題ゼロで…)

Cocoaスレだとプログラミングに関心の無い人の
意見を聞きにくくなるでしょうし、
せっかくプロジェクトが立ち上がったわけですから
別スレを立てるのも良いのではないでしょうか。
(荒らしは増えるかもしれないのでお任せします)
930名称未設定:02/10/23 20:47 ID:83Sk5ke9
>>928
Viewの初期化時、initWithFrame:で
[[self window] setAcceptsMouseMovedEvents:YES];
ってやってくらはい。
動的にWinodowに貼付けてるなら
viewDidMoveToWindow
で同上のことをしてくらはい。
931928:02/10/23 23:56 ID:ANzrlDzK
>>930
返信ありがとうございます。
さっそく試してみたのですが上手くいきませんでした。

#import "MyView.h"

@implementation MyView

- (id)initWithFrame:(NSRect)frameRect
{
[ super initWithFrame : frameRect ];
[ [ self window ] setAcceptsMouseMovedEvents:YES ];
return self;
}

- (void)mouseMoved:(NSEvent *)theEvent
{
NSLog( @"ok" );
}

@end
932898:02/10/24 00:34 ID:Qd71qucq
>>927
>>929
ありがとうございます。で、結局別スレ立てて来たので、
メーラーの話は以後こちらでお願いします。

Cocoaでメーラー作るよ
http://pc.2ch.net/test/read.cgi/mac/1035386838/l50
933930:02/10/24 08:14 ID:ZTbFbDYh
>>931
すんません。すっとぼけてました。
良く考えると動的であろうと無かろうと、初期化時にはwindowはセットされてませんね。
と言う事で、
-(void)viewDidMoveToWindow ;
で呼んでください。
934名称未設定:02/10/24 08:18 ID:hIA4YFk7
>>933

IBで配置してあるViewに対してなら
-(void)awakeFromNib
で呼んでもいいんじゃない?
935928:02/10/24 12:07 ID:jqFE3bsX
>>933
>>934
ご教授ありがとうございます。
さっそく以下のように試してみたのですが動作しませんでした。

#import "MyView.h"

@implementation MyView

- (id)initWithFrame:(NSRect)frameRect
{
[ super initWithFrame : frameRect ];
return self;
}

- (void)viewDidMoveToWindow
{
[ [ self window ] setAcceptsMouseMovedEvents:YES ];
}

- (void)mouseMoved:(NSEvent *)theEvent
{
NSLog( @"ok" );
}

@end

mouseMovedってマウスが動かされたら呼ばれるんじゃないのでしょうか?
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に同じ機能がついてるじゃねーかーー。

乱文乱筆御免。