[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 23:51 / Filesize : 288 KB / Number-of Response : 939
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Cocoaはさっぱり!!! version.X(10)



1 名前:Cocoa [2008/05/20(火) 22:27:35 ID:ItX/CuiA0]
前スレが終了したみたいなので立てました。
過去ログとかよくわからないのでフォローお願いします。

175 名前:名称未設定 mailto:sage [2008/06/17(火) 11:57:37 ID:ROOb9CQQ0]
>>174
>>166メニューバーは出したくないんだろ?

176 名前:名称未設定 [2008/06/17(火) 11:59:09 ID:99O8N3c20]
>>174
普通 Dock に出ないアプリのときはメニューバーの右側にアイコンをだすしかないと思います。

177 名前:170 mailto:sage [2008/06/17(火) 12:42:15 ID:ypgNmm+l0]
>171
なるほど、私自身が確実に糸口(IBOutlet)つけたものが
あるのだから、そこから手繰るわけですね。
この発想はありませんでした、ありがとうございました。

>172
確かにおっしゃる通りで、例えば、ここら
cocoawithlove.com/2008/03/cocoa-application-startup.html
辺り等を読んでどこらへんで何がallocするのかを検討したのですが
今の私の知識では理解出来ませんでした。
引き続き調べてみます、ありがとうございました。

>173
(まだ術語的にうまく操れてる自信はありませんが)
おっしゃる通りMVCのM(モデル)の部分です。
最初、[NSApp delegate]で参照出来ないかと考えたのですが、
今の自分の知識では手法が分からず、取り敢えずその線は
あきらめて今回のIBでインスタンス化でやってみた次第であります。
流儀として珍しい系統であるとすると、今後何か支障を
来す事もあるかもしれません。他の実装方法も検討してみます。
コメントありがとうございました。

178 名前:166 mailto:sage [2008/06/17(火) 13:12:05 ID:jcIXFWOX0]
>>175
いえ、dockのアイコンを非表示にしたいだけです。
>>174
うーん。なるほどそうですか・・・。わかりました。

179 名前:名称未設定 mailto:sage [2008/06/17(火) 13:18:42 ID:99O8N3c20]
>>178
というか Dock のアイコン非表示、メニューバーだけ、というソフトにほかからどうやって切り替えるの?Dock から消したら Cmd-Tab でも切り替わらないだろうし ...

180 名前:166 mailto:sage [2008/06/17(火) 15:52:08 ID:jcIXFWOX0]
>>179
今、親ソフトから立ち上げる子アプリをバンドルの形で作ってて、
そっちはdockに出したく無いんですよ。でもメニューバーだけは子アプリを方を表示させたいんです。

181 名前:名称未設定 mailto:sage [2008/06/17(火) 19:02:28 ID:AF6fQ7/I0]
そんな部分にこだわらなくても利用者は気にしないよ。
こういうのを「床屋のオナニー」っていうんだっけ?

182 名前:名称未設定 mailto:sage [2008/06/17(火) 21:57:22 ID:MxqL1SlJ0]
そういうのはMenuExtraみたいな形にした方がいい気がする

183 名前:名称未設定 mailto:sage [2008/06/17(火) 22:46:04 ID:I13n1WLn0]
>>180無駄だろ



184 名前:名称未設定 mailto:sage [2008/06/18(水) 00:02:46 ID:AeC8SojL0]
>>180
そんな動作するソフトって他にある?
ユーザーを混乱させるだけだとおもうけど ...

185 名前:名称未設定 mailto:sage [2008/06/18(水) 00:40:19 ID:0sjtBJ8F0]
>>180
>そっちはdockに出したく無いんですよ

184じゃないが突飛な感じがするな
もう少し晒してくれれば誰かからいいアイデアでるかも

186 名前:名称未設定 mailto:sage [2008/06/18(水) 03:14:27 ID:aZaN0e+W0]
こういった批判の中からブレイクスルーするんですね、わかります。

187 名前:名称未設定 mailto:sage [2008/06/18(水) 06:18:33 ID:ZpPcOH0s0]
dockに出ないのなら子アプリにする必要すら無いと思うが。

188 名前:名称未設定 mailto:sage [2008/06/18(水) 19:25:38 ID:JmkHn0ES0]
丸ウェアを作りたいんだよ。

189 名前:名称未設定 [2008/06/18(水) 20:42:19 ID:0lBcXg5v0]
軍艦みたいだな

190 名前:名称未設定 mailto:sage [2008/06/19(木) 07:19:02 ID:qttkZF1A0]
>>188
やっぱりか。

191 名前:名称未設定 mailto:sage [2008/06/19(木) 10:28:55 ID:dkzo9Jj60]
アプリのアイコンを透過にすればいいんじゃね?

192 名前:名称未設定 mailto:sage [2008/06/19(木) 10:33:02 ID:rhMGRNu40]
ドックに隙間が空きますよ。あと下に起動中の印の黒三角(Tiger以前)か青白点(Leopard)がでます

193 名前:名称未設定 mailto:sage [2008/06/19(木) 10:38:42 ID:tLwYtAlr0]
166のやりたいことはLSUIElementでできるんだけどな
もちろんそれだけじゃ駄目なんだけど
でも決定的なのは無駄だってことだな



194 名前:170 mailto:sage [2008/06/19(木) 12:25:14 ID:g1/Z810+0]
色々調べてみたところ、IBでインスタンスを作成するのでなく、
シングルトンインスタンスの作成
developer.apple.com/jp/Documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_10.html
を利用して、今のところ期待した動作を得られているようです。
コメントしてくれた方々、ありがとうございました。

195 名前:名称未設定 mailto:sage [2008/06/19(木) 19:15:54 ID:LJCPJwrL0]
わかった。
Finderのアイコンにすれば、どんくさいユーザーは欺けるかと。

196 名前:名称未設定 mailto:sage [2008/06/19(木) 20:00:26 ID:IN6Id/OS0]
最近Cocoaやり始めた初心者です・

NSStringオブジェクトからC文字列を取り出すcStringメソッドなのですが
10.4 SDKでは問題ないんですけど
10.5 SDKだとdeprecatedのワーニングがでてくるんです。
とりあえず使えるからいいんですが、これに変わるメソッドとかあるのでしょうか?

197 名前:196 mailto:sage [2008/06/19(木) 20:15:22 ID:IN6Id/OS0]
自己レスです

cstringを

cStringUsingEncoding:NSUTF8StringEncoding

に変えてうまくいきました。スイマセン。。

198 名前:名称未設定 mailto:sage [2008/06/19(木) 21:47:50 ID:CZER9Tmm0]
table view のヘッダをクリックしたときに、
ソートとかせず何も反応しないようにするには
どうすればいいですか?

199 名前:名称未設定 mailto:sage [2008/06/19(木) 21:50:53 ID:cR2hfrj80]
ソートしないように設定、、
バインド使ってるか否かで方法が違うけど

200 名前:198 mailto:sage [2008/06/19(木) 22:01:03 ID:CZER9Tmm0]
バインディングしてます

[tableColumn bind: toObject: withKeyPath: options:];

でバインディングを設定した後に、

[tableHeaderCell setAction: nil];

というのを入れてみましたが、相変わらずソートしてしまいます。


201 名前:名称未設定 mailto:sage [2008/06/19(木) 23:49:46 ID:IjZx3q/K0]
AppleのサンプルコードのRoundTransparentWindowはNSWindowを透明にして
NSViewの一部分を透明にすることで、透明部分のマウスイベントがスルーされる様ですが
NSViewでOpenGLを使って描画すると
GLint opq = 0;
[openGLContext setValues:&opq forParameter:NSOpenGLCPSurfaceOpacity];
で透明にはなるんですが、透明部分でもマウスイベントがスルーされません
透明部分のマウスイベントはスルーしたいのですが
マウスイベントで透明部分かどうか判定し>>72の様に下のViewを検索して通知するしか無いでしょうか?

イメージはこんな感じで
ttp://www.watch.impress.co.jp/pc/docs/2002/0508/wwdc0141.jpg
動作はサンプルコードのRoundTransparentWindowみたいに色のついてるところだけ反応したい

202 名前:名称未設定 [2008/06/20(金) 13:01:44 ID:NyIbt5u40]
IB 2.0では、新規Nibの作成時にテンプレートの言語を選べたのですが、IB 3.0ではどこで選択できるのでしょうか。


203 名前:名称未設定 mailto:sage [2008/06/20(金) 23:04:43 ID:emu6E9Wh0]
よく分からんが、File -> Write Class Fileで言語は選択できるな。
初心者なもんで見当違いのことを言ってたらすまん。



204 名前:名称未設定 mailto:sage [2008/06/21(土) 06:15:41 ID:G0KE6qM/0]
夜中12時をまたいでアプリが走っているときに、
日付が変わった瞬間を知る良い方法ってありますか?

NSTimer でひたすら時刻を取り続ければできますが、
残りの24時間の間は無駄な動作になるので、
日付が変わった瞬間に notification を受け取るようなのが
やりたいです。

205 名前:名称未設定 mailto:sage [2008/06/21(土) 06:49:08 ID:N9gnbwgv0]
>>204
NSTimerは時間指定で呼び出す事も出来るけど。

206 名前:204 mailto:sage [2008/06/21(土) 06:58:24 ID:G0KE6qM/0]
>>205 d
NSTimer て、今までインターバル測るのにしか使ってなかった‥ orz


207 名前:名称未設定 mailto:sage [2008/06/21(土) 07:00:12 ID:LClgiSkx0]
runloopで時間指定って出来なかったっけ?

それ以外だと、xNix的な考え方と組み合わせるのは?
cronサービスでnotificationを飛ばすようなやつをくむとか。
シェルスクリプトからatコマンドを使うイメージ。

208 名前:名称未設定 mailto:sage [2008/06/21(土) 11:32:35 ID:C54+0kUw0]
Cocoaバインディングがさっぱり・・・
ややこしいなあ

209 名前:名称未設定 mailto:sage [2008/06/21(土) 12:32:29 ID:kIEVYzos0]
>>208
どこがわからんの?IB でバインドする変数名を指定するだけだと思うけど。
(すくなくとも第一歩は。)

210 名前:名称未設定 mailto:sage [2008/06/21(土) 12:40:53 ID:C54+0kUw0]
ああ、、そか、バインド先とkeyとパスを指定するくらいなんだ。。
沢山項目があるのでこんがらがってた。。




211 名前:名称未設定 mailto:sage [2008/06/21(土) 16:47:43 ID:aJQoGXKZ0]
KVOがむずかしすぐる、、、
特定のインスタンス監視して変化があったら特定のメソッド叩いて欲しいだけの
時にやらなきゃいけないことが山盛りで理解しきれてない。
NSTimerぐらい簡単に設定できればいいのに、、


212 名前:名称未設定 mailto:sage [2008/06/21(土) 17:39:34 ID:m9NZ2CO10]
>>211
ターゲット・アクションでいいんじゃね?

213 名前:名称未設定 mailto:sage [2008/06/22(日) 00:02:38 ID:DwFjZeXi0]
>>211
なにが難しいの?山盛りではないよね。
observeValueForKeyPath:ofObject:change:context:
を実装して、
addObserver:forKeyPath:options:context:
で登録するだけだと思うんだが...
一、二、沢山の未開民族以前の、二つの時点で沢山のひとですか?



214 名前:名称未設定 mailto:sage [2008/06/22(日) 07:09:03 ID:sXHrp8O60]
テキストフィールド2つだけの
cocoaバインディングのサンプルないかな


215 名前:名称未設定 mailto:sage [2008/06/22(日) 07:36:43 ID:DwFjZeXi0]
それだけなら、なんか NSString* text; を中に持つオブジェクトをつくって、nib のなかにインスタンス化して、ふたつのテキストフィールドをそのオブジェクトの text にバインドするだけだけど ...

216 名前:名称未設定 mailto:sage [2008/06/22(日) 10:49:12 ID:N0VcqJNZ0]
個人的に思うのだが、Bindingの動作メカニズムをちゃんと理解していないと落とし穴が結構ある。
で、ちゃんと理解するにはKVOのメカニズムを理解していなきゃならない。
それにはObserverパターンとKVCの理解が必要で、さらに言えばそもそもObj-Cの実装が分かっていた方がいい。
それはつまりオブジェクト指向言語はどうやって作るのか?ってことで、それをCで考えるくらいの力があれば…
Bindingを使いこなせるんじゃないかと思う。

っていうのは言い過ぎだとしても、「もう一段深いところ」を理解していると楽になること多いです。

217 名前:名称未設定 mailto:sage [2008/06/22(日) 11:39:09 ID:sXHrp8O60]
アセンブラからやり直します。。

218 名前:名称未設定 [2008/06/22(日) 11:47:18 ID:RhCPffZv0]
>>214
例えば、こんなのありますけど
ttp://www.stripe-net.jp/cocoa/documents/chapter1/chapter1-3.html
ttp://www.stripe-net.jp/cocoa/documents/chapter1/chapter1-6.html

219 名前:名称未設定 mailto:sage [2008/06/22(日) 11:58:13 ID:sXHrp8O60]
>218
超さんくす!!

220 名前:202 [2008/06/22(日) 13:20:35 ID:0Fs+nSDs0]
>>203
すみません。プログラミング言語ではなく日本語/英語/中国語などの言語です。


221 名前:名称未設定 mailto:sage [2008/06/23(月) 00:11:09 ID:FKweipuD0]
interface builder3.0が糞な件について

研究室でObjective-Cを使ってプログラミングを書けって言われたんだけど、
何この糞みたいにめんどくさい開発ツールは。

なんでわざわざオブジェクトとコードのコネクションを手動で接続しなくちゃいけないわけ?
Visul Studioをちょっとは学べよ。
あんなのダブルクリックで済むんだぞ。

あーむかつく。
なんでこんなん使ってやらなあかんねん。
ふざけんな。研究費削っとんちゃうぞ!!!!!!!!!

222 名前:名称未設定 mailto:sage [2008/06/23(月) 00:17:12 ID:2/CWbUXB0]
>>221
マルチポスト乙
厶板のObj-Cスレに返事が書いてあるからそっちをみてやってくれよ

223 名前:名称未設定 mailto:sage [2008/06/23(月) 00:17:55 ID:I4ASgrpV0]
慣れだ慣れ 考え方ちゃうからな
IBに限らずCocoa慣れるとMSにも言いたい事が出て来たりする

で、結局みんなEmacs+GCCに戻るのさ
ねーよ



224 名前:202 mailto:sage [2008/06/23(月) 01:29:22 ID:xvOwn1gf0]
>>221
MVCアーキテクチャは慣れるまできついかもなぁ
ただ慣れたら離れられなくなる。
というか、俺の場合Cocoaに慣れて初めて俺のプログラムがいかにオブジェクト指向じゃなかったか気づいた。
自分のプロブラムを見直すチャンスって考え方もあるんじゃないかな
VBやったことないが基礎となる理論はしっかりしてるんだろうか。
ってスレ違いだなスマソ

225 名前:名称未設定 mailto:sage [2008/06/23(月) 04:04:59 ID:bpjMPdrC0]
マルチポストをマルポって呼ぶスレに認定することにしました

226 名前:名称未設定 mailto:sage [2008/06/23(月) 08:46:19 ID:ZbmJMWrp0]
すいませんまた初心者なんですが。。

File's OwnerとFirst Responderってこれはなんですか?
チュートリアルでも、たまにこれに向かってコネクトしてる場面があるんですが
なんのためにやっているのかの説明が無いのでなんだかぼんやり。

227 名前:名称未設定 mailto:sage [2008/06/23(月) 09:14:14 ID:2/CWbUXB0]
File's Owner は、nib を「開いた人」です。
MainMenu.nib は自動的に開かれて、開いた人は NSApplication (のインスタンス)になってます。
だから、MainMenu.nib の File's Owner につなぐってことは、NSApplication につなぐことになります。NSApp の delegate につなぎたいときとかにつかいます。

First Responder っていうのは、プログラム実行中にキー入力をうけつけているオブジェクトをさす抽象的なターゲットだとおもってください。
メニューバーの「文字を大きくする」メニューのターゲットを、特定のウインドウの特定のオブジェクトとかにつないでしまうと、いつもそのオブジェクトが呼ばれることになりますが、
場合場合に応じて前面のオブジェクトに命令したかったりするでしょ。

228 名前:名称未設定 mailto:sage [2008/06/23(月) 09:29:53 ID:ZbmJMWrp0]
>227
ありがとうございます!
なるほどそうだったんですか・・

cocoaアプリの構造知らぬままやってました。。

229 名前:名称未設定 mailto:sage [2008/06/23(月) 15:39:38 ID:nJQGDEyG0]
>>227
おまいの説明はすこぶる分かり易い。

230 名前:名称未設定 mailto:sage [2008/06/23(月) 15:45:03 ID:9YeEOx5D0]
>>229
俺も同じ事思ってた。
ID: ZbmJMWrp0 はいい人に出会えた。

231 名前:名称未設定 mailto:sage [2008/06/23(月) 19:30:38 ID:gNpGWa+A0]
ヒレガスよりわかりやすいな

232 名前:名称未設定 mailto:sage [2008/06/25(水) 18:15:44 ID:WYDyD/990]
>>227
神。説明が分かりやすい上に文体がしっくりくる。Cocoaの本書いてちょw


233 名前:名称未設定 mailto:sage [2008/06/25(水) 18:57:58 ID:3DmRzNhv0]
もし、友達に貸したエロ本がまた貸しされて、
さらにまた貸しされて・・・

もうあなたの手で処分出来なくなった場合、
これをメモリーリークと言います。




234 名前:名称未設定 mailto:sage [2008/06/25(水) 20:50:44 ID:FELUv7Tr0]
>>233
違うんじゃない?

235 名前:名称未設定 [2008/06/25(水) 21:35:13 ID:7oMlqkxh0]
>>227
File's Ownerは、その言葉どおり、nib開いた人ではなく、オーナー(所有者)だと思います。
ADCのドキュメントによれば、MainMenu.nibを開いているのは、NSApplicationじゃないし。
まあ、たいていは、開いた人がそのままオーナーになりますが。

First Responderは、マウスでクリックされたりして、フォーカスの当たってるオブジェクトのことです。
First Responderが必ずしもキー入力を受け付ける訳ではありません。



236 名前:名称未設定 mailto:sage [2008/06/25(水) 21:44:11 ID:c0QFEsb40]
>>235
正確に書く事と分かり易い事とは違うわけだが。
とっかかりとしては十分な説明だと思う。

237 名前:名称未設定 mailto:sage [2008/06/25(水) 22:16:45 ID:J5cC1xD40]
NSTextViewの中の文字列で
たとえば2行目の左から3文字目から5文字目を
"ABC"で上書きする場合どうすればいいのでしょうか。。


238 名前:名称未設定 mailto:sage [2008/06/25(水) 22:24:26 ID:QvvFgoa30]
NSTextを継承してるんだから
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString
なんかを使えばいいんじゃないの?

239 名前:名称未設定 mailto:sage [2008/06/25(水) 22:48:50 ID:J5cC1xD40]
>238
ありがとうございます!試してみます!

240 名前:名称未設定 mailto:sage [2008/06/26(木) 00:28:58 ID:QkkYa/qW0]
オーナーとかの話しで思ったのですが、
MyObjectがインスタンスhogeを持っていた場合、
@interface MyObject:NSObject {
id hoge;
}
@end

@implementation MyObject
-(id)hoge {
return hoge;
}
@end
とアクセッサメソッドを用意してやることでIB上でMyObjectにバインドすることができるようになります。
これはMyObjectがhogeを持っているからですよね。
では他のオブジェクトと共有して使用されるグローバル変数の場合どうなるのでしょう。

241 名前:名称未設定 mailto:sage [2008/06/26(木) 00:32:49 ID:QkkYa/qW0]
@interface MyObject:NSObject {
}
@end


id hoge;

@implementation MyObject
-(id)hoge {
return hoge;
}
@end

とした場合バインディングはエラーが起きてしまいました。
hogeはMyObjectが持ってるんじゃないからそりゃそうかと思いましたが、
それなら誰が持っているのでしょう。
NSApplication?NSUserDefault?File's Owner?
それぞれに無理矢理バインドしてみましたがうまくいきませんでした。
アクセッサメソッで変数を返す時にグローバル変数の値を代入してやるしかないのでしょうか?

242 名前:名称未設定 mailto:sage [2008/06/26(木) 00:38:33 ID:QkkYa/qW0]
ああああすみません、
エラー文にセッターがないって出てたんで言われた通りにセッターつけたら解決しました。
プロパティ使っとけってことですね。試す前から書き込んだ自分が馬鹿でした。お騒がせしました。

243 名前:名称未設定 mailto:sage [2008/06/26(木) 10:37:58 ID:DcE/JQ790]
NSViewとかをNibに定義しないで、コードから直接
alloc&initWithFrameとかした場合、awakeFromNibは
呼び出されませんよね。
このメソッドも呼び出すべきですか?



244 名前:名称未設定 mailto:sage [2008/06/26(木) 11:18:59 ID:nOuF1tC50]
それって呼ばれるの?
ログ吐いて確認してみたら?

245 名前:名称未設定 mailto:sage [2008/06/26(木) 20:00:15 ID:8BlZMsUG0]
>>243
-awakeFromNibはNib使わないんなら気にしなくておk

246 名前:名称未設定 mailto:sage [2008/06/26(木) 22:05:41 ID:DcE/JQ790]
>>244-245
なんか勘違いしてたみたいで、呼ぶ必要ないですね。
ありがと。


247 名前:名称未設定 mailto:sage [2008/06/27(金) 02:48:34 ID:rkAsU+Fv0]
既存クラスにメソッド追加してやるのはカテゴリでいいですけど、
インスタンス変数を追加しようと思ったらサブクラス化しかないですか?
サブクラス化するとIB上に置いてあるControlを全部変更しないといけないのでどうにか方法はないかと考えています

248 名前:名称未設定 mailto:sage [2008/06/27(金) 06:48:39 ID:5wCaEvMQ0]
>>247
ポージング(poseAsClass)でいけるかも。

ttp://journal.mycom.co.jp/column/objc/012/index.html

249 名前:名称未設定 mailto:sage [2008/06/27(金) 06:50:53 ID:5wCaEvMQ0]
あ、ごめん。だめやった。インスタンス変数追加できないんやった。

250 名前:名称未設定 mailto:sage [2008/06/27(金) 07:44:23 ID:QT0InZ8U0]
posingでinstance追加できたらのっとりでなんでもできちゃいそうだね。
それはそれで面白そうだけど何か問題があるからできないようになってるのかな。

251 名前:名称未設定 mailto:sage [2008/06/27(金) 08:25:43 ID:cVkbRC280]
>247
漏れもちょうどいまそれ悩んでた。

とりあえずそのクラスに組み込んじゃったけど、やっぱしっくりこないや

252 名前:名称未設定 mailto:sage [2008/06/27(金) 09:03:28 ID:YYux+Wek0]
posingはLeopardからdeprecatedに指定されてる。

253 名前:名称未設定 mailto:sage [2008/06/27(金) 09:20:29 ID:zgdyeD0/0]
>>247
既存クラスも自作だったら、既存クラスの名前のほうをかえて、
サブクラスのほうのなまえをもとのものにしておくという方法が。



254 名前:名称未設定 mailto:sage [2008/06/27(金) 10:21:22 ID:O3k3c+Fk0]
>>252
知らなかった。すでに64ビットアプリだとサポートされてないし。

255 名前:名称未設定 mailto:sage [2008/06/27(金) 11:31:15 ID:OEVIo/Co0]
中継クラスみたいなものを用意するってのは駄目なの?
setter と getter を書いて中継するとか。

あと、Bindingにしておけば、selectionが中継クラスになるから、
実際のターゲットクラスが変更になってもnibの変更は最小限ですむよ。


256 名前:名称未設定 mailto:sage [2008/06/27(金) 12:00:47 ID:zgdyeD0/0]
>>254
でもいろいろと別の runtime 関数が用意されてて、class の乗っ取り自体は 64 bit でも自在にできるよ。

257 名前:名称未設定 mailto:sage [2008/06/27(金) 16:00:37 ID:YYux+Wek0]
特にプラグインは危険だな。アプリ上の任意のクラスを簡単に乗っ取れるから。
自分で作ったプログラム用のプラグインを使ってブルートフォースアタックを
かけたら簡単にシリアル番号をボロボロ抜き出せた。笑うしかないね。

258 名前:名称未設定 mailto:sage [2008/06/27(金) 20:03:42 ID:pVLES8St0]
まあこの辺がiPhone SDKでダウンローダブルなプラグイン禁止の理由なんだろうね。
FireFoxが移植出来ない、一番の原因。相変わらずCNETは表面的だ。
japan.cnet.com/news/media/story/0,2000056023,20376076,00.htm


259 名前:名称未設定 [2008/06/27(金) 20:24:09 ID:5dK6eRfR0]
>>247
バインディングの実装と同じように手段を取ってみては?

バインディングした場合、NSView側でバインド先のオブジェクトとキーパスの情報を保存しなければならない。
でも、MacOSX10.3でバインドが追加されたとき、NSViewにインスタンス変数が増えたりはしなかった。
たぶんNSBinderというヘルパークラスが、NSViewに代わって、その辺の情報を保存してるっぽい。



260 名前:名称未設定 mailto:sage [2008/06/27(金) 20:42:37 ID:NSFBdoqf0]
>>259
あれってポージングで実装してるんじゃなかったの?

261 名前:247 mailto:sage [2008/06/27(金) 22:32:56 ID:W9Mj7Of10]
いろいろと意見ありがとうございます。
poseAsClassが10.5でdeprecatedになって、木下さんがどこかの記事で代替えの方法を解説してたと思うのですが。
>>259
バインドを使用すると結局たくさん線をつなぐことになりそうなのでスマートではなさそうな気がします、、。

262 名前:名称未設定 mailto:sage [2008/06/27(金) 22:39:03 ID:cN+Ohq8K0]
ポージングの代わりはメソッド交換でってアップルが言ってた。

263 名前:名称未設定 [2008/06/27(金) 22:40:13 ID:5dK6eRfR0]
>> 261
いや。バインドを使うんじゃなくて、バインドと同じ仕組みを応用すると言っています。

ところで、ポージングって、インスタンス変数の追加はできるの?
ttp://journal.mycom.co.jp/column/objc/012/index.html



264 名前:名称未設定 mailto:sage [2008/06/27(金) 22:53:14 ID:W9Mj7Of10]
ポージングでは無理そうです。
>>259を読んでおっしゃることは理解しました。

265 名前:名称未設定 [2008/06/27(金) 23:30:52 ID:5dK6eRfR0]
>>264
いちおう、詳しく説明すると。
まず、カテゴリー使ってNSViewにgetterとsetterを追加する。
- (id)hoge{ return [Helper getValueWithOwner:self]; }
- (void)setHoge:(id)value { [Helper setValue:value withOwner:self]; }
で、Helperクラス側に値を格納する。
static NSMutableDictionary* dict;
+ (id)getValueWithOwner:(id)owner{ return [dict valueForKey:owner]; }
+ (void)setValue:(id)value withOwner:(id)owner { [dict setValue:value forKey:owner]; }
こんな感じ。


266 名前:名称未設定 mailto:sage [2008/06/28(土) 00:52:34 ID:MqHAm5mY0]
>>262
MethodReplacementってやつか。

267 名前:名称未設定 mailto:sage [2008/06/28(土) 01:54:47 ID:0eKOBZUW0]
MethodReplacement
developer.apple.com/samplecode/MethodReplacement/listing3.html

その他のMethod Swizzling
www.cocoadev.com/index.pl?MethodSwizzling
rentzsch.com/trac/wiki/JRSwizzle

268 名前:名称未設定 mailto:sage [2008/06/28(土) 14:28:41 ID:KIP7kd9A0]
メソッドの+と-って何ですか?

269 名前:名称未設定 mailto:sage [2008/06/28(土) 14:31:27 ID:iKOABDQ+0]
クラスメソッドとインスタンスメソッド

270 名前:名称未設定 mailto:sage [2008/06/28(土) 14:42:57 ID:kuOvaWBW0]
クラス名 *A = [クラス名 xxx]; でインスタンスを作れるのが、 +
それ以外が -
であってるかな?


271 名前:名称未設定 mailto:sage [2008/06/28(土) 14:50:17 ID:3jJ6jb9L0]
>>268,270
頼むからObjective-C Programing Languageぐらい読んでからCocoaプログラミング始めてくれ。
今は日本語版もあるんだから。


272 名前:名称未設定 mailto:sage [2008/06/28(土) 14:52:52 ID:KXgNszZw0]
むしろ頼むからプログラミング始めないでくれ

273 名前:名称未設定 mailto:sage [2008/06/28(土) 15:03:54 ID:Pk2Ye7oi0]
むしろ神解説できたらいいのにね
分かりやすい解説シリーズキボン



274 名前:名称未設定 mailto:sage [2008/06/28(土) 15:12:15 ID:ICsN/hVj0]
クラスとインスタンスってのはプッチ○プリンの入れ物と...

めんどくせ。

275 名前:名称未設定 mailto:sage [2008/06/28(土) 15:21:45 ID:oynXjVSX0]
クラス=風俗
インスタンス=風俗嬢

276 名前:名称未設定 mailto:sage [2008/06/28(土) 15:32:53 ID:iKOABDQ+0]
そういう方向で言うとアレか。
クラスメソッド:
 デリヘル ヘルス嬢 = [デリヘル 呼び出し];

インスタンスメソッド:
 [ヘルス嬢 xxx];

277 名前:名称未設定 mailto:sage [2008/06/28(土) 15:46:52 ID:u+ckHd7H0]
ゆとりのためにゲームで説明すると
ソルジャーから派生して枝分かれしたナイト、ウィッチ、プリーストといったジョブ(クラス)のキャラ達(インスタンス達)がいたとして、
10人ぐらいのパーティだと複数人同じジョブ(クラス)の人がいるんだけど
それぞれが持ってる、戦う、防御、逃げるなんかの戦闘コマンド(インスタンスメソッド)はもとのジョブ(親クラス)から継承したコマンドで、
ウィッチのサンダーとかファイア、プリーストのヒーリングなんかはジョブ固有のコマンド(インスタンスメソッド)なわけ。
んで特殊アイテム戦いのドラムを使ってナイト全員が2回行動になったりするのがナイトのジョブコマンド(クラスメソッド)、
前衛後衛入れ替えとかで全員場所入れ替えすんのがソルジャーのジョブコマンド(親クラスのクラスメソッド)。

278 名前:名称未設定 mailto:sage [2008/06/28(土) 15:52:27 ID:u+ckHd7H0]
あー、これだとクラスメソッドについて正しく説明できてないな、、

279 名前:名称未設定 mailto:sage [2008/06/28(土) 15:52:55 ID:P5MKK7iV0]
TOとFFとDQが混じってる…?

280 名前:名称未設定 mailto:sage [2008/06/28(土) 16:16:12 ID:ICsN/hVj0]
インスタンスメソッド:
 [ヘルス嬢 チェンジ]; // raise Exception if call 3 times.

こうですか><
分かりません><

281 名前:名称未設定 mailto:sage [2008/06/28(土) 16:16:34 ID:u+ckHd7H0]
オウガバトルベースのつもりが混じってますね、、
上の流れだとalloc系のクラスメソッドをどう説明すれば良いか

282 名前:名称未設定 mailto:sage [2008/06/28(土) 17:27:39 ID:3jJ6jb9L0]
そもそも、クラスもインスタンスも、メッセージを受け取れる「オブジェクト」であるという点では違いはないんだ。
しかし例えば画面上の無数のウインドウがあったとき、それらは全て別々のオブジェクトであるのだが、
その動作を規定しているのは共通のコードなわけだ。それが「クラス」。
対してウインドウの位置や中身などは全て別物だ。その情報を保持するのが「インスタンス」。
よくタイヤキの型(クラス)とタイヤキ(インスタンス)に例えられるな。型はおなじでも出来たタイヤキの中身は変えられる。
俺はクラスはイデアだと思ってるけど。

じゃあ動作を規定すると言ったけど、ウインドウにメッセージを送るときそれを受け取るのはインスタンスだ。
インスタンスが受け取るメッセージ(に対する動作)を規定するのが「インスタンスメソッド」だ。
クラスもオブジェクトである以上、クラスが受け取るメッセージもある。それを規定するのは「クラスメソッド」になる。
で、これを実際にObj-Cで書くときには、クラスメソッドの定義には「+」、インスタンスメソッドの定義には「-」をつけてる。

クラスメソッドの用途は確かにそのクラスのインスタンスを作るものが多い。allocを始めとして。
ただしそれに限るものでもない。全インスタンスに共通な性質を設定するアクセサだって作れるし。

283 名前:名称未設定 mailto:sage [2008/06/28(土) 17:39:16 ID:3jJ6jb9L0]
ちなみに、クラスとインスタンスはどちらもオブジェクトである…んだが、Obj-Cの場合はさらにこう言える。
「クラスオブジェクトはNSObjectクラスのインスタンスとして扱える」
つまり例えば、クラスをNSArrayにつっこむということは普通に出来る。ていうか俺もやる。例えば
[anMutableArray addObject:[NSString class]];
とするとNSStringクラスがオブジェクトとしてanMutableArrayに追加される。

ということで、-と+、インスタンスメソッドとクラスメソッドは
一つのファイルの中で2種類のオブジェクトの動作を定義する必要があるから、存在するとも言える。



284 名前:名称未設定 mailto:sage [2008/06/28(土) 18:03:52 ID:u+ckHd7H0]
すげええクラスとかまんまArrayに入れたりできるんですか!
ちなみにどういった用途で使うんでしょう?
便利な使い方が想像できないです、、

285 名前:名称未設定 mailto:sage [2008/06/28(土) 19:19:37 ID:wWVbcxHq0]
クラスで
外部から呼べるのが-
内部でしか呼ばないのが+

という理解でよろしいですか?


286 名前:名称未設定 mailto:sage [2008/06/28(土) 19:35:34 ID:3jJ6jb9L0]
>>284
コンパイル時にはどういうクラスを何個使うか分からないとき…かな。別にNSArrayに限らず、NSDictionaryでもいいし
Class型やid型に入れてもいい。

>>285
内部と外部の意味がよく分からん。
[[NSString alloc] init]; のallocはクラスメソッドで、initはインスタンスメソッドだが、この文に内部も外部もないだろ。
どちらもオブジェクトにメッセージを送っているにすぎない。呼べる呼べないで言えば、
[NSString init]はできないしNSString *aStringに対して[aString alloc]はできない。それだけ。


287 名前:名称未設定 mailto:sage [2008/06/28(土) 19:38:06 ID:3jJ6jb9L0]
ってNSStringクラスはNSObjectのインスタンスとしても扱える訳だから、[NSString init]は呼べるか。
多分意味はないし、実際に試したことはないけど。


288 名前:名称未設定 mailto:sage [2008/06/28(土) 19:43:10 ID:yHYqfuzX0]
>>285
クラスとインスタンスの関係は理解してる?

クラスって云うのは、いわば機械の設計図みた様なもので、材料とかその分量とか作る手順が書かれてる。インスタンスはその設計図を基に作った現物。

でまあ、+がついてるの = クラスメソッド が レシピについての操作。材料の分量を変更するとか、材料を準備するのもこれに入ってる。
要は、クラスに対する操作な。

で、現物を使ってテレビ点けたり、部屋冷やしたりする様な作業が-のついたインスタンスメソッド。例外的に用意した材料を加工するのもこれに当たる。

例えば、まあこんな感じかな。

// 疑似コード
パイ' = [パイのレシピ 材料の準備]
パイ = [パイ' 調理]

ここで、『材料の準備』はレシピについて行われてるから、クラスメソッドの呼出し。で、この後の調理は材料=ほぼ現物に対して行われてるから、インスタンスメソッド。一々こうかいてるのは面倒だから、

パイ = [[パイのレシピ 材料の準備] 調理]
みたいな感じで呼べる。


……こんな感じでおk?

289 名前:名称未設定 [2008/06/28(土) 22:02:07 ID:r6CxQJy60]
>>283, >>287
classはid型だけど、NSObjectのサブクラスとかじゃないよ。



290 名前:名称未設定 mailto:sage [2008/06/28(土) 22:14:41 ID:5Bx5r4xK0]
ここの盛り上がりに比べてiPhoneアプリ製作スレの中身の無さといったら

291 名前:名称未設定 mailto:sage [2008/06/28(土) 22:31:29 ID:oyobADpU0]
デリヘル嬢と本番するにはどんなメソッドを呼んだらいいの?

292 名前:名称未設定 mailto:sage [2008/06/28(土) 22:42:08 ID:yHYqfuzX0]
>>291
[[デルヘル嬢 alloc] init]

293 名前:名称未設定 mailto:sage [2008/06/28(土) 22:42:48 ID:ZeRWvCBY0]
release



294 名前:名称未設定 mailto:sage [2008/06/28(土) 23:01:21 ID:5Bx5r4xK0]
デリヘル嬢 デリ嬢 = [[デリヘル嬢 new] retain];
[デリ嬢 setMoney:1万];
[self setSkin:[Skin skin]];
[デリ嬢 play:self];
[self 射精];
[デリ嬢 release];
書いてて死にたくなってきたわ
以後建設的な話しを

295 名前:名称未設定 mailto:sage [2008/06/28(土) 23:22:14 ID:EmOAb5fu0]
処理中にキャンセルボタンでキャンセルさせたいのですが、
どうすればよいのですか?
処理はfor文とかで回してるのですが。

296 名前:名称未設定 mailto:sage [2008/06/28(土) 23:27:19 ID:3jJ6jb9L0]
>>289
失礼。正確には、
「NSObjectのサブクラスのクラスオブジェクトは、NSObjectのインスタンスメソッドを持つとして扱える」かな。
えーと例えば、
[NSString isKindOfClass:[NSObject class]] とするとYESが返ってくる。
クラスオブジェクトに対してrespondsToSelector:やperformSelector:が効くのもこのおかげだと思う。


297 名前:名称未設定 mailto:sage [2008/06/28(土) 23:43:35 ID:+zEqA0Er0]
メタクラス等はこれがわかりやすいよ
journal.mycom.co.jp/column/objc/016/index.html
journal.mycom.co.jp/photo/column/objc/016/images/MetaAndSuperl.jpg

298 名前:名称未設定 mailto:sage [2008/06/28(土) 23:48:33 ID:oynXjVSX0]
>>295
ボタンが押されたforループから抜ければいいじゃん

299 名前:名称未設定 mailto:sage [2008/06/29(日) 00:38:06 ID:XlViJVqL0]
ループを別スレッドに分ける。


300 名前:名称未設定 mailto:sage [2008/06/29(日) 02:11:05 ID:ywkudbmZ0]
>>294
leakしてる

301 名前:名称未設定 mailto:sage [2008/06/29(日) 02:40:08 ID:QGzHDlD00]
使用後のゴムが小学校の校庭に落ちていたのを思い出した。
ちゃんと処分しろよな。

302 名前:名称未設定 mailto:sage [2008/06/29(日) 03:10:56 ID:t568XiuI0]
AVMovie* movie = [[AVLibrary sharedLibrary] objectForKey:@"InranJoshiKose"];

[self watchMovie:movie];
[self playWith:self];

[[AVLibrary sharedLibrary] removeObjectForKey:@"InranJoshiKose"];

[self sleep];

303 名前:名称未設定 mailto:sage [2008/06/29(日) 05:58:26 ID:azI+MvI70]
>>295
forループでなくて、runLoopにて処理させるってのもある。
performSelector:withObject:afterDelay:を待ち0で指定。
次のrunloopで動く。

これだと、ループのなかでGUIの更新とかイベント処理とか
全部出来るからべんりだお



304 名前:名称未設定 mailto:sage [2008/06/29(日) 06:27:34 ID:GLTNi95n0]
CoreAnimationで明示的なアニメーションをさせているのですが
アニメーションが終了するとレイヤーが開始時の状態に戻ってしまいます。
終了時の状態をキープさせるにはどうすれば良いのでしょうか?

305 名前:304 mailto:sage [2008/06/29(日) 09:43:32 ID:GLTNi95n0]
自己レスです

CABasicAnimation* animation;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;

でいけました。kCAFillModeForwardsが何なのかよく分かっていませんが。

306 名前:名称未設定 mailto:sage [2008/06/29(日) 10:33:07 ID:G8HUtWbV0]
NSTextViewを2つ左右に配置して、改行数も同じなテキストを表示してるんですが
この2つのTextViewの垂直スクロールを同期(ホイール、スクロールバー操作時)させるにはどうしたらいいのでしょうか。。

307 名前:名称未設定 mailto:sage [2008/06/29(日) 10:39:31 ID:4W+71IXB0]
>>306
NSScroller用のValueを誰かに持たせて両方にbindする。


と、何も試さずに言ってみる。

308 名前:名称未設定 mailto:sage [2008/06/29(日) 11:40:38 ID:U0RClpmA0]
>>306
ドキュメントで SynchroScroll を「全文検索」する。



309 名前:名称未設定 mailto:sage [2008/06/29(日) 14:13:09 ID:BWFM2zTG0]
すみません。
2つのNSSplitViewで片方のNSSplitViewのディバイダーを動かした時に
もう片方のNSSplitViewのディバイダーをシンクロさせる方法はありますでしょうか?

310 名前:名称未設定 mailto:sage [2008/06/30(月) 18:37:03 ID:LJd79rmJ0]
HMDTの2nd読んでるんだけど
cocoaバインディングのとこで

バインディング用のNSObjectControllerにある "content"というアウトレット
これってIndentify Inspectorにはでてこないんですが
(Connectionsにはでてくる)
具体的になにをやってるんでしょうか??

311 名前:310 mailto:sage [2008/06/30(月) 19:36:45 ID:LJd79rmJ0]
これってIndentify Inspectorにはでてこないんですが

でてきてます。

すいません勘違い。。



312 名前:名称未設定 mailto:sage [2008/07/02(水) 00:28:07 ID:BE+n65l+0]
Cocoaセミナーの資料、Leoaprd対応前のヤツどこかで入手できないでしょうか?
もしくは誰かどこかにアップして頂けると嬉しいのですが・・・
中級編と上級編を

313 名前:名称未設定 mailto:sage [2008/07/02(水) 09:26:55 ID:TLvP2d9t0]
>>312
あきらめてレパードをかいましょう。1万円の投資はいみがあります。
なるべくAppleの提供しているとおりするのが混乱が起きなくて良いです。
Apple はどんどん過去を切り捨てる会社だからプログラムしようとおもったら仕方がないです。



314 名前:名称未設定 mailto:sage [2008/07/02(水) 10:22:32 ID:7uYmBryr0]
Leoaprd使ってるんですが都合上、メイン環境はまだDeveloperTools2.5なんで...

で、自己解決ですが色々ググってたらありました。
hmdt-web.net/Cocoa/

315 名前:名称未設定 mailto:sage [2008/07/02(水) 10:24:05 ID:TLvP2d9t0]
それはすいません。どういう都合なのか興味深いんですが。

316 名前:名称未設定 mailto:sage [2008/07/02(水) 11:01:19 ID:6x1NISwO0]
>>314じゃないが、自分もメイン環境はTiger。
仕事で使うアプリがTiger用…っていうかLeopardに移行して余計なトラブルを起こしたくない
といった都合。

317 名前:名称未設定 mailto:sage [2008/07/02(水) 11:40:09 ID:7uYmBryr0]
僕も仕事とか、トラブルを避けたいってのがあります。

それと、自分の知識が、まだ段階的に、OS 10.3〜10.4の新しいAPI勉強中、というぐらいなので
(そんなんで仕事すんなって話ですが)、Xcode3への移行も含めた10.5の勉強は後回しにしたいのです。

318 名前:名称未設定 mailto:sage [2008/07/02(水) 12:22:08 ID:TLvP2d9t0]
>>317
なるほど。でも XCode 3.1 (iPhone SDK についてるやつ)は全然機能豊富でいいよ。XCode でも Tiger 用のソフト作れるから、XCode だけは 3.1 にしてもいいんじゃないかな...

まあ Interface Builder の仕組みとかわかってないと、見た目が案外変わってるから混乱するかもしれないけど。

319 名前:名称未設定 mailto:sage [2008/07/04(金) 17:15:58 ID:kZM2vvAg0]
CoreAnimationについて質問です。
CoreAnimationを使うと位置や不透明度を指定するだけで中間フレームが補完されますが
アニメーションさせずに位置などを変更する方法は無いのでしょうか?

320 名前:名称未設定 mailto:sage [2008/07/04(金) 17:26:12 ID:BBNuNSR70]
>>319

コードを共通にしたいなら、Durationを0にするのが簡単。

321 名前:名称未設定 mailto:sage [2008/07/04(金) 19:15:07 ID:KXtWY3ng0]
CoreAnimation使わなきゃいいだろw
なんのためのAnimation機能だよ

322 名前:319 mailto:sage [2008/07/04(金) 20:12:49 ID:hXaLDE1k0]
自己解決。トランザクション設定でいけました。

>CoreAnimation使わなきゃいいだろw
>なんのためのAnimation機能だよ
一瞬だけ無効にしたい事は結構あると思うけど。

323 名前:名称未設定 [2008/07/05(土) 23:17:33 ID:bbZv5NPd0]
age



324 名前:名称未設定 mailto:sage [2008/07/07(月) 17:54:09 ID:kroflgcW0]
思いっ切り余談なんだけど、新し物好きとか見てると、
なんか3日に1回は0.1バージョンアップしてトップページに
載せて貰って、DLを稼ごうとしてるアプリがない?

いやまあ、別にいいんだけどさ。
新し物好きの人とか大変そうだなあと。


325 名前:名称未設定 mailto:sage [2008/07/07(月) 18:45:38 ID:pUa99p1P0]
新し物好きの人はどうでもいいんだが、
あまり改良点が少ないと、わざわざダウンロードしてくれた人に申し訳ない。

自分なら改良点が5個くらい溜まるまで+0.1は控えるな。
そうすると新バージョンの公開は大体1年に2回くらいになる。
バグフィックスは1個だけでも+0.0.1するけどな。

326 名前:名称未設定 mailto:sage [2008/07/07(月) 22:35:04 ID:+XUVksz/0]
>>324
新し物好きの人はそれで稼いでるんだからいいんじゃない?
ユーザーとしてはバージョンアップ歓迎だし。

327 名前:名称未設定 mailto:sage [2008/07/08(火) 08:23:22 ID:AK0ZWKsw0]
ソフトのとこクリックすると
新しもの好きにお金がはいるシステムだったんだ?


328 名前:名称未設定 mailto:sage [2008/07/08(火) 11:44:46 ID:hfpgV8/00]
直リンだし別に金は入らないかと。

329 名前:名称未設定 [2008/07/09(水) 00:43:24 ID:zn8zpXSM0]
バナー掲載料

330 名前:名称未設定 mailto:sage [2008/07/09(水) 22:25:40 ID:cjjoVqS60]
現在のマウスポインタがビュー内の特定の領域内にあるかどうかを判定したいんですが
QuickDrawでいうところのRegionはCocoaではなんと呼ぶんでしょうか?

331 名前:名称未設定 mailto:sage [2008/07/09(水) 22:29:36 ID:sdo/FFS+0]
知らん
NSMouseInRectでググれ


332 名前:名称未設定 mailto:sage [2008/07/09(水) 22:32:23 ID:6VjgO1TE0]
>>330
俺も昔は気になってたが、不定形はNSBezierPath使って判定してる

CGRegionだっけ?そんなのもあったような

333 名前:名称未設定 mailto:sage [2008/07/09(水) 22:40:03 ID:cjjoVqS60]
>>332
なるほど、NSBezierPathで領域を作って、containsPointで判断すればいいんですね
ありがとうございました



334 名前:名称未設定 [2008/07/12(土) 23:55:07 ID:stdBe7cl0]
sage禁止

335 名前:名称未設定 mailto:sage [2008/07/13(日) 11:37:30 ID:HJA7K/r+0]
NSString で、例えば "2ch" みたいに、ダブルクォーテーション付きで
文字を表示させたいときは、

NSString * string = @"( ? )";

で、 ( ? ) のところにどう記述すればいいでしょうか。


336 名前:名称未設定 mailto:sage [2008/07/13(日) 11:39:09 ID:h5XyjEmR0]
@" ¥" ¥" "
というふうにバックスラッシュ ¥ をつけます。
2ch に書き込むとバックスラッシュと円記号がごっちゃになる気がするけど ...


337 名前:名称未設定 mailto:sage [2008/07/13(日) 11:39:52 ID:h5XyjEmR0]
やっぱり円記号になった ...
XCode で日本語キーボードなら、Opt-円記号でやるとでる、/ と傾きが反対向きのスラッシュをつかってください。

338 名前:335 mailto:sage [2008/07/13(日) 11:45:34 ID:HJA7K/r+0]
>>336=337
できました!
ありがとう

339 名前:名称未設定 mailto:sage [2008/07/13(日) 11:53:54 ID:9BVhVzTm0]
まめ知識
NSString *AAA = @"aa";
NSString *BBB = AA @"bb";

とかくと、コンパイラで自動で結合されて
NSString *BBB = @"aabb";
と同義になる

340 名前:名称未設定 mailto:sage [2008/07/13(日) 13:14:40 ID:u+yV8IfN0]
>>339
> NSString *BBB = AA @"bb";

AAA@"bb";
かな?

341 名前:名称未設定 mailto:sage [2008/07/13(日) 13:26:45 ID:NHNxxr7S0]
間にスペースとか改行とかを入れると、ばしっとつながる。
(コンパイラでの接続なので定数オブジェクトに限られるけど)

NSString *strings = @"aaaa¥n"
@"bbbb¥n" @"cccc¥n";

#define SomeString @"index.htm"

NSString *TheURL = @"http:/aaa.com/" SomeString @"#anchor";

みたいな感じで、定義分と組み合わせると、条件によって文字を交換とかできる。


342 名前:名称未設定 mailto:sage [2008/07/13(日) 13:43:48 ID:u+yV8IfN0]
へえ、知らなかった。
面白いね、ありがとう。

343 名前:名称未設定 [2008/07/13(日) 14:11:00 ID:iD5vJJHB0]
age



344 名前:名称未設定 mailto:sage [2008/07/13(日) 14:18:31 ID:Y1Ak5AxY0]
Cの文字列リテラル連結と同じ要領だな

345 名前:名称未設定 mailto:sage [2008/07/13(日) 22:30:18 ID:rN/PKW4q0]
iCalみたいに、起動してないアプリのアイコンを書き換えるにはどうすればいいんですか?

346 名前:名称未設定 mailto:sage [2008/07/13(日) 22:39:15 ID:ZrJCFMn30]
[[NSWorkSpace sharedWorkspace] setIcon: SomeIcon forFile: fullPath options: nil];
とかでファイルのアイコンを書き換える。みたいなのかな

347 名前:名称未設定 mailto:sage [2008/07/13(日) 22:41:23 ID:u+yV8IfN0]
>>345
>>90

348 名前:名称未設定 mailto:sage [2008/07/14(月) 10:09:46 ID:nTc4Tt9A0]
HMDT 3rd 本を読んでいるところです。
core data のサンプルで、3ペインのMailアプリケーションのようなサンプルがあります。
左のテーブルにMailbox、右上のテーブルにMailboxに含まれるMailのリスト、その下にメールの内容が表示されるものです。
このサンプルを使って、Mailboxを作成、Mailを複数追加。
その後、Mailをリストから削除すると、
~/LIbrary/Application Support/Mail/Mail.xml
の中に削除したMailの部分だけ残るようになってしまいます。
Mailboxごと削除してもその部分だけ残ります。
自分でデータ削除用のコードを書かなければならないのでしょうか?
それとも設定をミスってる?

環境は、Tiger + Xcode2.5 です。
ヒントだけでもお願いします。


349 名前:名称未設定 mailto:sage [2008/07/14(月) 11:30:23 ID:uGWsnIyx0]
>自分でデータ削除用のコードを書かなければならないのでしょうか?
うん。というかハードディスク余ってるんだから、別に消さなくても ...

350 名前:名称未設定 mailto:sage [2008/07/14(月) 12:20:57 ID:kfMtczJR0]
>の中に削除したMailの部分だけ残るようになってしまいます。
削除していないMailは消えてるの??

コアデータは(デフオだと)アプリを終了しないとXMLに書き込まれないよ。
あと、削除といってもフラグを立ててるだけかもしれないし。


351 名前:名称未設定 mailto:sage [2008/07/14(月) 13:02:28 ID:nTc4Tt9A0]
ありがとうございます。
>>349 さん
追加と削除を繰り返すだけでデータが増えていないのに、ファイルサイズが大きくなっていくのが気持ち悪かったので...

>>350 さん
>削除していないMailは消えてるの??
書き方が分かりにくかったでしょうか。
削除したMailがxmlファイルにはずっと残ってしまうという状態です。
例えば
アプリを起動 > Mailboxを1つ作成 > Mailを2件登録 > Mailを1件削除 > Mailboxを削除 > アプリ終了
で、確認すると削除したMailだけ残っています。
上の例で、Mailboxを削除しなければ、MailboxとMail2件が残っています。
削除ボタンはMail用のArrayControllerのremoveアクションに繋がっています。
Mailboxを削除するボタンもMailbox用ArrayControllerのremoveアクションに繋がってますが、Mailboxは追加や削除を繰り返してもきちんと削除されます。

352 名前:名称未設定 [2008/07/14(月) 13:49:19 ID:iCe9YYmu0]
>>351
見当違いかもしれないけれど、MailboxのrelationshipからだけMailを削除しているだけではないですか?

Deletes Objects on Remove オプションはどうなっていますか?



353 名前:名称未設定 mailto:sage [2008/07/14(月) 13:59:47 ID:nTc4Tt9A0]
>>351 さん
ありがとうございます。
Deletes Objects on Remove オプションがOFFになってました。
ONにすれば削除されますね。
お恥ずかしい限りです...

と言う事で解決致しました。
レス頂いた皆様、ありがとうございました。



354 名前:名称未設定 mailto:sage [2008/07/14(月) 14:01:06 ID:nTc4Tt9A0]
アンカー間違えました。
351でなく >>352 です。

355 名前:名称未設定 mailto:sage [2008/07/18(金) 12:43:58 ID:EhXln+vS0]
そういや、気がついたらxibになってたけど、awakeFromXibにはならないのか。

356 名前:名称未設定 mailto:sage [2008/07/18(金) 19:06:01 ID:Lq/H4W2N0]
xibはビルドするとnibになるよ。

357 名前:名称未設定 mailto:sage [2008/07/19(土) 00:17:13 ID:OkWOTiQ/0]
awakeFromDeb

358 名前:名称未設定 mailto:sage [2008/07/19(土) 11:34:30 ID:yEZ0hIqg0]
何でもかんでも初期処理をawakeFromNibに書いて特に不具合もないのですが、
initWithなんたらに書いた方がいいんですかね?

昔はawakeFromNibがなかったからinitWithなんたらで書いてた、
なんて記事を見た記憶もあるのですが。

359 名前:名称未設定 mailto:sage [2008/07/19(土) 12:53:13 ID:N9OU6Tmk0]
>>358
initWith... は nib から目覚めたときには呼ばれないよ。
initWith... は IB でオブジェクトをつくったときに呼ばれていることになってる。

nib につくっておいてない、自分でプログラム内でつくるオブジェクトは initWith を alloc] initWIth... ] でつくりますが。

