07/07/09 06:57:44 MKmnIjZg0
NSResponderを継承しているviewたちをウィンドウに配置してキーを押せば
performKeyEquivalentに入って来ます。上書きしてNSLogで確かめてみました。
しかしNSButtonにaddSubviewしたviewだと反応しないです。
acceptFirstResponderをYESで上書きしたりmakeFirstResponderを試しましたがダメでした。
けどなぜかNSSliderにaddSubviewした場合は反応しました。
まだ謎が解けません、、、お力添えをお願いします。
151:名称未設定
07/07/09 12:24:49 MtZ2kM7T0
NSButton が performKeyEquivalent を拾っているから、subview にはいかないということではなくて?
152:149
07/07/09 15:51:27 6JIdbr8F0
キーを押すと警告音がなるのでNSButtonはperformKeyEquivalentを拾っていないようです。
ためしにボタンのサブクラスでperformKeyEquivalentをreturn NOで上書きしてみましたが、
ボタン上のviewに処理が回ってこないという状態です。
153:名称未設定
07/07/09 17:37:28 uzTm6K720
>>152
試してみたけどsubviewのperformKeyEquivalentは呼ばれないみたいね。
対症療法だけどNSButtonのサブクラスを作ってperformKeyEquivalentを書くのはどう?
@implementation MyButton
- (BOOL)performKeyEquivalent:(NSEvent *)anEvent {
NSEnumerator* enumerator = [[self subviews] objectEnumerator];
id subview;
BOOL result = NO;
while ( ( subview = [enumerator nextObject] ) && !result )
result = [subview performKeyEquivalent:anEvent];
if ( !result )
result = [super performKeyEquivalent:anEvent];
return result;
}
@end
154:名称未設定
07/07/09 17:41:11 2FPmw6nT0
そもそも、ボタンの中にボタンを配置するって
おかしいと思わんのか
155:名称未設定
07/07/09 17:57:18 MZpOL97p0
>>154
みんな分かってるけど、それに突っ込むとどうなるかも知ってるからじゃね?
156:名称未設定
07/07/09 18:03:05 uzTm6K720
>>154
いや、それはそれで面白いインターフェースかもと思って試してた
157:146
07/07/09 18:25:05 LonmC7zt0
>>147 >>148
どうもありがとうございます。ちゃんとドキュメントを探すべきでした。
自分の場合値を変更するので >>148 のやり方になるんでしょうね。
158:149
07/07/09 21:47:15 HHAS6qp/0
NSButtonの上にボタンを、と例を挙げましたが実際にはボタンやビューということでした。
URLリンク(www.pinkapple.tv)
左は通常時で右がdrawRectを上書きしたビューをボタン上に配置したものです。
この状態でボタンもビューも独自にperformKeyEquivalentを動作させたかったのです。
(ビューにテキストを表示したり、ビューが他の色、他の機能のものに置き換わったりするので
ボタンの見かけを変えるだけではダメなのです)
ウィンドウ上でなくてボタン上に配置したかったのは、ボタンとビューとでいろいろとデータのやり取りをするのでsuperViewとsubViewの関係にした方が処理が楽だったからです。
ということで>>153さんの方法を試してみます。ありがとうございます。
159:149
07/07/10 05:34:16 TgqP272E0
>>153さんの方法でできました。
いろいろ調べるとperformKeyEquivalentメソッドはNSResponder、NSView、NSButtonで記述、上書きされていて、NSViewのperformKeyEquivalentは自分のsubviewに処理を送る機能があるようです。
なおかつsubviewへのperformKeyEquivalentが誰も反応しなければNOが返ってきてview自身の処理を行います。
>>153さんのはまさにそれらの機能をコードで記述したものになってます。ありがとうございました。
160:名称未設定
07/07/11 02:27:35 q/pS70mE0
いつもお世話になってます。
困っているので助けてください。
NSDrawerを作成し、ウィンドウにくっつけてtggleで動かしています。
ドロワーを開いたまま、ドロワーが画面外になるまでウィンドウを右に動かした後で
ウィンドウを左に持ってくるとドロワーが消えてしまいます。
myDrawer = [[NSDrawer alloc] initWithContentSize:NSMakeSize(300,300)preferredEdge:NSMaxXEdge];
[myDrawer setParentWindow:myWindow];
[myDrawer setContentView:myView];
としているだけなのですが、どなたか原因をご存知でしたら教えてください。
161:名称未設定
07/07/11 05:48:22 4RHpXxKf0
上のコードをコピペしてやってみましたが、おっしゃる現象は起きませんでした。
何かmyViewかmyDrawerに追加してる機能が邪魔してるのではないでしょうかね。
162:160
07/07/12 01:10:46 Mzn5q1ga0
>>161
ひとつだけ気になることがありました。ドロワーを開いた際にその下のウィンドウを
触らせたくないので、
-(void) drawerDidOpen:(NSNotification *)notification
{
[NSApp runModalForWindow:myWndow];
}
-(void) drawerDidClose:(NSNotification *)notification
{
[NSApp stopModal];
}
としています。これがいけないのでしょうか?
163:名称未設定
07/07/12 04:01:55 DjNHr2pC0
>>162
問題の切り分けくらい自分でやりなよ。
そこまで面倒みきれない。
164:名称未設定
07/07/12 04:02:28 byx4vDAn0
>>162
ちょっとやってみましたがnotificationがうまくとれなかったので;確認できませんでした。
申し訳ない。
165:名称未設定
07/07/12 09:45:28 0PLO2dIL0
>>162
これがいけないのでしょうかってそこをコメントアウトすれば、いけないかどうかくらいすぐわかるだろうが
他人にいちいち確認のコードを書かせる気か?
166:164
07/07/12 22:05:35 pjCoXtAi0
興味本位でやってみたんだけど、間違った行動だったと反省してます。
まぁ答え出てないから意味ないけど。
167:名称未設定
07/07/12 23:06:17 N2Qo+TtK0
Cocoa Bindingで質問です。
テキストフィールドの更新がBindingで行われるように組んだときに、
モデルの属性がごく短時間に何度も更新された場合、アプリがしばらく
固まってしまうのですけれども、これを解決するのに皆さんならどの
ような手法をとりますか?
>URLリンク(blog.so-net.ne.jp)
168:名称未設定
07/07/15 03:38:01 bqGSj8YO0
>>141
IB上でNSTableViewをダブルクリックして、
InspectorウィンドウのCustom Classde
MyTableViewに設定する。
シングルクリックだとNSScrollViewがフォーカスされるので注意。
169:名称未設定
07/07/15 03:38:59 bqGSj8YO0
すげー亀レスorz
170:名称未設定
07/07/15 15:09:30 iC/f5XUF0
NSPredicateで文字列「book」でフェッチしたあとに
「bookmark」など前回の文字列に付加した形の文字列で
フェッチするとひっかかりません。
毎回nilでクリアするしなかいのでしょうか?
171:名称未設定
07/07/16 07:20:46 qlrw2Rv40
やっぱり凝った事をやろうとすると手間だよな。orz
まあマクだからって簡単にプログラム作れる訳は無いのだが。
172:名称未設定
07/07/18 01:22:09 BRL0N5ZO0
すみません。基本の基本なのかもしれないのですが…
Objc01.m
Objc02.m
と、二つのクラスファイルがあったとします。
objec01.m
のinitメソッドの中で、例えば
MyObj* varInObjec01;
varInObjec01 = [ [MyObj* alloc] init ];
[varInObjec01 setVar:1];
などと、MyObj をvarInObjec01としてインスタンス化して
インスタンス変数を定義しました。
この時点で、objec01はvarInObjec01を持っていて、その中のVarには
1がセットされています。このVarは、objec01の別のメソッドで参照されたり
加工されたりします。
Objc02.mの別のメソッドの中で、objec01.m でインスタンス化した
varInObjec01にアクセスし、インスタンス変数 Var を取り出すには
どのようにすれば良いのでしょうか?
Objc02の中でobjec01をインスタンス化しても、別のインスタンスなので
同じインスタンス変数を持っていない状態になります。
どなたかお教えください。よろしくお願いします。
173:名称未設定
07/07/18 02:11:57 /hOqb68d0
>>172
どっか別のところでインスタンス化した object01 を
object02 から参照できる変数に保持しておけば済む話だろう。
object02 のインスタンス変数として保持するか
あるいはグローバル変数として保持するか
その方法は時々によって違うだろうが。
174:名称未設定
07/07/18 02:45:39 3sY2PtI30
便乗して質問しますが、
.hファイルの中で
@interface MyButton : NSButton
{
NSString *myParameter;
}
と宣言するのと、.mファイルの中で
@implementation MyButton
NSString *myParameter;
と宣言するのはどう変わってくるのでしょう?
175:名称未設定
07/07/18 03:58:40 ubS40ed30
前者はMyButtonのインスタンス変数で、後者は単なるグローバル変数
176:名称未設定
07/07/18 04:45:10 3sY2PtI30
どちらの場合も
-(NSString *)getString{
return myParameter;
}
みたいな感じで外部から取得したり、考えずに使えているので使い分けが分からないんです。
インスタンス変数とグローバル変数ググってきます。
177:名称未設定
07/07/18 10:03:54 8GU8wJyL0
>>176
ごく簡単に説明するとインスタンス変数は使っていいけどグローバル変数は使っちゃダメ
178:名称未設定
07/07/18 10:06:43 3sY2PtI30
>>177
分かりました。
そのインスタンスに持たせたいパラメータはちゃんと.hファイルに記述してインスタンス変数にします。
ありがとうございます。
179:名称未設定
07/07/18 11:17:24 Avgak43d0
「何のために」共通のインスタンスが必要なのかがわかれば、助言の一つも出せるのだが。
180:名称未設定
07/07/18 14:01:53 3sY2PtI30
>>179
例えば、.mファイルの中で
BOOL bool; //グローバル変数を宣言
- (void)method{
if(bool){} //処理1
else{} //処理2
}
- (void)changeBool:(BOOL)flag{
bool = flag;
}
という感じだとどうでしょう?
例えなのでmethod自体がBOOLをとるように書き直すというのは無しで。
普段パラメータは.hファイルの中に書いてるんですが、上の方で質問させていただいたように
使い分け、というかグローバル変数が好ましくない理由、状況がまだ今ひとつ掴めてません。。
181:名称未設定
07/07/18 14:26:05 Avgak43d0
根本的な部分が分かってないのか。
とりあえず、
BOOL bool;
は原則禁止!
static BOOL bool;
で。(もちろん例外はあるが今は考えなくていい)
で、 >180 は
あるインスタンスの動作を変更すればその属するクラスおよびサブクラスのすべてのインスタンスの動作が変更される
ことを意図しているのであれば正解。
但しその場合は意図を明確にするためインスタンスメソッドではなくクラスメソッドによって動作を変更するようにする。
- (void)changeBool:(BOOL)flag じゃなくて
+ (void)changeBool:(BOOL)flag
そうではなくて、インスタンスごとに別々の動作を持つようにするのであれば、間違い。
通常クラス定義ファイルに宣言定義された静的大域変数はクラス変数と呼ばれる。
クラス変数はすべてのインスタンスに共有されるため、その変更はすべてのインスタンスに影響を与える。
インスタンス変数はインスタンスごとに別のものとなるため、変更はインスタンスの中にとどまり他のインスタンスに影響を与えない。
182:名称未設定
07/07/18 20:19:29 3sY2PtI30
なるほど、凄く分かりました!試しにNSButtonのサブクラスの.mを以下のように記述し、ウィンドウに複数配置してみました。
static int parameter1;
- (BOOL)sendAction:(SEL)theAction to:(id)theTarget{
NSLog(@"parm1 %d", parameter1);
parameter1++;
return [super sendAction:theAction to:theTarget];
}
別々のインスタンスでもこのパラメータが共有されてることが分かりました。これがクラス変数なんですね。
今回元のメソッドの上書きで試しましたが、+のクラスメソッドで書く意味もよく分かりました。
これを知らないために今までボタンの全パラメータを変更する時に、ボタンの配列すべてに同じメソッドを送っていましたorz
183:名称未設定
07/07/18 21:03:40 3sY2PtI30
↑全ボタンのパラメータ、の間違いでした。
staticはよそから干渉されないように局所的な変数にする、staticをつけないと外部変数と理解しました。
試しに上記のコードからのstaticを外し、まったく同じコードの別のNSButtonのサブクラスを作ってみたら
ちゃんとパラメータが共有されました。凄く勉強になりました。ありがとうございました。
184:名称未設定
07/07/19 02:06:33 a3+jGlIB0
ちなみに,そのstaticを付けた変数を「クラス変数」という.
185:名称未設定
07/07/19 03:06:04 U9xJQ7gH0
Objective-C にはクラス変数なんてありません。
186:名称未設定
07/07/19 10:05:30 gCGzQvIn0
クラスオブジェクトが持つ変数はクラス変数じゃないのか?
187:名称未設定
07/07/19 10:16:57 A6zlNdun0
どんな教科書(資料)で勉強したの?
URLリンク(developer.apple.com)
しかし、クラスオブジェクトの変数を指定することはできません。つまり、インスタンス変数に対応する「クラス変数」はありません。...
... 一部のクラスは、静的な変数を宣言し、それらを管理するクラスメソッドを提供します
(クラス定義と同じファイルで static 変数を宣言すると、その有効範囲は当該クラスのみ、厳密には当該ファイルに実装されたクラスの部分に限定されます。
インスタンス変数と異なり、サブクラスは静的な変数を継承できません)。
188:名称未設定
07/07/22 10:56:58 rhiDTEck0
BOOL isNibLoaded = [NSBundle loadNibNamed: nibFileName owner: self];
という一行がうまく動かず困っています。
デバッガで追うと、この行に達すると、次の行以降のブレークポイントで
止まらなくなるので、ここで処理を抜けてしまっている感じです。
nibFileName には、正しく値が設定されているのですが、
nib が読み込まれていれば、表示されるはずのウインドウが
表示されません。
[NSBundle loadNibNamed: nibFileName owner: self]
が失敗するのは、どういうケースが考えられるでしょうか。
189:名称未設定
07/07/22 11:14:20 /m9PDaPq0
>>188
>nibFileName には、正しく値が設定されているのですが、
>nib が読み込まれていれば、表示されるはずのウインドウが
>表示されません。
本当に正しく値が設定されているという自信はあるのか?
190:188
07/07/22 11:45:38 rhiDTEck0
>>189
あります。
ちなみに nibFileName のところに、@"test" など、いい加減な string を入れると、
isNibLoaded には NO が帰ってきて、普通に次の行以降のブレークポイントへ
進みます。
上記を試してみて思ったのですが、nibFileName に指定している nib 内の
バインディングの設定に間違いがある、とか、そういうのかも知れません。
でもそれを確かめる方法や、nib(特にバインディングの設定)の良い
デバッグ方法がわかりません。
191:名称未設定
07/07/22 16:02:33 aRES5gfc0
awakeFromNib が loadNibNamed:owner: 呼び出し中に呼ばれるから、何か実装してるなら
それを一度コメントアウトしてみる。
nibファイルを一度、新規作成して何も変更してないものと置き換えてみる。
とかやってみるのはどうでしょう。
192:名称未設定
07/07/22 17:11:47 1Do/ZYGN0
その前にデバッガコンソールの存在に気づいているかが気になる。
193:名称未設定
07/07/22 17:24:50 rLqo+Xbu0
nib によって読み込まれるインスタンスの awakeFromNib 内に loadNibNamed: あると
無限ループになる
194:188
07/07/22 17:58:58 rhiDTEck0
>>191-193
ありがとうございます。
nib のバインディングの設定を一つ一つはずしていって、
バグの場所を発見できました。
nib のバインディングのデバッグにはいつも苦労するのですが、
何かもっと良いやり方はあるでしょうか。
>>191
awakeFromNib が呼ばれるのは、loadNibNamed:owner: が
「YES を返した後」ではないでしょうか。
今回のバグの場合、awakeFromNib の1行目に置いた
ブレークポイントにも到達しませんでした。
195:名称未設定
07/07/22 18:33:07 VUxjnHCb0
>>194
>バインディングのデバッグ
バインディングはあんまりやってないけど、consoleメッセージとexceptionはいているなら
gdb> break -[NSException raise]
でなんとかなってる。
196:名称未設定
07/07/22 22:26:11 gT1REgB20
CoreData の Document-based について質問です。
新しいデータが挿入されたときに初期値として、現在そのエンティティに
入っているデータの数を設定すると言う処理を考えています。
Document-basedの場合は、データのやり取りは、NSPersistentDocument
(MyDocument.mとします)の ManagedObjectContext を使う、と言う解
釈では間違えていますでしょうか?
まず、CoreDataモデルからサブクラスを作りました。(MyManagedObject.mとします)
この中の
- (void)awakeFromInsert
に、同処理を実装しようと思います。
※
MyDocument.m
MyManagedObject.m
二つの実装ファイルがある状態です。
※
awakeFromInsert の中で、MyDocument に実装した
- (void) setMyManagedObject:(NSManagedObject* )MyManagedObject
を、引数にself(MyManagedObject自身)を指定して呼び出します。
197:つづき
07/07/22 22:27:21 gT1REgB20
- (void) setMyManagedObject:(NSManagedObject* )MyManagedObject
内では、[self managedObjectContext]で取得したmanagedObjectContextで
総数を数えるときと、[MyManagedObject managedObjectContext]で取得した
もので数えるときでは結果が違います。
後者[MyManagedObject managedObjectContext]で処理したものであれば正確な
数が出ますが、前者[self managedObjectContext]で取得したものでは間違えた数字が
出ます。(0になります)
[MyManagedObject managedObjectContext]を使って処理した場合、
managedObjectContextが二つになってしまうせいなのか、nibファイル内でFile's Ownerに
指定したMyDocumentとBindingしているNSArrayController のアクション add: を使うと、
Tableviewには同じデータが二つ表示されてしまいます(表示だけ)
そもそも、サブクラスとして作ったMyManagedObjectは、MyDocument の
ManagedObjectContext を使わずに別の(独自の?) ManagedObjectContext を持つのでしょうか?
流儀として、どちらの ManagedObjectContext を使うべきなのでしょうか?
わかりやすく書こうと思って書いたのですが、伝わりますでしょうか…
198:名無しさん@そうだ選挙に行こう
07/07/29 09:08:45 ++cxbJD10
NSSliderからのアクションを
- (IBAction)myAction:(id)sender{
NSLog(@"action");
}
と受けると、スライダーのmouseDown、mouseDrag、mouseUpのタイミングでアクションが送られてくるようなのですが、
これを、この受け手側のmyAction内で分類できないでしょうか?
スライダーのサブクラスを作らなくてもこれらが分類できればいいなと思いまして。
御教授願います。
199:198
07/07/29 11:23:33 ++cxbJD10
自己解決
- (IBAction)myAction:(id)sender{
NSEvent *event = [[NSApplication sharedApplication] currentEvent];
if ([event type] == NSLeftMouseDown) {}
if ([event type] == NSLeftMouseUp) {}
}
のようにすればマウスの動作を分類できました。
しかしこの方法だとなぜか、重いQuickTimeMovieを動かしている時に
mouseUpの方を取りこぼしてしまうので、やっぱりスライダーのサブクラスを書いてみようと思います。
200:名称未設定
07/08/02 07:44:39 coNJlctT0
う~
NSMailDelivery でケータイに日本語メール送ると文字化けしちゃう。
deliverMessage:subject:to:
で送ったメールのヘッダを見ると、
Content-Type: text/plain; charset=US-ASCII; format=flowed
Content-Transfer-Encoding: base64
ケータイがデコードできないんでしょうね。
Cocoaはやっぱり!の
URLリンク(www1.big.or.jp)
を見ると、日本語メールは
Content-Type: text/plain; format=flowed; charset=iso-2022-jp
で勝手にエンコードされますよ、と書いてありますが、
Messageフレームワークの仕様が変わったのでしょうか?
deliverMessage:headers:format:protocol:
ならどうかと、ヘッダをセットして送信してみましたが、
Content-Type: は置き換わらないようです。
201:名称未設定
07/08/03 03:55:22 LeRHiyYZ0
>>200
関係ないかもしれないけど、Mail.app は言語環境を英語にして起動すると UTF-8 で送信される
202:200
07/08/03 06:14:19 9xPJ2l+O0
>>201
はい、言語環境が関係ありそうですが、日本語なんですよねえ。
しょうがないのでAppleScriptでMail.appつついて送信したら、
ISO-2022-JP で送れましたので、とりあえずこれで良しとします。
203:名称未設定
07/08/03 10:34:05 mJ4qs93D0
>>202
言語設定以外に、そのアプリが日本語にローカライズされててもダメ?
204:200
07/08/03 17:13:45 9xPJ2l+O0
>>203
はい、ローカライズしてます。
Localizable.strings(Japanese) から文字取れてますし、
Info.plist の CFBundleDevelopmentRegion を Japanese にしても一緒でした。
他に触るとこなかったかな?
205:名称未設定
07/08/03 18:39:40 RMVio4XF0
mail.appの文字コード自動判定がEudoraに比べて手厳しく
機種依存文字が含まれていると、
Content-Type: text/plain; charset=US-ASCII; format=flowed
Content-Transfer-Encoding: base64
になり、相当苦しみました。
素人なんで文字コードまでお勉強できてないのですが。。。
206:名称未設定
07/08/03 22:49:36 zBWSwrqo0
しかし NSMailDelivery ってどのぐらい Mail.app と連携してるんだろ。
なんとなく、単独で使えるようにはあまりメンテされてない感が...
しかし、今日び複数アカウントがあり、それぞれメールの送受信法が違うし、
メールの中身もいろんなものがあり、たかがメールを送るのも大変だよな。
207:名称未設定
07/08/04 00:06:43 N6Lu9KO20
NSMailDeliveryはAPIを見る限り、
貧弱すぎてMail.appでバリバリ使っているとは思えないよね。
NSMailDeliveryってヘッダ見ると1997のままだけど10年放置なの?
JavaMailレベルとは行かないまでも、もっと拡張してほしい。
208:名称未設定
07/08/04 09:56:01 zNZwO1rZ0
Cocoa Bindings で NSTextField に文字を表示させてるのですが、
表示させる文字を setValue: forKey: で更新すると、それまで表示していた文字と、
新しい文字とが重なって表示されてしまいます。
例えば今まで「十」の文字を表示していたところに、「口」の文字をセットすると
その2つが重なり合って、「田」みたいになってしまうのです。
バインディングの設定のせいなのか、コードに誤りがあるのかもわかっていません。
上書きされたはずの文字「十」は、誰が保持しているのでしょうか。
209:名称未設定
07/08/04 11:30:03 I4XWeUY/0
>>208
>新しい文字とが重なって表示
ウインドウリサイズ等して再描写しても?
Application delegateにKVを持たせ、NSButton>appDelegate action内でsetValue:forKey:してみたけど意図通りになった。
210:208
07/08/04 12:00:03 zNZwO1rZ0
>>209
ありがとうございます、再描画したらきちんと表示されました。
再描画せずにきちんと表示するには、何が足りないでしょうか。
211:208
07/08/04 12:01:03 zNZwO1rZ0
>>再描画せずに
すみません。
リサイズなどをしなくても再描画するには、何が足りないでしょうか。
212:名称未設定
07/08/04 12:51:34 I4XWeUY/0
>>211
setter(内で値の加工をしている?内で他のオブジェクトにsetしている?)やKVOを見直したほうが
いいと思うけど、再描写は
[nsview setNeedsDisplay: (BOOL)]
か(他のスレッドからなら)
[nsview display] または、[[nsview superview] display]
213:208
07/08/04 14:16:03 zNZwO1rZ0
>>212
setter は、
- (void) setName:(NSString *) aString {
[aString retain];
[name release];
name = aString;
}
となっています。
view に対して再描画させるとなると、
バインディングを使っている意味が薄れるので、
自分としても KVC/KVO で対処したいのですが‥。
214:名称未設定
07/08/04 15:32:11 I4XWeUY/0
NSValueTransformerサブクラスで(NSString*)valueを100回リピートする。"十"→"十十十…"
action内、setValue:forKey: を呼び出す所を1000回実行ってやってみたけど、重くなるだけで乱れは起きない。
負荷と思ったんだけど違ったか。(G4 single)
URLリンク(www.vipper.org)
>>213
>[name release]; // ここで[obj name]が呼び出されたら?
>name = aString;
- (void) setName:(NSString *) aString {
id tmp = name;
name = [aString retain];
[tmp release];
}
他
+ (BOOL)accessInstanceVariablesDirectly を使っている?いない?
215:名称未設定
07/08/09 20:05:40 rPPfUlyN0
NSViewの上にNSImageを並べて表示させたいのですが、さっぱりです。
216:名称未設定
07/08/09 21:10:54 tas9QJXw0
Cocoa使ってるとよくCarbonのAPIを呼び出さなければならないことがありますけど、
いっそ入門Carbonとか読んでみた方がいいですかね
217:名称未設定
07/08/09 22:55:25 msAuLRcc0
>>214
ってゆうかそれだって例えば他のスレッドが [obj setName:]をほぼ同時に呼んだら
アウトだろ。
218:名称未設定
07/08/09 23:31:14 nEMt5Ylz0
>>214
NSMatrixでNSImageCellを使うのが手っ取り早い.
219:名称未設定
07/08/10 00:10:34 NXu0UGJP0
ループ内で座標にイメージのサイズを足せばいいだけじゃん
220:名称未設定
07/08/10 21:20:23 B2bpt6bp0
>>218 >>219
ありがとうございます。
NSMatrixで行列表示ができました。
でもなぜか、セルがウィンドウの上に切れて表示されるのと
putCell:atRow:column:でNSImageCellで画像をセットしても
同じ画像ばっかり表示されるんです。
もう少し勉強してみます。
221:名称未設定
07/08/10 23:22:04 NXu0UGJP0
>>220
NSMatrixにaddRow/addColumnして、[self cellAtRow:y column:x]に対してイメージをセットしたらどうかな
222:名称未設定
07/08/10 23:23:05 NXu0UGJP0
selfはNSMatrixね
223:214
07/08/11 01:19:20 4MGmk/Il0
なんかちぐはぐなレスになった>>214はあぼーんで。スレ汚しスマソ
>>217 指摘thx.
224:名称未設定
07/08/11 01:27:56 uNrauIzq0
220です。
自己解決できました。
NSScrollView内にNSMatrix作ったら左上から右下に向かって綺麗に並びました。
重複画像は単純にNSImageのalloc/releaseの記述ミスでした。
NXu0UGJP0さん、ありがとうございます。
次は画像の影付けにチャレンジ。
これまた難易度が高そうです(^^;
NSImageにaddShadowとかあったら楽なのになあ。
225:名称未設定
07/08/13 19:32:35 HjQoWJR20
NSSegmentedControlをクリックした時、デフォルトだとマウスアップ時に選択が移行するのですが、
これをマウスダウン時のタイミングで選択を変えるにはどうしたらいいでしょう?
sendActionOn: メソッドを使ってみたのですがうまくいかず
今はマウスダウンの中を書き換えようとしてるのですが、
NSTabViewのtabViewItemAtPoint メソッドのようなものがNSSegmentedControlにはなくどうしてよいものか分かりません。
御教授よろしくお願いします。
226:名称未設定
07/08/15 00:34:56 eYK2hRJc0
サブクラスで
- (void)mouseDown:(NSEvent *)theEvent
{
[super mouseUp:theEvent];
}
- (void)mouseUp:(NSEvent *)theEvent
{
}
としてみるとか.
227:名称未設定
07/08/15 04:21:23 FI0rPcR60
NSSliderなんかと同じでNSSegmentedControlにはmouseUpが実装されてないので
例えばサブクラスで
- (void)mouseUp:(NSEvent *)theEvent{
NSLog(@"MouseUp");
[super mouseUp:theEvent];
}
としてもここに処理が回ってこないんです。
なので>>226のコードだと何も処理されないんです。。
正確にはNSSegmentedControlにmouseDownは継承されてるけど
オーバーライドされて機能しないようになってるってことだと思いますけど。
228:名称未設定
07/08/15 06:42:46 xHhBTOGd0
NSSegmentedCell (NSCell)の
sendActionOn あたりを変更してみるとか?
229:名称未設定
07/08/15 06:43:45 xHhBTOGd0
既出だったかスマン
230:名称未設定
07/08/15 10:34:54 g4ql7t+80
普通にこの辺じゃないの?
-[NSCell trackMouse:inRect:ofView:untilMouseUp:]
-[NSCell startTrackingAt:inView:]
-[NSCell continueTracking:at:inView:]
-[NSCell stopTracking:at:inView:mouseIsUp:]
かなり面倒くさいけど。
231:225,227
07/08/15 15:37:59 PbdqCUHT0
ありがとうございます、とりあえず現状
-(void)mouseDown:(NSEvent*)theEvent{
NSPoint point = [theEvent locationInWindow];
point = [self convertPoint:point fromView:nil];
int i, w = 0;
for (i=0; i < [self segmentCount] && w < point.x ; i++) {
w += [self widthForSegment:i];
}
[self setSelectedSegment:i-1];
}
でやってます。
セグメントのサイズをIB上でAutoSizeにしてるとwidthForSegmentが0を返すので不完全です。
もっとスマートな方法があれば是非。
232:名称未設定
07/08/16 17:16:23 cDPUZH1x0
oomori.comってどうなったんだ?
233:名称未設定
07/08/16 17:23:26 D7uzhTeg0
先日つながらなくなって、一時復活したようだけど
それからまたつながらなくなったみたい
どうしちゃったんだろうね
234:名称未設定
07/08/16 17:57:18 5J/T/ZnQ0
愛想を尽かしたんじゃないかな。
235:名称未設定
07/08/18 19:33:59 b9e4iKE/0
URLリンク(www.haloscan.com)
236:名称未設定
07/08/18 19:39:50 qe4k9HGL0
cocoaで飯食ってけますか?
237:名称未設定
07/08/18 20:25:28 xDpeu2aa0
Cocoaは嗜好品であって主食にはなりません。
238:名称未設定
07/08/19 00:50:40 wXs7PQ2p0
>>235
面白いけど、MyCOMの記事への指摘を何故日記のコメントにするのか分からんな。
239:名称未設定
07/08/19 01:52:34 wwtSg7AR0
mkimoさん?
240:名称未設定
07/08/19 06:35:14 b5TCkvsd0
mkinoってエムキノって読むの?
241:名称未設定
07/08/19 08:21:45 x6297PUr0
>>238
俺も思た。
しかもコメント先はツールバーアイコンに関するエントリで、
マイコミは何にも関係ないんだもんな。
メールでもなんでもすりゃいいものを、ちょっとマナー悪いように思う。
242:名称未設定
07/08/19 09:13:46 fHLqYkOZ0
ダイナミックObjective-Cへの突っ込みにHMDTの最新エントリのコメント欄使う奴はけっこうよく見るだろ。
243:名称未設定
07/08/19 09:34:24 x6297PUr0
>>242
そーいうもんなのかな? 俺が自分のサイトでやられたらあんまり良い気分じゃないけど。
あまりにも主題と関係のないこと書かれたら、後からそこ探すの大変だし。
ま、時々見かけるmkinoマンセー連中もウザいし、どうでもいいんだけど。
244:名称未設定
07/08/19 09:44:23 etpi/Mpi0
>>239
わろた。
実物見たことないが、キモいのかw
245:名称未設定
07/08/19 11:40:02 ocPOSWi+0
コメント欄で主題と異なることを書き込むのは俺もマナー違反だと思うよ。
でも、Macでプログラム系の掲示板がどこかほしいな。検索機能付きのやつ。
HMDTにあった掲示板もスパムでやられて閉鎖されちゃったし、やっぱり
運営難しいのかな。こんな感じのがあればいいのに。
>URLリンク(www.atmarkit.co.jp)
246:名称未設定
07/08/19 12:35:59 fZdGSCkT0
質問です。
10.4以降ではstringWithContentsOfURL:ではなく、
stringWithContentsOfURL:encoding:error: または
stringWithContentsOfURL:usedEncoding:error:
を使えと書いてあるのですが、うまくいきません(nullが返ってくる)。
*strConnURLは入力されたURL
NSURL *connURL = [NSURL URLWithString:strConnURL];
NSString *retString = [NSString stringWithContentsOfURL: connURL];
-> retStringにHTMLが返ってくる。
NSString *retString = [NSString stringWithContentsOfURL: connURL encoding:NSUTF8StringEncoding error:nil];
-> retStringにnullが返ってくる。
当方10.4.10 Xcode 2.4.1です。
どこが悪いのかさっぱりです。
247:名称未設定
07/08/19 13:24:40 L1niG0WF0
エンコードがUTF-8じゃないんですか?
エンコードが分からないときは
+[ NSString stringWithContentsOfURL:usedEncoding:error:]
を使ってください。
聞く前に NSError を返してもらって調べるくらいしましょうね。
248:名称未設定
07/08/19 17:56:55 fZdGSCkT0
>>247
できました。ありがとうございます。
NSShiftJISStringEncodingと入れて、
いろいろとサイトのURLを入れて試してみたのですが、
取れるサイトと取れないサイトがあるようですね。
自分のサイトのCGIと連携させるので決め打ちでも問題ないのですが。
精進します。
249:名称未設定
07/08/19 22:17:57 GJetEexT0
>>248
NSURLRequestとかも試してみたら?
250:名称未設定
07/08/20 00:06:56 sNRA//U50
>>245
PukiWikiなら設置してある。
放置気味だけど。
URLリンク(cocoawiki.aerial.st)
251:名称未設定
07/08/20 03:27:37 VX9jayCX0
NSOpenGLViewが複数あるとき,一個のViewの方でpickしたら
もう一個のViewが描画されなくなるんだけどなんでだろう。
glRenderMode(GL_SELECT);
と
gluPickMatrix
を実行しないと問題無い。
その後は
glRenderMode(GL_RENDER);
にちゃんと戻している。
252:名称未設定
07/08/20 09:02:13 XvOlYfuG0
>243
実際あの指摘は正しいんだろか?
初心者の漏れにはサパーリわからんのだけど。
253:名称未設定
07/08/20 22:17:07 t64RIRSP0
>>252
サパーリな奴が、指摘が正しいかどうかだけ知って何の役に立つ?
見たところ、デザインパターン自体からは多少逸脱して、
ObjC/Cocoaでの類似の機能やその実現の説明に入りかけているように見える。
これはこれで見えてくるものがあるはずなので今後の展開に期待。
ご本人もあえてそういう感じの意識で連載をしているようだ。
Commandに関しては最初の方でNSDocumentを例に使っているので、
今後もその流れでいくのかな。
最終的に「Cocoaパターン」とでも呼べるものが出来上がったら面白いなあと思う。
し、もしかするとそんな将来の著作も狙ってたりして。
254:名称未設定
07/08/20 22:23:05 t64RIRSP0
なんだ、ADCサイトに既に元ネタちっくなものがあるじゃないか...
あとはそれをどこまで膨らませて(いい意味で)書けるかだなあ。
255:名称未設定
07/08/20 22:27:39 t64RIRSP0
連投すまん。>>254のことはデザパタ関連の連載の最初にすでに断ってあった。
だから本人もそれを単純に踏襲したものにならないように書いてる筈だと期待。
256:名称未設定
07/08/20 22:30:46 XG0wpyE80
え?
期待してんの?
257:名称未設定
07/08/20 22:31:52 m/MJ9Do70
アクセス数の多いサイトの、本来は何の関係もないページトップのエントリに対して、
わざわざ自分のサイトへのリンクを記載してコメントするのはちょっと気が引けるな。俺は。
なんか宣伝みたいになっちゃうじゃん? 「こんな鋭いツッコミする俺ってどう?」みたいな。
ある程度気心の知れた常連さんみたいだし、そういう意図はないんだろうけど。
といいつつ、話の展開は気になる。
258:名称未設定
07/08/21 07:51:32 6qziaugl0
>253
>サパーリな奴が、指摘が正しいかどうかだけ知って何の役に立つ?
フツーに野次馬なだけです
259:名称未設定
07/08/21 20:44:58 68zc4QPq0
QTKit についての質問です。サンプルコードの'QTKitCreateMovie' の通りに
CreateMovieStorage を使ってNSImage からQTMovieを作ったのですが、
画面左上にQTMovieが予期せず表示されます。
Technical Note TN2138 をみると、同じ事例なのかどうかは分かりませんが、
FAQとして似たようなものが載っていましたので、gworld を作成し、
CreateMovieStorage の直前に入れました。
が、相変わらずQTMovieの最後のフレーム?が表示されます。
Expose などで画面の再描画が行われると消えるのですが、気持ちが悪いので、
解決策をお教えください。
Movie qtMovie = NULL;
GWorldPtr gworld = NULL;
Rect rect = {0, 0, 1, 1};
NewGWorld(&gworld, 32, &rect, NULL, NULL, 0);
SetMovieGWorld(qtMovie, gworld, NULL);
CreateMovieStorage(…
とやってます。
URLリンク(developer.apple.com)
260:名称未設定
07/08/22 11:48:33 09zetXWR0
>>259
SetMovieGWorld は CreateMovieStrage の後なんじゃね?
qtMovie が NULL の状態で SetMovieGWorld しても意味ない気がする。
Movie 作っても表示はされなくて、インスタンス化してから表示されるんじゃないか?
261:名称未設定
07/08/22 13:46:57 JadCL/7H0
>>260
ありがとうございます。仰る通りにCreateMovieStrage(…) の後に SetMovieGworld(…) を
やってみましたが、同じ結果でした。
で、関係する関数を調べてみたんですが、NewGWorld(…) が OSX10.4 で廃止されていました。
コンパイルエラーも実行時エラーも出てなかったので通っているものとばかり…
代わりの関数って何になるんでしょうか?
もちろん自分でも調べてみますが、ご存知でしたらお教えください。
262:名称未設定
07/08/22 14:11:21 fw6+crbU0
廃止?廃止予告じゃないの?
263:名称未設定
07/08/22 21:59:05 dvhT81p60
>>261
というか、関数のエラーチェックをしてないのでは?
どこで引っかかっているかはきちんと確認したか?
そのケースは普通GWorldがきちんと出来ていないか
Setではねられているかどちらかでは。
264:259
07/08/23 00:56:08 xQ3xY0pg0
>>262
廃止予告なんですか、知りませんでした。最近始めたばかりなんで良く分かってないんです。
勉強になりました、ありがとうございます。
>>263
ありがとうございます。
GWorldは出来ている…とおもいます。NewGWorld() の後で値を持っているので。
SetMovieGWorld の直後に GetMovieGWorld をやってみたのですが、返って来た GWorldPtrが
gworld と違っています。Set出来てないって事なんでしょうね。ということは、gworldがちゃんと
出来てないって事なんでしょうか??うぅ…Cocoaの勉強しかしてないので全く分からない…
GWorldPtr gworld = NULL;
GWorldPtr ggwrld = NULL;
Rect rect = {0, 0, 1, 1};
NewGWorld(&gworld, 32, &rect, NULL, NULL, 0);
SetMovieGWorld(qtMovie, gworld, NULL);
GetMovieGWorld(qtMovie, &ggwrld, NULL);
お手数をおかけしました。
作った QTmovie 自体はちゃんと書き出せているのでちょっと我慢して、もう少しQuickTime、
QuickDraw(これからはQuartz2Dの方が良いのかな?)を調べてからもう一度チャレンジしたいと
思います。アドバイスして下さった方々、ありがとうございます。
265:名称未設定
07/08/23 08:39:50 MFvh7UHN0
既に解決していたらよけいなお世話だが、
ちょっと最初のソース>>259を見ていて気になったんで、、、
SetMovieGWorldで設定しているqtMovieは実際描画を行っているQTMovie
(こっちはQTKitの方ね)を指している?
CreateMovieStrageはQTKitの関数ではなくTraditionalなQuickTime
の関数なので、どこかでこのStorageをQTKitのQTMovieに変換する
ためにmovieWithQuickTimeMovieとかを呼んで実際に描画をしている
QTMovieを作っているはずなんだけど、このパラメータとして使って
いるMovieに対してSetMovieGWorldをやらないと意味ないよ。
実際の所CreateMovieStrageに対応するQTKitの関数が無いのが問題
なんだけどね、いまQuickTimeに手を出すのはカオスに手を出すよう
なものだから必要に迫られていないのならばQTKitがもう少し充実す
るまで待った方が良いような気がする。
266:名称未設定
07/08/23 09:28:42 b2guyxFU0
QTKitは試していないけど
URLリンク(lists.apple.com)
267:名称未設定
07/08/23 09:58:55 7IM/N5ND0
>>265
それだね。QTKitCreateMovieのサンプルソース見ると
quicktimeMovieFromTempFileでストレージを作る際に
新規Movie構造体を一緒に作って、かえってきたMovieを
使ってQTMovieインスタンスを生成してる。
別のMovie構造体にセットしてもそりゃだめだな。
268:259
07/08/23 11:59:41 xQ3xY0pg0
>>265, 266, 267
おおおぉ、ありがとうございます!解決致しました。
quicktimeMovieFromTempFileから返って来たMovieについて、SetMovieGWorldをかけ
QTMovieを作ったら見事に消えました。厚くお礼を申し上げます。
>いまQuickTimeに手を出すのはカオスに手を出すようなものだから
確かに、そんな気分になりました…こういうのが carbon の世界なんでしょうか?
何はともあれ、つきあって下さった皆様本当にありがとうございます。
269:名称未設定
07/08/23 13:14:35 MFvh7UHN0
>>268
Carbonの世界はCarbonの世界で悪くないよ。Appleは終息方向に向かいたいみたい
ですけどね。
単にQTKitが未完成でTraditionalな関数を呼ばないと実現できない事が多すぎて、
何をやるにもちょこちょこCarbonが顔を出すので、CocoaからQuickTimeにアプロー
チするのが「カオス」。
Carbonだけで閉じた世界で使う分には「今の所」QuickTimeは普通に使える。将来
は逆にCocoaに手を出さないと機能が使い切れなくなると宣言されてるけどね。
まあ、Carbonはここではすれ違いだ。失礼しました。
270:名称未設定
07/08/23 16:40:07 tUB6r9Qr0
てことでObjective-C2.0のQTKitに期待なわけですね。
271:259
07/08/23 18:29:02 xQ3xY0pg0
>>269, 270
なるほど、Carbon からは QuickTime が使い易いんですね。
Leopard の QTKit が使い勝手よくなっていることに期待します。
後2~3ヶ月か。うーん早く出して欲しいなぁ。
272:名称未設定
07/08/24 13:00:09 plQI0uRV0
>>269
判ってると思うけど、QuickTimeはCarbonじゃ無いよ。
GWorldとは手を切って、OpenGL Contextに移行しよう。
273:259
07/08/24 17:12:35 9ylc1pF50
>>272
これは私宛(>259)、ですよね。この辺り分かっていないんで、間違っていたら教えて頂けますか。
周囲に聞ける人がいないので、Appleの文献とネットしか(ヒレガス本と荻原本はよんでます)
情報が無いんです。教えて君状態で申し訳ないのですが、よろしくお願いします。
1.SetGWorldはQuickDrawのメソッドで廃止予定。Quartz2Dが代わりになる。
2.Quartz2D (CoreGrahicsの一部?), CoreImage, CoreVideo, CoreGraphicsの下にOpenGLがいる。
3.QuickTimeは3つの上にあって、描画対象や処理に応じて3つのAPIを使っている?
4.3つのframeworkはそれぞれOpenGLの一部の機能を提供?OpenGL非依存の処理も可能?
5.CocoaからはQuartz2D CocoaAPIを介してOpenGL Contextが作れる?(一番分かってないです)
という風に理解しているのですが、合っていますか?
274:名称未設定
07/08/24 18:05:34 plQI0uRV0
Creating a Visual Context
URLリンク(developer.apple.com)
QTNewGWorld => QTPixelBufferContextCreate or QTOpenGLTextureContextCreate
Visual Contextは、普通のメモリーか、OpenGLのテクスチャ。
SetMovieGWorld => SetMovieVisualContext
CIVideoDemoGL
URLリンク(developer.apple.com)
以下僕も曖昧ですが。
Quartz2D: PDFベースの描画命令。QuickDrawの後継。2D ExtreamならGPU使う。
CoreImage: GPU使った画像処理フィルター。テクスチャに施す。
CoreVideo: 複数のテクスチャをバッファプールに使ってムービーの表示タイミングをモニタのリフレッシュに合わせる仕組み(Display Link)。
要はみんなテクスチャなんでGPUの中だけで相互にいじれると。
275:名称未設定
07/08/24 20:07:50 jUBSvJSS0
CoreVideoPixelBufferってGLテクスチャだけでなく、
GWorldのラッパも兼ねてると思ってた。
RGBでないDecompressor/CompressorComponentは2vuyを
デフォルトでつかうから、結局一発目のCoreVideoPixelBufferは
GWorldベースになっちゃうはず
QuickTimeのyuvデフォルトはChunky yuv=2vuy(422)で、PlanerYUVじゃ
ないからPixelBuffer間の変換処理がぼこぼこ起きると遅くなると思う
Sharkで見ると、いったんChunky yuv422ー>Planer yuv444ー>RGBとか
やってるっぽい
CoreVideoが、DisplayLinkの途中でGLテクスチャに変換してるん
だろうと思うんだけど、すごく無駄が多く感じるんだよね
276:名称未設定
07/08/25 01:30:41 VopUGkEZ0
>>275
MyCometG3氏と見た。
277:259
07/08/25 19:15:58 NJSbpzvW0
>>274,275
うーん、覚えないといけない事がいっぱいですね…一つずつ学びたいと思います。
ありがとうございました。
278:名称未設定
07/08/28 07:04:19 zHr/kI630
初歩的質問で申し訳ないのですが、NSString文字列の
制御文を書きたいのですが、どのようにすればいいのでしょうか。
NSString* hoge;
hoge=@"あいうえお";
if (hoge =@"あいうえお") {
//もしhogeの内容が あいうえお ならここのコードを動作させたい
}
のように書いたのですが、if の行でエラーが出てしまいます。
279:名称未設定
07/08/28 07:09:19 Xv9pLU0Y0
>>278
if (hoge isEqualToString:@"あいうえお") {
280:名称未設定
07/08/28 07:11:51 lNlMIRDY0
朝からcocoa
いいね素晴らしいね
281:名称未設定
07/08/28 07:16:01 zHr/kI630
>>279
分かりました。勉強不足でした。
ありがとうございます。
282:名称未設定
07/08/28 12:58:25 y/omrr0P0
>>279
@""の中に日本語はまずくないですか?
あえてソースの中に日本語書くのならエンコードをutf8にしておいて、
if ( [hoge isEqualToString:[NSString stringWithUTF8String:"あいうえお"]] ) {
}
くらいでは。
283:名称未設定
07/08/28 13:13:32 rN2eIabO0
>>278
この例だと、>>278が意図したようには動かないが、エラーも出ないのでは。
284:名称未設定
07/08/28 13:28:47 qboyE3Nc0
オブジェクト定数に日本語使ったからエラー出たんじゃね?
285:名称未設定
07/08/28 13:54:14 p7clQF4e0
その前に条件式内での代入は不問なの?
>のように書いたのですが、if の行でエラーが出てしまいます。
どんなエラーかも分からないし。
286:名称未設定
07/08/28 15:04:49 y5W8OHwo0
パールや簡易系スクリプト上がりだと苦労するよ。オブジェC。
287:名称未設定
07/08/28 15:42:39 KiMzdaU00
CocoaDevCentralあたりにPHPからの移行チュートリアルみたいなのあった気がする。
英語だが。
288:名称未設定
07/08/28 15:57:17 qboyE3Nc0
うそん
俺AppleScript上がりだけどすんなり理解できたよ、ObjC
289:名称未設定
07/08/29 03:40:32 QhQnuPQW0
Cocoa初心者です。
ヒレガス本(日本語版)は、済ませました。
次にやると良い入門書があれば、ご紹介ください。
290:名称未設定
07/08/29 13:43:03 6vtaxeAX0
>>289
何を作りたいの?
291:名称未設定
07/08/29 19:40:33 mCpcDP8p0
テーブルビューでコアデータにバインドしないカラムのソート方法がさっぱりです。
ソート用にそのカラムの配列を作ってソートディスクリプタをかますのですか?
292:名称未設定
07/08/29 19:50:19 sxJk1+Ic0
NSTableView の - (NSArray *)sortDescriptors;
NSMutableArray の - (void)sortUsingDescriptors:(NSArray *)sortDescriptors;
がヒントというか殆ど答え。
293:名称未設定
07/08/29 20:15:26 FVUVQ2w00
NSTextFieldについて質問させてください
Interface Builderの設定でLayoutがWrapsの場合(Viewの幅で自動改行)に、
横幅を変えずに高さだけ変えてテキストがちょうど収まっているように
プログラムでリサイズさせるにはどうしたらいいでしょうか?
[NSControl sizeToFit]だと横幅が変わってしまいます
294:名称未設定
07/08/30 01:39:01 8W/XnYIW0
>>291
URLリンク(blog.so-net.ne.jp)
295:名称未設定
07/08/30 01:47:09 8W/XnYIW0
>>293
IBのインスペクタのサイズで,
NSTextFieldのサイズを上下にリサイズするように設定してみては.
上下にはバネ,左右は直線の表示に.
296:名称未設定
07/08/30 02:23:58 zfQNQU460
>>294
そこに書いてあることは間違ってるとは言わんが
すごく誤解を招きそうな感じの書きっぷりになってるな
297:293
07/08/31 00:21:20 coa9p3Qi0
>>295
ダメでした。IBの「Size to Fit」メニューではAutosizing設定に
合わせてくれるんですが、プログラムでは
[textField setStringValue:@"とても長~~~~い1行"];
[textField sizeToFit];
としても横に長く伸びてしまいます
298:名称未設定
07/08/31 03:54:43 k2mfVNs40
>>297
NSTextFieldのsetLineBreakMode:でラップするよう設定してみては?
詳しくはリファレンス参照.
299:293
07/08/31 23:09:17 coa9p3Qi0
自己解決しました。これでできそうです。
NSRect fr = [textField frame];
fr.size = [[textField cell] cellSizeForBounds:[_textField bounds]];
[textField setFrame:fr];
300:名称未設定
07/09/01 17:23:27 V20HLbnL0
>>292 >>294
回答ありがとうございます。
チャレンジしてみます。
301:名称未設定
07/09/02 16:01:51 1W/RX5JH0
NSTableView(NSArrayController)で最後にソートしたカラムとソート順をアプリの終了時に保持して、
次回起動時に前回の状態でソートするにはどうすればよいのでしょうか?
[[[NSArrayController sortDescriptors] objectAtIndex:0] description]
をNSStringに代入してプロパティリストに保存できたのですが、
なんか無理矢理なやり方かなと。
良い知恵がありましたらお願いします。
302:名称未設定
07/09/02 17:36:24 QfZEBWjg0
自分で変数もってそれをプロパティリストに保存して起動時にソートしなおすとかは?
とNSTableView使ったことないけど言ってみる
303:名称未設定
07/09/02 23:43:35 BsNs+MD5P
descriptionで保存するんじゃなくて、sortDescriptorsにNSArchiver使った方がいいんじゃない?
で次回起動時にはNSUnarchiverを使って復元したものをsetSortDescriptors:して再ソート
304:名称未設定
07/09/03 01:24:15 d9shAoB60
ass乞食がcocoaのhtmlレンダーマンを掘り当てたらしいね
305:名称未設定
07/09/03 01:34:14 J1vhJrBi0
中国人は赤ん坊も食べる
URLリンク(www21.tok2.com)
306:名称未設定
07/09/07 21:36:25 EENbuIBN0
ああ、さっぱりわからないよ兄さん。
307:名称未設定
07/09/11 23:43:45 8nKQQObl0
NSPredicateで" カラム=='値' "というのはできるのですが、
" 関数の返り値=='1' "みたいなことは出来るのでしょうか?
よろしくお願いします。
308:名称未設定
07/09/12 20:54:55 0PGJU/k/0
またHMDT恒例の、エントリ無関係ツッコミが始まりましたな。
309:名称未設定
07/09/12 21:50:19 f0yZ2CXF0
>>307
オブジェクトobj の関数(メソッド)func が数字を返すとき、
BOOL result = [[NSPredicate predicateWithFormat:@" func == 1"] evaluateWithObject:obj];
みたいなこと?そのまんまだけど
310:名称未設定
07/09/13 09:13:13 tYOZKWhg0
Core Dataを使って、非常に簡単なアプリを作ろうとしています。
単語帳みたいな感じのものなんですが、
Cardエンティティ:
- 属性word (String)
- 属性meaning (String)
というデータを持っています。
例えば、(word, meaning) = ("hello", "こんにちわ")みたいに格納します。
さて、wordの表示は左側にNSTableColumnでリスト表示させ、
その右側にNSScrolViewでselectされた単語の意味を表示させます。
このとき、NSScrolViewから意味を編集したいのですが、
この中身を日本語のプレインテキストにしたと思っています。
属性meaningのタイプはStringのままでいいのでしょうか。
Stringにすると、実行時に右側のNSScrolViewを編集することができなくなります。
そこでタイプをバイナリデータにしてみたんですが、
当然、作成されたXMLの中身がバイナリになって可読性が悪くなります。
タイプをStringのままで、NSScrolViewを編集できるようにするにはどうしたらいいでしょうか。
311:名称未設定
07/09/13 10:03:32 tYOZKWhg0
すいません。
ごにょごにょやってたら出来ました。
何をやったのかは分かりませんorz
312:名称未設定
07/09/14 03:22:19 vPRPlLH90
まず、NSScrollViewから編集したつもりになってるようだけど、
実際はNSScrollViewの内部にあるNSTableViewから操作している。
NSScrollViewはスクロールを可能にするだけの縁取り的なものに過ぎない。
だからもしリファレンス等で調べるなら、
NSScrollViewではなくNSTableViewを参照すること。
次に、保存方法と編集可能云々は別問題なハズ。
Interface BuilderでNSTableViewのインスペクタのEditableとか
いろいろいじったんじゃない?
313:名称未設定
07/09/14 11:37:14 gUdBg/zp0
今回発売されたLogic 8は1000p以上の翻訳済みマニュアル付いてるそうな
世界同時発売で
で、Cocoaリファレンスの翻訳はまだですか?
314:名称未設定
07/09/14 13:29:15 sFJVO0iJ0
>>313
Cocoa Break
315:名称未設定
07/09/14 18:33:16 ZI20taVc0
cocoa breakは神
316:310
07/09/14 20:03:38 5NLP9ylV0
>>312
NSScrollViewは勘違いでした。
どこを弄ったのか良く分からなかったので、
何度か新規でプロジェクトを作り直したりしたら動いています。
今は何と何をバインディングさせたか理解してるんで、
ちゃんと正しいことをやってるくせぃ。
317:名称未設定
07/09/14 23:10:21 +9nlJNpQ0
俺をAppleで働かせてくれるなら死ぬ程翻訳しまくってやってもいい
とほざく求職中の俺
318:名称未設定
07/09/17 21:49:27 5CFLrUlr0
日本語入力 �フ 英語入力 をアプリの中から切り替えるには、どうすれば
よいでしょうか。
URL を入力するテキストフィールドがあって、そこが入力状態になったときに
自動的に英語入力に切り替わるようにしたいと思っています。
319:名称未設定
07/09/17 22:47:37 vp+tEm1m0
たぶんそういうのはCarbonの中の古いAPIを使うんじゃないかな
320:名称未設定
07/09/19 12:44:09 QAAMlS8c0
Core Dataで名前と住所があるとして、NSTableViewで表示させるとします。
で、カラムは名前と住所を表示させるんだけども、
住所が未入力の人は名前を赤で表示させたい。
これってどうやればいいんでしょうか。
321:名称未設定
07/09/19 16:00:49 7OHnYPwj0
>>320
●NSTableView に delegate を設定して tableView:willDisplayCell:forTableColumn:row: の中で、
住所の中身を調べて名前のセルに setTextColor する。
●もしくは、下記の2つのファイルを作り、プログラムのどこか最初の方で(applicationDidFinishLaunching等の
メッセージを受けて)、以下のように
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];
独自の値変換を登録しておく。Interface Builder では、名前カラムのbindins -> textColor -> Value Transformer に設定しておく。
322:名称未設定
07/09/19 16:01:37 7OHnYPwj0
長過ぎて怒られたので分割。
//---------- MyValueTransformer.h ----------
#import <Cocoa/Cocoa.h>
@interface MyValueTransformer : NSValueTransformer {
}
+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;
- (id)transformedValue:(id)value;
@end
323:名称未設定
07/09/19 16:02:40 7OHnYPwj0
//---------- MyValueTransformer.m ----------
#import "MyValueTransformer.h"
@implementation MyValueTransformer
+ (Class)transformedValueClass {
return [NSColor class];
}
+ (BOOL)allowsReverseTransformation {
return NO;
}
- (id)transformedValue:(id)value {
if ( value != nil && [value respondsToSelector:@selector(length)] && [value length] > 0 )
return [NSColor blackColor];
else
return [NSColor redColor];
}
@end
324:名称未設定
07/09/19 16:09:53 7OHnYPwj0
念のため名前カラムの Bindings の中ね。
Bind to: NSArrayController
Controller Key: arrangedObjects
Model Key Path: (住所の入っているプロパティ名)
Value Transformer: MyValueTransformer
325:320
07/09/19 20:31:54 QAAMlS8c0
>>321
まんま使わせてもらいました。
ありがとうございます。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
をHoge_AppDelegate.hに足して、
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
WordColorTransformer* transformer = [[[WordColorTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"WordColorTransformer"];
}
をHoge_AppDelegate.mに足しました。
初めてD&D以外の作業をXcodeでやったわw
C/C++しか触ったことないんだけど、Cocoaの思想みたいなもんが見えてきた。
これは便利そうだ。
326:320
07/09/19 20:36:30 QAAMlS8c0
すいませんが、もう1つ。
名前カラムに新規登録する度に、
headerを押さないでも自動でソートさせるのは、
どうすればいいんでしょうか。
327:名称未設定
07/09/20 01:30:49 r/uaSxxr0
>タップ……指で軽く叩く操作。マウスのクリックに相当
>ダブルタップ……2回叩く操作。ダブルクリックに相当
>ドラッグ……写真を移動する時に指をずらす操作
>フリック……リストをスクロールする時に指で軽くはらう操作
>ピンチ……2本指でのつまむ操作の総称
>ピンチアウト/ピンチオープン……2本指の間を広げて拡大する時の操作
>ピンチイン/ピンチクローズ……2本指の間を縮めて縮小する時の操作
URLリンク(k-tai.impress.co.jp)
- (void)touchFlicked:(NSEvent *)theEvent;
とかになるのかな?
328:名称未設定
07/09/20 11:06:40 CMoMWviD0
>>326
とりあえず思いつくのは notification を使うことかな。
IB で Hoge_AppDelegate に Outlet を2つ追加して接続。ここでは仮に arrayController(NSArrayController に接続)と
tableView(NSTableView に接続)としておく。
Hoge_AppDelegate.h に追加。
IBOutlet NSTableView *tableView;
IBOutlet NSArrayController *arrayController;
Hoge_AppDelegate.m を修正。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectChanged:) name:NSManagedObjectContextObjectsDidChangeNotification object:nil];
NSArray* sortDescriptors = [NSArray arrayWithObjects:
[[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease],
[[[NSSortDescriptor alloc] initWithKey:@"address" ascending:YES] autorelease],
nil
];
[tableView setSortDescriptors:sortDescriptors];
}
- (void)objectChanged:(NSNotification*)notification {
[arrayController rearrangeObjects];
}
329:名称未設定
07/09/20 11:12:40 CMoMWviD0
>>326
dealloc の中で後始末もしておいて。一応、マナーとして。
[[NSNotificationCenter defaultCenter] removeObserver:self];
330:名称未設定
07/09/20 22:29:15 A01fsnmG0
iPhone、iPod に OS X を内蔵したおかげで、Cocoaプログラマがすごい増えてるね
331:名称未設定
07/09/20 23:33:41 Xhf7l+HF0
>>330
?
332:名称未設定
07/09/21 00:21:45 Qi2gwohZ0
>>326
NSArrayControllerのsortDescriptorsを設定してあれば、自動的にソートされます。
あと、NSValueTransformerの登録はNib fileのロード前にする必要がありますから
Value Transformer Programming Guide Registering a Value Transformerでは
application’s delegateでinitialize: class messageで行うことが推奨されています。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
ではタイミングが遅いように思います。
問題なく動いているようなので、結果オーライかもしれませんが。
333:320
07/09/21 08:33:51 lSzwq6kK0
>>328
ははあ。なるほど。ありがとうございます。
>>332
IBからinspectorで、NSArrayControllerのsortDescriptorsを選ぶんですよね。
ここで、Model Key Pathにnameを設定して、
Validates Immediatelyにチェックを入れるんでいいのでしょうか。
そうすると、
[Session started at 2007-09-20 13:22:40 -1000.]
2007-09-20 13:22:42.993 Hoge[2611] An uncaught exception was raised
2007-09-20 13:22:43.002 Hoge[2611] [<Hoge_AppDelegate 0x38eda0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.
2007-09-20 13:22:43.009 Hoge[2611] *** Uncaught exception: <NSUnknownKeyException> [<Hoge_AppDelegate 0x38eda0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.
Hoge はシグナル 5(SIGTRAP)により終了しました。
となります。これって、"name"というkeyが存在しないって意味だと思うんですが、
どうやったら"name"を見つけてくれるんでしょうか。
334:320
07/09/21 08:38:01 bDIzEEDW0
また、Hoge_AppDelegate.mの中で、
+ (void)initialize {
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];
}
というのを実装すればいいってことですか?
initializeが1度しか呼ばれない関数なのか理解していないんですが、
static BOOL initialized = NO;
とか用意して、
if(initialized){
MyValueTransformer* transformer = [[[MyValueTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"MyValueTransformer"];
initialized = YES;
}
とするべきですか?
長々とすみません。
335:名称未設定
07/09/21 12:09:17 T5koP5+L0
>>334
URLリンク(developer.apple.com)
の「クラスオブジェクトの初期化」のところを見ると、
クラスは自身が使用される前に、ランタイム環境を準備する機会を与えられます。
initialize は継承されるため、サブクラスのために何度も呼び出される可能性があります。
とのこと。
336:名称未設定
07/09/21 21:44:20 sPcrBli00
NSView(のサブクラス)にテキスト(日本語)を描画したいのですが、
どうすれば良いでしょうか?
(日本語のテキストを持ったNSStringインスタンスの内容を描画することを想定)
ネット上もあるドキュメント、サンプルコードなどご教示いただければありがたいです。
337:名称未設定
07/09/21 22:05:02 tcpbBsLq0
教えようと思ったけどメル欄がうざいからやめた
338:名称未設定
07/09/21 22:12:28 sPcrBli00
>>337
お騒がせしました。
自己解決しました。
↓
hmdtに置いてありました。
339:332
07/09/21 22:35:44 Qi2gwohZ0
>>333
>NSArrayControllerのsortDescriptorsを設定してあれば、自動的にソートされます。
と書きましたが、これではダメでした。
Core Recipes Appを参考にして作ったiTunesもどきのメモソフトで自動的にソート
ができていたので、そう書いたのですが、簡単な検証プロジェクトを作って実験したところ
ソートされませんでした。
自作のメモソフトでなぜうまくいっているのか検討してみます。
しかし違いといえば、contentSetにバインドしているくらいで、ほとんどコードを書いていない
部分なので、困惑しています。
>ここで、Model Key Pathにnameを設定して、
NSSortDescriptorを要素に持つNSArrayを指定します。
initializeについては、ヒレガス本P138で
+ (void)initialize
{
//自身はPersonクラスか?
if (self == [Person class]){
[self setVersion:2];
}
}
例が載っています。
2nd Editionでは索引や、他の章で引用されているのに、この項が載っていません。
340:名称未設定
07/09/22 01:50:16 x63UH/2b0
>>339
どこかで「自動的にソートされる」ってのを見てやってみてだめだったので、
いろいろ試した結果が >>328 なんですよ。
もし、バインドだけでいけるなら私も知りたいです。
341:320
07/09/22 08:53:57 Npi1C4cP0
>>328
書いて頂いたコードを写させて頂きました。ありがとうございます。
ただ、新規項目を追加するとそいつはカラムの最下部に表示されてしまいます。
IBから常にソートできそうな気もするんですが。
>>335
参考にさせて頂き、↓のように変更しました。
+ (void)initialize
{
static BOOL initialized = NO;
if(initialized){
return;
} // if
initialized = YES;
WordColorTransformer* transformer = [[[WordColorTransformer alloc] init] autorelease];
[NSValueTransformer setValueTransformer:transformer forName:@"WordColorTransformer"];
}
342:名称未設定
07/09/22 09:31:10 Jwo4xXMJ0
削除したのに残るplistは「板データを修復」で消えるんだけど。
343:名称未設定
07/09/22 09:32:02 Jwo4xXMJ0
ごめん誤爆
344:名称未設定
07/09/22 18:08:59 e0U06nBz0
アレイコントラーのインスペクタにそれらしいチェックがあったような。
つーかインサートするたびにソートしたらうざくね?
345:名称未設定
07/09/22 21:52:36 YtaGMbG00
HMDTでiPhone開発の話をしてるけど
touch用の開発環境って出てきてるのかな?
iPhone用のアプリはtouchでは動かないみたいだけど
346:名称未設定
07/09/22 22:04:54 V8IHJ6+c0
もうiPod touchがてにはいるようになったの?
347:名称未設定
07/09/22 22:59:32 YtaGMbG00
今日出荷案内が来たよ
348:名称未設定
07/09/23 11:15:15 74QYrWGQ0
Core Data アプリで、data を NSArrayController のバインディングで
テーブルビューに表示させているのですが、IB で NSArrayController に
設定した predicate が働いてくれません。
hoge という属性を持つ Core Data のエンティティがあり、
NSArrayController の IB の Inspector の Attributes で
hoge != "hogehoge" として Set Predicate したのですが、
テーブルビューの中に hoge == "hogehoge" のデータも含め
全データが表示されてしまいます。
ちなみに、hoge == "orz" などいい加減な predicate を設定しても
動作は変わらず、すべてのデータが表示されます。
バインディングの設定の方は、何度も確かめたので正しいと思います。
どこで使い方を間違えているでしょうか。
349:名称未設定
07/09/23 15:30:27 zABjWK1w0
たぶん根本的に間違ってるよ。
そこに条件式を書いただけでは動かない。
350:348
07/09/23 16:27:42 74QYrWGQ0
>>349
下記ページの一番下の図にある通りのやり方なのですが、
根本的に間違っているのはどの辺でしょうか。
URLリンク(journal.mycom.co.jp)
条件式以外には何が必要ですか?
お教え願います。
351:名称未設定
07/09/23 19:40:13 shGaGM9l0
>>350
== ではなくて、likeとかcontains[cd]を使いましょう
352:351
07/09/24 20:34:56 s/hLGoL70
>>350
Set Predicate ボタンはちゃんとクリックしているのでしょうね?
353:348
07/09/24 20:58:16 o5Y8mmRh0
>>352
クリックしています。わかりにくい書き方でしたが、>>348 の
「Set Predicate した」というのはボタンを押したという意味です。
>>351 で predicate の書式についてお教えいただきましたが、
== を使わない方が良い理由は何でしょうか?
== と書いた predicate を NSArrayController にバインディングで
設定した場合にはきちんと動作しており、書式は問題ないと思うのですが。
>>349 は別の方でしょうか?「根本的な間違い」というのが何なのか、
まったくわからないままなのですが‥。
354:351
07/09/24 22:12:01 s/hLGoL70
>>353
>== を使わない方が良い理由は何でしょうか?
こちらの勘違いでした。
Predicate Programming Guideの例で
>Simple comparisons, such as grade == 7 or firstName like 'Mark'
というのがあがっていて、文字列の比較には==が使えないと思い込んでいました。
昨日試したら==でもOKでした。
predicateの設定なんて、predicateを書いてボタンをクリックするだけで他にすることはないはずです。
例えば、NSTreeControllerで parent == nilと設定すれば、第一階層のアイテムだけが
表示されます。
お役に立てず、すいません。
355:名称未設定
07/09/24 22:45:14 s/hLGoL70
ここ数日のうちにCocoabuilderやCocoa Bindings Examples and Hintsで
NSIndexSetのメソッドcountOfIndexesInRange:
を使ったコードが出ていますが、Tigerにはこんなメソッドはありません。
Leopardで導入されるものでしょうか?
NSTableViewのdrag & dropのコードで、似たようなメソッドを作ったものですから、
Appleが正式にサポートするとうれしいです。
Leopardの発売が更に楽しみになりました。
356:名称未設定
07/09/25 20:42:20 DPSBhINH0
ついでに、WebObjects を、Objective-C にしてほしいよなーー
357:名称未設定
07/09/26 07:47:06 KqKT5P0s0
WOはもうディスコンまっしぐらじゃない?
あれ?オープンソースになったんだっけ?
358:名称未設定
07/09/26 14:05:35 cVuwNs9i0
Quartz 2D Extream もどうなったのやら。やっぱディスコンまっしぐらかなぁ。
359:名称未設定
07/09/26 18:52:49 //OJRjK+0
QuartzGLになりました。
360:名称未設定
07/09/26 22:58:38 KOSgLSOH0
質問です。
大量のボタンに対して、同時に同じメッセージを投げたいんですが、
1つのアウトレットは1つのオブジェクトしか指定できません。
大量のボタンの数だけアウトレットを用意するのもスマートではないと
思いますが、何か良い方法ありますか?
よろしくお願いします。
361:名称未設定
07/09/26 23:16:06 GjSqGsk10
>>360
必要なだけNSArrayに入れてmakeObjectsPerformSelectorとか、後はNSNotificationとかかな。
362:名称未設定
07/09/27 00:01:26 PDbAKstz0
NSViewでまとめてsubViewsで取り出す
363:名称未設定
07/09/27 00:43:29 8K+2oe1e0
過去に同じようにな質問なかったか
364:名称未設定
07/09/27 00:47:46 jyqt4+rC0
>>359
thx.
365:名称未設定
07/09/27 04:55:55 1zrfBisP0
空白またはタブで項目が区切られているレコードからトークン
を切り出すのに、 chSetを whitespaceAndNewlineCharacterSet として
aScanner = [NSScanner scannerWithString:parsedString];
while(![aScannerisAtEnd]){
if([aScanner scanUpToCharactersFromSet:chSet intoString:&token])
NSLog(token);
[scanner scanCharactersFromSet:chSet intoString:nil]; }
としていますが、
アスキー文字だと期待通りに動くのですが、レコード中のどれか一つの項目を
日本語にするとその部分がスキップされて(空白だと思われて)しまいます。
どうしたらいいでしょうか。OSは10.3.9です。
366:名称未設定
07/09/27 05:24:39 CM0/B6Sl0
>>365
NSLog(token); → NSLog(@"%@¥n", token);
でどうかな?
367:名称未設定
07/09/27 06:07:29 1zrfBisP0
NSLog(@"%@¥n", token); にすると、
日本語フィールドも表示されるようになりました。
が、最後に余計な「A¥n」が出ます。(本当はAの上に変な記号のついた文字。これをいれると
Cocomonarが落ちるので書けない
)よくわからないのですが、エスケープされてる、
ということなのでしょうか。
NSLog(@"%@", token); にするといままで通りです。
が、
NSLog(@"%@ ", token); と、後ろに空白文字を置くとキチンと
表示されます。
文字コードが悪さをしているのは見当つくのですが、具体的にどこが
悪いのかはさっぱりです。ファイルを読み込むときも、NSDataに落としてから
エンコーディングを変えながらいろいろ試してみたのですが。
368:名称未設定
07/09/27 06:23:48 CM0/B6Sl0
>>367
ごめん、¥はバックスラッシュのつもりだった。
とにかくNSLogの日本語表示だけの問題だから気にしなくていいよ。
369:名称未設定
07/09/27 11:57:33 1zrfBisP0
本当だ、¥の代わりにバックスラッシュにしたら期待道通りの結果がでました。
ありがとうございました!!
370:名称未設定
07/09/27 14:30:21 8h5IL6rA0
巨大なテキストファイルから改行コードで区切って1行ずつ読み込んで処理したいのですが、
テキストファイルをすべて読み込んでから改行コードで区切って配列に入れるとメモリを膨大に消費してしまいます。
perlっぽくファイルハンドルを取得してwhile文でeofまで回すような
ストリーミングっぽく処理したいのですがどうすればよいのでしょうか?
371:名称未設定
07/09/27 15:02:54 DoK9wEPc0
一番簡単なのはCのfgets()を使う方法。改行がLFでないと使えないけどな。
後は先読みバッファを作って、特定のサイズ分ファイルを読み込んで、そこから
改行までを取り出して、残った部分をムーブして空いた分だけファイルから
読み込み、これを繰り返す。
372:名称未設定
07/09/27 16:12:29 8h5IL6rA0
>>371
ご教授ありがとうございます。
Cのfgets()関数を使ってうまくいきました。
objective-cで出来るか探してみましたがなさそうですね。
373:名称未設定
07/09/29 10:12:39 zZqJ0dcb0
NSWindow 上に NSTableView がいくつか置いてあるのですが、
その TableView 間でファーストレスポンダが変わったことを
検出するには、どういった方法があるでしょうか。
374:名称未設定
07/09/29 15:34:01 8IGuMuZ60
文字列を正規表現で置換したいのですが、標準機能ではないのでしょうか?
>>373
テーブルビューの選択が変わったなら通知するのがあったような。
375:名称未設定
07/09/29 15:40:36 x13OGOM+0
Cocoaで正規表現ならOgreKitが定番かな。
URLリンク(www8.ocn.ne.jp)
376:名称未設定
07/09/29 15:45:51 pwcm/+Ub0
>>373
acceptsFirstResponderとかその辺でどうかな。
377:名称未設定
07/09/29 15:57:41 E1JHDeBB0
regex.h
378:373
07/09/29 16:17:02 zZqJ0dcb0
>>374
どのような通知でしょうか。
調べてみてはいるのですが、見つかりません。
>>376
すみません、acceptsFirstResponder をどのように使うのでしょうか。
379:名称未設定
07/09/29 16:27:27 pwcm/+Ub0
>>378
ググってみて。HMDTさんのサイトがお勧め。
380:名称未設定
07/09/29 18:34:35 EN0/o6QM0
通知ってnotificationのことでしょ
NSTableViewのヘルプにあるよ
381:373
07/09/29 22:19:34 zZqJ0dcb0
>>380
具体的にどの notification のことをおっしゃられていますでしょうか。
検出したいのはTableView間の移行の話なので、TableView の notification
ではないのではないかと思うのですが。
ちなみに現在は暫定策として、NSWindowDidUpdateNotification を
使っていますが、これだと必要のないときにも notification が出るので、
パフォーマンス改善のためにもっと良い方法を探しています。
382:名称未設定
07/09/29 22:57:21 3B7qOXdqP
NSResponderで定義されてるbecome~などのファーストレスポンダ関連の適当なメソッドを上書きして適当な通知を送るようにすればいいんじゃない?
383:380
07/09/29 22:59:45 EP9ETOnN0
>>373
ごめんね、NSResponderのnotificationだったわ
384:名称未設定
07/09/30 08:23:16 1+3bPOa/0
>>361
遅レス申し訳ありません。
InterfaceBuilderで置いたボタンをNSArrayに入れる方法が分かりません。
すみませんが、よろしくお願いします。
385:名称未設定
07/09/30 11:59:03 f54IiRS90
>>384
そのボタン群用にNSButtonのサブクラスを用意して、
awakeFromNibで適当なNSArrayに格納するとかかな。
NSNotiricationを使う場合も同様に。
任意のタイミングで格納する場合は、subviewsを使うしかないと思います。
386:名称未設定
07/09/30 16:30:45 KRhNhdGX0
プログラム最後の
[pool release]; で実行エラーが発生します。
allocとreleaseの数は合わせてあるのですが、メモリ管理でほかに
注意すべき点はなんでしょか。
387:名称未設定
07/09/30 16:33:17 2MyNhREa0
その直前でretain count調べてみれば?
388:名称未設定
07/09/30 16:36:42 ZGxp/2ZH0
エスパーがいらっしゃるまでしばらくお待ちください
389:名称未設定
07/09/30 16:46:22 FHx4HOJm0
retain count なんて調べてるやつはバカです
390:名称未設定
07/09/30 18:25:25 9ybOP3SL0
alloc+copy==release+autorelease
391:名称未設定
07/09/30 18:37:41 1+3bPOa/0
>>385
やってみます。
ありがとうございました。
392:名称未設定
07/09/30 18:50:03 hHTRsSyH0
LeopardでRIUIを採用するのかしないのか
QuartzGLも採用するのかしないのか
雰囲気的にはTigerが出る前と全く変わらないな...
393:名称未設定
07/09/30 18:54:51 hHTRsSyH0
誤爆に見えないかもしれないけど誤爆したみたい...orz
394:名称未設定
07/09/30 20:53:05 KRhNhdGX0
>>390
copy は明示的には使っていないので、数は合っている筈なのですが、
もう少し勉強してみます。
395:名称未設定
07/09/30 20:59:28 RmZQ6wEv0
クラスメソッドの中で一時的に作成した配列や辞書は、
メソッドの最後でまめにリリースしたほうが良いのでしょうか?
それとも勝手にリリースしてくれるのでしょうか?
アプリケーションの使用メモリが増えてきてどうすれば良いのかご教授下さい。
396:名称未設定
07/09/30 21:19:06 J3lW9Bur0
どう作成したかによる。そのルールはクラスメソッドかどうかは関係ない
NSArray* array = [[NSArray alloc] initなんたら]
で作成したのならスコープを抜けるまでに
[array release] または [array auto] する義務がある
NSArray* array = [NSArray arrayWithなんたら]
で作成したのなら
[array release] または [array auto] してはいけない
NSArray* array = [NSArray arrayWithなんたら]
で作成した場合でも、その後
[array retain]
したのなら
[array release] または [array auto] する義務がある
397:名称未設定
07/09/30 21:24:04 J3lW9Bur0
auto の部分は autorelease の誤りです
398:名称未設定
07/09/30 21:38:11 KRhNhdGX0
copyを使ってなければ、allocの数とrelease 又はautoreleaseの
数を一致させればいいのですよね。
でもpool releaseでコケる。う~む。
399:名称未設定
07/09/30 21:44:01 J3lW9Bur0
暇なんで >>396-397 にさらに解説しておくと
alloc と initなんたら によるインスタンス作成は、インスタンスの所有が呼び出し側に発生する。
つまり(releaseまたはautoreleaseで)所有を放棄する義務があり、またそうしないといつまでもメモリ解放されない。
arrayWith なんたら によるインスタンス作成は、インスタンスの所有は呼び出し側にない。
よってreleaseまたはautoreleaseしてしまうと、他の所有を勝手に放棄してしまうことになり、過解放となる
(クラッシュなどを引き起こす)。
releaseとautoreleaseの違いは、
releaseは、呼ぶとすぐに自分の所有を破棄する。他も所有していなければメモリ解放される。
autoreleaseは、後で(ランタイムが適当なタイミングで)所有が破棄される。
大まかに言うと、メソッドがreturnしたらreleaseが呼ばれる(この場合がほとんど)。
つまり、arrayWith なんたら によるインスタンス作成は、
alloc と initなんたら によるインスタンス作成 に加え、autoreleaseが既に一度呼ばれた上で渡されている
というだけの違い。
所有のないインスタンスに自分の所有を加えるには、retainを呼ぶ。これにより所有が呼び出し側に発生し、
いずれ所有を放棄しなくてはいけない義務が発生する。
400:名称未設定
07/09/30 23:13:19 J3lW9Bur0
とりあえずretainCountの仕組みを
・そのpool releaseをコメントアウトするとコケなくなるのか?
401:名称未設定
07/09/30 23:14:22 /8gv9Izg0
>>399
GCが導入されると、違いは無くなるのですかね?。
402:名称未設定
07/09/30 23:14:34 J3lW9Bur0
>>400は無視して下さい
>>399で述べたような、autoreleaseによるreleaseの予約を管理しているのがNSAutoreleasePool。
以下の場合、arrayは[pool release]が呼ばれたタイミングでreleaseされる。
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSArray* array = [[NSArray alloc] init];
[array autorelease];
[pool release];
通常、何らかのインスタンス(上の例だとarray)にautoreleaseを呼ぶと、
一番最後に作成されたNSAutoreleasePoolのインスタンス(上の例だとpool)に、
その何らかのインスタンス(上の例だとarray)が登録される。そのNSAutoreleasePoolのインスタンス(上の例だとpool)
が破棄された時に、登録された何らかのインスタンス(上の例だとarray)にreleaseが呼ばれる。
Cocoaアプリのメインスレッドでは、NSApplicationがNSAutoreleasePoolの作成と破棄を繰り返している。
なので通常、自分でNSAutoreleasePoolのインスタンスを作成しなくてもautoreleaseの呼び出しが可能。
サブスレッドでは、NSAutoreleasePoolのインスタンスを自分で作成する必要がある。
また、メインスレッドでも、forやwhile文などのループ内でautoreleaseを何度も呼び出す場合は、
release予約の(つまりメモリ解放されない)インスタンスが増えるので、ループ内で
NSAutoreleasePoolの作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。
403:名称未設定
07/09/30 23:17:41 J3lW9Bur0
>>401
さあ。GCの仕組みをどう実装してるかによるんでしょうね。
404:名称未設定
07/09/30 23:23:15 KRhNhdGX0
>>402
>また、メインスレッドでも、forやwhile文などのループ内でautoreleaseを何度も呼び出す場合は、
>release予約の(つまりメモリ解放されない)インスタンスが増えるので、ループ内で
>NSAutoreleasePoolの作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。
>
どうもこの辺が怪しい気がしてきました。
405:名称未設定
07/10/01 02:12:00 jb1YsKc80
Am I missing something? I have the need to be able to send a simple
email from my application and NSMailDelivery's
+deliverMessage:subject:to: looked perfect but I can't get it to work.
I assume this is because I have not configured an SMTP server but I
don't see any way under Panther to do so. I vaguely recall there being
System Preferences control panel for this in earlier versions of OS X
but don't have an old version that I can check. Does NSMailDelivery
still work under Panther? And if not, is there a simple way of sending
an email without having to go through a mail client using NSWorkspace?
に対し、
406:名称未設定
07/10/01 02:12:36 jb1YsKc80
You can use NSMailDelivery without using a mail CLIENT, but you do need
a mail server... probably the same one that your mail client is using.
If this is an application that will be used by different people at
different locations, you will probably need to have them set a
preference telling the location of their mail server. You can also pull
the address from their internet preferences, assuming the user has set
them up.
407:名称未設定
07/10/01 02:16:53 jb1YsKc80
という回答なんですが、ローカルでメールサーバーを立ち上げてないとダメ、
ということですよね。
で、postfix startしてみたのですが、[NSMailDelivery hasDeliveryClassBeenConfigured]
はNOのまま。
どの設定をいじればYESが帰ってくるのでしょうか。
408:名称未設定
07/10/01 03:20:31 4GJ4e1sj0
Mail.appの設定じゃないかな。
smtp serverがローカルで動いている必要はないはず。
409:名称未設定
07/10/01 11:50:57 oEXnpz/k0
オーナーシップデバッグ。
これ基本。
URLリンク(developer.apple.com)
NSZombieEnabled='YES'
環境変数なので、 「実行可能ファイル環境」で設定のこと。
410:名称未設定
07/10/01 13:18:53 jb1YsKc80
>>408
はじめはそう思ってMail.appの環境設定の項目を調べてみたのですが、
どうもそれらしいものが見当たりません。システム環境設定も同様でした。
411:名称未設定
07/10/01 13:20:27 jb1YsKc80
>>409
参考にさせていただきます。
ありがとうございます。
412:名称未設定
07/10/01 15:30:29 v2NRyQLs0
>>410
[NSMailDelivery hasDeliveryClassBeenConfigured] は、
「Mail.appでメールが出せる設定が出来ているかどうか」の意味っぽいけど?
できてる?
たぶんMail.appのアカウント設定の情報を参照してSMTPサーバにメールを
自前で投げるんだと思う。
413:名称未設定
07/10/01 23:44:37 jb1YsKc80
>>412
>「Mail.appでメールが出せる設定が出来ているかどうか」の意味っぽいけど?
>できてる?
Mail.appは毎日のように使っているので、そういう意味では問題筈です。
でも、「設定」の意味がよくわからないんですよね、海外のサイトを見ても。
414:名称未設定
07/10/02 07:18:33 4wWs2Gwh0
スクリーンショットを撮るアプリケーションを作っています。
スクリーンショットを撮るためにそのアプリを起動すると、
そのアプリがアクティブになってしまい、メニューバーにも
名前が表示されてしまうので、どうしても元のままの状態で
スクリーンショットを撮ることができません。
何か解決策があれば、教えていただけるとありがたいです。
よろしくお願いします。
415:名称未設定
07/10/02 07:43:14 HqqJ+v970
>>414
例えば純正である
/アプリケーション/ユーティリティ/グラブ.app
の場合はタイマー機能で任意のアプリのスクリーンショットを取ることを可能にしている。
416:HK
07/10/02 19:13:50 zksrfeR70
>>414
URLリンク(developer.apple.com)
のNSUIElementやLSBackgroundOnlyその他を参照。
日本語訳はポッチンルームにあります。
自作日本語入力メソッドを作りましたが、
サーバーアプリケーションはこのへんを設定して裏にまわります。
裏から変換候補ウインドウを他アプリが前面のまま表示できます。
417:名称未設定
07/10/02 19:51:17 t7c+rGGO0
>>415,416
的確に教えていただき感謝です。ありがとうございました。
418:名称未設定
07/10/05 19:46:57 gAtx49120
例えば引数のメッセージやアイコンからメッセージダイアログを出すクラスを作って
いろんなクラスからそれを利用したい場合、
・各クラスでインスタンスを作成するのか、
・I.B上でインスタンスをひとつ作成して他のインスタンスと繋げるのか、
どちらの方法が良いのでしょうか。
419:名称未設定
07/10/05 20:46:57 qqy/rlKl0
>>418
NSAlertをお勧めします。
自作する場合もそれに準じるのが良いと思います。
420:名称未設定
07/10/05 21:20:03 uw5Y856q0
>>419
最初は各クラスで必要な箇所でNSAlertをだしていたんですが、
かなり頻繁にいろんな箇所で使うのでまとめたいなあと。
メッセージ、表示ボタンもケースによってバラバラですし。
なので、共通で引数で処理するようまとめてみたんですが。
421:名称未設定
07/10/05 23:35:57 qqy/rlKl0
>>420
素直にNSAlertのカスタムクラスかカテゴリはどうですか?
422:名称未設定
07/10/07 22:01:11 3CacK9uM0
URLリンク(homepage.mac.com)
423:名称未設定
07/10/07 23:36:08 jl2bDT9K0
無料のときからずっと使っているとこの十月で更新になるからな
424:名称未設定
07/10/08 15:05:10 pbJo8Zn/0
>>421
アドバイスありがとうございます。
カテゴリなんてのもあるんですね。勉強してみます。
425:名称未設定
07/10/11 09:29:49 nscIn2lg0
CIImageのオブジェクトなんですけど、
ビットマップの上と下に余白部分を作りたいんですよね。
バックグラウンドになるビットマップを作って、
そこにCIFilterのCompositing Filtersで合成しようと思い立ったんですけれど、
CIFilterが最初から持ってるエフェクトで座標を指定して合成するのって見当たらないんです。
で、なにかいい方法があればお教え願いたいんですが。。
426:名称未設定
07/10/11 15:53:07 +RNbQCmY0
CIAffineTransform
427:425
07/10/11 16:12:36 nscIn2lg0
>>426さん
■■■■■余白
□□□□□もともとのビットマップ
□□□□□
■■■■■余白
こうしたいのですが、アフィン変換でそんなことできるんですか?
428:名称未設定
07/10/11 16:33:26 ToYfcU0y0
>>427
ググればすぐ分かる事を...
ヒント貰ったんだから、あとは自分で調べなよ。
429:425
07/10/11 17:17:47 nscIn2lg0
CIFIterのCIAffineTransformのところはドキュメントを読んでたんですけれど、
いまいちピンと来ないんですよね・・・。
Google検索してもこれと言って情報も無いし。
拡大してoutputImageしてからもう一回inputImageして縮小するってことかな。
もうちょっと調べてみます。
430:名称未設定
07/10/11 18:21:54 Q0Oj/uoh0
原点...
431:名称未設定
07/10/11 19:05:53 ToYfcU0y0
>>429
アップルのサイトに全てありますよ。
座標移動の NSAffineTransform は、
[[NSAffineTransform transform] translateXBy:0 yBy:10];
みたいな感じで作れるよ。
あとはこれを inputTransform に設定するだけじゃないですか。
432:429
07/10/11 19:11:36 ToYfcU0y0
あれ、これって変換した新しいCIImageを作るだけですね。
ごめんなさい。
433:432
07/10/11 19:59:57 ToYfcU0y0
名前欄間違えました。
ちょっと調べてみたけどCIFilterでは無理っぽい。
面倒だけど自前でやるしかないですね。
434:名称未設定
07/10/11 20:05:06 RqBWEm1l0
WindowかViewをフェードアウトして消えてくように
したいんですが、どのようにやるといいでしょうか。
自力で透明度いじるしかありませんか?
OSX10.4です。
435:名称未設定
07/10/11 20:21:29 ukinxETG0
黒で塗りつぶした上にCIImageの座標を適当にずらして描画すればんじゃないのか?
436:425
07/10/12 09:29:16 XnHNJR3q0
>>433
そうなんですよね。CIFilterが最初から持ってるエフェクトだと、
合成時に座標を指定する事が出来ないんですよね。
NSOpenGLView側で描画位置を変えるって言う手もあるんでしょうけれど、
それだと背景色を指定できないし。
>>435
NSGraphicsContextとNSBezierPathでビットマップを作って、そこに貼付けるってやり方でやってるんですが、
カスタムのCIFilterを作るしか無いのかなと思って来てます。
437:名称未設定
07/10/12 09:29:45 CM/NoWBY0
>>434
標準的なUIにはない挙動だから(多分)、自分で何かするしかないのでは。
10.4ならNSViewAnimationを使うのが一般的&楽かな。
より原始的(?)に、タイマーで透明度を徐々に変化させていってもできる。
438:425
07/10/12 09:30:20 XnHNJR3q0
あれ?ひょっとしてアフィン変換した元画像をビットマップに合成すればいいのかな?
ちょっとやってみます。
439:425
07/10/12 16:49:48 XnHNJR3q0
やってみたところうまくいってるみたいです。
ありがとうございました。
440:名称未設定
07/10/12 16:53:45 HFBiEdQm0
なんという回り道・・・
441:名称未設定
07/10/13 09:03:43 hg0jttDu0
各種ファイルをNSFileWrapperを使ってシリアライズ・比較・更新等するような
ソフトを作ろうと思って少し試しているんですが、
ファイルの内容の比較のため、とりあえずシリアライズされたデータを比較
してみたんですが、どうやら元ファイルの内容が同じでもシリアライズされた
データは異なるようです。NSFileWrapperのバグなのか、シリアライズ化
というもの自体の特性なのか、よくわかりませんが...
なお、ここでの同一性とは、元のファイルに diff をかけたのと同じ結果、を
期待しています。
こういう場合、データのシリアライズ化とファイル内容の同一性って、どうやって
両立したらいいでしょうか... もし同一性もチェックできるシリアライズ化
なんてものが存在するとうれしいのですが。
442:名称未設定
07/10/13 11:02:54 XvtdC7UH0
URLリンク(hmdt.jp)
こんなアプリが増えていますけど、みんな似たような事してるんですかね?。
最近の増え方を見ていると、もっと楽な方法がありそうな気がするのですが。
443:名称未設定
07/10/13 21:38:57 eZww9H1A0
Vistaが「遅い」と感じませんか?
URLリンク(itpro.nikkeibp.co.jp)
2007年1月30日にWindows Vistaが店頭で発売されてから約8カ月が過ぎた。
この記者の眼でも,4月24日に「Vistaってどうよ?」というややポジティブな見解が掲載された。
これはこれで納得できる。「『売り上げは期待を下回るが私は強気』,
マイクロソフトWindows本部長」というコメントもほぼ同時に報じられた。
その後もマイクロソフトは,「Windows XPのPCメーカーへの出荷,来年1月で終了へ」と突っ張っていた。
それが最近では「『Windows XPの販売を5カ月延長』,米マイクロソフトが方針転換」と来た。
低価格パソコン向けに新興国で販売している「Windows XP Starter Edition」については,
2010年6月30日まで販売を延長するという。Vistaはどうもハッピーな状況ではない。
Vistaが好感を持たれない理由は,(1)価格が高い,(2)マイクロソフトの訴求するセールスポイントが
ユーザーの感覚とかけ離れている,(3)2001年にWindows XPが出て約6年が経過する間に
ハードウエア,ソフトウエア,使いこなしノウハウの資産が各所に大量に蓄積されて
移行コストが上がった,などが考えられる。ただ,最大の理由は,Vistaが「遅い」ことではないだろうか。
Vista搭載パソコンを新規に導入した人なら,おおむね性能に不満はないだろう。
でも,新しいパソコンをポンと買える人がどのくらいいるだろうか?
444:名称未設定
07/10/15 08:47:51 RJEHHK9w0
うーん、ApplicationDidFinishLaunchingノティフィケーションを実装しても
何故か呼び出してくれない。サンプルのsketchを見るとセンターに登録せずに
使えてるようなんだが・・・
445:名称未設定
07/10/15 08:57:43 w9VArlJf0
delegate にする
446:名称未設定
07/10/15 09:23:49 RJEHHK9w0
>>445
Notificationじゃなかったのか。ありがとう。
おかげで起動時にパレットを表示できるようになったよ。
447:名称未設定
07/10/16 01:50:24 RhpguY+z0
age
448:名称未設定
07/10/16 23:56:51 UHgbhQAb0
Leopardは26日発売か。早くADCのサイトでLeopardのドキュメントが読めるよ
うになってくれないかなぁ。Obj-C 2.0とCore Animationの詳細が知りたくてた
まらん。
449:名称未設定
07/10/17 13:10:54 vy+i57Fb0
$500で1年前から読めるけど。
450:名称未設定
07/10/17 15:12:35 9JlNZqhL0
趣味で読むには高過ぎる値段だ。
451:名称未設定
07/10/17 15:34:38 bw4gG9tu0
でもLeopard買わずに済むよ。MacProを買うんなら元取れるし。
452:名称未設定
07/10/17 20:37:50 1AjA4OVd0
俺の用途から言って趣味でMacProなんて宝の持ち腐れも良いとこだし。
まあ26日には読めるんだからそれまで辛抱だろうな。
453:名称未設定
07/10/17 21:22:18 UrqKimq/0
でもま、趣味で買うやつもいるんだろうなw
とりあえずはこれでガマンかー。早くこいこい
URLリンク(www.apple.com)
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)
454:名称未設定
07/10/18 01:06:04 mkmoS9NR0
XcodeのSCM機能は貧弱と聞いたのだけれども、3.0で改善されているのかな
URLリンク(doni-dog.blogspot.com)
455:名称未設定
07/10/18 01:17:10 slHsJ97C0
>>454
そのリンクの奴、ちゃんと使えてるとは思えんな。
SCMが特許対策というのも意味わからん。
456:名称未設定
07/10/18 02:23:44 Mr8A9HPs0
svnadminなんてXCodeに必要な機能じゃないし、TimeMachineなんてありえないわ。
457:名称未設定
07/10/18 06:35:32 tLRRr8tY0
きっと、単に変更履歴を追いかけることが出来るから、後で
特許関連で訴えられたときに証拠として採用するように訴える
ことが出来るだろ、てことじゃないのかな。
採用されるかどうかは分からないが。
458:名称未設定
07/10/18 09:02:33 fqG2TSy+0
オープンソース等で公開されているものなら証拠にはなるかもしれないけど
そうでないなら信頼性はまったくないな。
459:名称未設定
07/10/18 10:54:31 Y0mjkOTf0
まぁ俺は、リビジョン管理システムがないのはやはり欠点と思う。
開発ツールなんだしさ。定期的にスナップショットを保持出来る
ような仕組みがあるだけでも大分違うし。
460:名称未設定
07/10/18 20:27:18 6hta7bjM0
URLリンク(www.apple.com)
Xcode 3.0
# プロジェクトのスナップショット
失敗を恐れず、心ゆくまでテストしましょう。プロジェクトのすべてのファイルを、いつでも好きな時に記録しておけます。万一の時もこれで安心。プロジェクトをいつでも元の状態に戻せるので、自信を持ってテストできます。