360 名前:名称未設定 mailto:sage [2008/07/19(土) 13:20:13 ID:c4RN+gO80]
>>358
ここらが落とし穴らしい。
www013.upp.so-net.ne.jp/tanken/Tanken/no4_PitfallOfNib.html

361 名前:名称未設定 mailto:sage [2008/07/20(日) 00:04:28 ID:OkWOTiQ/0]
そうそう、awakeFromNibはクラスの実装内容によっては複数回呼ばれるんだよね

362 名前:名称未設定 mailto:sage [2008/07/20(日) 01:07:49 ID:7BP6qNun0]
>>358
Viewだとnibに置いた場合はinitWithCoder:が呼ばれる。
俺はnib以外で使う場合も考えて、共通の初期化メソッドを作っておいてinitWithFrame:とinitWithCoder:から呼んでる。
アウトレットを使って何かする必要があるときはawakeFromNibも使う。

363 名前:名称未設定 mailto:sage [2008/07/20(日) 11:04:14 ID:3L2wlaQd0]
便乗して質問

initWithCoder で渡される coder って、具体的に何で、
誰から渡されてるんでしょうか。

デカいデータを必要になったときだけ読み込みたくて、
initWithCoder の中でそのデータだけは decode せず、
後から明示的に decode させるようにしたいんですが。




364 名前:名称未設定 mailto:sage [2008/07/20(日) 11:41:21 ID:7BP6qNun0]
>>363
「Archives and Serializations Programming Guide for Cocoa」を読むと分かると思う。
ただしでかいデータを遅延読み込みなんてのはそもそもcoderに頼むべきことじゃない。
何故ならcoderがどうやって、どんな形式でファイルを保存しているかを気にしなくていいのがこの方式の利点だから。

やるとしたら、そのでかいデータは別のオブジェクトにして、そのキーだけを保存すればいい。
ファイルに保存したいなら、別ファイルにするか、バンドルを使えばいい。

365 名前:名称未設定 mailto:sage [2008/07/25(金) 12:33:10 ID:mF3swvCE0]
Youtube APIを使用してYoutube Player/Downloaderを作成しているのですが、
ダウンロード機能のAPIはなく、サイトページを受信してリンクの文字列を抜き出して
うんぬんしか方法はないのでしょうか?

抜き出しスクリプトを探すとperl、php、pythonのスクリプトはあるのですが、
objective-cで処理してるのがなさそうです。(正規表現が弱いからできないのかな?)


366 名前:名称未設定 mailto:sage [2008/07/25(金) 12:36:08 ID:cN0vq8T+0]
まあ正規表現使わなくても NSScanner でごにょごにょやれば出来ると思いますが。面倒だけど。
NSTask で perl かなんか呼んだほうがかんたんかも。

367 名前:名称未設定 mailto:sage [2008/07/25(金) 15:35:45 ID:QoefX31z0]
NSXML関連は?

368 名前:名称未設定 [2008/07/25(金) 18:05:01 ID:AYy3UwPY0]
基本的な質問です
CocoaはRPGのようなゲームを作るのに向いていますか?
Macでゲーム開発するのはObj-Cでokでしょうか?

369 名前:名称未設定 mailto:sage [2008/07/25(金) 18:27:36 ID:AHiEGlWW0]
>>368
Core AnimationとかOpenGLとかも使えるしObj-Cでおk


370 名前:名称未設定 mailto:sage [2008/07/25(金) 19:45:44 ID:hr980FSd0]
>>368
そのゲームのスペックや内容にもよりますが、Cocoaはゲーム用のフレームワークじゃないからね。
Cocoaを使わないなら、ObjCを使うメリット半減って感じがするし。
もし、パフォーマンスを追求することになるなら、逆にObjCは不向きな気もします。



371 名前:名称未設定 [2008/07/25(金) 20:08:20 ID:AYy3UwPY0]
アドバイスありがとうございます
RPGツクールをやっていてちょっと高度な事がやってみたくなった
程度のものですので、内容としてはまったく低レベルなものです
ドラクエみたいなのをイメージしています。他に同じような事をやってる方のサイトでも
あれば良いのですが、内容なのでまずは全体像をつかむ所から勉強してみようと思います

372 名前:名称未設定 mailto:sage [2008/07/25(金) 20:13:53 ID:Rns0Tosq0]
>>371
ttp://www1.odn.ne.jp/horiguchi/SoftWare.html

373 名前:名称未設定 mailto:sage [2008/07/25(金) 23:24:46 ID:cN0vq8T+0]
ゲームをつくるときは OpenGL でやるのが普通なんじゃないでしょうか。
でも、そもそもゲームの画面を表示するウインドウを表示したりとかいうあたりは
Obj-C と Cocoa でやらないといけないと思います。
(まあ Carbon +C でやってもいいけど、資料も少ないし、かえって大変だとおもう)



374 名前:名称未設定 mailto:sage [2008/07/25(金) 23:52:01 ID:K08YB9VO0]
アクションゲームには不向きだと思うけど、CoreAnimationってそれなりにゲームに使えそうな気がするんだよね。特に、ビジュアルノベルゲームとか。Core Animationのサンプルにカードゲームはあった気がする。

375 名前:名称未設定 mailto:sage [2008/07/26(土) 00:39:11 ID:5uCYidXZ0]
>>370
まぁ、同じオブジェクトに同じメソッドを繰り返し呼ぶ場合には、
MethodForSelectorで関数ポインタを取得してそこから呼び出せば
速度が向上したりする。メソッドではなく関数で処理したらいい部分とかは
関数で組んでやるといいのかもね。


376 名前:名称未設定 mailto:sage [2008/07/26(土) 01:23:05 ID:HVS8eIt00]
Pangeaがゲーム開発者向けのプログラミングガイドを公開してる。
あんまCocoaって感じじゃないけど
ttp://www.pangeasoft.net/book/index.html


377 名前:名称未設定 mailto:sage [2008/07/26(土) 02:12:35 ID:UyOrFXTo0]
Obj-CはCも混ぜて書けるんだから、速度出したいところではどうにでもなるだろう。

378 名前:名称未設定 mailto:sage [2008/07/26(土) 16:15:53 ID:Hv7t3I4z0]
Cocoa / Objective-C がゲームに不向きとは思えません。
Doom が NEXTSTEP で開発されたことを思い出して欲しいです。
むしろ今の環境の方がマシンパワーが上がっていて有利に思えます。

379 名前:名称未設定 mailto:sage [2008/07/26(土) 17:17:50 ID:pdFJtDbq0]
>>365
>>366の言うようにNSTaskからLL言語を呼ぶのは楽でいいと思う。
俺も自分用の手抜きアプリとかは基本的な処理はRubyに投げてる。

正規表現なら個人的にcocoaonigurumaがおすすめ。
limechat.net/cocoaoniguruma/index_ja.html

380 名前:名称未設定 mailto:sage [2008/07/26(土) 19:06:22 ID:7j8Urm4Q0]
あと有名どころでは OgreKit ってのがあるよな。
www8.ocn.ne.jp/~sonoisa/OgreKit/

あとはRegexKit/Regex Kit Lite とか。

381 名前:名称未設定 mailto:sage [2008/07/26(土) 20:36:32 ID:MNwjOzXJ0]
CoreMIDIをつかったアプリケーションのプログラミングをしたいのですが、何か良い参考資料はないでしょうか
ADCの中を見ていても、CoreAudio関連の詳細な資料が見つけられないので困っています
とりあえず、当面の目標は、システムエクスクルージブなどのMIDIデータをMIDIに流すだけのプログラムで
外部MIDI音源の音色エディットなどに使えるものを作ろうとしているのですが
MIDIエンドポイントにデータを渡す方法からして、どこをどう調べれば良いのかわかりません
環境はMacOS X 10.4.11,Xcode2.5です

ちなみに、私自身のプログラミングスキルは、大学時代にC言語のコンソールアプリケーションをいくつか作った事がある程度で
オブジェクト指向プログラミングは先週始めたばかりです
古本屋で見つけたXcode2入門という本で一通りXcodeとInterfaceBuilderの使い方は覚えました

382 名前:名称未設定 mailto:sage [2008/07/26(土) 20:46:29 ID:AdlohJ0J0]
>>381
ttp://www.stripe-net.jp/cocoa/products/midiwind2/index.html
ここに、MIDIプレイヤーのソースコードがあるよ。

383 名前:名称未設定 mailto:sage [2008/07/26(土) 21:09:06 ID:MNwjOzXJ0]
>>382
ありがとうございます
読んでみます



384 名前:名称未設定 mailto:sage [2008/07/26(土) 21:29:04 ID:xAyOBL3b0]
つ ttp://chiba.cool.ne.jp/exprism/other/coreaudio_doc/music_player/music_player_file1.html

385 名前:名称未設定 [2008/07/27(日) 00:14:58 ID:vnIR5zO10]
質問です。
SDKのOpenGLのサンプル
/Developer/Examples/OpenGL/Cocoa/CocoaGL
で、C++のコードを追加しようと思い、
Foo.cpp, Foo.h
を追加して、
空のクラスを追加したのですが、コンパイルエラーが2000個近く出てしまいました。

どういう原因が考えられるでしょうか。

新規プロジェクトでCocoaアプリケーションやiPhoneのプロジェクトを作成した場合は、同様の事がうまくいくのですが・・・。

386 名前:名称未設定 mailto:sage [2008/07/27(日) 00:26:56 ID:CKmeY8Xx0]
あまり詳しくは分からないけれども…
こういうのが参考になれば。

ttp://developer.apple.com/documentation/MusicAudio/Reference/CACoreMIDIRef/MIDIServices/CompositePage.html
ttp://chiba.cool.ne.jp/exprism/other/coreaudio_doc/midi_notifications/midi_notifications.html
ttp://ameblo.jp/nowhere-land/page-4.html

387 名前:名称未設定 mailto:sage [2008/07/27(日) 00:50:25 ID:0wQFrli+0]
>>385
コンパイルエラーの内容が少しでも分からないと、何もアドバイスできないのだが。



388 名前:名称未設定 mailto:sage [2008/07/27(日) 00:52:35 ID:QkLCg1mE0]
>>385
根本的な解決にならんかもしれんが拡張子をcppからmmに変える

389 名前:名称未設定 mailto:sage [2008/07/27(日) 00:54:50 ID:CKmeY8Xx0]
>>385
C++のコードを追加したとあるけれど、新しくクラスを追加という事は
ココアのクラスの中にC++のコードを組み込んだという事でしょうか。
もしそうであるなら、拡張子をmにしてみるとか。

390 名前:名称未設定 mailto:sage [2008/07/27(日) 01:04:35 ID:vnIR5zO10]
みなさん、レスありがとうございます。
>>387さん
ごもっともです。すみません。ただ、2000個近くあるので、どれをどう説明すればいいか・・・

>>388さん
試してみます。ただ、マルチプラットフォームにしたいコードをC++で書いていて、それをCocoaから利用したいという想定なので・・・。

>>389さん
いえ、単に.cppと.hをプロジェクトに追加しただけです。Cocoaのクラスに直接干渉させるようなことはしていません。
追加した.cppをビルドの対象から外すと、問題なくビルドが通ります。

391 名前:名称未設定 mailto:sage [2008/07/27(日) 01:25:55 ID:G0AeuOUq0]
ビルドのオプションじゃない

392 名前:名称未設定 mailto:sage [2008/07/27(日) 01:34:32 ID:QkLCg1mE0]
>385
新規ファイル追加でtest.pchを作る
test.pch
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

ビルドオプションの
GCC4.0 languageの項目
Prefix Headerの項目をダブルクリックして入力されているのを削除し
test.pchを入力する
で、ビルドする

書いてて内容が良くわかってないから
Developerからコピーしてからやってみて

393 名前:名称未設定 mailto:sage [2008/07/27(日) 01:58:17 ID:0Z6SChht0]
>ごもっともです。すみません。ただ、2000個近くあるので、どれをどう説明すればいいか・・・
まずいちばん最初から5つぐらいのエラーを教えてください。
後ろのほうのエラーは単に前のほうのエラーでコンパイラが混乱して
変なことをいってるだけのことが多いです。



394 名前:392 mailto:sage [2008/07/27(日) 01:58:29 ID:QkLCg1mE0]
サンプルコードのPrefix Headerに$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h
が書いてあってcppファイルの時でもObjective-cのコードが関係してきてコンパイルエラーが出てるっぽい
そのパスを削除するだけでビルドできる様になったが、Prefix Headerはコンパイル時間を高速化するだけで
無くても問題なし?

395 名前:名称未設定 mailto:sage [2008/07/27(日) 07:59:45 ID:dQ9C+Nti0]
「全角で書いてました」とかだったら大笑い

396 名前:名称未設定 mailto:sage [2008/07/27(日) 09:24:26 ID:mkJjDbWC0]
>>393
たんにC++コードに誤りがあるってことはないよね?

397 名前:名称未設定 mailto:sage [2008/07/27(日) 10:57:21 ID:DcKmiVLG0]
>>394
>無くても問題なし?

なし。というかエラーがでなくなることがまずは重要。
もしその推測が正しいなら、ビルドの設定でコンパイラのデフォルトの言語を
Objective-C++にしてもいいかもしれない。

398 名前:名称未設定 mailto:sage [2008/07/27(日) 11:41:37 ID:C9Bb+G9B0]
手元にXcodeの2.5しかないんだけど、3.0には「Objective-CでC++デフォルトコンストラクタ/デストラクタを呼び出す」は
あったっけ?これにチェックが入ってないとC++のコードで大量にエラーが出ると思うんだけど。

399 名前:名称未設定 mailto:sage [2008/07/27(日) 12:04:55 ID:XmdTpJa10]
3.1で Info パネルにそれに相当する項目があからさまにあるかは知らないけど、
何にせよ -fobjc-call-cxx-cdtors を指定すればいいです。
あと、べつにそのオプションをチェックしなくても、C++の文脈で
default constructor / destructor が呼ばれなくなるわけじゃなくて、
そのオプションは、Obj-C のクラス内にメンバ変数として
C++ のクラスのインスタンスを置いたときに、
alloc init 時にそれらのコンストラクタを
呼ばせるためのオプションなので、滅多に関係ない気がします。
というか @class 内に C++ のクラスのポインタで無いインスタンスを置くなと。

400 名前:名称未設定 [2008/07/27(日) 16:18:25 ID:n359+EOk0]
さっき書き込んだのに反映されなかったのでもう一回。

NSTableViewで選択されたアイテムを表示する時に、
ハイライトじゃなくて下線で提示してあげるようにしたいんですが、
どうしたらいいでしょうか?
具体例あげるとこんな感じです。
ttp://www.h5.dion.ne.jp/~akt/afxss/afxss_b1.png
(現在選択されているアイテムが下線、選択済みアイテムがハイライトされてるやつ)

401 名前:名称未設定 mailto:sage [2008/07/27(日) 16:27:53 ID:MVJct1Bk0]
似たようなプログラムを組んだ事がある。確か…
NSTableViewのサブクラスを作って、
- (void)drawRect:(NSRect)frameRect;
をオーバーライド。選択しているときに下線を引くようにする感じだったかな。
選択しているときのデフォルトの色が反映されたりちょっと苦労した記憶あり。

402 名前:390 mailto:sage [2008/07/27(日) 17:36:13 ID:vnIR5zO10]
>>392さん
>>394さん
ご指示の方法でこちらでもうまく行きました。ありがとうございます!
その他の方々も、助けていただいてどうもありがとうございました。
精進します。

403 名前:400 mailto:sage [2008/07/27(日) 18:32:55 ID:n359+EOk0]
>> 401
オプションとかで切り替えられるわけじゃなくて、
ハイライトさせてるメソッドをオーバーライドして、
そこで自分でセルの内部にdrawLine()するんですね。
助かりました。どうもありがとうございます。




404 名前:名称未設定 mailto:sage [2008/07/27(日) 18:51:41 ID:hII6V1eF0]
提示してあげるようにしたい

405 名前:名称未設定 [2008/07/29(火) 13:56:26 ID:yPUrLNpI0]
Xcode 3.1です。

ツールバーのデリゲートで、
- (NSArray *) toolbarDefaultItemIdentifiers : (NSToolbar *) toolbar {
return [ NSArray arrayWithObjects :
NSToolbarPrintItemIdentifier,
NSToolbarPrintItemIdentifier,
nil
];
}

と設定しているにも関わらず、デフォルトセットに"カスタマイズ"等のツールバー項目が表示されてしまうのですが、なにか他に設定すべき箇所があるのでしょうか。

wktk.vip2ch.com/vipper91279.png

406 名前:名称未設定 mailto:sage [2008/07/29(火) 15:28:44 ID:a9APv9gE0]
>>405
もう3.1の話をしても良いんだっけ?

407 名前:名称未設定 mailto:sage [2008/07/29(火) 16:42:26 ID:+WtQKlmJ0]
3.1はリリースされてる

408 名前:名称未設定 mailto:sage [2008/07/29(火) 16:50:05 ID:ufYnqxk40]
>>405
IBで何か設定していませんか?
delegateで設定したものと、IBで設定したものの和が表示されますよ。


409 名前:名称未設定 mailto:sage [2008/07/29(火) 17:52:26 ID:yPUrLNpI0]
>>408
NSToolbarのインスタンスはIBにて作成しています。
どこに設定があるのでしょうか…

410 名前:名称未設定 mailto:sage [2008/07/29(火) 18:45:42 ID:yPUrLNpI0]
NSToolbarはIB使わず作った方がいいのかな…
もう限界orz

411 名前:名称未設定 mailto:sage [2008/07/29(火) 18:56:17 ID:yPUrLNpI0]
IBでもとから入っていたNSToolbarItemをいったん抹消した後LibraryからD&Dしたら解決しました。

なんだろこの仕様…
3時間の苦労…


412 名前:名称未設定 mailto:sage [2008/07/29(火) 19:10:24 ID:zz+wWVx50]
たまにタコな動きするからクリーンとかIBを手動で保存とか
コネクションし直しとか、あまりXcodeを信用しないほうがいいよ。

413 名前:名称未設定 mailto:sage [2008/07/29(火) 20:53:04 ID:gygQrOlO0]
クリーンはよく分かる
IBの変更の反映ってちょっと遅いもんね



414 名前:名称未設定 mailto:sage [2008/07/30(水) 12:42:42 ID:iYUCSHAp0]
あーもうコード書くの面倒臭くなってきた。
アップルの自社製品のUIはやたらと凝ってるし
それに似てないとみんな「○○みたいには出来ないんですか?」と
納得しないし。

415 名前:名称未設定 mailto:sage [2008/07/30(水) 13:25:04 ID:FLlKvH4q0]
IBはCmd-0でアウトライン表示にするとレイヤー選択するの楽。

416 名前:名称未設定 mailto:sage [2008/07/30(水) 19:41:26 ID:pk8mMrnG0]
すいません、お尋ねしたい事があるのですが・・・

FoundationやAppKitには、Windowsで言うところの「GetTickCount()」のような内部カウントを取得する関数って無いんでしょうか?
色々と探してみたのですが、どうにも見つからなくて・・・・・・

417 名前:名称未設定 mailto:sage [2008/07/30(水) 19:45:42 ID:ze87ztrh0]
普通にBSD系関数使えば?

418 名前:名称未設定 mailto:sage [2008/07/30(水) 20:59:44 ID:0xFujw9p0]
>>414
似せて作る要望がそんなに強いのか…。
機能がまずは大事だろうし、気が向いたらビジュアルを作り込む
位の心意気でいいと思うよ。肩の力を抜こう

419 名前:名称未設定 mailto:sage [2008/07/30(水) 21:03:37 ID:PepTTP7Q0]
mach_time.h

420 名前:名称未設定 mailto:sage [2008/07/30(水) 21:08:54 ID:R/hoyucI0]
ソフトを使う人はプログラマじゃないのでUIも非常に大事だと思いますよ
あとMacを普段触ってる人ならOSXライクなUIにすることでおのずと操作性も上がると思います

421 名前:名称未設定 mailto:sage [2008/07/30(水) 21:46:53 ID:K7PGsPzy0]
>>416
使い方も精度もよくわからんけどNSDateとかどうでしょう
NSDate *date1 = [NSDate date];
〜〜
時間のかかる処理
〜〜
NSDate *date2 = [NSDate date];
NSTimeInterval time = [date2 timeIntervalSinceDate: date1];
NSTimeIntervalはdoubleのtypedefです。


ところで別の質問ですが
[NSString stringWith...]の戻り値はautoreleaseされてると思うんですが、
autoreleaseされてる、されていないの区別はどうやってつけるんですか?
たとえば上の[NSDate date]はどっちになるんでしょうか。

422 名前:名称未設定 mailto:sage [2008/07/30(水) 22:27:43 ID:PepTTP7Q0]
>>421
返ってくるオブジェクトが、シングルトンでないかぎりautoreleseされてると思う。



423 名前:名称未設定 mailto:sage [2008/07/30(水) 22:32:37 ID:elk3Szvx0]
>>421
autoreleaseされているかどうかよりも
自分でreleaseする必要があるかどうか、という考え方のほうがCocoa的だと思います。

名前がnew/allocではじまる、もしくはcopyを含む(copy/mutbleCopyなど)メソッドで
オブジェクトを得たとき 以 外 はオーナーシップが発生しない(と期待される)ので
[NSDate date]の戻り値は自分でretainしない限りreleaseする必要がありません。

ttp://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/MemoryManagementRules.html




424 名前:名称未設定 mailto:sage [2008/07/30(水) 23:19:27 ID:qC4aLLnW0]
自作のFrameworkに含まれるMyButtonとかMyObjectとかを、
Frameworkを利用したい別プロジェクトのIB上でボタンとかオブジェクトに割り当てて置いておくことってできないのでしょうか?

425 名前:421 mailto:sage [2008/07/30(水) 23:33:25 ID:K7PGsPzy0]
>>422
>>423
なるほど勉強になります。
ヒレガス本を見てたらP59にreleaseに関する規則が書いてありました。
古いせいかnewではじまるものは書いて無かった。Xcodeですらないし。

>>421のNSTimeIntervalなんですがドキュメントにはsub-millisecondという単語が出てくるんで
精度はサブミリ秒なんでしょうが、サブミリ秒が10ミリ秒なのか、100ミリ秒なのかその他かは解らんです。

426 名前:名称未設定 mailto:sage [2008/07/31(木) 00:39:45 ID:LTCTNNkm0]
>>421
NSAutoreleasePool *pool;

NSSring *test = [NSString stringWithString: @"a"];
printf("%d¥n", [test retaincount]);
[pool release];
printf("%d¥n", [test retaincount]);

[pool release];
ではautoreleaseで仮開放されたオブジェクトが開放される。
これでautoreleaseされている事を数値として確認できるはず

427 名前:名称未設定 mailto:sage [2008/07/31(木) 00:51:04 ID:kJOPwvi90]
>>426
それでは、[pool release] で test が release されていた場合に、
次の [test retainCount] でクラッシュする可能性がありますぜ。
せめて NSString* test= [[NSString stringWithString:@"a"] retain];
ぐらいしておかないと。

あと、NSString* は激しく最適化されてるから、
test で何がかえってくるか定かでないよね。
NSConstantString である @"a" が、
retain autorelease されて返ってきても、
retain も autorelease もされずに返ってきても文句は言えない ...

428 名前:名称未設定 mailto:sage [2008/07/31(木) 00:57:12 ID:LTCTNNkm0]
>>427
おおそうであった。指摘ありがとう
NSAutoreleasePoolを使う事で一時的オブジェクトである事を確認できる事を考えてて
コーディングが甘くなってたわ。いかんいかん

429 名前:416 mailto:sage [2008/07/31(木) 11:52:05 ID:HINI5QGu0]
>>417
>>419
>>421

皆様、遅くなりましたが、ありがとうございます。
BSD、mach_time.h、NSDateなどのキーワードを散りばめて検索してみたら、色々なページが見つかりました。

ttp://developer.apple.com/jp/qa/qa2004/qa1398.html
ttp://numata.designed.jp/?Diary%2F2008-01-18
ttp://blog.cocoa-study.com/?eid=71951&target=commentform
ttp://kzk9.net/column/time.html

まさに知りたい情報で感動しました!
これからコード書いて、色々と試してみます。

430 名前:名称未設定 mailto:sage [2008/07/31(木) 19:12:12 ID:jV7NgTse0]
copyWithZoneって何ですか?
これを入れたら落ちなくなるおまじないだと思ってるのですがw

431 名前:名称未設定 mailto:sage [2008/07/31(木) 19:14:27 ID:RPCi2OoE0]
じゃあ、そうなんじゃね?

432 名前:名称未設定 [2008/07/31(木) 19:25:16 ID:ykkdbxuS0]
たまには上げるかな。

>>430
- (id)copyl;
- (id)copyWithZone: (NSZone*)theZone;
copyというのは、自分のオブジェクトが持っているインスタンスをまるまる
複写して所有権付きで呼び出し主に渡すというもの。
copyWithZoneてのは、メモリゾーンを指定して同様の事をするもの。
落ちなくなるおまじないってわけでもない。

呼び出したらretainが一回入ってるので所有権に注意。

433 名前:名称未設定 mailto:sage [2008/07/31(木) 20:49:52 ID:HcoTC4VH0]
>>424
もちろんできます。



434 名前:名称未設定 mailto:sage [2008/07/31(木) 21:04:07 ID:52Jq8wko0]
そういやIB3のライブラリに独自GUI部品追加するのってどうやるんだろ
IB2ではNIBプラグインかなにか入れてた気がするがあれはもう使えんよな

435 名前:名称未設定 mailto:sage [2008/07/31(木) 21:12:34 ID:NGJ8irep0]
>>433
自己解決しました、どうも

436 名前:名称未設定 mailto:sage [2008/07/31(木) 21:28:55 ID:HcoTC4VH0]
>>434
ibplugin に変わりました。
Cocoa Bindings使いまくり。

437 名前:名称未設定 mailto:sage [2008/07/31(木) 23:31:16 ID:XcF0aGMT0]
>>431-432
なんとなくわかりました。
ありがとうございました。

438 名前:名称未設定 mailto:sage [2008/08/01(金) 00:46:32 ID:OOXSlUhh0]
>>437
質問の背景がよくわかりませんが、例えばNSTableColumnの
dataCellはデータの増減によってコピーされます。
copyは実際はcopyWithZone:NULLが送信されています。

一例としてSample programのSourceViewのImageAndTextCellの
- (id)copyWithZone:(NSZone*)zoneをコメントアウトすれば、
super classにcopyWithZone:が送信されるため
imageが存在しないので、クラッシュするのは当然のことです。


439 名前:名称未設定 mailto:sage [2008/08/01(金) 08:11:32 ID:fh38Gufg0]
>>438
>Sample program
突然何の sample program の話をしてるの?

440 名前:名称未設定 mailto:sage [2008/08/01(金) 09:33:55 ID:WJ5RtYj10]
読み取れ

441 名前:名称未設定 mailto:age [2008/08/01(金) 15:30:22 ID:BstKir2w0]
Xcode3.1でソースの一番下までスクロールした状態でコード補完させると、勝手に上へ数行スクロールするようになりました。
原因わかる人教えてくれ。

Xcodeスレは1000目前にしてDAT落ちしたね。

442 名前:名称未設定 mailto:sage [2008/08/01(金) 19:35:17 ID:HAWlbAH/0]
xcodeスレ落ちた
だれか次スレおね

443 名前:名称未設定 mailto:sage [2008/08/01(金) 22:37:42 ID:E0l24OCW0]
>>442
いらないでしょ




444 名前:名称未設定 mailto:sage [2008/08/02(土) 00:45:45 ID:flpSDaAS0]
そんなに分類する必要ないでしょ
Carbonスレも最近立ってるけど、Mac開発全般1スレだけで良さげ

445 名前:名称未設定 mailto:sage [2008/08/02(土) 19:18:50 ID:DWJNDgjK0]
質問です
NSResponderの
- (BOOL)performKeyEquivalent:(NSEvent *)anEvent メソッドを上書きしてキーを押したときのNSEventの中身を調べていました。
シフトやオプションを押しながらキーを押すと当然modifireFlagsの値は変わるのですが、
なぜかウィンドウのcontentViewをクリックした後とタイトルバーをクリックした後でも値が変わってしまいます。
Modifier FlagsのMaskについてもドキュメントを参照したのですが、なぜこの2通りのときで値が変わるのか、modifireFlagsに何が入ってているのか分かりませんでした。
どういったことでこの違いが起きているのでしょうか?

サンプルプロジェクトを上げたのでよろしければ見てください。
mac.hitobashira.org/up/src/maka0081.zip

446 名前:名称未設定 mailto:sage [2008/08/02(土) 19:56:25 ID:z2jGhNS/0]
確かに、1 << 8 値が変わるな。

447 名前:名称未設定 mailto:sage [2008/08/02(土) 20:45:44 ID:DWJNDgjK0]
内部的な何かの処理のなのでしょうか。
とりあえずその部分を無視しようと以下を追加しました。

NSString *key = [theEvent charactersIgnoringModifiers];
NSUInteger flag = [anEvent modifierFlags];
if (flag & 1 << 8) mask -= 1 << 8;
if ([[self keyEquivalent] isEqualToString:key] && [self keyEquivalentModifierMask] == mask) {
return YES;
}

正しく動作はしますが、やり方としてはこのような感じで合ってるのでしょうか?
そもそも
0x100 16進数
256 10進数
1 << 8 ???
って感じで最後のがよく理解できてない状態ですが、、。

448 名前:421 mailto:sage [2008/08/02(土) 20:46:57 ID:wMjpltPb0]
>>445
ちっとも進展してないが、とりあえず報告
OS X10.5.4
Macbook Pro
トラックパッドの下のボタンを使ってクリック
T1:ViewをクリックしてからShift+Option+アルファベット 655650
T2:タイトルバーをクリックしてからShift+Option+アルファベット 655394

で、USBで接続しているワコム[ペンタブ/マウス]を使うと再現せず
W1:ViewをクリックしてからShift+Option+アルファベット 655650か655394
W2:タイトルバーをクリックしてからShift+Option+アルファベット 655650か655394
数値はトラックパッドで行った時のが引き継がれる模様
T1のあとならW1,W2共に655650でした
もちろんwacom[ペンタブ/マウス]でも普通の操作はできる

で、NEC製の普通のマウスで同様にするとトラックパッドと同じ結果
単にワコムのペンタブとマウスが特殊なのが解っただけでしたw

449 名前:名称未設定 mailto:sage [2008/08/02(土) 20:51:25 ID:DWJNDgjK0]
if (flag & 1 << 8) mask -= 1 << 8;
をしなくても
[self keyEquivalentModifierMask] == mask
の演算子をいじるだけで同じ働きができたりしないでしょうか?

450 名前:名称未設定 mailto:sage [2008/08/02(土) 20:53:41 ID:DWJNDgjK0]
>>448
調査ありがとうございます。
じっくり読ませていただきます。

451 名前:名称未設定 mailto:sage [2008/08/02(土) 21:02:34 ID:wMjpltPb0]
>>448
名前が残ってた
>>450
多分何も関係ないからさらっと流しといてください

452 名前:名称未設定 mailto:sage [2008/08/02(土) 21:18:52 ID:nCOEhJZL0]
>>447
マスクなんだから
if ([[self keyEquivalent] isEqualToString:key] && ([self keyEquivalentModifierMask] & mask)) {
とすればよいと思いますが?
Testing for Event Type and Modifier Flags
developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/EventHandlingBasics/chapter_4_section_5.html#//apple_ref/doc/uid/10000060i-CH5-SW16


453 名前:名称未設定 mailto:sage [2008/08/02(土) 21:44:03 ID:DWJNDgjK0]
>>451
読んでみたところペンタブだと現象が起きないということですね。
>>452
試してもらえば分かると思いますが、それではうまくいかなかったのです。
サンプルプロジェクトに書いたように
if (flag & NSShiftKeyMask)
if (flag & NSCommandKeyMask)
で一つ一つのflagの有無はチェックできるのですが、
if ([self keyEquivalentModifierMask] & flag)
では
[self keyEquivalentModifierMask]が設定されてないと常にNOを返してしまうようです。

ちなみに>>447のコードのmaskのとこはflagでした、すいません。



454 名前:名称未設定 mailto:sage [2008/08/02(土) 21:53:02 ID:VyG5QnCh0]
>>453
マスクとビット演算のこと分かってないんじゃないかな。
if ([self keyEquivalentModifierMask] & flag) で[self keyEquivalentModifierMask]が0だったらNOなのは当然でしょ。

455 名前:名称未設定 mailto:sage [2008/08/02(土) 21:59:40 ID:wMjpltPb0]
>>453
結局何をしたいのか具体的に書いてみてはいかがでしょうか
わかってないのは自分だけ?

456 名前:名称未設定 mailto:sage [2008/08/02(土) 22:00:20 ID:DWJNDgjK0]
>>454
すいません、正直ビット演算はまだ理解が浅いですが、
上記の例で当然0になるという点は理解しています。
「返してしまうようです」という書き方は不適切でした、すいません。
>>447の例を最適なコードにするにはどうしたら良いでしょうか?

457 名前:名称未設定 mailto:sage [2008/08/02(土) 22:05:27 ID:wMjpltPb0]
>>456
自分には難しそうです、何かわかればまた書きます

458 名前:名称未設定 mailto:sage [2008/08/02(土) 22:13:04 ID:VyG5QnCh0]
>>456
いやそもそも何をしたいのかがさっぱり分からん。
単に修飾キーを判定したいだけならこんなごちゃごちゃ書く必要ないじゃん。

459 名前:名称未設定 mailto:sage [2008/08/02(土) 22:51:20 ID:DWJNDgjK0]
ことの発端は>>445です。
修飾キーの判定には先に挙げたような
if (flag & NSShiftKeyMask)
といったものが使えます。
しかし特定の修飾キーに関してではなく、ここでのselfにあたるオブジェクトに設定された修飾キーと同じかどうか(もしくは全て含むかどうか)を判定しようとしたところ、
Modifire Flagsのドキュメントに載っていない 1 << 8 という値が飛んできて、しかもそれが特定の条件化で来たり来なかったりといったところで、どうしようかとなったわけです。
条件が分かればそこをチェックしてFlagの判定に組み込めばいいのですが、
ここまでの流れはそのFlagをどう無視するかというものでした。
例えば、
if (flag & NSShiftKeyMask)
if (flag & NSCommandKeyMask)
などすべて列挙していって、ドキュメントに書かれていない例外的なFlagを無視することもできます。
これは>>447の方法よりコードの信頼性は高いと思いますが、非常にアナログな手法で、もっとスマートにフラグの判定をできないかと思った次第です。

460 名前:名称未設定 mailto:sage [2008/08/02(土) 23:10:55 ID:VyG5QnCh0]
>>459
今一よく分からんが、「selfにあたるオブジェクトに設定された修飾キーと同じかどうか(もしくは全て含むかどうか)を判定」
すればいいのね?だったら>>447
if ([self keyEquivalentModifierMask] & [anEvent modifierFlags]) {
return YES;
}
でいいじゃん。あ、上のコードは修飾キーだけの判定ね。

461 名前:名称未設定 mailto:sage [2008/08/02(土) 23:33:50 ID:VyG5QnCh0]
>>460
間違えた。全ての修飾キーが一致しないとダメなんだったか。>>460だとどれか一つ一致すればYESになるね。
([self keyEquivalentModifierMask] == [self keyEquivalentModifierMask] & [anEvent modifierFlags])
でどうかしら。

462 名前:名称未設定 mailto:sage [2008/08/02(土) 23:38:24 ID:LU27e+rr0]
>>461
== のが & より優先度が高いから括弧がいると思う


参考までに例外的なフラグを削除するなら
flag = flag & NSDeviceIndependentModifierFlagsMask;
で出来ると思う
OS X 10.4以上で動くはず

463 名前:名称未設定 mailto:sage [2008/08/02(土) 23:46:05 ID:DWJNDgjK0]
やはりうまくいきません、、
またサンプルプロジェクト上げてみます。
良かったから動作を確認してください。
mac.hitobashira.org/up/src/maka0083.zip
実際に正しくkeyEquivalentとkeyEquivalentModifierMaskが設定されているのはIBでRunしてみて確かめてみてください。



464 名前:名称未設定 mailto:sage [2008/08/02(土) 23:47:24 ID:DWJNDgjK0]
NSDeviceIndependentModifierFlagsMaskチャレンジしてみます。

465 名前:名称未設定 mailto:sage [2008/08/02(土) 23:55:12 ID:DWJNDgjK0]
flags = flags & NSDeviceIndependentModifierFlagsMask;
をしてから
if ([self keyEquivalentModifierMask] == flags)
すれば完璧に動作しました!
NSButtonの場合ですが、まとめるとこうです。

- (BOOL)performKeyEquivalent:(NSEvent *)anEvent {

if ([anEvent type] == NSKeyDown) {
NSString *key = [anEvent charactersIgnoringModifiers];
NSUInteger flags = [anEvent modifierFlags];

flags = flags & NSDeviceIndependentModifierFlagsMask;

if ([[self keyEquivalent] isEqualToString:key] && [self keyEquivalentModifierMask] == flags) {
[self performClick:nil];
return YES;
}
else {
return NO;
}
}

return [super performKeyEquivalent:anEvent];
}

感激です、みなさまありがとうございます!

466 名前:名称未設定 mailto:sage [2008/08/03(日) 00:00:38 ID:wEE2HMGo0]
>>465
それは良かった。
けど>>463のプロジェクト、俺の環境だと修飾キー関係なくて[self keyEquivalent]がそもそも空文字列だ…

467 名前:名称未設定 mailto:sage [2008/08/03(日) 00:03:42 ID:pibjA2T20]
なぜでしょう、、
IBのバージョンとかかも知れません。プロジェクトファイルはXcode3.1とIB3.1で作りました。
IBでkeyEquivalentを設定しなおしてみてはどうでしょうか?

468 名前:名称未設定 mailto:sage [2008/08/03(日) 00:17:44 ID:wEE2HMGo0]
>>467
ごめん一番左上のボタンの動作をデバッグで拾ってただけだった。
で、>>461+>>462だと、修飾キーが一つも合ってないときに修飾キー無しのボタンがヒットするのね。
確かにこの使い方には>>465の方がいいかも。

469 名前:名称未設定 mailto:sage [2008/08/04(月) 20:55:09 ID:wOXqnMoB0]
時々、QuickTimeの「MPEG-4の書き出し」に似たウィンドウをQuickTime以外のアプリでも見かけるのですが、QTKit等から呼び出し可能なのでしょうか。
もし呼び出す関数をご存知の方いましたら教えていただけるとうれしいです。

470 名前:名称未設定 mailto:sage [2008/08/04(月) 21:15:01 ID:/6xN6LzP0]
これのことかな
www.cocoadev.com/index.pl?QTMovieExportSettings


471 名前:名称未設定 mailto:sage [2008/08/05(火) 16:13:50 ID:z6ApOwxE0]
>>470
ありがとうございます。

472 名前:名称未設定 mailto:sage [2008/08/05(火) 22:21:42 ID:hNnXXyWp0]
バインディングの勉強をしています。

IBで、ArrayControllerと、Window、その上に1列のTableViewと「+」Button、「-」Buttonを配置します。
TableViewのColumumのvalueを、ArrayControllerのarrangedObjectsの適当なModel Key Path名にバインドします。
「+」ButtonをArrayControllerのadd:アクションに繋げます。
「-」ButtonをArrayControllerのremove:アクションに繋げます。

これで、編集可能なTableViewができたのですが、「+」Buttonで行を追加したとき、
追加された行は選択状態にはなりますが、編集状態にはなりません。
編集状態にするには何をすべきでしょう?

Xcode2.5/Interface Builder2.5.6

473 名前:名称未設定 mailto:sage [2008/08/05(火) 22:47:50 ID:b3PgxnPw0]
>>472
+ボタンとArrayControllerの間にお手製のコントローラを挟んで、(or ArrayControllerをサブクラス化して)
その中で- [NSTableView editColumn:row:withEvent:select:]を呼んであげる。



474 名前:名称未設定 mailto:sage [2008/08/06(水) 13:40:02 ID:Qhr+d9FS0]
>>473
やはりIBだけでは無理なんですね。とりあえず以下のようにしたらできました。

@interface MyTableController : NSArrayController{
IBOutlet NSTableView* _tableView;
}
@end
@implementation MyTableController
// たった今追加&選択されたのを編集状態に
- (void)editSelected:(id)sender{
  int r = [_tableView selectedRow];
  if( (0 <= r) && (r < [_tableView numberOfRows]) ){
    [_tableView editColumn:0 row:r withEvent:nil select:YES];
  }
}
- (void)add:(id)sender{
  [super add:sender]; //本来の処理
  // 次のイベントループ?で編集状態にする
  [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)0.0
    target:self selector:@selector(editSelected:) userInfo:nil repeats:NO];
}
@end

Timerで一度間を置かないと成功しませんでした。これは、add:自体はモデル(arrangedObjects)に
1要素追加しただけで、TableViewが新規行を認識するのはそれより後だから、だと認識しています。
で、add:→TableViewが新規行を選択→編集状態にする の順でやるのが自然な流れかと思います。

TableViewのDelegateかNotificationでもできそうですが、バインディング的にはKVOでやるべき
なのかな〜?とか推測してますが理解不十分でよく分からん状態です。
何であれ上の方法ではちょっと不確実のようにも思えるのでもうちょっと追求してみます。

とりあえずはレスありがとうございました。

475 名前:名称未設定 mailto:sage [2008/08/06(水) 17:11:45 ID:/qnHPC400]
PanelにTableViewを表示させてフォーカスがTableViewのままの状態で
Panelを閉じて、Panelをreleaseすると落ちてしまうんだけど(release when
closedは当然OFF)、これを回避出来る方法ってない?

476 名前:名称未設定 mailto:sage [2008/08/06(水) 17:44:27 ID:nt4PhBNc0]
それでは落ちない
別のとこに原因がある

477 名前:名称未設定 mailto:sage [2008/08/06(水) 17:54:53 ID:+eUHJTWc0]
>>475
release後にpanelに配置したviewにアクセスしておらぬか?

478 名前:名称未設定 mailto:sage [2008/08/06(水) 18:02:41 ID:/qnHPC400]
>>477
手順としては

XXXPanel *panel = nil;
@try {
panel = [[XXXPanel alloc] initWith...];

...
...

// OKで値を取り出してclose
// CancelはPanelをcloseするだけ

}
@finally {
if (panel)
[panel release];
}

とやってるので、Panelをcloseした後にreleaseしてるんだけど・・・

479 名前:475=478 mailto:sage [2008/08/06(水) 18:07:39 ID:/qnHPC400]
さらに補足すると
他のアイテム(例えばテキストフィールド)にフォーカスがある時は問題ないけど
TableViewにフォーカスがある時はcloseしてreleaseすると落ちてしまう。
う〜〜〜〜ん・・・わからん。

480 名前:475=478 mailto:sage [2008/08/06(水) 18:15:13 ID:/qnHPC400]
スレ汚しすまん。

落ちるというのは不正確だった。アプリ単独で起動した場合は落ちるわけでは
ないのだけど、Xcodeから起動して、上の動作をさせると必ずgdbに落ちてしまう
わけ。問題ないんだろうか?

481 名前:名称未設定 [2008/08/06(水) 19:14:06 ID:KUMdV5hV0]
Xcode 3.1/Mac OS 10.5.4(intel)です。
[NSToolbarのインスタンス items];で、"現在ツールバーに表示されている"NSToolbarItemの配列が取得できますが、
ツールバーに現在表示されているアイテムだけでなく、「ツールバーのカスタマイズ」より追加登録可能なアイテムを含めたNSToolbarItemの配列を取得するには、どうすれば良いのでしょうか。


482 名前:名称未設定 mailto:sage [2008/08/06(水) 20:23:43 ID:rahF98Ee0]
>>478
そのテーブルのバインディング関係じゃない??
XXXPanel がリリースされてるのに、バインディングがまだいきているとか

483 名前:名称未設定 mailto:sage [2008/08/06(水) 20:38:30 ID:3rQXNAm80]
だいたいこの手のトラブルはショボいミスの場合が多いので、
質問者は連投して「俺はミスっていない」な意識を高める方向に向かわず
もう一度、基本的なことを見直してみよう。



484 名前:472,474 mailto:sage [2008/08/06(水) 20:55:07 ID:Qhr+d9FS0]
誰も気にしてないと思いますが一応報告を
>>474の方法はやはりダメでした。+ボタン連打したりするだけでもう変な動きになります。とりあえず以下のようにKVOでやったらうまく行ってそうです。

@interface MyTableController : NSArrayController{
  IBOutlet NSTableView* _tableView;
}
@implementation MyTableController
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
  static int beforeRowCount = 0;
  // arrangedObjects に変化があった
  if( keyPath != nil && [keyPath isEqualToString:@"arrangedObjects"] ){
    // 新規行(row)が追加された
    int rowCount = [_tableView numberOfRows];
    if( rowCount > beforeRowCount ){
      // 選択されている(=新規の)行を編集状態にする
      int editRow = [_tableView selectedRow];
      if( (0 <= editRow) && (editRow < rowCount) && (0 < [_tableView numberOfColumns]) ){
        [_tableView editColumn:0 row:editRow withEvent:nil select:YES];
      }
    }
    // 次回のために保持
    beforeRowCount = rowCount;
  }
}
- (void)awakeFromNib{
  [self addObserver:self forKeyPath:@"arrangedObjects" options:0 context:NULL];
}
@end

485 名前:475=478 mailto:sage [2008/08/06(水) 22:22:43 ID:HSfKqTVZ0]
>>482
いや、バインディグは使ってないよ。昔ながらのアウトレット。
dataSourceとdelegateしか繋いでいない。
そもそも何でTableViewにフォーカスがある時だけgdbに落ちるのかが不明。

486 名前:名称未設定 [2008/08/06(水) 22:28:21 ID:zXFgswAj0]
>>485
落ちる時のコンソールに多分重要なヒントがあると思う

487 名前:名称未設定 mailto:sage [2008/08/06(水) 23:07:33 ID:OhKiyj2A0]
だから、そういう時は環境変数で
NSZombieEnabled=YES
だってば。

488 名前:名称未設定 mailto:sage [2008/08/07(木) 06:45:41 ID:ui9Vt5Jh0 BE:45163627-2BP(193)]
>>484
>>474 みたいに NSArrayController をサブクラス化して、_tableView を持たせて、
-add: ではなく-addObject: をオーバーライドしてみては?

- (void)addObject:(id)object
{
    [super addObject:object];
    [_tableView editColumn:0 row:[_tableView selectedRow] withEvent:nil select:YES];
}

-add: は結局 -addObject: を呼ぶので。
当方のソフトでは、これだけで(Timer なしで)うまく動いているようです。

489 名前:名称未設定 mailto:sage [2008/08/07(木) 09:28:04 ID:xPWZJ9zS0]
すっごく適当でいうけど、
performSelector一発でなおる症状だったりしない?
遅延実行って結構効果あるよ

490 名前:名称未設定 mailto:sage [2008/08/07(木) 09:30:22 ID:xPWZJ9zS0]
ごめん、performSelector:withObject:afterDelay: ね

491 名前:名称未設定 mailto:sage [2008/08/07(木) 11:44:51 ID:yEGuwUG30]
CALayerに対するマウスイベントってどうやったら取得できますか?
mouseDown:みたいなメソッドがないみたいなんですが。

492 名前:472,474,484 mailto:sage [2008/08/07(木) 15:43:33 ID:mxgwQ2up0]
>>488 確かにそれでうまく動いてます。
>-add: は結局 -addObject: を呼ぶので。
あれ?でも、>>474ではadd:の直後はselectedRowが更新されてなかったのに、
addObject:の後はselectedRowが更新されてるんだなー、と思いArrayControllerのサブクラスで

- (void)add:(id)sender
{
NSLog( @"CALLED %s", __func__ );
[super add:sender];
NSLog(@"%s selectedRow=%i", __func__, [_tableView selectedRow] );
}
- (void)addObject:(id)object
{
NSLog( @"CALLED %s", __func__ );
[super addObject:object];
NSLog(@"%s selectedRow=%i", __func__, [_tableView selectedRow] );
}

としてみたところ、以下のようなログでした(Tableが空の状態でadd:を呼んだ場合)
CALLED -[SCTableController add:]
-[SCTableController add:] selectedRow=-1
CALLED -[SCTableController addObject:]
-[SCTableController addObject:] selectedRow=0

これからすると、add:は"中で"でなく"後で"addObject:を呼んでるんですね。
この辺の動き、リファレンスに明記されてないので将来的に変わらないのかちょっと不安ですが、
これが一番良い方法と思いますので使ってみます。ありがとうございました。

※ ちなみに、addObject:は"中で"insertObject:atArrangedObjectIndex:を呼んでいるので、
[_tableView editColumn〜]はオーバーライドしたinsertObject:~の中でやればinsert:にも対応できました。

493 名前:名称未設定 mailto:sage [2008/08/07(木) 20:23:39 ID:CLgEx8bF0]
>>491
マウスイベントなどは、NSView側で受けるしかありません。
そのあと、CALayerクラスのconvertPoint:fromLayer:とか、hitTest:とか、containsPoint:とかを使って、どのレイヤーでマウスダウンが発生したか調べてください。



494 名前:名称未設定 mailto:sage [2008/08/07(木) 21:40:24 ID:nTPSYr960]
できる限りageて質問してねっ♪

495 名前:名称未設定 [2008/08/07(木) 21:41:32 ID:342M26uQ0]
よっしゃ

496 名前:名称未設定 mailto:sage [2008/08/07(木) 22:47:33 ID:yEGuwUG30]
>>493
マジっすか…ありがとうございます

497 名前:名称未設定 [2008/08/08(金) 01:16:25 ID:AB93afjr0]
>>481は無理なのかなぁ…うぅむ

498 名前:名称未設定 mailto:sage [2008/08/08(金) 01:23:04 ID:ldE4dOQI0]
>>497
俺は古い人間なので、ツールバーはIBじゃなくてdelegate使って作ってる。
その方法だとデフォルトのアイテムも、カスタマイズで追加可能なアイテムも、選択可能なアイテムも全てコードで指定するので
そもそも>>481のようなことをする必要がない。

499 名前:475=478 mailto:sage [2008/08/08(金) 13:23:11 ID:2adz4Skg0]
>>486, 487
Xcode 3のデバッガは使いにくくなった上にデバッガ自体が落ちてダメでした。
パネルを閉じてもTableViewが生きているような・・・

結局、パネルのreleaseは@finally{}ブロックでやらずに、パネルのrelease when
closedにチェックを入れたらデバッガに落ちることはなくなりました。閉じたら
すぐにreleaseしなければいけない?

500 名前:名称未設定 mailto:sage [2008/08/08(金) 14:01:30 ID:TM2xaHNC0]
ObjCでsuperクラスのsuperクラスを取得する場合は、どうすればよいのでしょうか?
[[super super] xxxx] という感じの事をしたいのです。
superクラスがxxxxのメソッドを間違った形で上書きしているので
どうにかしてその親のメソッドを呼びたいのです。

501 名前:名称未設定 mailto:sage [2008/08/08(金) 14:17:40 ID:gpx4Jprm0]
ぜんぜん全く推奨しないけど、

@implementation SuperClass (overwride)
-xxxx { return [super xxxx]; }
@end

か、だめなら
+(void)initialize;
あたりで
Class sc = [super class];
Class ssc = sc->super_class;
Method sm = class_getInstanceMethod(sc, @selector(xxxx));
Method ssm = class_getInstanceMethod(ssc, @selector(xxxx));

sm->method_imp = ssm->method_imp;
とするか。

502 名前:名称未設定 mailto:sage [2008/08/08(金) 14:24:54 ID:TM2xaHNC0]
おおっありがとうございます。
早速試してみます。

503 名前:名称未設定 mailto:sage [2008/08/08(金) 14:40:30 ID:OmgHIQjD0]
そんなのできるんですか、、
知らなかったから同じような状況の時、目的のクラスの機能を全部実装してたorz



504 名前:名称未設定 mailto:sage [2008/08/08(金) 20:23:36 ID:AB93afjr0]
>>498
Tigerのときみたいにソースで実装するしかないのかな…
IBでNSToolbar作ると、Identifierがランダムな文字列になるので、
Identifierを知るために
テストランして、ツールバーカスタマイズして、全部のツールバー表示した状態で
for(int i=0;i<[[MyToolbar items] count];i++){
NSLog([[[MyToolbar items] objectAtIndex:i] label]);
NSLog([[[NyToolbar items] objectAtIndex:i] itemIdentifier]);
}
をするというめんどくさいことやっている。
どうにかIdentifierだけでも手に入れられる関数があればいいんだが…


505 名前:名称未設定 mailto:sage [2008/08/08(金) 20:24:12 ID:AB93afjr0]
訂正
全部のツールバー>全部のツールバーアイテム

506 名前:名称未設定 mailto:sage [2008/08/08(金) 21:01:33 ID:OmgHIQjD0]
あのさ、IBにあるデフォルトに[[toolbar items] count]したら7ってでたんだけどさ、
これって追加可能な全部のツールバーアイテムじゃないのか

507 名前:名称未設定 mailto:sage [2008/08/08(金) 21:07:30 ID:OmgHIQjD0]
あのさ、IBにあるデフォルトのToolBarに
です

508 名前:名称未設定 mailto:sage [2008/08/08(金) 23:19:29 ID:uUlYMw0W0]
>>507
「あのさ」は必須なわけねw

509 名前:名称未設定 mailto:sage [2008/08/09(土) 01:24:58 ID:L1OiMG2b0]
>>506
ツールバーカスタマイズして表示項目減らしてためしてみればわかると思うよ


510 名前:名称未設定 mailto:sage [2008/08/09(土) 01:52:31 ID:L1OiMG2b0]
>>506のために
wktk.vip2ch.com/dl.php?f=vipper93667.zip


511 名前:名称未設定 [2008/08/09(土) 13:29:19 ID:8bEhkL+N0]
>>507
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
使った事がないけど、この辺のインスタンスメソッドで引っぱりだせないかな

512 名前:名称未設定 mailto:sage [2008/08/09(土) 13:36:24 ID:UXDEXFyx0]
>>511
それはデリゲートメソッドです

513 名前:名称未設定 [2008/08/09(土) 13:40:08 ID:mdpOZT3D0]
>>512
NIBで作った時にはその辺も作られてるなら、動作するかもしれんがどうなのだろう。




514 名前:名称未設定 mailto:sage [2008/08/09(土) 15:53:44 ID:UXDEXFyx0]
>>513
IBでNSToolbarを作って試してみたが、delegateは設定されてなかった。

515 名前:名称未設定 mailto:sage [2008/08/09(土) 15:57:51 ID:L1OiMG2b0]
>>511
デリゲートメソッドの意味わかってる?


516 名前:名称未設定 mailto:sage [2008/08/09(土) 16:01:10 ID:L1OiMG2b0]
ごめん。>>515はなかったことに

517 名前:名称未設定 [2008/08/10(日) 01:33:59 ID:JedI4tyI0]
Xcode 3.1です。
@implementation MainClass
-(IBAction)connection:(id)sender{
NSLog(@"connection");
NSSocketPort *sock=[[NSSocketPort alloc] initRemoteWithTCPPort:80 host:@"192.168.0.2"];
NSFileHandle *socketHandle = [[NSFileHandle alloc] initWithFileDescriptor: [sock socket]
closeOnDealloc: YES];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(receiveMessage:)
name: NSFileHandleConnectionAcceptedNotification
object: socketHandle];
[socketHandle acceptConnectionInBackgroundAndNotify];
}
- (void)receiveMessage: (NSNotification*)notification {
NSLog(@"receiveMessage:");

// check error
NSNumber *pUNIXError = [ NSNumber numberWithInt:0 ];
pUNIXError = [[notification userInfo] objectForKey:@"NSFileHandleError"];

if( ![ pUNIXError intValue ] ){

NSData* data=[[[notification userInfo] objectForKey:NSFileHandleNotificationFileHandleItem] readDataToEndOfFile];
NSString* string = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding];
NSLog(string);
}else{
NSLog([NSString stringWithFormat:@"SocketError:%d",[ pUNIXError intValue ]]);
}
}
これで、「SocketError:9」が出てしまうのですが、考えられる原因は何でしょうか。
Safariで192.168.0.2にアクセスすると問題なくページが表示されます。

518 名前:名称未設定 mailto:sage [2008/08/10(日) 02:18:51 ID:l/HlxMYs0]
9 ってことは EBADF だよね。↓ここらへんが気になるところだけど。

initRemoteWithTCPPort:host:
...
Discussion
A connection is not opened to the remote host until data is sent.

519 名前:名称未設定 mailto:sage [2008/08/10(日) 06:00:14 ID:JedI4tyI0]
>>518
>A connection is not opened to the remote host until data is sent.
データを送るまでコネクションが開かないんですかorz
大変そうなのでBSD Socket使います。

520 名前:名称未設定 mailto:sage [2008/08/10(日) 15:59:36 ID:0HgkgHJ00]
IBで

メニューA
 サブメニューB
 サブメニューC

で、メニューAにアクションを繋げない場合、
バインディングでメニューAのenabledを設定しても上手く効いてくれません。
(どこかにアクションを繋げると効くため、なにもしないアクションを作って繋げてる)

そんなもんなんですかね?

521 名前:名称未設定 [2008/08/10(日) 16:24:26 ID:7bJ1GIwG0]
>>520
メニューはちょっと特殊でターゲットとアクションが有効でない時には
非アクティブになるという特徴がありますね。それが効いてるのかも

522 名前:名称未設定 mailto:sage [2008/08/10(日) 18:08:43 ID:Kamu+JT80]
なんですけど、>>520の場合でサブメニューにはターゲットアクションを繋いで
enabledも設定しているので、サブメニューが全てdisabledの場合は
メニューAもdisabledになってくれるのが理想なんですが。

523 名前:名称未設定 mailto:sage [2008/08/10(日) 20:24:07 ID:oKYJ5JZD0]
>>520
MenuのAttributes InspectorのAuto Enables Itemsのチェック外せば良さそうな気がするけど、これだと全部のアイテムをバインディングすることになりそうだな。



524 名前:名称未設定 [2008/08/11(月) 16:58:09 ID:zNOsZ4Ot0]
画像作成についての質問です。
ARGB各8bitのplanarな配列をNSBitmapImageRepの
initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:
に渡して画像を作ろうとしています。
「白っぽい」色のアルファ値によるグラデーションを作ると、
アルファ値が255から下がるにつれてすぐさまRGBの各値が同じに
揃っていき、「白っぽい」でなく「白」(実際255より小さい
値なので灰色ですが)になってしまいます。
暗い部分にいくにつれて表示されている色のRGBの各値が小さくなるので、
「白」(灰色)に近づいていくのは原理的にわかるのですが、
表示されている色の各RGBの値が均等に下がっていくのではなく、
大雑把ですが(R,G,B)の変化が
(255,255,200)→(230,230,200)→(200,200,200)→(180,180,180)
のようにまず大きい値だけが小さくなっているようです。
配列を直接NSBitmapImageRepに与えずに、
配列の内容をsetColor:atX:yで一点一点塗っていくと期待している
「白っぽい」色のグラデーションになっているので、
配列を直接与える際に何か注意すべき点があるのでしょうか。

525 名前:524 [2008/08/11(月) 18:39:45 ID:zNOsZ4Ot0]
524の件、自己解決しました。bitmapFormat:に渡す
NSAlphaNonpremultipliedBitmapFormat
を|したつもりが||してました…、大反省…。

526 名前:名称未設定 mailto:sage [2008/08/13(水) 14:51:00 ID:RefZrw740]
aviファイルからQTTimeオブジェクトを作ると、
- (QTTime) durationの位置にcurrentTimeがあったときに、
- (void) playを呼ぶと最初から再生しようとするみたいなんですが、
currentTimeがムービー長さの最後にあるときはplayを呼んでもそのまま停止にできませんか。
ループしてるのかなと思ってsetMovieAttributes:でQTMovieLoopsAttributeにNOを設定してもだめでした。

527 名前:名称未設定 mailto:sage [2008/08/13(水) 17:38:03 ID:8sa2ROU+0]
QTView subclassすれば?

528 名前:名称未設定 mailto:sage [2008/08/13(水) 19:53:13 ID:0D3wt/zD0]
サブクラス作ってplayメソッドオーバーライドして
カレントタイムがデュレーションならstopで行けるんじゃね?

ちなみにavi以外でもなると思う。

529 名前:名称未設定 [2008/08/13(水) 21:03:47 ID:TPb3TJ9I0]
@selector( method ) と
@selector( method: )
の違いを教えてください。




530 名前:名称未設定 mailto:sage [2008/08/13(水) 21:05:27 ID:sc0254TI0]
-(id)method



-(id) method: (id)args

の違いと同義。

531 名前:名称未設定 mailto:sage [2008/08/13(水) 21:10:05 ID:TPb3TJ9I0]
即答サンクス


532 名前:名称未設定 mailto:sage [2008/08/14(木) 00:40:48 ID:I3mEPq/b0]
iPhoneの電話番号入力みたいに数字の桁が増えると
自動的に文字を小さくするようにしたいのですがTextFieldだと無理でしょうか
設定方法よろしくお願いします。

533 名前:名称未設定 mailto:sage [2008/08/14(木) 10:02:12 ID:X6pdong60]
サブクラスを作ってdrawInteriorFrame内で文字長に応じてフォントサイズを指定したattributedstringを作成して描く。

携帯なんで綴りがあってないかも。



534 名前:526 mailto:sage [2008/08/14(木) 10:10:06 ID:9goEo+k30]
>>528
やっぱりcurrentTimeとdurationの比較で制御するしかないですかね。
わかりました。

535 名前:名称未設定 mailto:sage [2008/08/14(木) 12:40:22 ID:I3mEPq/b0]
WebKitを使ってGUIを持つテキストブラウザを作成する事はできますでしょうか
もしよろしければその設定方法をお教え願います。

536 名前:名称未設定 [2008/08/14(木) 13:10:56 ID:zjeFy/WK0]
すみませぬ、目的がはっきり見えてこないのでもう少し詳しく情報を。


537 名前:名称未設定 mailto:sage [2008/08/14(木) 13:13:47 ID:I3mEPq/b0]
w3mやlynxの様にテキストしかロードしないようにしたいのです。
デスクトップでもテキストブラウザを使いたいと思うので。
よろしくお願いします。

538 名前:名称未設定 mailto:sage [2008/08/14(木) 13:38:01 ID:zjeFy/WK0]
>>537
単純にテキストだけをダウンロードして表示するというのれあれば…
ターミナルでcurl -i ~~~
などとやったりするけども、それと似たような事をしたいというのであれば
NSURLConnectionでサイトから文字データとして取得、それをそのまま
NSTextFieldに書き込み、等とするといいのかもしれません。

…という目的じゃなかったらすまぬ

539 名前:名称未設定 mailto:sage [2008/08/14(木) 13:40:36 ID:b1/NXUz70]
css でごまかせそうな予感。

540 名前:名称未設定 mailto:sage [2008/08/14(木) 13:52:28 ID:I3mEPq/b0]
w3mをGUIアプリケーションに移植するような感じの
アプリケーションを作りたいのです。
ボタンとかはGUIだが表示はw3mの様な感じに成っているような

541 名前:名称未設定 mailto:sage [2008/08/14(木) 16:59:32 ID:4Q7QDSpl0]
>>540
Cocoaはやっぱり! 出張版
CocoaアプリケーションからUNIXコマンドを呼び出して非同期で処理結果を受け取る方法を解説。 ( NSTask )
www.big.or.jp/~crane/cocoa/9000_mdo/MDOnline_2002.01.pdf

w3mをラップしてみたら??

542 名前:名称未設定 mailto:sage [2008/08/14(木) 17:30:27 ID:I3mEPq/b0]
>>541
これは面白い。
他の技術にも使えそうですね!!

543 名前:名称未設定 mailto:sage [2008/08/14(木) 17:34:05 ID:zjeFy/WK0]
おぉ、その手の事に興味がおありなら、NSWorkspaceとかも一緒に勉強してみるといいかもしれんね。



544 名前:名称未設定 mailto:sage [2008/08/14(木) 18:39:29 ID:bvi8a3UW0]
NSTableViewに、

NSPoint aStartPoint = NSMakePoint(0.0, 0.0);
NSPoint anEndPoint = NSMakePoint(100.0, 200.0);
[self lockFocus];

NSBezierPath *aHighlightPath = [NSBezierPath bezierPath];
[aHighlightPath moveToPoint:aStartPoint];
[aHighlightPath lineToPoint:anEndPoint];
[aHighlightPath setLineWidth:2.0];
[[NSColor blackColor] set];
[aHighlightPath stroke];

[self unlockFocus];
したら、マウスが上にあってアクティブなセルにしか描画されなかったんで、
他のセルも再描画してやったらいいだろうと思って、
[self drawRow:1 clipRect:[self bounds]];
してみたけど変化ありませんでした。
どうやってやるのが正しいんでしょうか?

545 名前:名称未設定 mailto:sage [2008/08/14(木) 20:29:20 ID:zjeFy/WK0]
NSTableViewに
- (void)setNeedsDisplay:(BOOL)flag;
のメッセージを送ってみるとかどうでしょう。



546 名前:544 mailto:sage [2008/08/14(木) 22:21:37 ID:bvi8a3UW0]
>>545
おおお、できました(・∀・)
助かりました。ありがとーございます。

547 名前:542 mailto:sage [2008/08/14(木) 22:49:24 ID:I3mEPq/b0]
NSTaskを使おうと思ったのですが、もうなんか文法とかで突っかかり
まくり凄くへこみました。
CocoaはさっぱりどころかObjective-Cがさっぱりな状態。
Objective-Cからやり直してきます。

548 名前:名称未設定 mailto:sage [2008/08/14(木) 22:59:42 ID:0uVgcEUw0]
別ブロセス起動時のargmentにはchar * しか渡せないでしょうか?
NSArrayやNSDictionaryをいったんchar * にして別プロセスに渡して、別プロセスの
int main (int argc, const char * argv[]) {
}
の中でまたargv[1]とかargv[2]からNSArrayやNSDictionaryに戻すようなトリッキーな変換方法はないでしょうか?

549 名前:名称未設定 mailto:sage [2008/08/14(木) 23:02:58 ID:zjeFy/WK0]
別プロセスにオブジェクトを渡すのに、確かNSpipeなるものが使えたと思う。
ちょっと使い方が凝ってたのでまだ勉強していない所だけれども…

550 名前:名称未設定 mailto:sage [2008/08/14(木) 23:37:54 ID:0uVgcEUw0]
NSPipeは別プロセスからの出力と認識していましたが、入力もできるのでしょうか?
NSConnecionも検討していたのですが、上記の件はPropertyListを使う事でできました。
今日一日飯も食わずこれで悩んでたのでこんな単純なことで解決して吊りたい気分です。

551 名前:名称未設定 mailto:sage [2008/08/14(木) 23:51:09 ID:zjeFy/WK0]
あ、オブジェクトのやり取りの話しでしたな…
NSPipeで行けると思ったけれど、NSConnecionの方がオブジェクトのやり取り
そのものを扱ってるのでこちらがいいかと思う。


552 名前:名称未設定 mailto:sage [2008/08/15(金) 07:55:44 ID:hUu6QEsI0]
>>548
NSProcessInfoのargumentsを使うと
起動時の引数をNSStringの配列で取得できます。

数値とか文字列のような単純なオブジェクトでないものを別プロセスと
やりとりするなら分散オブジェクトが簡単だと思います。

553 名前:名称未設定 mailto:sage [2008/08/15(金) 11:42:06 ID:4CEn4cp00]
おおーこれは素晴らしいものを教えていただきました。
今後のためにも分散オブジェクト勉強してみます。



554 名前:名称未設定 [2008/08/15(金) 14:56:24 ID:5Ul2UCXT0]
いままでCocoaをRubyCocoaで使っていましたが
Appleの解説サイトでも説明はObjectiv-Cで基本書いてあるので
Objective-Cを勉強したいと思うのですが、どのへんまでかけるように
なればCocoaに手を出せば良いのでしょうか?
Objective-Cで何でもかけるようにならないとCocoaは手を出してはいけない
のでしょうか?
よろしくお願いします。

555 名前:名称未設定 mailto:sage [2008/08/15(金) 15:00:45 ID:AY1CyHVW0]
>>554
興味を持ったら手を出してOKだと思う。自分もそうだった

556 名前:名称未設定 mailto:sage [2008/08/15(金) 15:28:35 ID:5Ul2UCXT0]
>>555
そうですかありがとうございます。
興味は有るのですがObjective-Cでなにもかけないんですよね・・
例えばallocってのがなんだ?みたいな感じでして

557 名前:名称未設定 mailto:sage [2008/08/15(金) 15:34:32 ID:AY1CyHVW0]
>>556
そのレベルでもOK w
自分も#importって何じゃ、インスタンスオブジェクトって何じゃ?
一番最初のソースって一体どこに書けばいいんじゃ?
とか最初は本気で悩んだもんだ

とりあえず、簡単なサンプルプログラムを見て勉強したり
HMDTなどの書籍等を読んでみるのもいいかも。mixiなどのコミュニティーとか
相談してみるのもいいかもしれんし(あ、最近更新してなかった…w)

ある程度分かってくると、詳解Objective-C 2.0あたりもいいけど、まずは
基本的な所からがいいと思う。NIBで自作オブジェクトをインスタンス化して
そのIBOutletとかIBActionの接続あたりを理解できると、そこあたりが
足がかりにできるかもしれん

558 名前:名称未設定 mailto:sage [2008/08/15(金) 15:43:40 ID:5Ul2UCXT0]
なるほど
わかりました。何か入門に成るサイトを探してサンプルプログラムを
みてみます。ありがとうございました。


559 名前:名称未設定 mailto:sage [2008/08/15(金) 16:50:42 ID:OQNRRDxF0]
Obj-C 1.0 だが、ADC Japan に HMDT 木下さんが講師で年に数回?やってる
Cocoa セミナーのムービーがあるよ。自分はこれで流れをつかんだ。
配布資料は Obj-C 2.0 に対応している。

ADC Japan(ココの真ん中くらい)
ttp://developer.apple.com/jp/documentation/japanese.html

560 名前:名称未設定 mailto:sage [2008/08/15(金) 16:56:04 ID:Cd5tTLaK0]
qtmovieの任意の時間のフレームをciimageに変換したいんだけど、
NSImageをqtmovieから取得して、それをimagerepに展開してCIImageに変換するってやってんですけど。
NSBitmapImageRepを使うと物凄く時間がかかってる気がするなあ。
もうちょっと高速化できるアイデアって無いもんでしょうか。


561 名前:名称未設定 mailto:sage [2008/08/15(金) 17:30:28 ID:14zwALNR0]
再生中のQTMovieからカレントタイムでイメージを作成するのは遅くなるよ。
表示中のサイズが大きいと、そのサイズからイメージを作成しようとするから
メモリもバンバン食うし。

562 名前:名称未設定 mailto:sage [2008/08/15(金) 18:53:31 ID:4G4XJIgf0]
基本的にはMovieをInactiveにした状態で取り出すと処理が軽い、らしい。
だから、同じムービーのインスタンスを二つ作るとかどうよ。

563 名前:名称未設定 mailto:sage [2008/08/16(土) 00:55:19 ID:3kV+xRqE0]
Cocoaの話題でなくて恐縮ですが、CoreFoundation系のものって
CFStringRef string;
みたいに宣言しただけでは中身はNULLで、
string = "abc";
みたいにするとすでにRetainされていて、いらなくなったら
CFRelease(stringRef);
で必ず解放してやらなければならない。
CFStringRef otherStringRef = stringRef;
とした場合は stringRefだけを解放して、otherStringRefは何もしなくてOK。
と、このような認識であってますか?
もう一点、
CoreFoundationにはautorelaseがないのですが、
メソッドで返した値はメソッドで呼び出した方で解放する、ということで良いでしょうか?
Cocoaは分かるのですが、CoreFoundationはさっぱり!です。



564 名前:名称未設定 mailto:sage [2008/08/16(土) 01:04:52 ID:6LGW69YZ0]
>>563
基本的に = で代入するだけではretain release動作は自動ではされないはずなので、
その認識で大丈夫だとは思う…。
("abc"が定数として挙動していなければ)

565 名前:名称未設定 mailto:sage [2008/08/16(土) 01:08:02 ID:dit8Fbpn0]
>>563
developer.apple.com/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html

566 名前:名称未設定 mailto:sage [2008/08/16(土) 02:27:31 ID:q2f7W2rr0]
>>563
string = "abc";
これはCFSTR("abc")じゃないでしょうか?


567 名前:名称未設定 mailto:sage [2008/08/16(土) 04:55:25 ID:3kV+xRqE0]
>>564
ありがとうございます。
>>565
ありがとうございます、読んでみます。
>>566
おっしゃる通りです、書いてから気付きました、、

CoreFoundationにしかない機能の一部をCocoaにラップしたframeworkを作っていて
メソッドでautoreleaseされたオブジェクトを返すにはどうしたらよいのか?
NSString * とCFStringRef とでキャストを利用した場合、
実体が返されるのか新たにキャストされた実体が作られて返されるのか?その時retain releaseはどうなっているか?
など疑問が湧いてきましたが、とりあえず後日>>565のドキュメントを読んでみます。
もう朝だ、、

568 名前:名称未設定 mailto:sage [2008/08/16(土) 10:13:18 ID:37xdHDFf0]
>>567
そういう用途ならautorelease使えるよ。
CFStringRef string = うんたらかんたら;
[(NSString *)string autorelease];
return (NSString *)string;
みたいにキャストしてCocoaのオブジェクトとして扱える。
キャストしただけでCocoaのオブジェクトとして使えるってことはつまり、CFString構造体こそNSStringの実体なんだけどね。

569 名前:名称未設定 mailto:sage [2008/08/16(土) 13:31:42 ID:dit8Fbpn0]
GCを考慮するなら

return (NSString *)[ NSMakeCollectable(string) autorelease ];

にするべき

570 名前:名称未設定 mailto:sage [2008/08/16(土) 18:16:23 ID:ujCYt6R20]
質問です。どの辺りが問題なのかよく分からないので関係のあるメソッドの中身を全部張ります。
長いソースでスレ汚ししてすみません。

*2のところで-(void) appendString:(NSString *)aStringしてるんですが、
連結されずに元々入っていた文字列のままになってしまっています。
*1のところで[array objectAtIndex:9]の代わりに@"あああ"とか入れるときちんと連結されます。
また、parsedStringはnilとかじゃなくて元々意図した文字列(lsの結果)が入っているので原因がよくわかりません。
何が問題なんでしょうか?ご教示ください。

NSMutableArray *list = [[NSMutableArray alloc] init];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/ls"];
NSArray *array = [NSArray arrayWithObjects:@"-AlFcT", currentDirectory, nil];
[task setArguments:array];

NSPipe *outPipe = [[NSPipe alloc] init];
[task setStandardOutput: outPipe];
[outPipe release];
[task launch];
NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile];
[task waitUntilExit];
int status = [task terminationStatus];
[task release];


571 名前:名称未設定 mailto:sage [2008/08/16(土) 18:17:28 ID:ujCYt6R20]
続きです
if(status == 0){
NSString *aString = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];
NSString *bString;
NSMutableString* parsedString;
NSRange range, subrange;
int length;
length = [aString length];
range = NSMakeRange(0, length);
[list addObject: @".."];
// total * の部分をスキップする
subrange = [aString lineRangeForRange:
NSMakeRange(range.location, 0)];
range.location = NSMaxRange(subrange);
range.length -= subrange.length;
while(range.length > 0) {
subrange = [aString lineRangeForRange:
NSMakeRange(range.location, 0)];
bString = [aString substringWithRange:subrange];
range.location = NSMaxRange(subrange);
range.length -= subrange.length;
NSArray *array = [self split:bString delimiter:@" "];
parsedString = [NSMutableString stringWithString: [array objectAtIndex:9]]; //*1
[parsedString appendString: [array objectAtIndex:8]]; //*2
NSLog(parsedString);
[list addObject: parsedString];
}
}

572 名前:名称未設定 mailto:sage [2008/08/16(土) 18:25:19 ID:Ix4Ieu5n0]
>>570
項目と項目の間がスペース一つではないのかもしれないですね。
試しに
NSLog(array);
を埋め込んでおくと原因が分かるかもしれない。

そして最後にこれも必要と思う。
[list release];
[aString release];

573 名前:名称未設定 mailto:sage [2008/08/16(土) 19:20:10 ID:L8m/lz+K0]
>>570
1.デバッガ使え
2.何故lsを使う必要があるのか分からない
3.何故NSScannerを使わないのか分からない
4.split:delimiter:の処理内容が分からない、ていうかcomponentsSeparatedByString:使えばよくね?
5.やりたいことを教えてくれたら俺が書くわ



574 名前:570 mailto:sage [2008/08/16(土) 19:28:17 ID:ujCYt6R20]
>>572
>NSLog(array);
それはやってみましたが、きちんと文字列が入っていました。
releaseに関しては失念していました。普段c#しか使わないので...

>>573
NSScanner, componentsSeparatedByStringについては存在を知りませんでした。
どうもありがとうございます。調べてみます。

やりたいことに関してですが、ファイラーを作っていて、以下の内容を取得したかったのでlsを使ってみました。
1. ディレクトリ内のファイル/フォルダの一覧
2. 作成日時
3. 種類(ディレクトリ, 実行ファイル, その他のファイル, ソフトリンク, ハードリンク)
4. パーミッション


575 名前:名称未設定 mailto:sage [2008/08/16(土) 19:33:24 ID:7DkApg2H0]
>>570,571,574
相当に適当に組んでみた。これを改変して意図するものができるかもしれん。

ttp://nullpo.vip2ch.com/upload.cgi?mode=dl&file=21239
DLP: cocoa

576 名前:名称未設定 mailto:sage [2008/08/16(土) 20:08:29 ID:/aHVNfmz0]
>>575
おお、早速誰か書いてくれた…ってそれほぼCじゃねーかw
というわけで俺も書いてみた。豪語しておいて稚拙ですまんが。if(status == 0){ 以下のだけ書くね。
ちなみにlsの出力の意味は知らん。

if(status == 0){
NSString *aString = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];

NSArray *lsOutputLines = [aString componentsSeparatedByString:@"\n"];
NSEnumerator *lsOutputLineEnumerator = [lsOutputLines objectEnumerator];
NSString *lsOutputLine;

lsOutputLine = [lsOutputLineEnumerator nextObject]; // Skip first line

while (lsOutputLine = [lsOutputLineEnumerator nextObject]) {
NSScanner *lsOutputScanner = [NSScanner scannerWithString:lsOutputLine];
NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet];

NSString *item;
NSMutableArray *items= [NSMutableArray array];
while (![lsOutputScanner isAtEnd]) {
if ([lsOutputScanner scanUpToCharactersFromSet:whitespaceCharacterSet intoString:&item])
[items addObject:item];
}

if ([items count] > 9) {
NSMutableString* parsedString = [[[items objectAtIndex:9] mutableCopy] autorelease];
[parsedString appendString:[items objectAtIndex:8]];
NSLog(parsedString);
}
}
}

577 名前:570 mailto:sage [2008/08/16(土) 20:09:27 ID:ujCYt6R20]
>>575
わざわざ組んでいただいてどうもありがとうございます。
後で自分の書き込みを読み返してみて、デバッグの手伝いをお願いしてるみたいな感じで申し訳ないし、
そうなってしまってたらすれ違いだしで(´・ω・`)でしたが、みなさん親切な方で嬉しいです。
もうちょっと考えてから書き込むことにします。ありがとうございました。

578 名前:570 mailto:sage [2008/08/16(土) 20:10:44 ID:ujCYt6R20]
>>576
あ、入れ違いになってしまいました。
どうもありがとうございます。参考にさせていただきます(`・ω・´)


579 名前:名称未設定 mailto:sage [2008/08/16(土) 20:19:25 ID:7DkApg2H0]
>>576
あっはっはw

>>577
いいってことよ。
俺にとっちゃ意図を定めたときに頭の中にコードが浮かんで、それを打ち込む瞬間が
パズルを解いてるみたいで、どんなゲームをやるより楽しい。



580 名前:名称未設定 mailto:sage [2008/08/16(土) 20:31:19 ID:xXXJwvxN0]
NSTableViewのカラムをNSArrayControllerのカラムにバインディングした状態で、
NSArrayControllerに対してselectPrevious:、selectNext:を実行した場合、(もしくは上下
カーソルキーで選択行を変更した場合)NSTableViewの行の選択も追従するのですが、

10.4なら
選択された行がvisibleになるようにスクロールする。

10.5なら
スクロールせず選択された行だけが変わっていく。

となります。

NSTableViewのdelegateで
-(void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
[self scrollRowToVisible:[self selectedRow]];
}
と記述しても10.5ではスクロールしません。
そもそも仕様が変わったのか調べているのですが、該当記事がなさそうです。
なにかよい対処方法はありませんでしょうか?


581 名前:名称未設定 mailto:sage [2008/08/16(土) 20:34:23 ID:7DkApg2H0]
>>580
>NSTableViewのdelegateで
とのことなので、
[self scrollRowToVisible:[self selectedRow]];

[該当テーブル scrollRowToVisible:[該当テーブル selectedRow]];
とするとうまく行くかも

582 名前:名称未設定 mailto:sage [2008/08/16(土) 20:37:58 ID:oyh036pp0]
>>574
> やりたいことに関してですが、ファイラーを作っていて、以下の内容を取得したかったのでlsを使ってみました。

なぜ、NSFileWrapperを使わないんですか?



583 名前:名称未設定 mailto:sage [2008/08/16(土) 21:31:24 ID:qw2SgueW0]
元ファイルとハードリンクって区別不可能じゃね?



584 名前:名称未設定 mailto:sage [2008/08/16(土) 22:25:35 ID:oyh036pp0]
たしかに、どちらも「本体」だからね。
2つのファイルが、ハードリンクしたものなのかどうかは、ノード番号で分かるけどね。



585 名前:名称未設定 mailto:sage [2008/08/16(土) 22:37:10 ID:0tW9+cNm0]
>>581
回答ありがとうございます。
>NSTableViewのdelegateで
すみません記述を間違えました。
NSTableViewのサブクラスで [super setDelegate:self];をかましています。

当方10.4/Xcode2.5なので10.5での動作確認がいまいち不安なのですが、
(友人宅の10.5で挙動がおかしかった)まあ、あまり気にしない事にします。



586 名前:570, 574 mailto:sage [2008/08/17(日) 00:12:22 ID:TK3LS8h70]
>> 582
> NSFileWrapper
すみません。単なる勉強不足です。
教えてくださってありがとうございます。

このスレの上の方でNSTaskを使う話が出ていて、
そういやMacってBSDだから、コマンド呼べばいろいろできそうだな。
お、lsとmvとcpでファイラーの基本機能ほとんどできるんじゃね?
ていうかCUIで全部できるはずだからこれでできないわけないよな。
ほとんどシェルのノリで書けばいい。余計なプログラミングしなくていいやー(・∀・)カコイイ
ってノリでどんどん書き始めたので、その辺りのクラス/メソッドをよく調べてませんでした。
もうちょっと調べてみることにします(・A・)バカマルダシカコワルイ

587 名前:名称未設定 mailto:sage [2008/08/17(日) 01:05:11 ID:EgIgwGXn0]
>>586
ドンマイ!今回の工夫はいつか生きるさ

588 名前:名称未設定 mailto:sage [2008/08/17(日) 01:18:35 ID:iKet9At70]
あえてls,mv,cpで作ってみるのも面白いと思うけど。
別に真っ当(?)な方法で作らなきゃいけないというわけじゃないでしょ。

ところで>>582はNSFileWrapeprじゃなくてNSFileManager?

589 名前:名称未設定 [2008/08/18(月) 15:22:49 ID:3+6wulaW0]
Macのプログラマ向けの案系が多く掲載されている、
受注サイトがあったら教えてもらえませんか?

590 名前:名称未設定 mailto:sage [2008/08/18(月) 20:12:59 ID:V7XyMSEu0]
>>568
土日明けて亀レスですが有益な情報ありがとうございます。

591 名前:名称未設定 mailto:sage [2008/08/18(月) 21:12:35 ID:vAqeF/Jn0]
>589
そんなのみたことない

592 名前:名称未設定 [2008/08/19(火) 15:14:40 ID:nkUn3TvL0]
xcode 3.1です。
NSDate型の*x、
int型のy
がある状態で、xからy秒経過した後の時刻をNSDateで取得したいのですが、どのようにしたら良いでしょうか。

593 名前:名称未設定 mailto:sage [2008/08/19(火) 15:58:39 ID:kzjnsRzA0]
>>592
- (id)addTimeInterval:(NSTimeInterval)seconds



594 名前:名称未設定 [2008/08/19(火) 17:20:56 ID:nkUn3TvL0]
>>593
ありがとうございます。


595 名前:名称未設定 mailto:sage [2008/08/20(水) 23:24:37 ID:2x16Koxv0]
NSCalendar, NSDateComponentsについて質問があります。

インスタンス変数としてNSDate *theDateを設定、NSDatePickerとバインドして
NSDateComponentsの各プロパティを表示する実験をしました。
NSCalendar *calendar = [NSCalendar currentCalendar];

NSUInteger unitFlags = NSEraCalendarUnit |NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit |
NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit;

NSDateComponents *comps = [calendar components:unitFlags fromDate:[self theDate]];
.......
[self setWeek:[comps week]];
......
theDateを年末の53週に相当する日に設定するとNSDateComponentsのweekが
53ではなく1になることに気づきました。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSRange range = [calendar maximumRangeOfUnit:NSWeekCalendarUnit];
NSLog(@"maximumRangeOfUnit:NSWeekCalendarUnit = %@", NSStringFromRange(range));
を実行すると、{1, 53}が返ってきますし、setWeek:で53を設定できるので、weekの値が52まで
ということはないと思います。

これはバグなのでしょうか?それとも当方だけの問題でしょうか?


596 名前:名称未設定 mailto:sage [2008/08/22(金) 19:32:23 ID:m7irX9zu0]
Finderからのドラッグ&ドロップで、オリジナルのviewのうえに
画像を貼付けたいのですが、viewの上にドロップした時のマウスカーソルの
位置を取得できなくて困っています。
 そういう位置はどうやって取得できるのでしょうか?


597 名前:名称未設定 mailto:sage [2008/08/23(土) 00:03:22 ID:i795TmKu0]
>>596
[[NSApp currentEvent] locationInWindow] は使えませんか?


598 名前:名称未設定 mailto:sage [2008/08/23(土) 07:35:48 ID:UYIKiWXA0]
早速の返信ありがとうございます。
しかし、ご指摘いただいた[NSApp currentEvent]を使ってマウスの位置情報の入ったNSEventを取り出してみるというのを、試したのですがうまくいきませんでした。

説明が足りず申し訳有りません。以下にソースコードをそのままペーストします。
ほとんど、どこかで拾ってきたサンプルコードのつぎはぎですが、、

eventCheckというのをつくって、[NSApp currentEvent]でわたされたイベントの中身を
デバッガで見てみたのですが、この時点でマウスの位置情報がx=0,y=0になっています。
pathはNSStringで、画像の位置情報です。
MyNCは、自分で作ったクラスです。

-(BOOL)performDragOperation: (id) sender
{
MyDocument *document = [[[self window] windowController] document];
MyNC *DragNC =[[MyNC alloc] init];
//イベントから、マウスの位置をゲットしたかったが、まだやり方がよくわからない。
NSEvent *eventCheck =[NSApp currentEvent];
NSPoint testOfEvent =[eventCheck locationInWindow];
NSPoint pos =[self convertPoint:testOfEvent fromView:nil];
//???
[DragNC setTest:path];
[DragNC setImage:[ [NSImage alloc] initWithContentsOfFile:path] ];
[DragNC setBasepoint:pos];
[DragNC rectOfImage];
[document addFromView:DragNC];
return YES;
}

599 名前:名称未設定 mailto:sage [2008/08/23(土) 08:34:53 ID:WscyKynU0]
>>598
developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/chapter_5_section_4.html#//apple_ref/doc/uid/10000060i-CH6-DontLinkElementID_20

600 名前:名称未設定 mailto:sage [2008/08/23(土) 09:45:05 ID:UYIKiWXA0]
すごく早い返信ありがとうございます。
アドレスにあったCocoa Event-Handling Guide をよんで、NSWindowのメソッドのmouseLocationOutsideOfEventStream
が使えるのではないかと思って、試した所うまくいきました

599さん、ならびに597さんありがとう。

-(BOOL)performDragOperation: (id) sender
{
NSWindow *testWindow =[self window];
NSPoint mousePoint =[testWindow mouseLocationOutsideOfEventStream];

//これで、mousePointにマウスカーソルの位置がはいりました(^^)
//以下ソースコード略

601 名前:名称未設定 [2008/08/23(土) 15:40:16 ID:leuBXtDM0]
ageですね

602 名前:名称未設定 mailto:sage [2008/08/24(日) 17:22:44 ID:TmR2Twjv0]
>>595
年の最終週は、きっちり終わってないときは翌年のweek 1と同一視することにしているのかも。
(その方が、年をまたいで週をカウントしていく時とか矛盾が出にくいかな)
12/31がきっちり土曜で終わる1994年、2005年等では53が出る。

603 名前:名称未設定 [2008/08/24(日) 18:10:42 ID:51aC4O130]
>>595
ttp://www.probabilityof.com/iso/8601v2000.pdf

ISO8601 v2000 4.3.2.2 のNOTE4に

> NOTE 4 The rule for determining the first calendar week is equivalent with the rule
>“the first calendar week is the week which includes January 4”.

という記述があります。



604 名前:名称未設定 mailto:sage [2008/08/24(日) 18:18:18 ID:SM8lJL4p0]
developer.apple.com/samplecode/SimpleCalendar/index.html
にあるApple公式のサンプルをビルドしようとしたら、
#import <CalendarStore/CalendarStore.h>
の行で「error:CalendarStore/CalendarStore.h:no such file or directory」
というエラーが出ました。
当方の環境はLeopard, Xcode ver.3.1なのですが、
何か特殊な設定をしないとビルドできないのでしょうか?

605 名前:名称未設定 mailto:sage [2008/08/24(日) 18:36:36 ID:LevVSdjT0]
>>604
***.xcodeprojの本窓、「グループとファイル」の中にある「Frameworks」のところで右クリック
「追加→既存のフレームワーク…」
/Developer/SDKs/MacOSX*****.sdk/System/Library/Frameworks/
の階層の中から「CalendarStore.framework」を選択し、追加する。

こちらXcode2.2のため、そのフレームワークがなかったけれど、あればそれでうまく行くはず

606 名前:名称未設定 mailto:sage [2008/08/24(日) 20:15:01 ID:KAJx2qMD0]
そういやLeopardでXcoee2.xて行けるんですかね?

607 名前:名称未設定 mailto:sage [2008/08/24(日) 20:52:46 ID:OIWNP41V0]
>>602,603
595です。返信ありがとうございました。

バグであるにせよ、仕様であるにせよ、yearとweekからdateを算出する時には
注意する必要がありますね。

if ([comps month] == 12 && [comps week] == 1){
[comps setWeek:53];
}

のようなコードで回避可能ではありますが。

今週、先週といったNSPredicateを作成するコードを書いていて気づいたことです。
どうもありがとうございました。


608 名前:604 mailto:sage [2008/08/24(日) 21:46:39 ID:SM8lJL4p0]
>> 605
お返事ありがとうございます。
ただ、今見てみたら「グループとファイル」の中の、Frameworks/Other Frameworksという階層の中に、
既にCalendarStore.frameworkがありました。
ファイルをクリックしてみたら中にCalendarStore.hというファイルがあるようなので、
これを読んでくれれば動くと思うのですが、どうもこのframeworkを無視しているようです。


609 名前:604, 608 mailto:sage [2008/08/24(日) 21:59:32 ID:SM8lJL4p0]
あ、Releaseビルドに変更したら、やたら沢山警告が出ていますが(内容はDebug時のエラーと同じ)
とりあえずコンパイル通って実行もできました。
Debug設定ではビルドできないんですか?


610 名前:名称未設定 mailto:sage [2008/08/24(日) 22:11:53 ID:OIWNP41V0]
>>609
それで正常動作しますか?
-eventPredicateWithStartDate:endDate:calendars:はNSPredicateではなくて
CalCalendarStoreのメソッドだし、
-saveEvent:span:error:のerrorが抜けています。

www.cocoabuilder.com/archive/message/cocoa/2007/12/4/194398


611 名前:名称未設定 mailto:sage [2008/08/24(日) 22:22:23 ID:oDeSyiM50]
IBでNSMenuItemにショートカットキー(例cmd+])を設定して
実行させてショートカットキーを連打すると使用メモリーがガンガン上がってくのですが、
こんなもんなんですかね?
ちなみにメニューを開いて実行させても使用メモリーは増えないのですが。

10.4.11 Xcode 2.5


612 名前:604, 608, 609 mailto:sage [2008/08/24(日) 22:40:07 ID:SM8lJL4p0]
>> 610
カレンダーの表示はできたんですが、編集ができませんでした。
NSPredicateをCalCalendarStoreに変更したらアルファベットの文字列は編集できるんですが、
日本語がまじるとエラーが出ます。

2008-08-24 22:30:21.608 SimpleCalendar[25050:10b] oldDate=2008-08-09 00:00:00 +0900
2008-08-24 22:30:21.608 SimpleCalendar[25050:10b] *** -[__NSCFDate dayOfCommonEra]: unrecognized selector sent to instance 0x25228940
2008-08-24 22:30:21.609 SimpleCalendar[25050:10b] *** -[__NSCFDate dayOfCommonEra]: unrecognized selector sent to instance 0x25228940

このサイトのコードを鵜呑みにしたらダメなんですね。
もう少しCalCalendarStoreについて調べてみます。
ありがとうございます。

613 名前:名称未設定 mailto:sage [2008/08/24(日) 22:55:22 ID:CnjDKOKp0]
>>608
あ、いあ…
その階層にあるというだけでは駄目で、それをxcodeprojの中に登録しないといけない。
さらにはCalendarStore.frameworkの右の所にチェック(読み込ませる)を入れる必要があるけど
そこまでやってますかな?



614 名前:名称未設定 mailto:sage [2008/08/24(日) 23:00:26 ID:CnjDKOKp0]
>>608
読み違えた…
>その階層にあるというだけでは駄目で、それをxcodeprojの中に登録しないといけない。
は無視して。
あとはチェックが入っているかどうかと、あとはもしかすると
コマンド+iで「ターゲットSDKを利用したクロス開発」で指定したSDKと、
ロードしたFrameWorkでバージョンのズレがあるとうまく行かなかったような記憶も…

615 名前:608 mailto:sage [2008/08/24(日) 23:24:26 ID:SM8lJL4p0]
私の環境ではXcodeのグループとファイルの中の、
/SimpleCalnedar/Frameworks/Other Frameworks/CalendarStore.framework
の右にはチェックボックスは見あたりません(´・ω・`)
「情報を見る」の中の「ターゲット」内にプロジェクト名とチェックボックスがありますがこれのことでしょうか?
でもこれにはもともとチェックが入っていました。
Xcodeに対するframeworkの追加についてもう一度調べ直してみます。
お手数かけてすみません。

616 名前:HK [2008/08/25(月) 00:55:49 ID:sH5wW6Cs0]
>>604
Cocoa Break! というサイトをやってる者です。
サイトのソースの部分で、ビルドの前の注意を書いてます。
「ビルドするには、いくつかの場所で NSPredicate を CalCalendarStore に変更する必要がある。
他の警告は引数 error:nil を追加する。」
Mac OS X v10.5、3.0 段階ではこれで問題なくピルドできました。
とりあえず警告ゼロってだけですけど。
説明をするために細かく動作を見ることはしてないんで…。

617 名前:名称未設定 mailto:sage [2008/08/25(月) 01:03:48 ID:0vm6OJHX0]
俺もカーボンブレイク!作ろうかな

618 名前:HK [2008/08/25(月) 01:14:38 ID:sH5wW6Cs0]
追記ですが、サイトを見てもらえればわかるように、
サンプルはたまにエラーが出てビルドできないものがあります。
スクリーンショットが掲載されているものは、ビルドまでは完了してます。
とはいえ、10.4 でビルドできるものは 10.4 で確認してますが…。
また、それとは別ですが、Moriarity など OS X の古いバージョンのサンプルは、
10.5 では動作しなくなっている場合もあるので、
サンプルコードを参考にする時は注意が必要です。

619 名前:名称未設定 mailto:sage [2008/08/25(月) 09:56:26 ID:jTkDE9uv0]
>>607
>if ([comps month] == 12 && [comps week] == 1){
> [comps setWeek:53];
>}
>のようなコードで回避可能ではありますが。
いや多分、必ず53週あるという認識が、ISO8601的には間違っている。
しかしNSCalendar,NSDateComponents等を調べると、ISO8601はサポートしていなさそうですね。
NSCalendarのminimumDaysInFirstWeek(デフォルトは1)で、第1週を決めるようになっているみたい。
以下確認したコード。
--
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *oneDayComps = [[NSDateComponents alloc] init];
[oneDayComps setDay:1];
NSMutableArray *days = [NSMutableArray array], *weeks = [NSMutableArray array];
for (NSInteger minimumDaysInFirstWeek = 1; minimumDaysInFirstWeek< 7; minimumDaysInFirstWeek++) {
[calendar setMinimumDaysInFirstWeek:minimumDaysInFirstWeek];
NSLog(@"minimumDaysInFirstWeek:%d",[calendar minimumDaysInFirstWeek]);
for (NSInteger year = 2000; year < 2011; year++) {
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:year]; [comps setWeek:52]; [comps setWeekday:7];
NSDate *date = [calendar dateFromComponents:comps];
for (NSInteger i = 0; i < 9; i++) {
comps = [calendar components:(NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:date];
[days addObject:[NSString stringWithFormat:@"%2d",[comps day]]];
[weeks addObject:[NSString stringWithFormat:@"%2d",[comps week]]];
date = [calendar dateByAddingComponents:oneDayComps toDate:date options:0];
}
NSLog(@"%4d",year); NSLog(@" day:%@",[days componentsJoinedByString:@","]); NSLog(@" week:%@",[weeks componentsJoinedByString:@","]);
[days removeAllObjects];
[weeks removeAllObjects];
}
}

620 名前:604, 608 mailto:sage [2008/08/25(月) 11:21:47 ID:OWKKkKb+0]
>> HKさん
サイト拝見しました。訂正の必要なサンプルにはコメントをつけてくださってるんですね。
すばらしいサイトを作ってくださってありがとうございます。
Cocoaの勉強に利用させていただきます。


621 名前:名称未設定 mailto:sage [2008/08/25(月) 20:37:27 ID:83D/x5lc0]
Moriarityは一応ビルドできて、動いた。

当方 Leo Xcode3.1


622 名前:名称未設定 mailto:sage [2008/08/26(火) 10:32:05 ID:CiwPWnRl0]
ttp://lists.apple.com/index.html
Appleのメーリングリストの検索がおかしくなってないでしょうか?
何を検索しても何もひっかからない状態になってしまってますがうちだけでしょうか;

623 名前:名称未設定 mailto:sage [2008/08/26(火) 11:39:06 ID:jgEO9m2Z0]
>>619
>NSCalendarのminimumDaysInFirstWeek(デフォルトは1)で、第1週を決めるようになっているみたい。

そんな風になってるんだ。面白い。

ところで細かいことだけど、これって素のccじゃ通らないよね?
自分のとこはXcode 3.1を入れているけどデフォのccではfor内の変数宣言でエラーになります。
もしかして環境によってはObjCもC99がデフォになるのかなと思って。



624 名前:475=478 mailto:sage [2008/08/26(火) 13:08:14 ID:Ag+iSJqi0]
for文って条件式のところで変数の宣言をしてるとこ?
拡張子をmmにしてObjective-C++にしてんじゃないの?

625 名前:名称未設定 mailto:sage [2008/08/26(火) 16:10:29 ID:2IRoqpso0]
1)I.BでNSMenuのインスタンスをMenuA、MenuBと2つ作る。
2)NSMenuのサブクラスMyMenuを作り、MenuA、MenuBのカスタムクラスに設定する。

この場合、サブクラスMyMenu内でMenuA、MenuBのどちらなのかを判定したいのですが
可能でしょうか?

メニューアイテムはMenuA、MenuBともに同じ、アクションのターゲットは
別にしたいのです。(MyMenu内でターゲット先のメソッドを呼ぶ)

MyMenuからみて自分のインスタンス名(MenuA or MenuB)が取得できればいけそうな気がしますが、
インスタンス名の取得方法、もしくは他のよい方法があれば教示ください。

よろしくお願いいたします。


626 名前:名称未設定 mailto:sage [2008/08/26(火) 16:49:45 ID:kPx+BItI0]
たぶん、すっごく勘違いしてる。
けど、通常は tag を設定する。

627 名前:名称未設定 mailto:sage [2008/08/26(火) 18:26:20 ID:tnusyOvp0]
説明不足ですみません。

仰せの通り通常はタグを設定して判別するのですが、
I.BでNSMenuにはタグが設定出来なかったので困っている次第です。


628 名前:名称未設定 mailto:sage [2008/08/26(火) 18:45:23 ID:kPx+BItI0]
あ、やっと大体意味が分かった。
アプローチが間違ってる。
- (void)menuNeedsUpdate:(NSMenu*)menu;
- (BOOL)menu:(NSMenu*)menu updateItem:(NSMenuItem*)item atIndex:(NSInteger)index shouldCan
cel:(BOOL)shouldCancel;
- (BOOL)menuHasKeyEquivalent:(NSMenu*)menu forEvent:(NSEvent*)event target:(id*)target act
ion:(SEL*)action;
この辺かな。

629 名前:名称未設定 [2008/08/26(火) 22:27:36 ID:TlM0EGE00]
Xcode 3.1でDocument-based Applicationを作っています。
MyDocumentクラスのmyStringをTextViewのAttributed StringにIBでbindingしているのですが、
自作のメソッドを実行するときに、myStringにTextViewの内容を反映させるにはどのようにしたらよいのでしょうか。

630 名前:名称未設定 mailto:sage [2008/08/26(火) 23:24:47 ID:zAbcxQXm0]
myString=[TextView stringValue]ではダメ?

myString<->TextViewの双方向にバインディングするNSValueTransformerのクラスを書いて
バインディングの設定画面のvalueTransformerに定義するとか。

631 名前:名称未設定 mailto:sage [2008/08/26(火) 23:46:31 ID:TlM0EGE00]
>>630
なるほど、バインディングは双方向ではなく片方向ずつなんですか。
myString=[TextView stringValue];
でやることにします。ありがとうございます。

632 名前:名称未設定 mailto:sage [2008/08/27(水) 01:08:05 ID:HG7wkgv10]
>>629
myStringがNSStringならば、attributedStringにはbindできません。
NSStringをbindするならvalueとbindしなくてはいけません。
そのためには、Multiple fonts allowedをoffにする必要があります。

そうした上で、setMyString:やsetValue:forKey@"myString"を実行すればKVO(NSKeyValueObserving)が働きます。
bindingについて解説しているサイトや書籍を参照することをお勧めします。


633 名前:名称未設定 mailto:sage [2008/08/27(水) 01:20:18 ID:HG7wkgv10]
>>629
632です。ちょっと勘違いですね。
myStringにTextViewの内容を反映させるにはコントローラにcommitEditingを送信します。






634 名前:名称未設定 mailto:sage [2008/08/27(水) 02:22:49 ID:wf34hNXG0]
>>633
ありがとうございます。別途Controllerを作ってやる必要があるんですか。なるほど。

635 名前:名称未設定 mailto:sage [2008/08/27(水) 02:40:39 ID:3tAcl1TP0]
>>634
頼むからドキュメントとサンプルちゃんと見てくれ。
人に聞くのはそれからだ。

636 名前:名称未設定 mailto:sage [2008/08/27(水) 11:45:40 ID:prT6DVto0]
アプリが大きくなってきてメインのクラスの記述が非常に多くエディットしにくい状態です。
一つのクラスを複数ファイルへ分けて記述することは可能でしょうか?可能ならどのようにすれば良いでしょうか?

637 名前:名称未設定 mailto:sage [2008/08/27(水) 11:49:21 ID:wuThmqJw0]
>>636
カテゴリー

638 名前:名称未設定 mailto:sage [2008/08/27(水) 11:53:24 ID:prT6DVto0]
ああ!なるほど
カテゴリって既存クラスの拡張ってイメージありましたけど、
確かに自作のクラスでも同じですよね、ありがとうございます。

639 名前:名称未設定 mailto:sage [2008/08/27(水) 13:13:04 ID:h/VQOtmq0]
コンパイラにとって自作のクラスと既存のクラスって区別できないんじゃないかな

640 名前:名称未設定 mailto:sage [2008/08/27(水) 19:33:03 ID:x9/18bUo0]
>>636
そのメインのクラスが、どんなものなのか知らないけど、
リファクタリングしたら、複数のクラスに分かれたりはしないかい?



641 名前:名称未設定 mailto:sage [2008/08/27(水) 19:55:05 ID:UdEkpoZd0]
>>636
させる仕事の役割をきちんと分類し、それを別オブジェクトにするもよし、カテゴリで分割するも良し
カテゴリで分けた場合、
main+Private.h、main+Private.m
などとファイルをわけるといいです。


642 名前:名称未設定 [2008/08/30(土) 20:49:35 ID:hzRge4tB0]
objective cでクロージャが使えるようになるらしいって、本当ですか?

643 名前:名称未設定 mailto:sage [2008/09/01(月) 00:08:41 ID:CKjm/P3D0]
2年くらい前には10.5のObjectiveC 2.0で導入されるという噂がありました。
それのことじゃないでしょうか。



644 名前:名称未設定 mailto:sage [2008/09/01(月) 20:06:07 ID:k3tEwtc60]
POCで使えなかったっけ?

645 名前:名称未設定 mailto:sage [2008/09/01(月) 23:09:28 ID:CKjm/P3D0]
>>644
そうみたい。
ttp://users.pandora.be/stes/block98/index.html
Smalltalkっぽいスタイル?



646 名前:名称未設定 [2008/09/02(火) 18:40:20 ID:1UJh/BMk0]
llvm-gccかclangが対応してくれます(きっと)。

647 名前:名称未設定 [2008/09/02(火) 20:56:45 ID:VUOngefQ0]
たのしいCocoaプログラミング[Leopard対応版]で
Hello World表示もできなかった

648 名前:名称未設定 [2008/09/02(火) 21:24:30 ID:fo5slvFb0]
>>647
さっぱりすぎワロタw

649 名前:名称未設定 mailto:sage [2008/09/02(火) 22:38:58 ID:agEX2R6R0]
>>646
ほんとうにclangが来てるwww
ttp://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-August/002670.html

gccへ提案してたのは前にあったらしいんだけど、こっちが先か。
確かにgccよりclangのほうが構文いじりやすいだろうし。



650 名前:名称未設定 mailto:sage [2008/09/03(水) 14:24:51 ID:102AMvOI0]
>>647
どういうこと?

HMDTのサイトはよく参照するけど、本の方は出来良くないという印象。

651 名前:名称未設定 mailto:sage [2008/09/03(水) 14:39:37 ID:iULcM77e0]
>650
単なる「私は馬鹿です」宣言でしょ。

Cocoa的Hello Worldは
XcodeでCocoa Applicationテンプレートからプロジェクト作って、
MainMenu.nibを開いてWindow上のテキストフィールドに
「Hello World」って入れて、保存して、
Xcodeに戻ってビルドと実行すればいいだけ。

652 名前:名称未設定 mailto:sage [2008/09/03(水) 14:42:37 ID:t13feepc0]
NSLog(@"Hello World");
これが動かないのか?

653 名前:名称未設定 mailto:sage [2008/09/03(水) 15:02:10 ID:iULcM77e0]
stderr に出力するHello Worldはあんまり見ないよね。
しかも余計な出力付くし。
それがしたいなら printf("Hello world");の方が良いと思う。



654 名前:名称未設定 mailto:sage [2008/09/03(水) 15:33:47 ID:+g6j8XH20]
Foundation的に書いてみると、

[[NSFileHandle fileHandleWithStandardOutput] writeData: [@"Hello, World\n" dataUsingEncoding: NSASCIIStringEncoding]];

ながいな。

655 名前:名称未設定 mailto:sage [2008/09/03(水) 21:01:18 ID:/rdLXYXb0]
>>650
>HMDTのサイトはよく参照するけど、本の方は出来良くないという印象。
たのしいCocoa読んでみたけど、あれはプログラミング自体が初心者な人は
かなり置いてきぼりになる内容だと思った。多分>>647はそういう人。

>>651
言い過ぎ。

たのココ的HelloWorldはCocoaセミナー初級編と一緒だった。
1.AppControllerクラスを作る。
2.テキストフィールドのアウトレットと、sayHelloメソッドを宣言
3.IBでインタフェース作成、接続
4.XcodeでsayHelloメソッドの実装
5.ビルドと実行


>>647
Cocoaセミナーと内容一緒だから、あわせて見ておくのを勧める。
旧バージョンだが基本は同じだし、違うところは本を参考にすればいい。
ttp://developer.apple.com/jp/documentation/japanese.html

656 名前:名称未設定 mailto:sage [2008/09/03(水) 22:06:03 ID:cOJMtB+R0]
そういえばヒレガス本第3版邦訳まだかな

657 名前:名称未設定 mailto:sage [2008/09/03(水) 22:14:05 ID:qucRX3eD0]
アプリのメインのクラスをAppControllerって名前にするのたぶん彼の流儀なんだけど
国内ですげー広まってる気がするw
Appleのサンプル見るとメインのクラスはプロジェクトの名前とかだよね?

658 名前:名称未設定 mailto:sage [2008/09/03(水) 22:21:59 ID:BhsIDDum0]
>>657
おれの流儀はXXAppDelegateだぜ。XXの部分はプロジェクト毎にサフィックスを決める。

プログラムを作る時にはサフィックスのXXを決めるのに一番時間がかかる(w


659 名前:名称未設定 mailto:sage [2008/09/03(水) 23:09:33 ID:S2My4fpG0]
× suffix
○ prefix

660 名前:名称未設定 mailto:sage [2008/09/03(水) 23:29:06 ID:q20130QRP]
Core Dataなアプリだと、
プロジェクト作成時に自動的に
"プロジェクト名_AppDelegate"ができるから、
それをメインのコントローラとして弄ればいいのか

661 名前:名称未設定 mailto:sage [2008/09/04(木) 06:48:05 ID:phG/aT9q0]
>>658
メインのクラスはだいたいNSApplicationのデリゲートを受けるかも知れないけど、
デリゲート使用しない時もあるよね
まぁ細かいとこだけど俺も名前決めに時間かかる、他のクラスとかでも

662 名前:名称未設定 mailto:sage [2008/09/04(木) 10:36:29 ID:gMkAqZ6m0]
>>656
漏れも、ヒレガス本は心待ちにしている。

663 名前:名称未設定 mailto:sage [2008/09/04(木) 10:50:12 ID:pQ8weQW+0]
質問です。どうにもIB上のBindingとControllerが良く分からないので、
HMDTの黒表紙を買おうかと思案中です。そこでお聞きしたいのですが、
本の内容で、よく理解できるような解説はあるのでしょうか?
お持ちの方、よろしくお願いします。



664 名前:663 mailto:sage [2008/09/04(木) 11:07:05 ID:pQ8weQW+0]
思案してても仕方が無いので、やっぱ買う事にします。
日記になってしまって済みません。


665 名前:名称未設定 mailto:sage [2008/09/04(木) 13:29:39 ID:WdpeVM9o0]
>>657
NEXTSTEPのころのいろんなソースはだいたい
"プロジェクト名の略称Controller" って命名だった気がするよ

例えば UltraNature っていうプロジェクトだったら UNController とかね

>>664
2ch へのポストなど所詮みなの日記だもの
気にすることはないと思うよ

ちなみに何を読んだりどこまで自分でやって binding と controller がわからなかったのか
によってその本がためになるか変わるかも


666 名前:名称未設定 mailto:sage [2008/09/04(木) 20:48:22 ID:pQuggfDa0]
ヒレガス3rdの邦訳?

出るなら買うけど
出る予定なんてないんでしょ?

667 名前:名称未設定 mailto:sage [2008/09/04(木) 21:08:09 ID:AE37cJ/00]
>>666
>出る予定なんてないんでしょ?

ま、ないんじゃね。あれだけ図がついてりゃ訳なんて不要でわ


668 名前:名称未設定 mailto:sage [2008/09/05(金) 09:28:01 ID:Y7BbIuNw0]
まだ古い日本語版本屋に並んでるけど、さすがにもう・・・。地味に売れてたと
思うんで、いい加減新版出して欲しいものだ。英語版も買ったけど、やはり
時間がかかるわ、眠くなるわで、効率が悪い。

669 名前:名称未設定 mailto:sage [2008/09/05(金) 15:45:38 ID:70Xyj+YO0]
Xcode 3.1
LSUIElement=1の、メニューバー(ステータスバー?)アプリを作成しています。
メニューバーのアイコンのメニューからopenPanel等を開くと、openPanelがアクティブにならないのですが、自動でアクティブにするにはどのようにしたら良いのでしょうか。

670 名前:名称未設定 mailto:sage [2008/09/05(金) 15:51:32 ID:3OZbGjxI0]
-(IBAction)makeKeyAndOrderFront:(id)sender;

671 名前:名称未設定 [2008/09/05(金) 15:59:01 ID:70Xyj+YO0]
>>670
NSWindowをアクティブにするときはそれでいけるかもしれないですが、NSOpenPanelをアクティブにするのにはどのようにしたら…
あと、- (void)orderFrontStandardAboutPanel:(id)senderで表示したAboutパネルもアクティブになりません。

672 名前:名称未設定 mailto:sage [2008/09/05(金) 16:10:02 ID:70Xyj+YO0]
なんか邪道ですが、openPanelを開く前に
NSAppleScript *AS=[[NSAppleScript alloc] initWithSource:[NSString stringWithString: @"tell application ¥"アプリ名¥"¥nactivate¥nend tell"]];
を行うことでうまくいきました。
もっとスマートな方法はないのかな…

673 名前:名称未設定 mailto:sage [2008/09/05(金) 16:15:24 ID:70Xyj+YO0]
>>672
[AS executeAndReturnError:nil];
を書き忘れ。



674 名前:名称未設定 mailto:sage [2008/09/05(金) 16:18:16 ID:rvDtJprx0]
それそのまんまのメソッドがあるわけだが……

675 名前:名称未設定 mailto:sage [2008/09/05(金) 16:28:04 ID:70Xyj+YO0]
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
でいけました…


676 名前:名称未設定 mailto:sage [2008/09/05(金) 16:28:36 ID:3OZbGjxI0]
クラス階層

677 名前:名称未設定 mailto:sage [2008/09/06(土) 17:24:41 ID:pbA83sM10]
ドラッグ&ドロップ中にコマンドキーなどが押されたら、
ドラッグ中のアイコンを変更できますかね?

ドラッグ開始時の自作アイコン表示とドロップ時の
キー押下判定は実装できたのですが。

678 名前:名称未設定 [2008/09/07(日) 11:52:19 ID:K5MfR1iP0]
>>677
うーん。自前でイベントループを作って、自前でドラッグ処理を書く以外に、方法が思いつかない。

679 名前:名称未設定 mailto:sage [2008/09/07(日) 12:50:58 ID:YlD2TZRv0]
すみません、質問です。
ファイルのダウンローダーを作成していて、保存ファイル名に自動でタイトルなどを付加しているのですが、
ファイル名に"/"が含まれている場合、ダウンロードに失敗します。

// デスクトップのパス
NSString *path = [@"~/Desktop" stringByExpandingTildeInPath];

// ファイル名を付加
NSString *fileName = @"xx / xx.txt";
path = [path stringByAppendingPathComponent: fileName];

// download は NSURLDownload
// "/"が含まれていると失敗する
[download setDestination:path allowOverwrite:NO];


fileNameを"/" -> "-"に置換すればOKですが、なんか格好悪い、
"/" -> ":" に置換してもFinder上では"-"で表示されます。

Finder上で"/"は入力できるので(内部的には":"なのですかね)
なにか良い方法はありませんでしょうか?

お手数ですがよろしくお願いします。



680 名前:名称未設定 mailto:sage [2008/09/07(日) 12:54:11 ID:WGY8NPzr0]
ファイル名に/を使わないようにすればいいんじゃないか

681 名前:名称未設定 mailto:sage [2008/09/07(日) 13:21:02 ID:6VPpG5Yl0]
¥/

682 名前:名称未設定 mailto:sage [2008/09/07(日) 20:12:21 ID:yQpTS6OD0]
>>681
ありがとうございます。
NSMutableStringに入れて置換をかけてみましたが、
"バックスラッシュ+/"ではワーニングが出ました。

683 名前:名称未設定 mailto:sage [2008/09/08(月) 09:02:43 ID:1EifQ6YV0]
>>682
普通に/を:に置換するだけじゃだめなん?




684 名前:名称未設定 mailto:sage [2008/09/08(月) 22:18:36 ID:VBoZ6EQN0]
試してないしひどく適当なこと書いてるが「/」って単純にパスの区切りとして
扱われてるだけなんじゃね?デスクトップ上に「foo」ってフォルダ作っといて

NSString *fileName = @"foo/bar.txt";

ってしてやっても失敗する?

685 名前:名称未設定 mailto:sage [2008/09/09(火) 00:14:56 ID:IkrehLLo0]
使おうとしているAPIで/はディレクトリの区切り記号だから
"xx/hoge.txt"をダウンロードしようとすれば
xxというディレクトリがないなら失敗するのは当然。

ファイル名として/を使いたければ,:がFinder上では/に見える。
ただ,古いAPIだと:が区切りになっていたので
自動的に別の文字に置き換えられる可能性もある。
一度別の名前でダウンロードしてから希望の名前に
リネームをかけるというのではダメ?

でもダウンロードしてくるファイル名に/が含まれる
ことなんてあるの?


686 名前:名称未設定 mailto:sage [2008/09/09(火) 10:11:47 ID:V/uZJd3h0]
凄く基本的な質問です
以前からメモに// もしくは/* */ でコメントアウトを使用していたのですが
#pragma mark もビルド時には完全に無視されると考えてよいでしょうか?

687 名前:名称未設定 mailto:ge [2008/09/09(火) 17:46:39 ID:tjWw4zqq0]
ソースコードからNSButtonを生成して自作ビューの上に表示させたいんだけど、つまづいてます。

NSButton *aButton;

aButton = [[NSButton alloc] init];
[aButton setTitle:categoryName];
[aButton setTarget:categoryController];
[aButton setAction:@selector(loadFromCategory:)];
[aButton setBezelStyle:NSRecessedBezelStyle];
[aButton setHidden:NO];
[self addSubview:aButton];
[aButton setFrameOrigin:NSMakePoint(200, 200)];

ダメ出しお願いします。

688 名前:名称未設定 mailto:sage [2008/09/09(火) 17:49:59 ID:eVGJsD0p0]
何がどうダメになるんだい?


689 名前:名称未設定 mailto:sage [2008/09/09(火) 17:57:24 ID:tjWw4zqq0]
あー、肝心なところを書き忘れてた。。
ボタンが表示されないんですよ。


690 名前:名称未設定 mailto:sage [2008/09/09(火) 18:06:04 ID:CHK+3i9f0]
指定イニシャライザはinitWithFrame:だね。


691 名前:名称未設定 mailto:mage [2008/09/09(火) 18:18:31 ID:tjWw4zqq0]
最初からもっと詳しく書けば良かったね。NSViewのサブクラス(CategoryView)を作っていました。
それをコントロールするクラス(categoryController)内の文字列がつまった配列を読み込んで、
その数だけボタンを生成したかったんです。

@implementation CategoryView
- (id)initWithFrame:(NSRect)frameRect {
if(self = [super initWithFrame:frameRect]) {
}
return self;
}
- (void)drawRect:(NSRect)aRect {
if(prevArray == categoryController.articleList) {
return;
}
for(NSButton *removeButton in [self subviews]) {
[removeButton removeFromSuperviewWithoutNeedingDisplay];
}
for(NSString *categoryName in categoryController.articleList) {
NSButton *aButton = [[NSButton alloc] init];
[aButton setTitle:categoryName];
[aButton setTarget:categoryController];
[aButton setAction:@selector(loadFromCategory:)];
[aButton setBezelStyle:NSRecessedBezelStyle];
[aButton setHidden:NO];
[self addSubview:aButton];
[aButton setFrameOrigin:NSMakePoint(200, 200)];
}
prevArray = categoryController.articleList;
}
@end

692 名前:名称未設定 mailto:sage [2008/09/09(火) 18:25:40 ID:y/3nMAT/0]
>>691
長々コピペする前に1つ上のレスを見れば良かったね。

693 名前:名称未設定 mailto:sage [2008/09/09(火) 19:27:16 ID:tjWw4zqq0]
>>690
ありがとー



694 名前:名称未設定 mailto:sage [2008/09/09(火) 22:15:47 ID:5CcqCsPV0]
>>691
・とりあえず、drawRect:内で、subViewを追加している所がダメだ。subViewは前もって追加しておかなければならない。
・ボタンの数量が変わるということは、それに合わせて自身のViewサイズも変えなきゃダメじゃないの?
・どうしても、drawRect:のタイミングでしかボタンの数量が決定しないなら、NSButtonCellを使うとよいかもしれない。
・最終的に何を作りたいのか知らないけど、ボタンを並べるだけなら、NSMatrixを使ってみたら?



695 名前:名称未設定 [2008/09/10(水) 01:56:04 ID:JdO1QrgE0]
タスクバーはまだですか?

696 名前:名称未設定 [2008/09/10(水) 22:59:36 ID:erl+1Dgh0]
IBでUILabel のフォントサイズを変更しても、なんか画面上でうまく反映されてない気がするんですが気のせいですかね。
最初に配置したとたんはちゃんと追従するのに、一度フォーカス外しちゃうと駄目なきがしますが、いまいちよく判ってないかも。

697 名前:名称未設定 mailto:sage [2008/09/10(水) 23:48:34 ID:iCA9fuIC0]
AutoSizeなんとかみたいなん入ってないですか?
FitToだっけか何か

698 名前:名称未設定 mailto:sage [2008/09/11(木) 08:31:58 ID:VW8cs/5N0]
>>697
IBの話?Layout>Size to fit の事かな。

699 名前:名称未設定 mailto:sage [2008/09/11(木) 23:15:45 ID:hstXwgpC0]
たのcocoのHelloWorldでさっそくつまづいた。なんとか解決したけど。

.hファイルを編集するとあるが、どこにも「編集後に保存する」とは書いてないじゃないか。アイコンが灰色になってる意味すらわからなかったorz。

700 名前:名称未設定 [2008/09/12(金) 00:15:46 ID:g6XUsCdX0]
>>699
あ、それおれも一瞬つまづいた。
わかってしまえばなんてことないんだけどね。

701 名前:名称未設定 mailto:sage [2008/09/12(金) 00:42:34 ID:giTvRlty0]
ソースファイルを保存してないとそれはメモリ上にしかなくて
コンパイラが参照するディスクに保存してあるソースファイルは前のものだというのは
別に Cocoa に限った話じゃなくてコンパイラを使うプログラミングなら全部共通の常識だと思うのだが

702 名前:名称未設定 mailto:sage [2008/09/12(金) 01:00:38 ID:aLiSGFXa0]
君らはパソコンで文章とか絵とか書いても保存しないのか。

703 名前:名称未設定 mailto:sage [2008/09/12(金) 01:04:35 ID:cm2FlxP60]
>>701
いや、>>699はビルド時のことじゃないと思うよ。ビルド時には保存しますか?って聞かれるし。
多分Interface BuilderのほうにIBOutletとかが反映されるのが保存後ってとこじゃないかな。
たのcocoは買ってないけど、俺もXcode 3.xになってちょっと戸惑った。



704 名前:名称未設定 mailto:sage [2008/09/12(金) 07:29:43 ID:R3vW2eSc0]
>703
ずばりその通りです。
「アクションとアウトレットの接続」が何度やっても接続できなかった。

705 名前:名称未設定 mailto:sage [2008/09/12(金) 10:05:16 ID:kIdPh2bR0]
Xcode 3.xはIBで変更してもビルド時に保存するか聞いてこないってこと?
それはちょっと嫌だなあ。まだ2.xなもんで。

706 名前:名称未設定 mailto:sage [2008/09/12(金) 10:26:27 ID:blJgYNL40]
じゃなくて、関連付けられたXcodeのプロジェクト内のファイルが変更されたら
勝手に見に行って追加削除されたIBAction IBOutletを自動的に同期するんだよ。


707 名前:名称未設定 mailto:sage [2008/09/12(金) 16:10:14 ID:TZxbpOjR0]
勝手に保存される方が気持ち悪くない?

708 名前:名称未設定 mailto:sage [2008/09/12(金) 19:15:18 ID:Vsc3ghHA0]
Xcodeのリファクタリングで、nibのoutletとかも、リプレースしてくれるのが嬉しい。

709 名前:名称未設定 mailto:sage [2008/09/12(金) 20:48:14 ID:Oj5mxfWI0]
>>701
ということを知らない初心者向けの本の話をしてるんですが。

710 名前:名称未設定 mailto:sage [2008/09/12(金) 22:11:37 ID:eLlq91pJ0]
なるほど。
「ファイルとは何か。」
「保存すると何が起こる?」
ぐらいから始めないと何らかのクレームがつく訳か。

711 名前:名称未設定 mailto:sage [2008/09/12(金) 22:30:14 ID:rysqu+9T0]
>>710

そうじゃないだろ……。IBとXcode3.xがどういう連携を取っているかと云うのが詳しく説明されてないのが元凶で、編集した内容が保存しなくてもメモリを介して共有されると勘違いしてしまったって事だろ。


まあ、その誤解の仕方にも些か無理があるが……。

712 名前:名称未設定 mailto:sage [2008/09/12(金) 23:18:43 ID:Oj5mxfWI0]
>>710
大丈夫ですか?

713 名前:名称未設定 mailto:sage [2008/09/12(金) 23:29:05 ID:cm2FlxP60]
ていうか未だに2.xな人が多いのかな?この誤解されっぷりは。



714 名前:名称未設定 mailto:sage [2008/09/12(金) 23:56:30 ID:5MYImlaK0]
開発は3.0でやってるよ。3.1に上げると古いCarbonのAPIが使えなくなるから。
今のところ64bit必要ないし。

715 名前:名称未設定 mailto:sage [2008/09/13(土) 00:22:50 ID:HlQcU5id0]
>3.1に上げると古いCarbonのAPIが使えなくなるから。
それは初耳... SDK を古い奴に設定かえてもだめなの?

716 名前:名称未設定 mailto:sage [2008/09/13(土) 00:47:17 ID:U/Et2gQU0]
ライブラリに古いCarbonのAPIがないからリンク出来んという話だったと思う。

717 名前:名称未設定 mailto:sage [2008/09/13(土) 07:33:10 ID:RcIrvjqx0]
うむー初耳だらけ。
3.1でCarbonいじってる。古いAPIを使っててコンパイラからdeprecatedを連呼されるが
連呼されるだけで一応コンパイルできてる。いい加減Cocoaで書き直そうと思ってるけどそれは
置いといてw
ライブラリがなかったら既存のバイナリも走らないし。

718 名前:名称未設定 mailto:sage [2008/09/13(土) 08:00:02 ID:HlQcU5id0]
XCode 3.1.1 が来てるよ。

719 名前:名称未設定 mailto:sage [2008/09/13(土) 10:24:10 ID:LE/mlm6F0]
実際AppleはいつまでCarbonを長らえさせる気なんだろうな?
Snow Leopardで切ってしまうのは少々過激な気もするし(PowerPCは切られるっぽいが)。

720 名前:名称未設定 mailto:sage [2008/09/13(土) 10:42:12 ID:AGky0g5f0]
CocoaとCarbonが全然基盤の異なる環境で、CarbonはOS 9との互換性のために残してある…
などと考えているならそれは間違いだと言っておく。

721 名前:名称未設定 mailto:sage [2008/09/13(土) 10:49:37 ID:LE/mlm6F0]
>>720
それは分かってる。
両者混在可能だしiTunesとかFinderとか純正でもCarbon要素が多いソフトもあることだから。

722 名前:名称未設定 mailto:sage [2008/09/13(土) 11:27:59 ID:aVqvEgPV0]
最悪、Carbon.framework及び関連Frameworkをぶっこ抜いてきて、内蔵しちゃう。

723 名前:名称未設定 mailto:sage [2008/09/13(土) 11:39:14 ID:CsYE4bq/0]
最近のCocoaはスタック見てもCarbon呼んでないお。
CarbonからCoreServieに移ったのはあるけど。



724 名前:名称未設定 mailto:sage [2008/09/13(土) 12:06:38 ID:aVqvEgPV0]
SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar);
これだけのためにCarbon使ってる。
これぐらいはCocoaに付けてくれ。 DockもAuoShowするようにして。

725 名前:名称未設定 mailto:sage [2008/09/14(日) 14:12:32 ID:095CqlGt0]
NSTableColumnにNSImageViewを組み込み、
NSImageViewにローカルパスではなくURLから画像を取得する場合、
非同期で取得、表示させるにはどうするばよろしいでしょうか?

726 名前:名称未設定 mailto:sage [2008/09/14(日) 14:31:19 ID:hXVHKg6D0]
非同期で取得したいならNSURLDownloadで

727 名前:名称未設定 mailto:sage [2008/09/14(日) 14:47:35 ID:095CqlGt0]
NSURLDownloadで一旦ローカルに保存せずに
直接NSImageを作成することは出来るのですか?

それらしい方法があればよいのですが。

728 名前:名称未設定 mailto:sage [2008/09/14(日) 15:02:12 ID:/Z2RSCRo0]
どの部分が分からないのか分からない
取得?非同期?表示?

729 名前:名称未設定 mailto:sage [2008/09/14(日) 15:08:23 ID:p8KzSniT0]
NSURLConnection

730 名前:名称未設定 mailto:sage [2008/09/14(日) 15:32:55 ID:AYWcGIb70]
NSURLConnectionで非同期で画像をNSDataとして取得して、
それをもとにNSImageを生成してNSImageViewに設定

731 名前:名称未設定 mailto:sage [2008/09/14(日) 15:38:26 ID:p1p/oAlk0]
現在はNSImageのfileContentOfURLでNSImageを作成しているのですが、
取得に時間がかかると固まったようになるのです。

テーブルカラムで一気に数行を表示させると、しばらく
ハングアップしたような状態になるのを
避けるにはどうすればよいかと。

お手数ですがお知恵をいただければと。

732 名前:名称未設定 mailto:sage [2008/09/14(日) 15:49:38 ID:6NIJPt3y0]
>>731
>>730じゃだめなん?

733 名前:名称未設定 mailto:sage [2008/09/14(日) 16:02:55 ID:cIfGvRb00]
>>731
/Developer/Examples/PubSub/NewMusic/
のコードを見れば、>>730の実例がありますよ。




734 名前:名称未設定 mailto:sage [2008/09/14(日) 16:21:15 ID:p1p/oAlk0]
みなさまありがとうございます。
家に帰ってからチャレンジしてみます。

735 名前:名称未設定 mailto:sage [2008/09/14(日) 16:56:06 ID:/Z2RSCRo0]
普通にメインスレッド以外で読み込めば良いのでは?

736 名前:名称未設定 [2008/09/14(日) 23:21:50 ID:MZtdcUbF0]
age

737 名前:名称未設定 mailto:sage [2008/09/15(月) 00:47:43 ID:23PGzCcT0]
格闘すること4時間、ようやく非同期で画像表示ができました。
みなさま本当にありがとうございました。


738 名前:名称未設定 mailto:sage [2008/09/15(月) 10:05:56 ID:gN/nGyHB0]
>>737
>みなさま本当にありがとうございました。

老婆心だがどうやったらできたかも書いとくといいぞ。
他の人の参考になるかもしれん品

739 名前:名称未設定 mailto:sage [2008/09/15(月) 10:43:43 ID:1fLwojEv0]
相談したら解決法を書くのが礼儀かと

740 名前:名称未設定 mailto:sage [2008/09/15(月) 12:18:29 ID:23PGzCcT0]
ですね。失礼しました。
>>730さんの指摘の通りNSURLConnectionで非同期で画像をNSDataとして取得して画像を作成しました。

以下、主要なコード部分です。

- (void)getImage:(NSString *)imageURL
{
// リクエスト作成
NSMutableURLRequest *request = [NSMutableURLRequest imageURL
urlcachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30];
[request setHTTPMethod:@"GET"];

// コネクション開始
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// データを受信したら imageData_に溜め込む
if(!imageData_) imageData_ = [[NSMutableData data] retain];
[imageData_ appendData:data];
}

-( void )connectionDidFinishLoading:(NSURLConnection*)connection
{
// 受信が完了したら画像を作成する
image_ = [[NSImage alloc] initWithData:imageData_];
}


741 名前:名称未設定 mailto:sage [2008/09/15(月) 16:21:54 ID:yHVGCdW40]
すみません、また質問です。
NSStringで参照渡しをするにはどうすればよいのでしょうか?
下記のコードだと、ログには空白で出てしまいます。

NSString *str1 = @"";
NSString *str2 = @"";
[self getString:str1 str2:str2];
NSLog(@"str1=%@, str2=%@", str1, str2);

- (void)getString:(NSString*)str1 str2:(NSString*)str2
{
str1 = @"aaa";
str2 = @"bbb";
}

なんか基本的なことですみません。


742 名前:名称未設定 mailto:sage [2008/09/15(月) 16:53:15 ID:oR3oM3f30]
NSString *str1;
NSString *str2;
[self getString:&str1 str2:&str2];
NSLog(@"str1=%@, str2=%@",str1,str2);
[str1 release];
[str2 release];

-(void)getString:(NSString**)str1 str2:(NSString**)str2{
*str1 = [@"aaa" retain];
*str2 = [@"bbb" retain];
}

こんな感じか

743 名前:名称未設定 mailto:sage [2008/09/15(月) 17:01:20 ID:mcKY8VJv0]
本題からは外れるが、そのメソッド名でownershipを渡してしまうのはどうかと思う。



744 名前:名称未設定 mailto:sage [2008/09/15(月) 17:20:08 ID:A7RLo79t0]
文字列定数って解放されんの?

745 名前:名称未設定 mailto:sage [2008/09/15(月) 17:37:27 ID:1fLwojEv0]
>>743
[@"aaa" retain]するならcopyStringで
[@"aaa" autorelease]ならgetStringってこと?

そもそも返り値が複数の場合ってNSArrayとかNSDictionaryにしてやるイメージがあるけど、どうなんでしょ

746 名前:名称未設定 [2008/09/15(月) 17:45:44 ID:nEj7kIm/0]
「replacing NaN with 0.」というエラー(ウォーニン?)の対処方法を教えてください。詳細はこうです。

hmdt.jp/coral/index.htmlのcoral.appを改造しました。
コマンドで
./coral www.apple.com/jp/ipodnano/ -o ~/Desktop/test.pdf -p
とすると,問題なく終了しますが,
当のHMDTサイトだと,上記のエラーが16行出力されます。
./coral hmdt.jp/coral -o ~/Desktop/test.pdf -p

改造の趣旨は,PDFの出力をページごとにすることです。
(「PDFとして保存...」と同じことをコマンドラインからできるように)
いわゆるhtmltopdfとかHTMLDOCみたいで日本語可なものです。
このあとパッチを記載します。

747 名前:名称未設定 [2008/09/15(月) 17:47:00 ID:nEj7kIm/0]
$ cat main.patch
*** main.m.orig 2007-06-02 18:05:48.000000000 +0900
--- main.m 2008-09-13 16:13:54.000000000 +0900
***************
*** 38,43 ****
--- 38,44 ----
int COOutputSizeHeight = 0;
BOOL COIsVerboseMode = NO;
BOOL COIsDialogMode = NO;
+ BOOL COIsPagenateMode = NO;
float COTimerTime = 0.0;

NSArray* COFormats = nil;
***************
*** 51,56 ****
--- 52,58 ----
fprintf(stderr, " -f/--format <format> Specify output file format\n");
fprintf(stderr, " -h/--help Print this help\n");
fprintf(stderr, " -o/--output <file> Specify output file name\n");
+ fprintf(stderr, " -p/--pagenate Output a pagenated file\n");
fprintf(stderr, " -s/--screen <width height> Specify rendering screen size\n");
fprintf(stderr, " -S/--SIZE <ratio> | <width height> Specify output image size\n");
fprintf(stderr, " -d/--dialog Use print dialog\n");
***************



748 名前:747 [2008/09/15(月) 17:58:21 ID:nEj7kIm/0]
*** 245,250 ****
--- 247,261 ----
continue;
}

+ // Pagenate option
+ if ([tmp isEqualToString:@"-p"] ||
+ [tmp isEqualToString:@"--pagenate"])
+ {
+ // Set pagenate mode
+ COIsPagenateMode = YES;
+ continue;
+ }
+
// Verbose option
if ([tmp isEqualToString:@"-v"] ||
[tmp isEqualToString:@"--verbose"])

もう一つパッチがありますが,連続投稿できないので,しばらくお待ちを

749 名前:名称未設定 mailto:sage [2008/09/15(月) 18:01:08 ID:oR3oM3f30]
>>745
質問の内容に合うように回答してみたが、
自分なら >>742 みたいなことはしない。

750 名前:747 [2008/09/15(月) 18:01:15 ID:nEj7kIm/0]
$ cat COController.patch
*** COController.m.orig 2007-06-02 18:11:17.000000000 +0900
--- COController.m 2008-09-15 16:05:25.000000000 +0900
***************
*** 39,44 ****
--- 39,45 ----
extern int COOutputSizeHeight;
extern BOOL COIsVerboseMode;
extern BOOL COIsDialogMode;
+ extern BOOL COIsPagenateMode;
extern float COTimerTime;

extern NSArray* COFormats;
***************
*** 290,301 ****
path = [[NSFileManager defaultManager] currentDirectoryPath];
path = [path stringByAppendingPathComponent:COOutputFileName];
}
! if (![data writeToFile:path atomically:YES]) {
! // Error
! fprintf(stderr, "coral: Failed to save data\n");
! [self _quit];
! return;
! }

// Quit application
[self _quit];


751 名前:747 [2008/09/15(月) 18:04:59 ID:nEj7kIm/0]
--- 291,335 ----
path = [[NSFileManager defaultManager] currentDirectoryPath];
path = [path stringByAppendingPathComponent:COOutputFileName];
}
! if (COIsPagenateMode) {
! // For pagenate mode
! // fprintf(stderr, "coral: Pagenate Mode\n");
! // Create print info
! NSPrintInfo* printInfo;
! printInfo = [[NSPrintInfo alloc] init];
! [printInfo autorelease];
! [printInfo setHorizontalPagination:NSFitPagination];
! [printInfo setVerticallyCentered:NO];
! [printInfo setVerticalPagination: NSAutoPagination];
! [printInfo setJobDisposition:NSPrintSaveJob];
! [[printInfo dictionary] setObject:path forKey:NSPrintSavePath];
!
! // Load print panel
! COPrintPanelController* printPanelController;
! printPanelController = [[COPrintPanelController alloc] init];
! [printPanelController setWebView:_webView];
!
! // Active itself
! [NSApp activateIgnoringOtherApps:NO];
!
! // Run print operation
! NSPrintOperation* operation;
! operation = [NSPrintOperation



752 名前:名称未設定 mailto:sage [2008/09/15(月) 18:08:19 ID:1fLwojEv0]
>>749
ですよね
そして本人がいないという

753 名前:名称未設定 [2008/09/15(月) 18:11:07 ID:nEj7kIm/0]
! printOperationWithView:[[[_webView mainFrame] frameView] documentView] printInfo:printInfo];
! [operation setAccessoryView:[printPanelController view]];
! [operation setShowPanels:NO];
! [operation runOperation];
!
! [printPanelController release];
! }
! else {
! if (![data writeToFile:path atomically:YES]) {
! // Error
! fprintf(stderr, "coral: Failed to save data\n");
! [self _quit];
! return;
! }
! }

// Quit application
[self _quit];

以上です。



754 名前:名称未設定 mailto:sage [2008/09/15(月) 19:08:29 ID:yHVGCdW40]
>> 741です。
>>742 - 745 >>749
ありがとうございます。おかげさまでできました。
(NSString**)にして代入は*にすればいいんですね。
NSArrayやNSDictionaryの考えましたが、面倒くさいというか、
参照渡しができるはずだと思ったもので。

メソッド名はあまり規約は考えていません。(汗)




755 名前:名称未設定 mailto:sage [2008/09/18(木) 00:36:35 ID:P7aTv+8m0]
- (void)drawRect:(NSRect)rect {
[super drawRect:rect];
[[NSColor whiteColor] set];
NSFrameRect(rect);
}
と書くのと

static NSColor *_white;

+ (void)initialize {
_whiteColor = [[NSColor whiteColor] retain];
}

- (void)drawRect:(NSRect)rect {
[super drawRect:rect];
[_whiteColor set];
NSFrameRect(rect);
}
と書くのでは
後者の方がパフォーマンス良いのでしょうか?
[NSColor hogeColor];
というのはその都度NSColorを生成していると考え方であってますか?
実際にはパフォーマンスというか、書き方としてどちらが正しいのか知りたいです。

756 名前:名称未設定 mailto:sage [2008/09/18(木) 01:11:02 ID:M4ahfae1P]
NSColorの内部で後者みたいなことがすでに行われているんじゃないかなぁ。
引数なしで呼び出せる色は代表的な色ばかりだし。
知らずに答えてるので、実際は知らない。

757 名前:名称未設定 mailto:sage [2008/09/18(木) 01:17:09 ID:P7aTv+8m0]
やっぱ内部的にやってんですかねぇ。
ここ見て気になったんです。
ttp://hmdt.jp/cocoaProg/AppKit/NSTableView/NSTableView.html#section05

ここで使われてる
+ (NSColor *)colorWithCalibratedWhite:(CGFloat)white alpha:(CGFloat)alpha
の方なんかはなんとなく保持しておいたほうが良いような気がしますが、
おっしゃるようにwhiteColorなどの代表的な色ってどうなんでしょうね。

758 名前:名称未設定 mailto:sage [2008/09/18(木) 02:56:51 ID:s+En6PJ+0]
NSMutableArray *array=[NSMutableArray array];
while([array count]<10000)
[array addObject:[NSColor whiteColor]];

とかやってみてObjectAllocとかでいちいちオブジェクトが生成されているかチェックすれば?
arrayに入っているオブジェクトのポインタを比較するだけでもわかるかな?

759 名前:名称未設定 mailto:sage [2008/09/18(木) 03:20:51 ID:moZQjecs0]
InterfaceBuilderで設置したボタンを、ある変数の値によって
表示したり消したり(操作も無効に)させたいのですが
どうすればよいでしょうか。
こういう場合ソースコードからボタンを作らないといけないんですかね?

760 名前:名称未設定 mailto:sage [2008/09/18(木) 03:49:01 ID:s+En6PJ+0]
ボタンのisHiddenにバインドするだけでいけるでしょ

761 名前:名称未設定 mailto:sage [2008/09/18(木) 05:27:34 ID:moZQjecs0]
>>760
どうもです。それでやってみます。

762 名前:名称未設定 mailto:sage [2008/09/18(木) 12:11:19 ID:P7aTv+8m0]
>>758
作ったarrayをretainしてアクティビティモニタで確かめてみたんですが、
whiteColorやgrayColorなどはメモリ使用量が全然増えず、
colorWithDeviceRed:1 green:1 blue:1 alpha:1
などだとメモリ使用量が増えました。
ObjectAllocを理解してないのですが、試してみたところ前者はあまり反応が無いのに対して後者はAllocateされまくってるようでした。
brownColorやpurpleColorなどシステムや標準のアプリに使われてない色でテストしてみると分かりやすく
初回呼び出し時のみAllocateされてされているようでした。
どうやらこれらはNSCachedRGBColorというカテゴリらしく勝手にうまいことやってくれてるようですね。

763 名前:名称未設定 mailto:sage [2008/09/18(木) 13:26:26 ID:Zp1Zi8dY0]
>>746
俺にはいちいちこのパッチを当ててテストするパワーはないが、

とりあえずデバッガにかけてisnan()あたりでブレークするかやってみるとか?



764 名前:名称未設定 mailto:sage [2008/09/19(金) 01:58:22 ID:I8I+Mir80]
Objective-Cって拡張子cppなC++で書かれた関数って呼び出しできないの?
なんか参照できないみたいなエラーでる




765 名前:名称未設定 mailto:sage [2008/09/19(金) 02:09:25 ID:wgE41EU70]
エラーの内容が曖昧だけどObj-C++なら混ぜられる。
拡張子はmm。

766 名前:名称未設定 mailto:sage [2008/09/19(金) 10:40:19 ID:hXEJrUVN0]
CからC++の関数を呼ぶ時と同じ。
extern "C"でぐぐれ。

767 名前:名称未設定 mailto:sage [2008/09/19(金) 15:34:56 ID:guHg/OSE0]
fp = fopen( "test00.bmp" , "rb" );

でファイルtest00.bmpがあるにもかかわらず
失敗するのですが、ファイル指定方法間違ってるのでしょうか?

768 名前:名称未設定 mailto:sage [2008/09/19(金) 15:43:50 ID:Z5XmRcRR0]
”何処に”有るのか分からない。

769 名前:名称未設定 mailto:sage [2008/09/19(金) 16:03:15 ID:guHg/OSE0]
読んでもだめなら書いてみるってことで
ファイル書き込んだら、ユーザーのディレクトリ直下にファイルが生成されました。

そこにデータを置いたら読み込めました。

実行時カレントディレクトリがおかしかったみたいです。

わけわからん


770 名前:名称未設定 mailto:sage [2008/09/19(金) 16:14:16 ID:XMT3wHyR0]
>>769
ワーキングディレクトリにファイルがあればパスを指定しなくてもいいが、
普通はパスも含めて指定するものだ。お前の方がわけわからんよ。

771 名前:名称未設定 mailto:sage [2008/09/19(金) 16:44:22 ID:+88FPv300]
>>769
わけわかってから先に進んだ方がいいよ

772 名前:名称未設定 mailto:sage [2008/09/19(金) 20:26:50 ID:kkVdyAHJ0]
>>769
NSBundle使うなら、それくらい適当な指示でも探してきてくれるんだが。

773 名前:名称未設定 mailto:sage [2008/09/19(金) 20:33:14 ID:zh18Biru0]
fopen を使う意味が分からん



774 名前:名称未設定 mailto:sage [2008/09/20(土) 00:52:56 ID:QCGx6Cy40]
なんかフルボッコされてる><。
>fopenを使う意味
ウィンドウズで書いてたプログラムをそのまま移植してみたんです><
Mac使用暦3日ですいません。
Mac使いこなしてから出直してきます。

775 名前:名称未設定 [2008/09/20(土) 01:11:31 ID:6P09LMLz0]
>>774
がんばって

776 名前:名称未設定 mailto:sage [2008/09/20(土) 01:12:40 ID:2Q6+WcPN0]
Cの標準ライブラリでソフト作るんならスレ違いだと思うよ。

777 名前:名称未設定 mailto:sage [2008/09/20(土) 02:51:56 ID:y/ouZ/EC0]
>>774
Macでプログラミング{9}
pc11.2ch.net/test/read.cgi/mac/1216824430/

【マック】Macintoshプログラミング質問箱
pc11.2ch.net/test/read.cgi/tech/1113058054/

の方がC言語標準でソフト作るのには向いているかも。
ただしどちらも適度に過疎っているのでそこが問題か。

778 名前:名称未設定 [2008/09/20(土) 04:40:03 ID:TXb4ST/Q0]
wktk.vip2ch.com/vipper103088.png
FinderやMail等で使用されている↑のUIを使いたいのですが、
どなたか方法ご存知のかたいないでしょうか。


779 名前:名称未設定 mailto:sage [2008/09/20(土) 05:19:39 ID:cXIvNawZ0]
Recessed Buttonじゃない??

780 名前:名称未設定 mailto:sage [2008/09/20(土) 05:29:36 ID:TXb4ST/Q0]
>>779
ありがとうございます。Recessed Buttonありました!
あとは背景かぁ…
この背景のすこしカーブしているような感じはどうやってるんだろ。
オリジナル画像?


781 名前:名称未設定 mailto:sage [2008/09/20(土) 07:27:15 ID:JW0iPyXCP]
.appのパッケージを見ると、ボタンのふちとか画像つかってるのがわかるよ

782 名前:名称未設定 mailto:sage [2008/09/20(土) 13:28:58 ID:hXrkeK7L0]
正式に売るアプリならパッケージの中の画像パクって使ってはいけないってうちの社の方針なんだけど、(Apple製のアプリでも)
やっぱ売り物に使うとまずいのかな?詳しい人いませんか?

783 名前:名称未設定 mailto:sage [2008/09/20(土) 14:17:29 ID:rgm2k6nl0]
何だって?



784 名前:名称未設定 mailto:sage [2008/09/20(土) 14:28:35 ID:ULascG860]
>>782
Appleに問い合わせろ。

俺はダメだと思うけど、判断するのはAppleだからな。

785 名前:名称未設定 mailto:sage [2008/09/20(土) 15:56:12 ID:LLE/vX/80]
NSString *mailPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:@"mail"];
if(!mailPath) return nil;

NSBundle mailBundle = [NSBundle bundleWithPath:mailPath];
if(!mailBundle) return nil;

NSString *imagePath = [mailBundle pathForImageResource:@"hoge"];
if(!imagePath) return nil;

return [[[NSImage alloc] initByReferencingFile:imagePath] autorelease];


盗んでないもん!

786 名前:名称未設定 mailto:sage [2008/09/20(土) 16:12:30 ID:pqLJOpdL0]
質問です。
NSDictionaryのインスタンスに登録したオブジェクトの参照カウンタは
NSDictionaryのインスタンスのdealloc時にreleaseされるのでしょうか?

787 名前:名称未設定 mailto:sage [2008/09/20(土) 16:14:08 ID:pqLJOpdL0]
それともdealloc時にremoveAllObjectsを呼ぶ必要がありますか?

788 名前:名称未設定 mailto:sage [2008/09/20(土) 16:21:10 ID:uslRtMKV0]
ない

789 名前:名称未設定 mailto:sage [2008/09/20(土) 16:27:12 ID:pqLJOpdL0]
どうもありがとう!
すっきりしました。

× NSDictionary
○ NSMutableDictionary

790 名前:名称未設定 mailto:sage [2008/09/20(土) 16:36:49 ID:TXb4ST/Q0]
>>781
やっぱり画像ですか…

>>785
おぉ、その手がw
ありがとうございます。


791 名前:名称未設定 mailto:sage [2008/09/20(土) 16:37:14 ID:hXrkeK7L0]
>>785
俺もそんな感じ

792 名前:名称未設定 mailto:sage [2008/09/20(土) 17:12:02 ID:RYHkLcyT0]
しかしそれでは参照元が消えたら壊滅。
心を込めて1ドットずつ写せば問題なし。

793 名前:名称未設定 mailto:sage [2008/09/20(土) 17:12:43 ID:a7bWHByb0]
他のメーラー使ってる人の中には
Mailを削除した人も居るんでない?



794 名前:名称未設定 mailto:sage [2008/09/20(土) 20:59:21 ID:hXrkeK7L0]
まぁMailアプリは一例だろうけど
勝手に標準アプリを消すようなクライアントはあまりいないだろう

795 名前:名称未設定 [2008/09/21(日) 02:55:13 ID:U0GaFiaU0]
小さな画像に著作権は無かったような

796 名前:名称未設定 mailto:sage [2008/09/21(日) 19:06:34 ID:00WHdogq0]
Appleとしても同じアイコン使ってくれた方が統一されて
うれしいと思うんだけどな。
というか、商用アプリでリソースパクりは山ほどあるだろ。

797 名前:名称未設定 mailto:sage [2008/09/21(日) 19:34:22 ID:f0YS1Y1Y0]
service.shoppingfinder.jp/case/case01.html
Win用なのにモロパク

798 名前:名称未設定 [2008/09/21(日) 19:35:41 ID:9pFmn9NQ0]
商売第一のヤツにオリジナリティの道を説くだけ無駄

799 名前:名称未設定 mailto:sage [2008/09/21(日) 19:44:26 ID:1Y9VMPly0]
>>797
UIはOS X、アイディアは→ttp://hmdt.jp/icart/index.html

800 名前:名称未設定 mailto:sage [2008/09/21(日) 19:57:32 ID:nOczMaxO0]
>>797
こういう会社はやだな

801 名前:名称未設定 [2008/09/21(日) 20:33:16 ID:9pFmn9NQ0]
こういうヤな会社でも売れれば勝ちだからな。
こういうヤな会社に負けないにはどうすべきか考えないとな。

802 名前:名称未設定 mailto:sage [2008/09/21(日) 21:12:36 ID:ZjTwY0rm0]
うわ、ここまでやっちゃうか。
えげつないなあ

803 名前:名称未設定 mailto:sage [2008/09/21(日) 21:17:46 ID:eybcE3Lo0]
どうせここまでやるならCocoaで開発しちゃえよ……。



804 名前:名称未設定 mailto:sage [2008/09/21(日) 21:19:46 ID:nY6XTthc0]
>>796
そういや、Appleから警告を受けたY'z Dockはリソースもパクってたな。
それがなきゃ警告はなかったかも?

805 名前:名称未設定 mailto:sage [2008/09/21(日) 21:28:04 ID:nOczMaxO0]
>>801
1行目>>そういう考え方もやだな

806 名前:名称未設定 [2008/09/22(月) 00:20:34 ID:+KhZs1Nw0]
iTunesみたいなUIをつくりたいんだがドキュメントのどこみればいいか分かりません。
だれか教えて下さい。

ちなみにつくりたいiTunesみたいなUIとは、
左ペインの部分です。

807 名前:名称未設定 mailto:sage [2008/09/22(月) 00:44:33 ID:Zw418t180]
>>806
ツリーかな?

808 名前:名称未設定 mailto:sage [2008/09/22(月) 00:46:31 ID:+hiVdtXuP]
>>806
park15.wakwak.com/~concordia/cocoa_break/dev/src/ADCSamples/index.html
のSourceViewが参考になるのでは。
NSTreeControllerを使ってるので、ちょっと敷居が高いかもしれないけど。

809 名前:名称未設定 mailto:sage [2008/09/22(月) 01:02:34 ID:AYeTay2Z0]
>>806
NSTreeController
developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTreeController_Class/Reference/Reference.html

R.Natori氏による使用例
d.hatena.ne.jp/RNatori/20080716


810 名前:名称未設定 mailto:sage [2008/09/22(月) 11:17:41 ID:jh2DSqbR0]
みんな親切だね

811 名前:名称未設定 mailto:sage [2008/09/22(月) 16:43:21 ID:YwUHAmLG0]
>>804
ま、あれはwidnows用だしね。
Mac用で同じリソース使ってくれたら統一感出してくれてありがとう
の一言だと思うけど。

ま、あくまでも憶測w

812 名前:名称未設定 [2008/09/22(月) 18:05:30 ID:AYeTay2Z0]
NSURLの、
relativeStringとabsoluteStringの違いがよくわからないのですが、
具体的にどのようなときに違いが現れるのでしょうか。

813 名前:名称未設定 mailto:sage [2008/09/22(月) 18:38:52 ID:gvOmEYnc0]
+[NSURL URLWithString:relativeToURL:]
-[NSURL initWithString:relativeToURL:]
を使ったとき意外は一緒です。



814 名前:名称未設定 mailto:sage [2008/09/22(月) 18:50:38 ID:AYeTay2Z0]
>>813
ありがとうございます。

815 名前:名称未設定 [2008/09/23(火) 12:51:58 ID:DvYJX4re0]
806です

>>807,808,809
ありがとうございます

816 名前:名称未設定 [2008/09/23(火) 17:58:23 ID:KUSPWosD0]
>>696 同じとこでつまずいた…orz

UILabelのフォントサイズを18以上にすると追従して大きくなるけど、そこから小さくできない。

うーむ

817 名前:名称未設定 [2008/09/23(火) 19:16:28 ID:g/RzbGfr0]
Dock上の特定のアイコンの座標を取得する方法ってあるんでしょうか?
Stackみたいにちょうどアイコンの上にウィンドウが開くようなUIを作りたいのですが・・・。

818 名前:名称未設定 mailto:sage [2008/09/23(火) 22:47:20 ID:7MN5oJ1o0]
プロパティで
@property (readWrite, retain, nonatomic) NSObject *object;
とした場合
self.object = nil;

[object release];
もしくは
[self.object release];
と同義でしょうか?

819 名前:名称未設定 mailto:sage [2008/09/24(水) 00:22:02 ID:aStVeHik0]
久しぶりにプログラムいじってるんですが、quartzのCGLayerRef(スクリーン
外)にCocoaのメソッド使って描画してます。
CGLayerRefからNSContextつくって、それをsetCurrentContextで設定して
描画を行い、NSViewの次のdrawRect:の段階で画面上に描画しています。

10.4ではうまくいっていたんですが、10.5にすると、このメソッド以降描画がさ
れなくなります。

CurrentContextがCGLayerRefになったままなのかと疑い、以前のCurrentContext
を一次退避させて、描画が終わった段階で元に戻すと正常に描画されるように
なったんですが、これは正しい解決方法なんでしょうか。

どなたかアドバイスして頂ければ幸いです。

820 名前:名称未設定 [2008/09/24(水) 19:26:25 ID:jwopSb5h0]
Xcode 3.1です。
-(IBAction)openBrowser:(id)sender{
NSWindowController* wc=[[NSWindowController alloc] initWithWindowNibName:@"Browser"];
[wc showWindow:self];
[[wc window] makeKeyAndOrderFront:self];
}
新しく作成したウィンドウがアクティブにしたいのですが、上のソースでは表示されるもののアクティブになりませんでした。
ウィンドウをアクティブにするにはmakeKeyAndOrderFront以外にも何か必要なんでしょうか。
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
を追加してみたりもしてみましたが効果無しでした。

821 名前:名称未設定 mailto:sage [2008/09/24(水) 19:59:35 ID:EW93wwHW0]
>>820
基本的な確認だけども。
そのNSWindowControllerは読み込んでるNibの中でFile's Ownerになっている?
そのアウトレットがちゃんと目的のWindowに繋がってる?

822 名前:名称未設定 mailto:sage [2008/09/24(水) 21:02:40 ID:jwopSb5h0]
>>821
ありがとうございます。windowをアウトレットで繋いだらうまくいきました。

823 名前:名称未設定 mailto:sage [2008/09/24(水) 21:27:01 ID:iIaK2s1u0]
>>818
ttp://www.stripe-net.jp/cocoa/program/blog20080511.html



824 名前:名称未設定 mailto:sage [2008/09/24(水) 21:55:28 ID:/GxHzA8A0]
>>823
んはーありがとうございます。
ちなみに上記コードでreleaseした後に
self.source = hoge; で再設定しようとすると落ちました。
retainCountが0だからってnilではないんですね。

825 名前:名称未設定 mailto:sage [2008/09/25(木) 07:07:20 ID:lA2ZC0x+0]
iPhotoを起動するときにoptionキーを押しながら起動すると
ライブラリの選択が行えるわけですが、
同じように自前のアプリケーションでも起動時のキー判定を行うには
どうしたらいいんでしょうか。

826 名前:名称未設定 [2008/09/25(木) 07:34:41 ID:bTE/wwXK0]
NSLog([[NSString alloc] initWithData:[[[NSString alloc] initWithString:@"=http%3A%2F%2F"] dataUsingEncoding:NSShiftJISStringEncoding] encoding:NSShiftJISStringEncoding]);
を実行してみると、
=http0X1.D1A1091104A28P-658-0.000000-1.992821
と表示されてしまうのですが、
「%3A%2F%2F」を含むNSDataを「0X1.D1A1091104A28P-658-0.000000-1.992821」ではなく「%3A%2F%2F」にする方法は無いのでしょうか。
initWithDataだけでなく、stringWithContentsOfFile:encoding:error:を試してもだめでした。

827 名前:名称未設定 mailto:sage [2008/09/25(木) 10:03:12 ID:pGcOup570]
>825
cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/bathyscaphe/bathyscaphe/application/source/manager/DatabaseManager-Notifications.m?rev=1.9&view=auto
の一番下の
- (void)applicationWillTerminate:(NSNotification *)notification
でやってる。

これをApplication DelegateのapplicationWillFinishLaunchingあたりで。
GetKeys()はCarbonかCoreServiceに入ってたと思う。

828 名前:名称未設定 mailto:sage [2008/09/25(木) 10:09:07 ID:uj5o01Zl0]
>>826
そもそもhttp%3A%2F%2Fがいけないと思うよ。
http://にしないと。
デコードするメソッドはググれば見つかると思う。

829 名前:名称未設定 mailto:sage [2008/09/25(木) 11:05:14 ID:sKStzvQr0]
>>828
そういう問題じゃないでしょ

>>826
NSLog(@"%@", [[NSString alloc]...);

NSLog の第一引数は format を指定するためのもの。典型的な security hole の原因だわ。

830 名前:名称未設定 mailto:sage [2008/09/25(木) 11:13:32 ID:pGcOup570]
>826
NSString *hoge = /* NSLogの中身 */;
NSLog(@"%@", hoge); // 第一引数に直接指定しない。
だと、どうですか?

NSLogの第一引数に直接指定してるのが問題です。
NSLogの第一引数はprintfとほぼ同じformat文字列ですので、
NSLogが%を解決しようとしてぶっ飛んでるんだと思います。

変換自体はそれでちゃんと出来ているはずです。

831 名前:名称未設定 mailto:sage [2008/09/25(木) 13:08:06 ID:4oC2NP4f0]
>>826
あと、NSShiftJISStringEncoding で決めうちするのはよくないよ。
URL は ShiftJIS のばあいもあれば、 EUC の場合もあるし、
最近は Unicode もふえてるから、ちゃんとその URL を含む頁の
コードを判定してからやりましょう。

832 名前:名称未設定 mailto:sage [2008/09/25(木) 13:33:02 ID:q/UtwYK70]
便乗ですみませんが、どうやって取得前に文字コードを判別できるのですか?

833 名前:名称未設定 mailto:sage [2008/09/25(木) 13:58:05 ID:bTE/wwXK0]
>>829-830
ありがとうございます。うまくいきました。
formatを扱う時は気をつけます。

>>831
今回やろうとしていることの場合、NSString化するデータが日本語を含まないとわかっているため、NSShiftJISEncodeで決めうちしています。

>>832
blogs.dion.ne.jp/fujidana/archives/4169016.html
これぐらいしかわからない…
もっといい方法あれば良いんだが



834 名前:名称未設定 mailto:sage [2008/09/25(木) 15:46:00 ID:sKStzvQr0]
>>833
日本語を含まないことがわかっているのであれば NSASCIIStringEncoding にするべきでは

>>831
URL は %xx を decode しないなら文字コードは関係ないでしょ

835 名前:名称未設定 mailto:sage [2008/09/25(木) 16:11:06 ID:cN/guz5p0]
>>819
そうだよ。
10.4で問題がなかったのはたまたまでしょうね。

836 名前:名称未設定 mailto:sage [2008/09/26(金) 22:02:33 ID:cU/wlxV80]
>>835
遅くなりましたが、レスありがとうございます。

ひとまず安心しました。
DrawRect:が呼ばれる辺りでNSContextも再設定されると思ってたので意外です。

837 名前:名称未設定 [2008/09/27(土) 17:38:47 ID:PUMQQB4h0]
NSViewをpdfにして(「PDFとして保存...」)プリントパネルを出さずに,保存したいと考えてます。
その際,プリントパネルでレイアウトのページ数/枚を2とか4とか設定するのと同様のことを
コードの中で設定したいのだがうまくいきません。
NSPagesAcross(横方向),NSPagesDown(縦方向)に整数をセットすればいい筈なのですが,
うまくいきません。
しかも,developer.apple.com/documentation/Cocoa/Conceptual/Printing/Tasks/CreatingPrintJob.html#//apple_ref/doc/uid/20000861によると
They still use the shared NSPrintInfo object if one is provided, but do not allow the user to modify the defaults.らしい。
アドバイスをお願いします。
念のためソースです。
NSPrintInfo* printInfo;
printInfo = [[NSPrintInfo alloc] init];
[printInfo autorelease];
[printInfo setHorizontalPagination:NSFitPagination];
[printInfo setVerticallyCentered:NO];
[printInfo setVerticalPagination: NSAutoPagination];
[printInfo setJobDisposition:NSPrintSaveJob];
[[printInfo dictionary] setObject:path forKey:NSPrintSavePath];
COPrintPanelController* printPanelController;
printPanelController = [[COPrintPanelController alloc] init];
[printPanelController setWebView:_webView];
[NSApp activateIgnoringOtherApps:NO];
NSPrintOperation* operation;
operation = [NSPrintOperation
printOperationWithView:[[[_webView mainFrame] frameView] documentView] printInfo:printInfo];
[operation setAccessoryView:[printPanelController view]];
[operation setShowPanels:NO];
[[[operation printInfo] dictionary] setObject:[NSNumber numberWithInt: 2 ] forKey:@"NSPagesAcross"];
↑ここで1枚あたり2ページを割り付けているつもり...
[operation runOperation];
NSLog([NSString stringWithFormat: @"%@" ,[[[operation printInfo] dictionary] description]]);
[printPanelController release];

838 名前:名称未設定 mailto:sage [2008/09/27(土) 20:08:21 ID:3BeeyAhv0]
>>836
drawRectで再設定されるから良いという問題ではないですよ。
思わぬ所で上書きされる可能性もあるし、
currentContextかえたら元に戻すのが作法だと思います。

839 名前:名称未設定 mailto:sage [2008/09/28(日) 00:16:59 ID:4kM6Mp/Q0]
>>837
NSPagesAcrossってNSPrintPagesAcrossのこと?
後こういう定数は「@"NSPrintPagesAcross"」じゃなくてそのまま「NSPrintPagesAcross」でいいと思う。

840 名前:837 [2008/09/28(日) 12:00:57 ID:UPVPAS6R0]
>>839
アドバイスサンクスです。NSPagesAcrossとNSPrintPagesAcrossとの関係はつかめません。
NSPrintPagesAcrossにかえても,NSPrintInfoをダンプ(NSLog)は「NSPagesAcross = 2;」になってます。
しかも,期待した結果を得られないし,,,
[printInfo setJobDisposition:NSPrintSaveJob];としても
runOperation中では,無視されているみたいです。

841 名前:名称未設定 mailto:sage [2008/09/28(日) 12:39:44 ID:qIiqZsDr0]
>>838
なるほど、言われてみればその通りです。

アドバイスありがとうございました。

842 名前:837 [2008/09/29(月) 11:02:33 ID:El694lAQ0]
NSLogで出力したとき,日本語がエスケープされる(\U5185みたいになる)のですが,
エスケープされない方法か,コピペで,変換してくれるようなサイトがあったら,
教えてください。ちなみにこれはUTF8?UTF16?

843 名前:名称未設定 mailto:sage [2008/09/29(月) 12:49:55 ID:z/XCBa2L0]
>>842
>ちなみにこれはUTF8?UTF16?

いわゆるNonLossyASCII。



844 名前:名称未設定 mailto:sage [2008/09/29(月) 16:20:22 ID:gW8PSnBP0]
>>842
>>NSLogで出力したとき
問題があった時は自分で原因を狭めてしまわず、どういうことをしたらそうなったのかちゃんと詳しく書くべき
NSLogは日本語表示してくれる
ArrayとかDictionaryのdescriptionだと言ってるように変換されて表示される
君はそれを言ってるんじゃないかな?
まずは質問の仕方から勉強しようね

845 名前:837 [2008/09/29(月) 16:21:31 ID:El694lAQ0]
ページ設定パネルで設定された結果(プリンタとか,用紙サイズ,方向など)を
チェックしたくて,
NSPageLayout *pageLayout = [NSPageLayout pageLayout];
runModalResult = [pageLayout runModal];
NSLog([NSString stringWithFormat: @"%@" ,[[[NSPrintInfo sharedPrintInfo] dictionary] description]]);
というのを差し込んでいるのですが,
ログには全然,パネルでの変更が反映されていません。
(デフォルトの設定がつらつらと出力されるだけ)
なんか勘違いしているみたいなのですが,その勘違いに気付けないので,よろしくお願いします。



846 名前:名称未設定 mailto:sage [2008/09/29(月) 16:48:46 ID:FPqjXq0v0]
だから、NSLogの第一引数に直接内容不明な文字列を指定するなっていったじゃん。

と、全然別の所に突っ込んでみた。

847 名前:名称未設定 mailto:sage [2008/09/29(月) 17:04:44 ID:gW8PSnBP0]
>>845
お前人の話し聞けよwww
そんでNSPageLayoutとかNSPrintInfoとか、
つかそもそもstringWithFormatとかdescriptionとかrunModalとか全部ドキュメント読んでこいよw
コード見てるとなんかどこじゃなくてたくさん勘違いしてるから

848 名前:名称未設定 mailto:sage [2008/09/29(月) 18:04:53 ID:aNtcQVm00]
NSLogの引数の中が全部デフォルトのものばかりかと。
変更された値を保持するオブジェクトを引数にいれないと。

849 名前:名称未設定 mailto:sage [2008/09/30(火) 00:10:06 ID:AyM7tJ3A0]
>>847
>どこじゃなくてたくさん勘違い

845はよーくドキュメントあたった方がいいぞ

850 名前:名称未設定 mailto:sage [2008/09/30(火) 00:37:30 ID:ra4ctouo0]
>>840
>>837のコードを参考に自分でもいろいろ試してみたんだけど、ダメだ。
カスタムのNSPrintInfo作って、それを使ってNSPrintOperationを動かしても全然一枚あたりのページ数が反映されない。
NSPrintOperationにパネル表示させて、一枚あたり2ページにしてやると正常に作動するのに、
その正常に作動したNSPrintInfoの内容と全く同じカスタムのNSPrintInfoを事前に指定してやると全然反映されない。
(多分>>837のコードは四苦八苦した後のものなんだろう。NSPrintOperation作った後に設定したりしてるから。
 自分はNSPrintOperation作る前にNSPrintInfoに設定したけど、結果は同じだった)

CocoaBuilderで似たような質問が出ていないか捜してみると、いくつかあった。
www.cocoabuilder.com/archive/message/cocoa/2007/11/16/193220
しかし困ったことに回答が付いたものはゼロだった。
誰か正解を教えてくれ。俺が困ってるわけじゃないけど。

851 名前:名称未設定 mailto:sage [2008/09/30(火) 00:58:00 ID:jXZPfbh50]
>>849
お前さんもどこがおかしいのか分からないのかい?
おかしいってか意味の無いことをしてるなって感じだけど

852 名前:名称未設定 mailto:sage [2008/09/30(火) 01:45:32 ID:ra4ctouo0]
>>845
まずNSLogだが、これはstringWithFormat:と同じで第一引数にフォーマット、次から挿入する引数になる。
それを直すとこうなる。
NSLog(@"%@" ,[[[NSPrintInfo sharedPrintInfo] dictionary] description]);

次に「%@」だが、これは引数に指定したオブジェクトのdescriptionが挿入される。NSStringのdescriptionは自分自身。
それを直すとこう。まあ動作は同じなんだけど。
NSLog(@"%@" ,[[NSPrintInfo sharedPrintInfo] dictionary]);

だが俺の理解だと、sharedPrintInfoはカスタムのNSPrintInfoを指定していないNSPageLayoutや他のNSPrintOperationとは
共有されているはずだ。それの変更が反映されていないというのは腑に落ちない。
ていうかそこが本質なんだから、>>846-849はそっちも答えてやってくれよ。

853 名前:名称未設定 mailto:sage [2008/09/30(火) 02:02:03 ID:ra4ctouo0]
>>852に追記。
NSLog([[NSPrintInfo sharedPrintInfo] dictionary]);
これをやってはいけない訳はつまり、descriptionが返したNSStringの中に「%@」やなんかがあったらどうなるか?ってこと。
質の悪いバグになる。



854 名前:名称未設定 mailto:sage [2008/10/01(水) 00:24:05 ID:fZLF4RYJ0]
ttp://ja.wikipedia.org/wiki/%E6%9B%B8%E5%BC%8F%E6%96%87%E5%AD%97%E5%88%97%E6%94%BB%E6%92%83
これって、セキュリティホールになるのか。

855 名前:名称未設定 mailto:sage [2008/10/01(水) 07:44:49 ID:Au+Xh+xi0]
>>852
>ていうかそこが本質なんだから、>>846-849はそっちも答えてやってくれよ。
「NSLogの第一引数に生文字突っ込むな」とか分かりやすいとこばっかレスが付くのはねえ(w

>>845
Leopard以降だとNSPrintInfoからCore Printing(低レベルの印刷レイヤ)まわりにアクセスできるので、
それ経由でやればよさげ。

[operation setShowPanels:NO];
PMPrintSettings settings = [[operation printInfo] PMPrintSettings];
PMPrintSettingsSetValue(settings, kPMLayoutNUpKey, [NSNumber numberWithBool:YES], false);
PMPrintSettingsSetValue(settings, kPMLayoutRowsKey, [NSNumber numberWithInt:2], false);
PMPrintSettingsSentValue(settings, kPMLayoutColumnsKey, [NSNumber numberWithInt:2], false);
[operation runOperation];

とか(2x2の場合)。
NSPagesAcross -> kPMLayoutColumnsKey、NSPagesDown -> kPMLayoutRowsKey という
対応があるようで、これらは元のコードのようにNSPrintInfoからもセット可能なのだが、
kPMLayoutNUpKeyは直接的な対応はないようなので、Core Printingでセットしてやる。
CUIでNSPrintInfoを使うとkPMLayoutNUpKeyがセットされず、それが問題らしい。

856 名前:名称未設定 mailto:sage [2008/10/01(水) 13:40:46 ID:2vvkNhJP0]
NSStringのrangeOfString:options:を使って、文字列の部分一致検索を処理してます。
アルファベットの大文字小文字、全角と半角、ひらがなとカタカナの違いを無視して一致させたいのですが、
ひらがなとカタカナを無視するオプションが見つかりません。
大文字小文字はNSCaseInsensitiveSearch、全角半角はNSWidthInsensitiveSearchが使えました。
どなたか、このあたりをご存知ないでしょうか?

857 名前:名称未設定 mailto:sage [2008/10/01(水) 14:50:47 ID:Jxg6CwEI0]
そんな日本語特有の処理が入ってるの?

858 名前:名称未設定 mailto:sage [2008/10/01(水) 15:40:30 ID:QJCrV6zO0]
印刷するアプリ作ったことない。w

>856
CoreDataの検索はひらがな、カタカナ無視してるから、
何らかの隠しオプションなりが有る可能性は有るけど。
enum CFStringCompareFlags {
kCFCompareCaseInsensitive = 1,
kCFCompareBackwards = 4,
kCFCompareAnchored = 8,
kCFCompareNonliteral = 16,
kCFCompareLocalized = 32,
kCFCompareNumerically = 64,
kCFCompareDiacriticInsensitive = 128,
kCFCompareWidthInsensitive = 256,
kCFCompareForcedOrdering = 512
};
CFのがそのまま通るかも。 kCFCompareLocalized ってのがあるけど使ったことない。

859 名前:名称未設定 mailto:sage [2008/10/01(水) 17:39:48 ID:EWXwe1rT0]
>>856
全く調べてないし、その気もないけど、そんな日本人に都合の良いっていうか日本人くらいしか使わないようなAPIがあるとは思えない。

自前で文字列をどっちかに変換して検索するとかしかないんじゃない?



860 名前:名称未設定 mailto:sage [2008/10/01(水) 18:27:50 ID:2vvkNhJP0]
>>856
ありがとうございます。
CFのオプションを試します。
ダメなら、CFの検索関数も試してみます。

861 名前:名称未設定 mailto:sage [2008/10/01(水) 21:16:10 ID:2yWM9Tj30]
AppleScriptは一部ヴァージョンでひらカタ無視するらしいけど、まあCocoaには関係ないか……。

862 名前:名称未設定 mailto:sage [2008/10/01(水) 23:57:24 ID:YpUBWQie0]
一部バージョンて
最新のAppleScript2.0のことでしょ

863 名前:名称未設定 mailto:sage [2008/10/02(木) 08:58:20 ID:ZCB6ua8+0]
iPhoneの連絡先も、かなを無視して絞り込むな。
やっぱ、CFあたりにあるんじゃないのか。



864 名前:名称未設定 mailto:sage [2008/10/02(木) 09:24:10 ID:DEyPKUgT0]
>>856
ttp://blogs.dion.ne.jp/fujidana/archives/4410801.html
NSPredicateだから、メールなどの絞り込み検索にはともかくテキストエディタなどの文字列検索だとしたらニーズに合うかは分からないけど。

865 名前:名称未設定 mailto:sage [2008/10/02(木) 21:22:47 ID:6I84zxEw0]
基本的な質問で恐縮ですが、
NSMutableDictionary *dict = [NSMutableDictionary dictionary];

NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelease];
では、どう違うのでしょうか?

下の方が解放してくれていい感じがするのですが、
明確に使い分ける意図があれば教えて下さい。

866 名前:名称未設定 mailto:sage [2008/10/02(木) 21:30:49 ID:/nxJVGj90]
同じ

867 名前:名称未設定 mailto:sage [2008/10/02(木) 22:10:36 ID:6I84zxEw0]
そうですか、ありがとうございます。
これで迷わずにコードがかけます^^;

868 名前:名称未設定 mailto:sage [2008/10/03(金) 08:29:27 ID:oZRcqq8c0]
>>867
ドキュメントのどっかをよめばかいてあるけど、
メソッド名に init... , copy... があるやつは autorelease されてなくて、
メソッド名にそれらがないやつは autorelease されてる、
と「決まってます」。
自分でメソッド書くときもそれに従っとくと混乱がすくないです。

869 名前:名称未設定 mailto:sage [2008/10/03(金) 11:02:40 ID:mGVGEXof0]
>>868
>>423
init は出てこない。

まあ普通は alloc と init の組み合わせで使うから、関係なくないといえばそうだけど。

870 名前:名称未設定 mailto:sage [2008/10/03(金) 16:51:46 ID:lnmhxgeU0]
CABasicAnimationで画像を複数回移動するアニメーション部分をやっているのですが、
speed、durationなどの設定が同じならtoValueに設定した値までの移動距離が短くなるほど、
移動するスピードが遅くなります。(長くなると速くなる)

違った移動距離でも同じスピードで移動させたのですが、そのような設定は出来ますでしょうか?
毎回、speed、durationなどの値を入れ替えるしかないのでしょうか?




871 名前:名称未設定 mailto:sage [2008/10/04(土) 14:48:53 ID:YvRU7BHV0]
>>859
無いという確信がどこから来るのか不思議だが、見事にハズレ。APIはちゃんとある。
CFでもUnicode UtilitiesでもLocaleとoptionを正しく与えれば、ひらがなとカタカナを
同一視した比較ができる。この動作をするのはJapanese Localeの時だけだから、
System Preferences > International設定の影響を受けたくなければLocale明示が必要

872 名前:名称未設定 mailto:sage [2008/10/05(日) 05:38:25 ID:uziPsw3m0]
>>871
別に確信を持って言ってるようには感じないけど。


いい感じ通信だったかな日本語文字列検索のこと書いてたけどこのオプションを使ってるのかな?

勉強になりました。

873 名前:名称未設定 mailto:sage [2008/10/06(月) 10:26:21 ID:JVQiKRWo0]
>>871
kCFCompareLocalizedをオプションに入れて、
ロケールに日本語を入れれば良いという事ですか?



874 名前:名称未設定 mailto:sage [2008/10/06(月) 22:13:17 ID:0Tq6ORkh0]
>>873
CFStringCompareWithOptionsAndLocale()を使う場合はそう。
Leopard以前でLocale明示した比較をする場合はUnicode Utilitiesの
UCCompareText()を使う。

875 名前:名称未設定 [2008/10/07(火) 01:33:37 ID:e/RkVFA40]
すんません、古いOS持ってないので確認できないんだけど・・
例えばSDK10.4でビルドしたアプリって、OS10.3で起動したなら勝手にエラー出して終わるのかな?
それとも自分でチェックのコードを書かなきゃいけない?

876 名前:名称未設定 mailto:sage [2008/10/07(火) 01:36:38 ID:QWJWi9xM0]
>>875
デプロイメントターゲットも10.4にしておけば起動しない。
俺は10.3にも対応してるアプリを書いてるが、SDKは10.4でユニバーサルバイナリ、デプロイメントターゲットは10.3。

877 名前:875 mailto:sage [2008/10/07(火) 01:40:17 ID:e/RkVFA40]
>>876
了解です、ありがとう。

878 名前:名称未設定 mailto:sage [2008/10/07(火) 10:06:27 ID:h1HNxZeI0]
>>874
ありがとうございます。

879 名前:名称未設定 mailto:sage [2008/10/08(水) 17:22:36 ID:HG8PgwVu0]
CocoaでSOAP通信しようとした時に、まず何から手をつければ(何から読めば)いいんでしょうか…

880 名前:名称未設定 mailto:sage [2008/10/08(水) 18:48:52 ID:ttuSaGVV0]
>>879
私が参考にしたのはこれ
developer.apple.com/internet/webservices/webservicescoreandcfnetwork.html

881 名前:名称未設定 mailto:sage [2008/10/08(水) 18:55:02 ID:HG8PgwVu0]
ふんふん、やっぱそれが一番いいですか!
ありがとうございます!!

882 名前:名称未設定 mailto:sage [2008/10/08(水) 19:23:55 ID:4ZTxCEDH0]
ローカライズ作業をしていたところ突如Xcodeが強制終了して
立ち上げ直したのですがなぜかローカライズがまったく反映されなくなってしまい
前日まで作業していた分も全てローカライズがはずれてしまいました。
Localizable.stringファイルを削除し新規に作り直したのですが、まったく反映されません。
試しに新規プロジェクトでローカライズしてみたところ、ちゃんと反映されました。
強制終了した際にプロジェクトファイルが壊れてしまったのでしょうか?
どこかXcode側で設定しなおしてみる項目などはありますか?

883 名前:名称未設定 mailto:sage [2008/10/09(木) 00:31:21 ID:mF789dp10]
一番初めのObjective-Cプログラム - @IT
www.atmarkit.co.jp/fcoding/articles/objc/02/objc02a.html



884 名前:882 mailto:sage [2008/10/09(木) 05:14:32 ID:qeuBkKCx0]
Xcodeが強制終了したので先入観でファイルが破壊されたのかと疑っていたのですが、
結局、事前に一度にたくさん編集していたLocalizable.stringファイル内でセミコロンが抜けていただけでした。
失礼致しました。

885 名前:名称未設定 mailto:sage [2008/10/10(金) 19:16:18 ID:L0qzaxQU0]
Cocoa-Dev-Japan (GoogleML) が… ちょっお前、binding の前に KVC が…
とにかくHMDT本か荻原本読めよ、って感じになってる ヽ(#`Д´)ノ

886 名前:名称未設定 [2008/10/12(日) 08:38:45 ID:UeP+1Xtv0]
Xcode 3.1です。
Mail.appのspliter下部の、縦3本線が入ったもの(↓)を実現したいのですが、どのようにしたら良いのでしょうか。
wktk.vip2ch.com/vipper106389.png

887 名前:名称未設定 mailto:sage [2008/10/12(日) 11:11:46 ID:4WLMBQ1Y0]
>>886
画像用意すれば?

888 名前:名称未設定 mailto:sage [2008/10/12(日) 13:07:15 ID:D9KSzLTv0]
>>886
Bathyscaphe のコードを読めば?

889 名前:名称未設定 mailto:sage [2008/10/12(日) 13:39:33 ID:EkZL2P090]
boolで設定できるようなメソッドなんてないからな


890 名前:名称未設定 mailto:sage [2008/10/12(日) 16:33:30 ID:UeP+1Xtv0]
回答ありがとうございます。

>>888
BathyScaphe見てみます。

>>887,889
標準でCocoaに搭載されているわけでは無いんですか、了解です。

891 名前:名称未設定 mailto:sage [2008/10/13(月) 10:23:40 ID:fnx1FSJm0]
ヒレガス本 (3rd ed.) 買ったら、なんとスクリーンショットが XCode 3.1 系になってた。びっくり。

892 名前:名称未設定 mailto:sage [2008/10/13(月) 15:10:17 ID:qv+NzKd90]
日本語版出たの?

893 名前:名称未設定 mailto:sage [2008/10/14(火) 00:28:17 ID:mOuH6PRf0]
あ、いや、英語版。新規ファイルの画面とか、iPhone 用... とかいう項目も表示されてて、ちょっと NDA 破っていたんではないかと思います。



894 名前:名称未設定 mailto:sage [2008/10/14(火) 06:18:27 ID:isaZ0j8N0]
Document-based Application以外の方法で作ったプロジェクトに
あとからNSDocumentのサブクラスとMyDocument.nib追加しても
MyDocumentをインスタンス化してくれないのは、やっぱり
リンクしてるフレームワークが違うからなんですかね。
途中でドキュメントベースアプリケーションに切り替える方法って
ないんですかね

895 名前:名称未設定 mailto:sage [2008/10/14(火) 06:23:20 ID:uAJ7zTji0]
Document-based Applicationとしては、最低限Cocoaフレームワークにリンクしてればいいはず。
Info.plistの設定が足りてないんじゃないかと。
新規Document-based Applicationプロジェクト作って見比べてみれば。

896 名前:名称未設定 mailto:sage [2008/10/14(火) 07:15:03 ID:R8Rv/utE0]
切り替えってか、最初に選ぶのはただのテンプレだから
>>895のおっしゃる通り、何かしらの設定が足りてないだけ

897 名前:名称未設定 mailto:sage [2008/10/14(火) 09:45:43 ID:iYELuUXd0]
>894
Info.plistの設定をする必要があります。

898 名前:名称未設定 mailto:sage [2008/10/14(火) 10:18:36 ID:KQeOZJ2S0]
一度 [x] でウインドウを閉じた後、
Dockのアイコンをクリックして再度ウインドウを表示するには
どうしたらよいのでしょうか?

899 名前:898 mailto:sage [2008/10/14(火) 11:28:43 ID:KQeOZJ2S0]
ちなみに Cocoa Application で作成しています。

900 名前:名称未設定 mailto:sage [2008/10/14(火) 16:40:23 ID:isaZ0j8N0]
>>895,896,897
なるほど。もうちょっと調べてみます。


901 名前:名称未設定 mailto:sage [2008/10/14(火) 18:10:17 ID:iYELuUXd0]
>>900
Info.plistを直接いじるんじゃなくて、
ターゲットの情報(プロジェクトじゃない)から設定するのが普通です。
空のDocument-Base Applicationを作って見て見るといいと思います。

902 名前:名称未設定 mailto:sage [2008/10/15(水) 13:05:53 ID:X12wPIuI0]
NSExpression/NSPredicate についてご教示ください。
NSExpression の expressionForKeyPath: と expressionForVariable:
って何が違うのでしょうか? それぞれ、NSPredicate predicateWIthFormat中の
%K、$ に相当すると理解しているのですが、$ ってどう使うのかガイドを
読んでもよく分からず(SQLを知らないから?)。やりたいことはできたのですが、
$ が分からないのが気持ち悪くて…よろしくお願い致します。

903 名前:名称未設定 mailto:sage [2008/10/15(水) 14:03:04 ID:yNmlq9pv0]
SQLに'$'なんてあったかな?

Predicate Format String Syntaxにも$なんて出てこないけど?



904 名前:名称未設定 mailto:sage [2008/10/15(水) 14:04:18 ID:yNmlq9pv0]
と思ったら書いてあるじゃん

Variables are denoted with a $ (for example $VARIABLE_NAME).

ちゃんとドキュメント読めよ。

905 名前:名称未設定 mailto:sage [2008/10/15(水) 14:27:54 ID:X12wPIuI0]
言葉足らずですみません。ガイドやリファレンスは読んだのですが、その例が
理解できなくって。その、VARIABLE はどういったものになるのでしょう?
クラス変数は expressionForKeyPath: で取れて来るのは確かめたのですが、
expressionForVariable: でやってみると、'NSInvalidArgumentException'が
投げられて、reason: 'Can't get value for 'hoge' in bindings'、となりました。
'bindings' とあるので、controller に対して掛けるものなのかなぁ?とか、
考えたのですがよく分からず…よろしくお願いします。

906 名前:名称未設定 mailto:sage [2008/10/15(水) 15:23:33 ID:X4uGROjz0]
>>905
どこが解らないのか、理解できませんが、
Predicate Programming Guideの
Creating Predicates Using Predicate Templates
developer.apple.com/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html#//apple_ref/doc/uid/TP40001793-219639-BCIIHDCH

を参照してください。

有効なpredicateにするにはpredicateWithSubstitutionVariablesでvariableを変換します。


907 名前:名称未設定 mailto:sage [2008/10/15(水) 16:06:02 ID:X12wPIuI0]
>>906
>どこが解らないのか、理解できませんが、
レスありがとうございます。うまく伝えられずごめんなさい。
以下のような事だと理解していいでしょうか?
・$hoge は述語の中の place holder みたいになっている。
・NSPredicate を実際に使うときに、$hoge の中身を predicateWithSubstitutionVariables
で(動的に)指定する。
・同じ処理を$... を使わない場合には、NSpredicate を個別にインスタンス化する
必要があるので、$... を使う方がよい。
ということですか?

908 名前:名称未設定 mailto:sage [2008/10/15(水) 17:34:16 ID:X4uGROjz0]
>>907
906です。
おおむね、その理解で良いのではないかと思います。

variableが有用なのは、特にdateです。
「dateが今日である」とか「dateが2週間以内」といったpredicateはvariableでないと作れません。

spotlight query には$timeが使えますが、それ以外では自前で作成する必要があります。


909 名前:907 mailto:sage [2008/10/15(水) 18:59:48 ID:X12wPIuI0]
>>908
なるほど、とてもすっきりしました。ありがとうございます。
自分の作っている物では、数値やboolの比較しかやってないので、その用途が
document 読んだにもかかわらず(汗、イメージすら出来ていませんでした。
ありがとうございました。

910 名前:名称未設定 [2008/10/15(水) 20:06:29 ID:cArxvyPQ0]
NSStringに関する質問です。
hoge=[NSString stringWithString:@"test"];
を行った場合は、hogeはメインスレッド終了後解放され、
hoge=[[NSString alloc] initWithString:@"test"];
を行った場合はメインスレッド終了後も解放されないのはわかるのですが、
hoge=@"test";を行った場合はどうなるのでしょうか。
hoge=[NSString stringWithString:@"test"];と同様の処理になるのでしょうか。それとも違うのかな…

911 名前:名称未設定 mailto:sage [2008/10/15(水) 20:25:32 ID:f5mk9D5/0]
メインスレッドが終了するとすべてのオブジェクトが破棄されます。
解放の処理は行われません。

てのは置いといて、
[[NSString alloc] initWith...]
と同じと考えておけば良いです。

912 名前:名称未設定 mailto:sage [2008/10/15(水) 20:27:46 ID:cArxvyPQ0]
>>911
stringWith…
dictionaryWith…
arrayWith…
とかは、デフォでautoreleaseしているものだと思っていたのですが、違うのでしょうか。

initWith…と同等ですか、ありがとうございます。

913 名前:名称未設定 mailto:sage [2008/10/15(水) 20:29:41 ID:X4uGROjz0]
>>910
hoge=@"test" のretainCount を調べてみると良いですよ。




914 名前:名称未設定 mailto:sage [2008/10/15(水) 20:30:38 ID:cArxvyPQ0]
>デフォでautoreleaseしているものだと思っていたのですが、違うのでしょうか。

ソースは、詳解Objective-C 2.0 P103
"一方、一時的に使われることを前提として、オーナーを持たない形で生成されるインスタンスもあります。
このような一時的なインスタンスは、生成直後に自動解放プールに登録することで実現されています。"

915 名前:名称未設定 mailto:sage [2008/10/15(水) 20:48:12 ID:f5mk9D5/0]
意地悪すぎましたか。
あなたが「メインスレッド」という名称だと思っているものは多分「メインランループ」です。
そうだとしても間違った解釈をしてますが。
メインスレッドというのは簡単にいっちゃえば、アプリケーションの実行の流れです。
これが終了するってことはつまり、アプリケーションが終了するってことです。

>911の始めで言ってるのは
「アプリケーションが終了したらオブジェクトはすべて破棄されます」
ってことです。



916 名前:名称未設定 mailto:sage [2008/10/15(水) 22:44:59 ID:cArxvyPQ0]
>>915
ありがとうございます。


917 名前:名称未設定 mailto:sage [2008/10/15(水) 23:34:58 ID:PvLIPph40]
>>910
ちょっと補足。
(Cocoaの)Obj-Cソースで@"test"と書いた場合はNSStringのオブジェクト定数というものになる。
つまり@"test"はそれ自体NSStringのインスタンスなのだけれども、releaseされてもretainCountは減らない。deallocもされない。
なので、hoge=@"test"と[[NSString alloc] initWith...] はautoreleaseされていないという点で同じだが、オブジェクト定数は
解放されないので全く異なる。
しかしプログラムの他の部分で、hogeがオブジェクト定数であることを前提にしたコーディングを行うのは良くない。
あくまでオーナーシップの原則に則るべきだから、stringWithString:の場合と同様に扱うのがいいと思う。

>>915の書き方も婉曲で分かりづらいので補足しておくと、アプリケーション終了時にはメモリは全て解放される。
autoreleaseしたものはメインスレッド終了時でもランループ一巡ごとでもなく、カレントのNSAutoreleasePoolが
解放されるときにreleaseされる。ランループは一巡ごとにNSAutoreleasePoolを作っては解放しているので、
標準ではランループごとにreleaseされるように見える。
自分でNSAutoreleasePoolのインスタンスを作った場合は当然ながらそれがカレントになる。

918 名前:名称未設定 mailto:sage [2008/10/16(木) 00:33:11 ID:yCQlP8sI0]
>>917
ありがとうございます。オブジェクト定数で調べたら載っていました。

919 名前:名称未設定 mailto:sage [2008/10/16(木) 02:55:17 ID:IxQHpoVP0]
というかそれぐらい基本的なことはまず聞く前に過去ログを呼んだ方がいい

920 名前:名称未設定 [2008/10/16(木) 02:58:26 ID:u4dOHZt50]
おーい、過去ログーっ!

921 名前:名称未設定 mailto:sage [2008/10/16(木) 03:03:04 ID:IxQHpoVP0]
呼んで見つかったら次は読んでね

922 名前:名称未設定 mailto:sage [2008/10/16(木) 04:30:30 ID:4acnW/Ie0]
sankei.jp.msn.com/photos/culture/arts/080501/art0805011905006-p1.jpg

923 名前:名称未設定 mailto:sage [2008/10/16(木) 05:09:11 ID:dwqlPggA0]
うまいねえ、これでインスタンスかい?



924 名前:名称未設定 mailto:sage [2008/10/17(金) 04:12:23 ID:T8gpvSXs0]
10/15 付けの新ドキュメントをざっとながめてたんだけど、
developer.apple.com/documentation/Cocoa/Reference/NSTextInputClient_Protocol/Reference/Reference.html
ていう新 protocol がでてた。しかし
developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSTextInput_Protocol/Reference/Reference.html
との違いがほとんどわかりません。詳しい方よろすく

925 名前:名称未設定 mailto:sage [2008/10/17(金) 11:51:31 ID:wwiyQt7f0]
NSDictionaryをファイルに書き出す時に日本語文字列が
"\Uxxxx" のようにUnicodeの文字コードに変換されてしまうのを回避することはできないでしょうか?

PropertyListでなくてNSDictionaryのdescriptionInStringsFileFormatの形式で書き出したいのです。
NSStringやNSPropertyListSerializationを経由してどうにかならないかとやってみましたが解決できませんでした。
Property List Editor.appでファイルフォーマットをText Property Listにして書き出した場合も日本語は文字コードに変換されてしまうのでやっぱり無理なのでしょうか?

926 名前:名称未設定 mailto:sage [2008/10/17(金) 12:18:02 ID:dwaA01i20]
直接やる方法はわかりませんが、
単に NSDictionary のキーを keyEnumerator で列挙して、
それを徐々に NSMutableString かなにかにつなげていって、
ファイルに書き込みたい文字列をつくったら、
NSString の -writeToFile:atomically:encoding:error:
で書き込めばいいと思います。
encoding 指定は NSUTF8StringEncoding でいいと思います。

927 名前:名称未設定 mailto:sage [2008/10/17(金) 12:46:30 ID:wwiyQt7f0]
ありがとうございます
とりあえず今それでやっていますが辞書がいれごになって複雑になると大変ですね;
自前のdescriptionとしてカテゴリにしておこうかな
直接的に変換しない方法もあればよろしくお願いします

928 名前:名称未設定 mailto:sage [2008/10/17(金) 15:21:26 ID:7NVYtTTJ0]
>>925
たぶんプロパティリストのシリアライズと関係があると思うけど、
key = value; 型のものは旧式 (OPENSTEP由来)のもので、基本的にASCII。それが¥Uxxxxになる
理由だったと思う。
今はなるべくXML形式かバイナリ形式でシリアライズすることになっている。
ローカライズに使う.stringsファイルはちょっと例外的で、UTF-8/UTF-16をそのまま使えるけど。

ちなみに¥UxxxxというやつはNSNonLossyASCIIStringEncodingというエンコーディングとして
定義されているので、NSStringとかでこれを指定して読み込めば本来のUnicodeに戻る。

>とりあえず今それでやっていますが辞書がいれごになって複雑になると大変ですね;

リーフノードが規約かどうかで再帰コードでも書いたらいいだけだと思うけど。
そもそも入れ子(?)になってたら、stringsファイル形式では表現できないような。
あ、上で書いたいわゆるOPENSTEP形式のプロパティリストで入れ子にしたいということかな。

929 名前:名称未設定 mailto:sage [2008/10/17(金) 16:18:00 ID:wwiyQt7f0]
そうです、おっしゃる通りstringsファイル形式ではなくてNSPropertyListOpenStepFormat形式のプロパティリストファイルで、
かつ日本語表示させたいということでした。
説明していただいた文章を読むと、\Uxxxxはユニコードの文字コードがASCIIエンコーディングで表示されているということですかね。
そのあたり勘違いしていたようです。
複数のプログラム、プラットフォーム間でのデータのやり取りを想定しているので、プロパティリストではなく編集も容易なテキスト形式が好ましいかなと思い、かつ日本語表示もできるほうがいいよなと試行錯誤中でした。
XMLだと普通に日本語表示されるけど(PropertyListEditorなんかは除いて)テキスト編集が大変かなぁと、、
どうしたらいいのか分からなくなってきたのでもう一度やりとりするファイルの形式から考えなおしてみます。
Javaとか分かれば解決なんでしょうけどorz

930 名前:名称未設定 mailto:sage [2008/10/17(金) 19:47:10 ID:wLdb94V30]
>>924
単純に、NSTextInputを機能拡張したものが、NSTextInputClientなのでは?
NSTextInputは、インフォーマルではない普通のプロトコルなので、メソッドの追加や変更ができません。
そのため、新しいプロトコルが定義されたのではないかと思います。



931 名前:名称未設定 mailto:sage [2008/10/18(土) 00:52:35 ID:BOpHtGbQ0]
>>929
プロパティリストっていってもただのXMLだから大体の環境で読み込みとか問題なさそうな気がするけど違うのかな?
まあ、簡単に編集ができると言う部分はちょっとだけ微妙かもしれないか。

932 名前:名称未設定 mailto:sage [2008/10/18(土) 01:27:26 ID:G97j1AaDP]
DOM面倒だし、YAMLとかにしたほうがいいのかな

933 名前:名称未設定 mailto:sage [2008/10/18(土) 02:24:23 ID:iCLvp6LK0]
>>929
>そうです、おっしゃる通りstringsファイル形式ではなくてNSPropertyListOpenStepFormat形式のプロパティリストファイルで、
>かつ日本語表示させたいということでした。

というわけで、これ自体は、一旦OPENSTEP形式で書き出してからそれをNSStringに
NSNonLossyASCIIStringEncodingで読み込んで、最終的にUTF-8等で書き出し、でいいと思うけど。

クロスプラットフォームならむしろXML形式の方がいいと思うけどね.... Mac OS X以外の
環境でどういう処理をしたいのかによるけど。



934 名前:名称未設定 mailto:sage [2008/10/18(土) 03:46:52 ID:IhdInhk50]
xml のパーサは OS X以外のどの環境でも最近は標準で備わっていたり、オープンソースであったりするので、UTF8 + XML でデータをやりとりするのがかんたんだと思いますよ。

OpenStep 形式のファイルのパーサを OS X 以外の環境で自前で書くのは車輪の再発明で無駄だというのに同意。

935 名前:925 mailto:sage [2008/10/18(土) 05:35:50 ID:Z6oi/mZ20]
みなさんありがとうございます。
今回PCに詳しくない人でもなんとかテキストエディタで編集できるレベルでと考えてたこと、
またProperty List EditorなんかはDeveloperが入っていないといけないというのと、
自分がWinの方でのXMLの処理についての知識が浅かったということで、XML形式でなくOPENSTEP形式にこだわっていました。
昨晩は結局自前のdescriptionを書いて日本語表示をちまちま実装していましたが、力尽きて寝てしまい起きて>>933氏の書き込みを見てやり直してみたら一瞬でできました。
ちなみにプロパティリストの書き出し時に関してですが、NSPropertyListOpenStepFormatは読み込み時にしか使えないため以下のようにしました。

936 名前:925 mailto:sage [2008/10/18(土) 06:12:47 ID:Z6oi/mZ20]
カテゴリを実装
@implementation NSString (CardDocument)
- (NSString *)UnicodeString {
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
return [[[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding] autorelease];
}
@end

NSString *string = [[hogeDictionary descriptionInStringFileFormat] UnicodeString];
NSLog(string);
[string writeToFile:@"/Users/admin/Desktop/hoge.txt" atomically:NO encoding:NSUTF8StringEncoding error:nil];

これでplistとして読み可能な形でテキストファイルに日本語表示のまま保存することができました。
NSLogで確認できますが、辞書の中身がちゃんと日本語で表示されています。
もちろん辞書に対してdescriptionでもいいですが、今回はOPNESTEP形式にしたかったのでdescriptionInStringFileFormatを用いています。
辞書の中にNSDateが入っていると書き出したファイルを読み込みできなくなるのでNSDateはdescriptionWithLocaleなどしておく必要があります。
そうするとProperty List Editorで開いた時にNSDateではなくNSString扱いになってしまいますが、Porperty List Editorから書き出し時にフォーマットをText Property Listにした場合も同じようにNSDateはNSStringに変換されてしまうので仕方ないかと。

とりあえずこれはこれで良いとして、XMLを使う方向での可能性も探っていきたいと思います。みなさま御助言ありがとうございました。

937 名前:名称未設定 mailto:sage [2008/10/18(土) 08:05:10 ID:jwVyMTzD0]
カテゴリ内のメソッド名は UnicodeString とかいうめちゃくちゃ一般的な名前じゃなくて、
stringByInterpretingUnicodeEscapes
とかのほうがいいのでは ... 将来ソースコードみたときに判らんようになると思います。

938 名前:名称未設定 mailto:sage [2008/10/18(土) 08:15:39 ID:iCLvp6LK0]
>>936
あそうそう、OPENSTEP形式だとさらに、いくつかの種類のオブジェクトがちゃんと扱えないという
制限があったはず。ひょっとするとNSDateもそうかも。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<288KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef