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

Cocoaはさっぱり!!! version.9
http://pc11.2ch.net/test/read.cgi/mac/1201106820/
3 Name: 名称未設定 [sage] Date: 2008/05/20(火) 22:57:38 ID: 8Odxygdm0 Be:
間違ってても(゚ε゚)キニシナイ!!

Cocoaはさっぱり!!! version.8
http://pc11.2ch.net/test/read.cgi/mac/1179498292/
Cocoaはさっぱり!!! version.7
http://pc11.2ch.net/test/read.cgi/mac/1161486802/
Cocoaはさっぱり!!! version.6
http://pc11.2ch.net/test/read.cgi/mac/1146391229/
Cocoaはさっぱり!!! version.5
http://pc11.2ch.net/test/read.cgi/mac/1124986925/
Cocoaはさっぱり!!! version.4
http://pc11.2ch.net/test/read.cgi/mac/1091927026/
Cocoaはさっぱり!!! Version.3
http://pc5.2ch.net/test/read.cgi/mac/1063295248/
Cocoaはさっぱり!version:2
http://pc11.2ch.net/test/read.cgi/mac/1036923528/
Cocoaはさっぱり!
http://pc11.2ch.net/test/read.cgi/mac/1007632025/
4 Name: 名称未設定 [sage] Date: 2008/05/20(火) 23:10:29 ID: 7Hvy2BoK0 Be:
>>1
乙。
5 Name: 名称未設定 [sage] Date: 2008/05/20(火) 23:12:32 ID: 7Hvy2BoK0 Be:
関連スレも貼っとこう

Macでプログラミング{8}
http://pc11.2ch.net/test/read.cgi/mac/1195385771/

MacOS XをUnixとして使ってる人の為のスレ その13
http://pc11.2ch.net/test/read.cgi/mac/1190016804/

Cocoaはさっぱり!!! version.9
http://pc11.2ch.net/test/read.cgi/mac/1201106820/

Xcode part6
http://pc11.2ch.net/test/read.cgi/mac/1201693264/

【マック】Macintoshプログラミング質問箱
http://pc11.2ch.net/test/read.cgi/tech/1113058054/

Mac OS Xでの開発環境はどれがイイ?
http://pc11.2ch.net/test/read.cgi/tech/1163314891/
6 Name: 名称未設定 [sage] Date: 2008/05/20(火) 23:23:40 ID: RwxhciDA0 Be:
ObjectiveC++最高ぉ
7 Name: 名称未設定 [sage] Date: 2008/05/20(火) 23:30:39 ID: tYSiPPVw0 Be:
現実
ttp://slashdot.jp/developers/article.pl?sid=08/04/06/2313251

プログラミング言語別求人件数(アメリカ)

Java 16479件
C++ 8080件
C# 7780件
JavaScript 6749件
Perl 5710件
PHP 2641件
Python 1408件
COBOL 1207件
Ruby 769件
Objective-C 38件 ←←←←
Lisp 33件
8 Name: 名称未設定 [sage] Date: 2008/05/20(火) 23:37:49 ID: KHEABemo0 Be:
これも関連スレに入れてあげてください
Objective-C [ObjC part:3];
http://pc11.2ch.net/test/read.cgi/tech/1186543111/
9 Name: 名称未設定 [sage] Date: 2008/05/20(火) 23:50:51 ID: HRwZ9j3i0 Be:
>>7
Java がトップとは、当たり前のような、そうでないような…
10 Name: 名称未設定 [sage] Date: 2008/05/21(水) 00:08:18 ID: rWpwWuzp0 Be:
え、当たり前以外の何物でもなくね?
11 Name: 名称未設定 [sage] Date: 2008/05/21(水) 09:23:41 ID: f3o28oAX0 Be:
そもそも今MacOSX用アプリを開発してる会社が何社あるのやら・・・。
12 Name: 名称未設定 [sage] Date: 2008/05/21(水) 10:22:01 ID: Y93RS+ry0 Be:
アメリカには一杯あるよ
日本にはほとんどないけど ...
13 Name: 名称未設定 [sage] Date: 2008/05/21(水) 21:18:40 ID: 21cJALCV0 Be:
HMDTが募集してんじゃんw
14 Name: 名称未設定 [sage] Date: 2008/05/21(水) 22:13:00 ID: L3QcPzgd0 Be:
>>7
俺、Lispやろうかな。へたれPGの俺は求人件数よりも求人倍率の低さ
で採用されるかもしれないから。
15 Name: 名称未設定 [sage] Date: 2008/05/22(木) 00:54:28 ID: pDh7HLnh0 Be:
それってさらに
Emacs Lisp
Common Lisp
Scheme
とかに細分化されてるだろうからなぁ
一つに絞りたがっても意味ないよ

煽りじゃなく色々やった方がいいよ
得意分野として特定の言語を伸ばすのはアリだけど、特性の違う2、3の言語にまたがっといた方がいい
折角Macportsで手軽に色々入れられるんだし
16 Name: 名称未設定 [sage] Date: 2008/05/22(木) 19:23:46 ID: F0xUDbhN0 Be:
ようつべを利用したいのですが、サンプルプロジェクトによくある
GData.frameworkというのはどうすれば手に入れられるのでしょうか?
17 Name: 名称未設定 [sage] Date: 2008/05/22(木) 19:48:31 ID: 46WSZxhf0 Be:
ヒレガス本第3版今届イタ━━━━(゚∀゚)━━━━!!!!
Garbage Collection も Core Animation も載ってるね
つーか、やっぱり Leopard に対応するために、当初の予定より
出版が遅れたんだろうな‥
18 Name: 名称未設定 [sage] Date: 2008/05/22(木) 19:51:27 ID: QT31KVFx0 Be:
そういえば、Leopardも遅れたな。
19 Name: 名称未設定 [sage] Date: 2008/05/22(木) 20:02:40 ID: O70xzo5x0 Be:
>>17
第2版と比べて
どれくらい変わってます?
目次でいいので教えて。
20 Name: 17 [sage] Date: 2008/05/22(木) 20:23:52 ID: 46WSZxhf0 Be:
>>19
Chapter 名の変化で比較するとこんな感じ

+ 追加(第3版のみ)
- 削除(第2版のみ)
→ 変更
他は同じ

+ Memory Management
+ Target/Action
Bindings and NSController → Key-Value Coding, Key-Value Observing
+ NSArrayController
+ Basic Core Data
Responders and Keyboard Events → Keyboard Events
Working with Fonts and NSAttributedString → Drawing Text with Attributes
+ Web Services
- Creating Interface Builder Paletts
- AppleScript
+ View Swapping
+ Core Data Relationships
+ Garbage Collection
+ Core Animation
Cocoa and OpenGL → A Simple Cocoa/OpenGL Application
+ NSTask
- Creating Frameworks
- GNUstep
21 Name: 19 [sage] Date: 2008/05/22(木) 21:11:01 ID: O70xzo5x0 Be:
>>20
ありがとう!
22 Name: 名称未設定 [sage] Date: 2008/05/22(木) 22:56:09 ID: 3rHyH/v/0 Be:
ページ数も増えてるよね>第3版
23 Name: 名称未設定 [sage] Date: 2008/05/22(木) 23:11:40 ID: u2zk9cyj0 Be:
>>16
ググれ。
つーか、googleに聞け。
つーか、googleを調べろ。
24 Name: 17 [sage] Date: 2008/05/22(木) 23:41:56 ID: 46WSZxhf0 Be:
>>22
第2版 450ページ
第3版 433ページ
25 Name: 名称未設定 [sage] Date: 2008/05/23(金) 00:17:04 ID: T833at980 Be:
>>23
Googleとは小一時間格闘して敗北したんですけど、
objective-c用?のをダウンロードできるところが無さそうでした。
(っていうか、そもそもそういうものなのかもわからず)

ソースを落としてコンパイルするのですかね?
26 Name: 名称未設定 [sage] Date: 2008/05/23(金) 00:29:38 ID: o+/m2vgU0 Be:
いや、ググったら二秒で出てくると思うが ...
http://www.google.com/search?q=GData.framework
の二つ目に
http://code.google.com/p/gdata-objectivec-client/
があるとおもうんだけど、あなたの目は節穴?
27 Name: 名称未設定 [] Date: 2008/05/23(金) 02:24:54 ID: j99xmi9d0 Be:
縦横比を維持しつつリサイズされるQTMovieViewはどのようにしたら作れるのでしょうか。
http://brpg.hp.infoseek.co.jp/qttunes/
これのメインウィンドウの左下フレームのような感じのものです。
28 Name: 名称未設定 [sage] Date: 2008/05/23(金) 02:48:48 ID: 3AyFrRZN0 Be:
>>27
attributesにPreserves Aspect Ratioってチェックがあるけど。
29 Name: 名称未設定 [sage] Date: 2008/05/23(金) 03:01:23 ID: j99xmi9d0 Be:
>>28
ありがとうございます。助かりました。
30 Name: 名称未設定 [sage] Date: 2008/05/23(金) 04:21:31 ID: dXEXmQ0i0 Be:
>>27
こういうのってなんで作ってるんだろうと思う
ターゲットはいるのかな、趣味なのかな
31 Name: 名称未設定 [sage] Date: 2008/05/23(金) 04:25:01 ID: IL6J9Zwh0 Be:
>>30
ゆくゆくはiTunesよりも高機能に育てる過程の一つとか。
32 Name: 名称未設定 [sage] Date: 2008/05/23(金) 09:58:56 ID: cwPsB5600 Be:
シンプルに連続再生して垂れ流ししたい
iTunesが重い
iTunesが扱えないフォーマットが扱える(QuickTimeで再生出来れば)
Cocoaプログラミングの勉強

などです。
33 Name: 名称未設定 [sage] Date: 2008/05/23(金) 22:33:32 ID: T833at980 Be:
>>26
ああ、お恥ずかしい限りで。
そのページは何度も見ていたはずなのですが(^^;
なんというか、「GData.Framework」という文字ばかり探してました。
DLしてビルドしたら(エラーになりましたけど)GData.Frameworkフォルダが生成されたので
これを使えば良いのだろうと思って次に進みます。
34 Name: 名称未設定 [sage] Date: 2008/05/23(金) 22:51:17 ID: jKCdJQha0 Be:
Foundationは思想かなにかですか?
35 Name: 名称未設定 [sage] Date: 2008/05/24(土) 01:12:15 ID: DcLAwtro0 Be:
>>32
iTunesが扱えないフォーマット、に関してはすごく同意する
ようするに他のフリーソフトに関してもしがらみがないってある種強みだよね
36 Name: 名称未設定 [sage] Date: 2008/05/24(土) 01:22:23 ID: LruzwE630 Be:
現在、NSOutlineViewの使い方を勉強中です。
で、サンプルプロジェクトやネット上での解説ページを見ていたところ、

return (item == nil) ? YES : ([item numberOfChildren] != -1);

の様な表記をよくみかけました。
これはどのように解釈すれば良いのでしょうか。
37 Name: 名称未設定 [sage] Date: 2008/05/24(土) 01:55:20 ID: gZp6b3Ai0 Be:
>>36
itemがrootなら、YESを返す。
itemが内包数0のフォルダ(num = 0)ではなく、ファイルなのでexpandしないようにする。

つーか、その質問だけではちょっと意味不明だよ。
FileSystemItemのアレについて質問しているのだろうけど。
38 Name: 36 [sage] Date: 2008/05/24(土) 03:01:01 ID: NtDdGehO0 Be:
>>37
申し訳ありません。
ID変わったけど>36です。

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return (item == nil) ? YES : ([item numberOfChildren] != -1);
}

そして質問の仕方も抽象的でした。申し訳ありません。
仰るとおりFileSystemItemのアレなのですが、
具体的には「? YES :」の部分の解釈の仕方、ということです。
とりあえず、頂いた答えとサンプルコードを再度見返してあれこれ考えてみたのですが

return a ? b :c;
となっていた場合、aを評価した結果がYESならbを、NOならcを返す、という理解でよろしいでしょうか。

Cocoaにはあまり関係していませんでしたね。。。すいませんでした。
39 Name: 名称未設定 [sage] Date: 2008/05/24(土) 03:26:59 ID: gZp6b3Ai0 Be:
>>38
> となっていた場合、aを評価した結果がYESならbを、NOならcを返す、という理解でよろしいでしょうか。
うん。
40 Name: 36 [sage] Date: 2008/05/24(土) 03:28:15 ID: NtDdGehO0 Be:
>>38
ありがとうございました。
41 Name: 名称未設定 [sage] Date: 2008/05/25(日) 17:58:40 ID: lLZMSYBY0 Be:
>>35
wmvとかflvとか、コンテナmovにしちゃえばいいのに。
全部まとめて管理できる所に意味があると思う。
42 Name: 名称未設定 [sage] Date: 2008/05/27(火) 23:52:33 ID: CZYQD03h0 Be:
萩原さんの「詳解 Objective-C 2.0」
もう手に入れた人居ます?

買いなのかな?
43 Name: 名称未設定 [sage] Date: 2008/05/28(水) 09:09:00 ID: L3/IqKQ00 Be:
ttp://www.pragprog.com/screencasts/v-bdcora/creating-a-compelling-user-interface-with-core-animation
44 Name: 名称未設定 [sage] Date: 2008/05/28(水) 12:55:17 ID: opb4iFeH0 Be:
アマゾンで、ヒレガスさん3+萩原さん2.0=9,321円、萩原さん2.0は明日到着
45 Name: 名称未設定 [sage] Date: 2008/05/28(水) 21:49:31 ID: VttZwart0 Be:
>>42
>買いなのかな?

ttp://hmdt.jp/
46 Name: 名称未設定 [sage] Date: 2008/05/29(木) 00:53:38 ID: WGFKGrSC0 Be:
>>42
まだぱらぱらめくった程度だけど
おととしに出た「Objective-C Mac OS Xプログラミング」の
バージョンアップといった感じ。章の構成や内容は同じものが多いです。
前の本を持っていないなら、買って損はしないと思うよ。

47 Name: 42 [sage] Date: 2008/05/29(木) 08:33:18 ID: rVgTXt350 Be:
>>46

前の本も
前の前の本も
持ってるだけに
悩むな~

今日出勤前に本屋に寄って
少し眺めてから決めます。
48 Name: 名称未設定 [sage] Date: 2008/05/30(金) 00:33:33 ID: PlwTpTkX0 Be:
Cocoaと言うよりObjective-Cの質問?なのですが、いいですか?

現在Cで記述したプログラムがあります。
データの最大数は不定なので、可変でデータを保持したかったのですが、面倒だったので、
データ領域を大きめに確保して、固定長の配列として処理しています。
データは配列の番号でインデックスされ、歯抜けになっても新たなデータが来ると若い順に
埋めていきます。

ObjCに移植するにあたって、NSMutableArrayに置き換えようと思ったのですが、NSMutable
Arrayは要素が消されると自動的に配列を詰める、とのことで、配列番号での索引が利かなく
なるようです。

このような場合、データ数を可変で確保でき、且つ、配列番号での索引ができるいい方法が
ありますか?
49 Name: 名称未設定 [sage] Date: 2008/05/30(金) 00:40:51 ID: xrC+L8bu0 Be:
>>48
別に Obj-C は C の拡張なので、すでに配列で出来てる箇所を
NSArray に変える必要がないとおもうんですが ...

どうしても Cocoa にかえたければ、NSDictionary つかって、数字じゃなくて文字列でタグをつければしまいだとおもいます。
50 Name: 名称未設定 [sage] Date: 2008/05/30(金) 00:47:59 ID: CkhV8SZM0 Be:
>>48
要素を削除するときにその位置にあるオブジェクトを取り除くのでなく、
値をNSNullに変更するようにすれば、元の処理と同じようにできると思います。
元のCのコードでもNULLにするなどしていますよね?
51 Name: 名称未設定 [sage] Date: 2008/05/30(金) 23:32:12 ID: L1G/osgq0 Be:
>>47
>持ってるだけに
>悩むな~

今日尼から届いた。1.0→2.0の変化詳しく50ページほど増量。
ま、前版もってても買いじゃね、とおもた
52 Name: 名称未設定 [sage] Date: 2008/05/31(土) 00:41:36 ID: 9zILcVHo0 Be:
>>49
折角良さげなものがあるので、固定長配列を可変長に変えたかった、というのが主な理由です。

>>50
なるほど、考えてみれば別に取り除かなくてもいいんですもんね。有り難うございました。
53 Name: 46 [sage] Date: 2008/05/31(土) 01:28:09 ID: m3HKOXME0 Be:
>>47
10.5の新しいトピックを中心に1/3くらいまで読み進めました。
32/64bit、ガーベジコレクションで注意が必要なところなど、
細かいとこが丁寧にフォローされてる。
てゆーか、罠多すぎ>ガベコレ

・10.5以降でプログラムを書かない
・あとで買えなくても泣かない
というのでなけりゃ、買いかと。

54 Name: 名称未設定 [sage] Date: 2008/05/31(土) 12:29:28 ID: WjiDQvAu0 Be:
名古屋大須の三洋堂で買ってきた。まだ2冊あったぞ。昨日の話だけど。
55 Name: 名称未設定 [] Date: 2008/05/31(土) 13:03:56 ID: MFBihJHB0 Be:
今Amazonから届いた
けど読む暇がない
56 Name: 名称未設定 [sage] Date: 2008/05/31(土) 16:52:17 ID: EZpALD+x0 Be:
>あとで買えなくても泣かない
これが一番問題になるなw
57 Name: 名称未設定 [sage] Date: 2008/05/31(土) 22:53:52 ID: r05FKlJl0 Be:
IM制御をしようとしてます。
前スレ 915 を参考にして、ターミナル上で、ことえり日本語入力時に

int main() {
TISInputSourceRef tis = TISCopyCurrentASCIICapableKeyboardInputSource();
TISSelectInputSource(tis);
CFRelease(tis);
}

を実行すると、見た目(メニューバーのとこ)は英字になるのに
いざ入力しようとすると日本語のままなんですが、
うまくいく方法ありますか?
58 Name: 名称未設定 [sage] Date: 2008/06/01(日) 11:09:53 ID: bmGuDI3g0 Be:
>>57
うちではそれでちゃんと動く気がする
(ことえり、egbridge とも)
59 Name: 57 [sage] Date: 2008/06/02(月) 00:17:15 ID: 5l7yqjBi0 Be:
>>58
ども。
一旦、ターミナルを非アクティブにして、もう一度アクティブにすると
入力も英字になるんですけど...

そういう処理を入れりゃいいのか。。
60 Name: 名称未設定 [sage] Date: 2008/06/02(月) 05:46:08 ID: U2iAatA00 Be:
>>59
それしなくてもうちは英字入力に切り替わるけど?
日本語変換中の文字が残っている場合のこと?その状態でどうやってプログラムを走らせればいいか良くわからんけど ...
61 Name: 57 [sage] Date: 2008/06/02(月) 15:42:09 ID: 5l7yqjBi0 Be:
>>60

1、ターミナル上でIM制御プログラムを走らせる。
2、cmd+spaceでひらがな入力にする。
3、「あああ」と入力
4、c-pで、コマンド履歴をだしてそっからプログラムを走らせる。

3で日本語変換中の文字が残っていても残っていなくても、
変換確定済でも未確定でも
見た目(メニューバーのとこ)は英字入力になるが、
いざ入力すると、日本語(ひらがな)が入力される。

という感じです。
10.5.2
i686-apple-darwin9-gcc-4.0.1
zsh 4.3.4 (i386-apple-darwin9.0)
62 Name: 名称未設定 [sage] Date: 2008/06/02(月) 23:49:54 ID: U2iAatA00 Be:
>>61
うちでは再現しないよ ... 謎。
メニューバーも英字になって、入力してもちゃんと英字になります。
ためしてみたけど、bash/zsh のちがいでもなさそう。
IM はなにをつかってる? キーボードは英語キーボードなのかな。
こちらは日本語キーボードなので。それぐらいしか違いが見当たらない。
63 Name: 名称未設定 [] Date: 2008/06/03(火) 01:33:09 ID: wMSlazAP0 Be:
Interface Builder 3で、UserDefaultsと"ThreadURL"キーとWebViewの"mainFrameURL"をバインディングしたいのですが操作方法がわかりません。
WebViewのバインディングのインスペクタを見てみると、"Editable","Hidden","ToolTip"しかバインディングできる項目が無く、"mainFrameURL"をバインディングできません。
WebViewをMyClassにデリゲートして、ソースからバインディングすればどうにかなりそうな気はするのですが、InterfaceBuiderだけでする方法は無いのでしょうか。

あと、IB3では、
http://www.big.or.jp/~crane/cocoa/1100_binding/01_whats/index.html
のようにテキストフィールドとWebViewを直接つなぐことは出来なくなったのでしょうか。
64 Name: 名称未設定 [] Date: 2008/06/03(火) 01:34:22 ID: wMSlazAP0 Be:
>>63
訂正
×UserDefaultsと"ThreadURL"キー
○Shared User Defaults Controllerの"ThreadURL"キー
65 Name: 名称未設定 [sage] Date: 2008/06/03(火) 06:10:10 ID: pp+RRbGE0 Be:
あるViewの上にテンプレートのようなViewを置きたいと思ってます。

下のViewは通常通り動くものが出来上がっていて、その上にImageViewをのせて
そのViewに
- (void)mouseDown:(NSEvent *)theEvent {
[[self nextResponder] mouseDown:theEvent];
}
- (void)mouseUp:(NSEvent *)theEvent {
[[self nextResponder] mouseUp:theEvent];
}
とか各種イベントをスルーするようにすれば下に行くものだと思っていたらう
まく下のViewにイベントが渡って行きませんでした。何か根本的な考え違いが
あるのでしょうか?

66 Name: 名称未設定 [sage] Date: 2008/06/03(火) 07:40:43 ID: IEedy5rj0 Be:
superviewに渡すもんじゃない?
67 Name: 名称未設定 [sage] Date: 2008/06/03(火) 08:03:37 ID: 91xa2rp50 Be:
何をしたいか分からんけど、
下のviewの描画をオーバーライドすればいいんじゃね?

- (void)drawRect:(NSRect)rect {
[super drawRect:rect];
//テンプレ描画
}
68 Name: 名称未設定 [sage] Date: 2008/06/03(火) 08:10:05 ID: pp+RRbGE0 Be:
>>66 >>67
上に乗っているViewは下のViewのsubViewではありません。描画上重なっている
だけで、上のテンプレート表示は下のViewより大きくなる場合があります。

イメージのオブジェクトがいくつかあって、その上に定規のステンシルがオー
バーレイで乗っている状況です。この状態で定規は動かさず、下のオブジェク
トの操作がしたい訳です。
69 Name: 名称未設定 [sage] Date: 2008/06/03(火) 08:49:49 ID: oXsq6zVd0 Be:
>>63
う~ん、たしかにかなり変わってるね。
IB3 でも、単純に URL の中身を表示させたかったら、WebView の takeUTLfrom: というアクションを NSTextField のターゲットにしておくという方法があるけど。
70 Name: 名称未設定 [sage] Date: 2008/06/03(火) 12:58:41 ID: aw4+EDm70 Be:
弟がスーパーハカーを目指してるらしく、まずCから始めようと思ってるらしい
1からC言語を勉強するサイトってどこがいいかな。書籍はamazonで購入して発送待ち
目当てはMacやiPhoneで使う自作アプリだからObjective-Cをやりたいんだと思うけど
このままでは俺の3日間しかない黄金週間が潰されてしまうので助けてください
71 Name: 名称未設定 [] Date: 2008/06/03(火) 13:08:46 ID: XD4GWoXw0 Be:
その黄金週間までに、スーパーハカーへの道を閉ざすというのも手だ。
72 Name: 名称未設定 [] Date: 2008/06/03(火) 22:56:02 ID: kOTQ+iAx0 Be:
>>68
ViewにとってのnextResponderはsuperViewだよ。
だから、下のViewとsubViewの関係にないなら、イベントを中継するコードを手動で書かないとダメかもね。
つまり、マウスダウンした座標から、下のどのViewの上にいるのかを計算して、そのViewのmouseDown:メソッドを直接呼び出すみたいな感じ。
73 Name: 名称未設定 [sage] Date: 2008/06/04(水) 00:09:16 ID: p9a2L9Dk0 Be:
acceptsFirstResponderでNOを返すんじゃだめだっけ?
これはキーイベントだけだったかな…
74 Name: 名称未設定 [sage] Date: 2008/06/04(水) 00:09:50 ID: T5rsQU4g0 Be:
>>72
なるほど、下にオブジェクトがそこそこ沢山あるので結構複雑になりますね。
単に「イベントはスルーするけど描画はするレイヤ」を上に置きたいためだけ
なのに、、、
ウィンドウを上において[window2 setIgnoresMouseEvents:YES];しておいて
このウィンドウに描画してやるとうまく行くかと思ったけど、このウィンド
ウをクリックした瞬間に下のウィンドウが上にでてきた←あたりまえ
もう少し考えてみます。
75 Name: 名称未設定 [sage] Date: 2008/06/04(水) 00:47:24 ID: T5rsQU4g0 Be:
>>73
- (BOOL)acceptsFirstResponder {
return NO;
}
- (BOOL)becomeFirstResponder {
return NO;
}
- (BOOL)resignFirstResponder {
return NO;
}
やってみました。残念ながらオーバーレイの
- (void)mouseDown:(NSEvent *)theEvent {
に処理が飛んできました。

76 Name: 名称未設定 [sage] Date: 2008/06/04(水) 04:43:59 ID: l7IMH3zH0 Be:
おれだったら、superviewにわたして、superviewからsubviewを全部チェックして適合するviewを探すかな。
77 Name: 57 [sage] Date: 2008/06/04(水) 09:51:22 ID: FsqvQyEC0 Be:
>>62
IMはことえり
MacBook CoreDuoのUSキーボード

anthyでも試してみたけど、入力するとやっぱりひらがな。。

他にintelマシンないし、Cocoaはさっぱりなんで、AppleScriptで逃げます..
ありがとう。
78 Name: 名称未設定 [] Date: 2008/06/04(水) 13:23:44 ID: PLLPbHtE0 Be:
Xcode 3.1/IB3です
iTunesのように、閉じても"ウィンドウ"メニューから再び表示できるウィンドウはどのようにしたら作れるのでしょうか。
79 Name: 名称未設定 [sage] Date: 2008/06/04(水) 14:33:09 ID: aQgm8y1m0 Be:
IBで"Dispose When Close"をoff
ウインドウメニューにアイテム追加。
アクションを oderFront: とかその辺。
80 Name: 名称未設定 [sage] Date: 2008/06/04(水) 14:56:02 ID: KlJQ+yiW0 Be:
OS 10.5だと、iCalは起動してなくてもDockのアイコンをカスタムにしてますがこれどうやってるんでしょう?
-[NSApplication setApplicationIconImage:]の拡張っぽいものは見つかりませんが
81 Name: 名称未設定 [sage] Date: 2008/06/04(水) 14:58:34 ID: 2RtF4pPv0 Be:
NSFastEnumerationプロトコル実装させようと奮闘してるんだけど、
for ... inループの途中でbreakさせるとそのループが何度回ったかを
知る方法ってないのかな?
NSEnumerator使うと、
NSEnumerator *e = [a objectEnumerator];
x = [e nextObject];
y = [e nextObject];
for( z in e ){
. //何らかの処理
. if( xxx )
. break;
}
w = [e nextObject];
s = [e nextObject];
なんて文でもしっかり順番合うけど、なんか隠し機能でもあるのかな?
82 Name: 名称未設定 [] Date: 2008/06/04(水) 15:05:01 ID: PLLPbHtE0 Be:
>>79
"Dispose When Close"が見つからないのですが、Release when Closedのことで良いのでしょうか。

メニューアイテムを追加して、orderFlontにつなぐ方法は、IB2/Tigerのときは問題なく動いたのですが、IB3/Leopardでやるとアプリが起動時にフリーズします。

makeKeyandOrderFlontにつなぐと、つないだメニューは消えてしまうのですが、ウィンドウメニュー一番下のウィンドウ名の項目が閉じても残るようになります。
この方法でもウィンドウを再度開くことができることはできるのですが、ウィンドウを開いているとき、そのウィンドウを示す項目がウィンドウメニューに2つ表示されてしまうことになります。
また、閉じたときも項目がぽっかり消えてしまうのでなんか違和感があります。
83 Name: 名称未設定 [sage] Date: 2008/06/04(水) 15:45:21 ID: aQgm8y1m0 Be:
>>82
おお。それそれ。

>とアプリが起動時にフリーズします。
うちでは問題ないけどな。なんかあるのかな?

>ウィンドウメニューに2つ表示されてしまうことになります。
-[NSWindow setExcludedFromWindowsMenu:]
これ。
84 Name: 名称未設定 [sage] Date: 2008/06/04(水) 20:21:25 ID: xLFIAeEO0 Be:
>>80
Info.plist に
<key>DockExtra</key>
<string>iCalDockExtra.bundle</string>
ってあって,Dockがこれを呼び出してると思う。
85 Name: 名称未設定 [] Date: 2008/06/04(水) 21:03:50 ID: FtD8O2Sd0 Be:
>>81
基本的にNSFastEnumerationが何回ループしたのか、ベースとなっている配列オブジェクト側で知るすべは無いように思います。
そのサンプルコードがうまく動作しているのは、NSEnumeratorをベースとしているからだと思います。
NSFastEnumerationは一気に16回ぐらいループできますが、NSEnumeratorの場合は1回づつ回してるんじゃないですかね。
特に調べた訳ではないですが。
86 Name: 名称未設定 [sage] Date: 2008/06/04(水) 21:09:23 ID: 0ZiY20sM0 Be:
>>81
ttp://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_7_section_1.html#//apple_ref/doc/uid/TP30001163-CH18-SW1


For collections or enumerators that have a well-defined order―such as NSArray or NSEnumerator
instance derived from an array―the enumeration proceeds in that order, so simply counting iterations
will give you the proper index into the collection if you need it.

NSArray *array = /* assume this exists */;
NSInteger index = 0;
BOOL ok = NO;

for (id element in array) {
if (/* some test for element */) {
ok = YES;
break;
}
index++;
}

if (ok) {
NSLog(@"Test passed by element at index %d", index");
}
87 Name: 名称未設定 [sage] Date: 2008/06/04(水) 21:28:03 ID: PLLPbHtE0 Be:
>>83
ありがとうございますm(_ _)m
88 Name: 87 [] Date: 2008/06/04(水) 21:54:41 ID: PLLPbHtE0 Be:
File's Ownerの
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

[MainWindow setExcludedFromWindowsMenu: YES];
をしたところ、ウィンドウのメニュー項目が自動生成(?)されることはなくなりました。

しかし、makeKeyandOrderFrontに繋いだメニュー項目があると、ウィンドウを閉じたときエラーになります。

環境は、Mac OS 10.5.3(9D34)/Xcode 3.1(iphone_sdk_9m2173a)/Mac Book(現行モデル・竹)です。

コンソールには、以下のエラーが出力されます。
GNU gdb 6.3.50-20050815 (Apple version gdb-956) (Wed Apr 30 05:08:47 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin".プログラムは読み込まれました。
sharedlibrary apply-load-rules all
Attaching to program: `/Users/admin/Developer/ClickJapanCocoaReporter/build/Release/ClickJapanCocoaReporter.app/Contents/MacOS/ClickJapanCocoaReporter', process 54373.
(gdb)
89 Name: 名称未設定 [] Date: 2008/06/04(水) 21:54:51 ID: FtD8O2Sd0 Be:
>>74
NSWindowのサブクラスを作って、-displayか-displayIfNeededあたりをオーバーライドすれば、Viewの再描画処理に割り込めるんじゃないかな?
もし、うまく割り込めたら、すべてのViewの再描画が完了した直後に、
[[window contentsView] lockFocus] か [NSGraphicsContext setCurrentContext: [window graphicsContext]]で
グラフィクスコンテキストを設定して、すべてのViewの上に画像を上描きできます。
手前に、ViewやWindowを重ねてる訳じゃないので、イベントを取られる事はないはず。

90 Name: 名称未設定 [sage] Date: 2008/06/04(水) 22:06:28 ID: mSrg2YBE0 Be:
>>80
http://jens.ayton.se/blag/the-mysteries-of-ical-revealed/
91 Name: 名称未設定 [sage] Date: 2008/06/04(水) 22:07:39 ID: mSrg2YBE0 Be:
>>88
gc つかってる?それなら window が解放されてしまってるんでないかと思うけど ...
92 Name: 87 [] Date: 2008/06/04(水) 22:25:26 ID: PLLPbHtE0 Be:
>>91
ガベージコレクション?
どのようにしたら解放しないようにできるのでしょうか…

ウィンドウの設定はこんな感じになっています。
http://wktk.vip2ch.com/vipper81014.png
93 Name: 名称未設定 [sage] Date: 2008/06/04(水) 22:30:53 ID: mSrg2YBE0 Be:
>>92
ガベージコレクションつかってると、nib のトップレベルに単においてあるオブジェクトは誰にも強く参照されてないから、GC が気が付いたとたんに削除しちゃうよ。
File's Owner の delegate にコントローラオブジェクトをつないであるなら、
さらにコントローラオブジェクトに outlet をつくってそこに window をつないでおかないといけません。

http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcEssentials.html
の nib files の項、
http://journal.mycom.co.jp/column/objc/099/index.html
のまんなかあたりとか参照。
94 Name: 名称未設定 [sage] Date: 2008/06/04(水) 22:31:08 ID: p9a2L9Dk0 Be:
Release When Closedはチェック「しない」って話じゃなかったか
95 Name: 87 [] Date: 2008/06/04(水) 22:40:26 ID: PLLPbHtE0 Be:
>>93
[MainWindow setExcludedFromWindowsMenu: YES];
をするためにコントローラオブジェクトのアウトレットにMainWindowを繋いでいるんですが…

@interface NSApplicationDelegate : NSObject {
IBOutlet id Send2chView;
__strong IBOutlet id MainWindow;
}

ためしに__strongをつけてみましたが効果無しでした(´・ω・`)
96 Name: 名称未設定 [sage] Date: 2008/06/04(水) 22:40:34 ID: YuPHi7F30 Be:
>91
どうだろう?
最初の5行を考えると、
主要nibファイル - NSMainNibFile -のFile's Ownerなんだと思う。
MainWindowはそのインスタンス変数。
で、[MainWindow setExcludedFromWindowsMenu: YES];でちゃんと動くってことは、
IBで MainWindowにちゃんと接続できてるんだと思うんだよね。
てことは、主要nibファイルのFile'sOwnerが解放されるってあり得ないから、
そのインスタンス変数がgcで解放されるなんてあり得ないと思うんだけど。

まあ、状況的にはMainWindowが解放されてるには違いないんだけど。

とはいっても、常人には理解不能な摩訶不思議な事をやってる可能性もあるんだよね。
ソースコード一式どかーんと見せてくれたら、みんな寄ってたかって直してくれると思うよ。

あと、
>88
それエラーじゃないから。
97 Name: 87 [sage] Date: 2008/06/04(水) 22:42:01 ID: PLLPbHtE0 Be:
>>94
orz
Release When Closedのチェックを外したらいけましたorzorz
98 Name: 名称未設定 [sage] Date: 2008/06/04(水) 22:45:07 ID: YuPHi7F30 Be:
あう。
リロードしてから書き込むべきだった。
しかもそれ一番始めに言ったじゃん。w
99 Name: 名称未設定 [sage] Date: 2008/06/04(水) 23:15:26 ID: WH5iIvoT0 Be:
>>84,90
ありがとうございます。
まだprivateなAPIのようですね。
100 Name: 名称未設定 [sage] Date: 2008/06/05(木) 03:28:08 ID: Iy8p9dIO0 Be:
PragmaticBookshelfからRubyCocoaの本出るみたいだね
びっくりした
101 Name: 名称未設定 [sage] Date: 2008/06/05(木) 03:28:39 ID: Iy8p9dIO0 Be:
http://www.pragprog.com/titles/bmrc/rubycocoa

URL貼り忘れた
102 Name: 名称未設定 [sage] Date: 2008/06/05(木) 06:38:16 ID: N70IRzNR0 Be:
>>89
これ、挑戦してみます。

とりあえず、NSFloatingWindowLevelの透明ウィンドウを作って、setIgnoresMouseEvents
したものを描画したいウィンドウに自動追従する形で実装してみました。
移動したとき付いてくるのがちょっと遅れるのが気になる、、、
103 Name: 名称未設定 [] Date: 2008/06/06(金) 18:58:26 ID: /nwOtou00 Be:
GetP2PDBクラスからCore Dataを使いたいと思っているのですが、
IBOutlet id *ADI;をFile's Ownerのデリゲートオブジェクトに接続した上、
context = [ADI managedObjectContext];
object = [NSEntityDescription insertNewObjectForEntityName:@"P2PDB" inManagedObjectContext:context];
をしたところ、
2008-06-06 18:38:38.231 Yaezakura[1703:10b] *** +[NSEntityDescription insertNewObjectForEntityName:inManagedObjectContext:]: unrecognized selector sent to class 0xa08caf40
と出てしまいます。
もともとCocoa Applicationとして作り始め、YaezakuraDelegate.mの中身だけ
CoreDataアプリケーションのデリゲートクラスのものから引っ張ってきました。applicationShouldTerminateだけはコピーしていません。
xdatamodelファイルは、File>New File…"Yaezakura.xcdatamodel"という名前で追加しました。
デリゲートクラスのソースに、xcdatamodelのファイル名を指定するところが見つからないので、もしかして、xcdatamodelのファイル名は規定されているとかでしょうか。
104 Name: 名称未設定 [sage] Date: 2008/06/06(金) 19:04:13 ID: K898eDqK0 Be:
とりあえず
+[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
ね。
Forが一個足りない。
補完機能を使うかコピペしましょう。
105 Name: 名称未設定 [sage] Date: 2008/06/06(金) 19:08:43 ID: /nwOtou00 Be:
>>104
ありがとうございます。
http://journal.mycom.co.jp/special/2005/cocoamvc/010.html
からコピってました。
確かに、For、抜けてるorz
記事より補完機能ですか…
106 Name: 81 [sage] Date: 2008/06/06(金) 23:24:48 ID: DnNWuDyX0 Be:
>>85
> ベースとなっている配列オブジェクト側で知るすべは無いように思います。
NSFastEnumerationState構造体に空きスペースは充分あるんだから
情報を入れてほしいと思う今日この頃・・・

>>86
やはりそれしかなさそうですね。
ループ周りのコードをスッキリさせたかったんですが、残念です。
107 Name: 名称未設定 [sage] Date: 2008/06/07(土) 03:06:06 ID: czfM+cV40 Be:
乱暴にコード減らしてみた
NSArray *array = /* assume this exists */;
NSInteger index = [array count] -1;

for (id element in array) {
if (/* some test for element */) {
index = [array indexOfObject:element];
break;
}
}

if (index != 0) {
NSLog(@"Test passed by element at index %d", index");
}

無茶したw
実際に何回ループしたかカウントしてないしね。
108 Name: 名称未設定 [sage] Date: 2008/06/07(土) 05:36:42 ID: oLB88PWk0 Be:
ヒレガス本第3版のPDF買ってみたけど
AdobeDigitalEditionという電子書籍ビュワー
入れないと見られないし、コピペも出来なので
$35の値段のわりに微妙だった。
109 Name: 名称未設定 [sage] Date: 2008/06/07(土) 08:19:56 ID: lneVQl2h0 Be:
それはひどい
経験を共有してくれてありがとう
110 Name: 名称未設定 [] Date: 2008/06/07(土) 14:51:12 ID: bqgf91t00 Be:
>>106
NSFastEnumerationプロトコルを実装してる配列オブジェクト側からは、NSFastEnumerationState構造体に自由に情報を格納することができます。
問題となっているのは、そのNSFastEnumerationState構造体を他の場所から参照できないことだと思います。
111 Name: 名称未設定 [] Date: 2008/06/07(土) 16:29:39 ID: TibeL3oq0 Be:
複数のNSButtonやNSTextFieldが集まって一つの機能を持った物。仮にこれをモジュー
ルと呼びますが、このモジュールを部品として、IBで他のウインドウ上に配置でき
るようにしたいのですが、スマートにする方法ってあるでしょうか?

とりあえず今実現しているやり方はこうです:

・モジュールを表すカスタムビューを作る。モジュールを利用する側のウインドウ
上にはこのビューを配置する。

・モジュール専用のnibファイルを用意して、その中にモジュールで使用するコント
ロール類を並べ、モジュール内部のふるまいを実現するコントローラのインスタ
ンスも作っておく。

・カスタムビューは自分がロードされたら上記nibファイルをロードする。

・モジュールを利用する側はカスタムビューとだけやり取りする。モジュール内部
には触れないようにする。(モジュール用nibて使っているOutletが表に見えない
ようにする)

これでうまくは行ってますが、なんかスマートじゃない気がします。
また理想的にはモジュールのパラメータ類もIB上で設定できるようにしたい・・。

となると、究極的にはIBのプラグインを作ればいいんでしょうけど、配布したり他
のアプリで使えるようなものでもないので、それはちょっと大げさかな、と。
112 Name: 名称未設定 [sage] Date: 2008/06/07(土) 16:35:31 ID: TwyUwYCb0 Be:
>それはちょっと大げさかな、と。
面倒くさいとかやり方わからないの間違いでしょ。

あなたの実現したいものはibplugin以外の何者でもないじゃん。
113 Name: 名称未設定 [sage] Date: 2008/06/07(土) 18:43:39 ID: TibeL3oq0 Be:
>>112

実のところibpluginも途中まで進めてましたが、ターゲットOSが
10.5以上でないとだめなようなので(今回は開発も実行も10.4)
他のやり方を探してるわけです。

「パラメータをIBで設定」なんかは無理だとしても、
複数のコントロールを一つにまとめて同じプロジェクト内で
使いまわす程度の事って、最新版のOS・・と言うほど
高度な話とは思えませんし、珍しい要求でもないですよね?

だから、今までは皆さんどうやっていたのか、
何か定番みたいな方法があるのでは?
と気になったから書いたんですが。
114 Name: 名称未設定 [sage] Date: 2008/06/07(土) 18:48:34 ID: TwyUwYCb0 Be:
>>113
じゃあ、IBPaletteでしょ?
115 Name: 名称未設定 [sage] Date: 2008/06/07(土) 19:21:17 ID: T3VD/+310 Be:
http://www.nitenichiryu.org/archives/2008/06/06/1340.php

微妙だなあ・・・。
116 Name: 名称未設定 [sage] Date: 2008/06/07(土) 19:35:40 ID: VBQ7XzHf0 Be:
ttp://jp.techcrunch.com/archives/20080605280-north-launches-its-online-keynote-280-slides/
>AppleのiPhoneチームとiTunesチーム出身者2人が-退社してY Combinatorと手を組んで-スタートアップを始めるとどうなるか?
元Apple社員らしい。GUIアプリみたいなものを作るなら、JavaScriptよりもObjective-Cってこと?
117 Name: 名称未設定 [sage] Date: 2008/06/07(土) 20:20:20 ID: N0VOrekx0 Be:
俺のdel.icio.usのsubscriptionsがObjective-Jでいっぱいなんだが
118 Name: 名称未設定 [sage] Date: 2008/06/07(土) 22:50:58 ID: VBQ7XzHf0 Be:
>>117
本当だ。
119 Name: 名称未設定 [sage] Date: 2008/06/10(火) 11:53:52 ID: v6XJxThv0 Be:
Xcode3.1 ベータ6を使ったCocoa Applicationの開発をして、友人にテストのためできあがったものをビルド構成Releaseでビルドして渡したのですが、起動しないと言われてしまいました。
ここでは私のプログラムした内容は正しかった、と仮定した上で質問があります。友人の環境はPPC G4, G5で10.4のはずなので、プロジェクトの設定のディプロイメントターゲットを10.4にしたのですが、デフォルトの設定から変更しなければならない項目は他にありますか?
120 Name: 名称未設定 [sage] Date: 2008/06/10(火) 12:03:43 ID: 8XOktTUG0 Be:
コンソールに出力されたものの内容を送ってもらう。
121 Name: 名称未設定 [sage] Date: 2008/06/10(火) 12:25:46 ID: ZtjOgx420 Be:
>>119
新規プロジェクトでCocoaApplicationを選択、「プロジェクト設定を編集」の
「すべての構成のベースSDK」で「Mac OS X 10.4」を選択、Releaseをビルド
してG4 10.4.11に持っていったら普通に起動してウィンドウが出ました。

プロジェクトの設定が悪いのか、自分のプログラムが悪いのか、それとも
ツールがβ版だからなのか、という切り分けをした方がいいと思いますけど。
122 Name: 名称未設定 [sage] Date: 2008/06/10(火) 14:51:37 ID: UgSK0RIy0 Be:
・PPC のコードが含まれていない
・友人のマックにはないフレームワークを使っているのに
 アプリに入れ忘れている

とか
123 Name: 名称未設定 [sage] Date: 2008/06/10(火) 14:52:35 ID: NdfOdpVf0 Be:
>119です。みなさんありがとうございます。
ベースSDKの設定の可能性が高いようです。今外なので確かめられませんが。
>121の方が言っているとおりもちろんそうすべきと思いますが、
自分の環境では問題なく動いていたため、
プログラミングミスはないものと仮定しました。
また、先日はベータ5を使って成功していたこと(ベータなので理由にはなりませんが)と、
私が一番自信がなかった部分がプロジェクト設定だったため
そこに絞った質問にした次第です。
細かい説明を省いてしまい申し訳ありません。
124 Name: 名称未設定 [sage] Date: 2008/06/10(火) 19:29:34 ID: M+lv1G8s0 Be:
122さんも書いてるけど、ディプロイメントターゲットだけでなく、アーキテクチャもよく確認を。
32bit Universal Binaryね
125 Name: 名称未設定 [sage] Date: 2008/06/10(火) 20:26:50 ID: zi/2SxUe0 Be:
プログラムのミスうんぬんじゃなくてコンソール見て起動しない原因探せって意味だろうが
起動どころか開けないのなら配布する時に気付くだろうし
126 Name: 名称未設定 [sage] Date: 2008/06/10(火) 20:56:17 ID: UzQ8SNX80 Be:
ビルド構成DebugのままでReleaseにし忘れてるとかはないか
127 Name: 名称未設定 [sage] Date: 2008/06/10(火) 21:21:06 ID: tXsfQ9xo0 Be:
ここで公開すればいいじゃん。
よっぽど早くけりがつくよ。
128 Name: 名称未設定 [] Date: 2008/06/10(火) 22:29:17 ID: RnNeIuj80 Be:
特定の時間になったら音を鳴らすアプリを作っているのですが
主音量を上げるメソッドってないんでしょうか?
129 Name: 名称未設定 [sage] Date: 2008/06/11(水) 00:30:49 ID: +Muj4NnA0 Be:
勝手に音量を上げるとはウザいアプリだな。
130 Name: 名称未設定 [sage] Date: 2008/06/11(水) 01:02:21 ID: BuT1Yz540 Be:
できるだろうけどCocoaじゃ無理じゃねーかな
131 Name: 名称未設定 [sage] Date: 2008/06/11(水) 12:23:53 ID: 7YtizGAL0 Be:
>>128
http://developer.apple.com/qa/qa2006/qa1016.html
132 Name: 名称未設定 [sage] Date: 2008/06/11(水) 16:35:05 ID: raOc4tIo0 Be:
>119です。
>>122 すいません、書き込んだとき気付きませんでした。
結論から言うと、設定ミスとプログラミングミスでした。
アーキテクチャはあっていました。
ベースSDKの設定、もしくはアクティブSDKの設定を変更し、
それでも起動しないためログを送ってもらったところ、
setImageScaling:が悪さをしていることが判明しました。
ビルド時にエラーが出なかったため、10.4ではメソッド自体が
無視されるものと勘違いしていました。
IBとコード内のImageScalingに関連している箇所を修正したところ
無事に起動しました。
お手数おかけしました。ありがとうございました。
133 Name: 名称未設定 [sage] Date: 2008/06/11(水) 17:27:22 ID: 7YtizGAL0 Be:
>>128
#include <CoreAudio/CoreAudio.h>
void setVolume(Float32 theVolume/*0-1.0*/) {
AudioDeviceID mAudioDeviceID;
UInt32 i, numberChannels, outSize =sizeof(AudioDeviceID);
AudioBufferList *mAudioBufferList;
AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &outSize, &mAudioDeviceID);
AudioDeviceGetPropertyInfo(mAudioDeviceID, kAudioPropertyWildcardChannel, false, kAudioDevicePropertyStreamConfiguration, &outSize, NULL);
mAudioBufferList = malloc(outSize);
AudioDeviceGetProperty(mAudioDeviceID, kAudioPropertyWildcardChannel, false, kAudioDevicePropertyStreamConfiguration, &outSize, mAudioBufferList);
numberChannels = mAudioBufferList->mBuffers[0].mNumberChannels; free(mAudioBufferList);
for (i=0; i<=numberChannels; i++) {
Boolean isWritable = false;
if (noErr != AudioDeviceGetPropertyInfo(mAudioDeviceID, i, false, kAudioDevicePropertyVolumeScalar, NULL, &isWritable)) continue;
if (isWritable == FALSE) continue;
AudioDeviceSetProperty(mAudioDeviceID, NULL, i, FALSE, kAudioDevicePropertyVolumeScalar, sizeof(Float32), &theVolume);
}
}
134 Name: 128 [sage] Date: 2008/06/11(水) 23:17:21 ID: VSIeQFLB0 Be:
>130
確かにw 環境設定で制御できるようにしますw

>131
>133
できました! ありがとうございました!
135 Name: 名称未設定 [sage] Date: 2008/06/11(水) 23:23:57 ID: lty4nRSj0 Be:
>>132
結局プログラムミスもあったのか
性格的に向いてないよ
136 Name: 名称未設定 [sage] Date: 2008/06/12(木) 04:36:35 ID: gv1qz7ju0 Be:
>>132
設定はよかったんじゃないの?
10.5以降にしかないメソッドを普通に使って、何もしてなかったということではないのかな?
137 Name: 名称未設定 [sage] Date: 2008/06/14(土) 13:13:47 ID: BS7eOK3p0 Be:
10.6はQuickTimeに大ナタを振るのか。
こりゃ、のたれ死にするアプリが続出する予感。
138 Name: 名称未設定 [sage] Date: 2008/06/14(土) 17:03:06 ID: r3BUjdUn0 Be:
>>137
??
kwsk
139 Name: 名称未設定 [sage] Date: 2008/06/14(土) 18:15:22 ID: chqMToVQ0 Be:
なんで開発してるのにWWDCの情報追っかけてないの?
140 Name: 名称未設定 [sage] Date: 2008/06/14(土) 18:44:58 ID: FubexbBn0 Be:
>>137

んなこと言って無いが。QuickTime X、理解した?
141 Name: 名称未設定 [sage] Date: 2008/06/15(日) 00:47:11 ID: Cygey6F/0 Be:
Quicktime「X」だなんて、いかにも
過去のレガシーAPIをバッサリいきそうな感じじゃない?
142 Name: 名称未設定 [sage] Date: 2008/06/15(日) 03:35:28 ID: UNwFe1i20 Be:
>>140
大鉈ふるうんだと理解したけど。。??
143 Name: 名称未設定 [sage] Date: 2008/06/15(日) 08:19:09 ID: XnhWKJTp0 Be:
http://hmdt.jp/archives/2008_06.html#2008061104
↑という事じゃないのか?
144 Name: 名称未設定 [sage] Date: 2008/06/15(日) 09:58:09 ID: oSH6UPle0 Be:
いきなり旧APIが使えなくなる訳じゃないだろうね、普通。

っていうか、もうQTKitを使っているアプリならば、互換性の問題を
避けて楽にQuickTime Xが使えるようになるってことだと思う。

現状、QTKitの下のQuickTimeはレガシーAPIの固まり。QTがあんまりにも
あちこちで使われているものだから、上位Frameworkを用意してあげないと
ベースをすげ替えるのが困難だということですね。

・・・でも、QTKitって旧APIに相当する機能の大半を、今だに提供できて
いないんだが、ホントにこれですげ替え出来るのかね?
145 Name: 名称未設定 [sage] Date: 2008/06/15(日) 10:29:43 ID: XnhWKJTp0 Be:
>>144
12^2オメ

と云うのはさておき、提供出来てない部分は切り捨てられる可能性がある、と云うことでは?
まあ何がサポートされていないのかは知らないので自身は無いが。
146 Name: 名称未設定 [sage] Date: 2008/06/15(日) 13:45:34 ID: ylVUqXAE0 Be:
VR とか 3D とか MIDI とか Text とか使ってる人いるんかいな?
この辺が切り捨てられるんじゃ
147 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:07:25 ID: wTLy4n/p0 Be:
メディアスキンとかね。
MIDIとTextは需要あると思う。
148 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:08:32 ID: qeeMQ1ni0 Be:
VR はアップルの製品ページのギャラリー自体に使われてるので ...
149 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:19:47 ID: wTLy4n/p0 Be:
もう今iPodぐらいしかVR使ってないんじゃん。
150 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:38:33 ID: 259xwVUM0 Be:
でも、来年初めにリリース&切り捨てなら、
今から「作り替えてくれ」なんてアナウンスしても遅すぎじゃない?
151 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:46:39 ID: DgXC+pk00 Be:
>>149
Apple の公式にある VR のこと?
Mac Pro,MacBook Pro,iMac,MacBook,MacBook Air
Time Capsule,AirMac Extreme,Wireless Keyboard,Mighty Mouse
iPod classic,iPod nano,iPod shuffle,iPod touch,iPhone
ざっと調べただけだけどこれらのページにはあったよ。
Mac mini と AirMac Express には無いっぽい。
あと日本のページの MacBook の VR はリンク切れになってる。
152 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:53:05 ID: wTLy4n/p0 Be:
>>151
あーあったw
iMac見たけど思わぬとこにあったわ
切り捨てはともかく、推奨しないってのはさんざん言ってきたような
移行期間は修了したってことじゃないかな
153 Name: 名称未設定 [sage] Date: 2008/06/15(日) 14:58:22 ID: DgXC+pk00 Be:
普通はデザインのところにあると思うよなw
154 Name: 名称未設定 [sage] Date: 2008/06/15(日) 18:15:00 ID: OFFyy1VM0 Be:
>>151
mini
http://www.apple.com/macmini/gallery/qtvr320.html

Airport Express
http://movies.apple.com/movies/us/apple/airport/airportexpress_qtvr_20080430.mov
155 Name: 名称未設定 [sage] Date: 2008/06/15(日) 20:53:59 ID: zzsH9bZe0 Be:
すみません初心者ですが質問です。
NSTableViewに自前のNSArrayの内容を表示するにはどうすればよいでしょうか。
ttp://hmdt.jp/cocoaProg/AppKit/NSTableView/NSTableView.html
の最初の例を試してみるとちゃんと表示されたため、
awakeFromNibで自前のNSArrayを作る処理を足して、
NSTableViewにsetDataSourceしてみたのですが、コンソールに
Illegal NSTableView data source
<NSArrayの内容がずらずら表示>
Must implement numberOfRowsInTableView: and tableView:objectValueForTableColumn:row:
と実装済みなのに出てしまいます。

多分、途轍もなく初歩的な部分でつまづいているように思えるのですが、
どなたかソースを見て頂けないでしょうか。
ttp://www.uploda.org/uporg1483347.txt.html
156 Name: 名称未設定 [sage] Date: 2008/06/15(日) 21:10:50 ID: ylVUqXAE0 Be:
[tableView setDataSource:self];
ってやってみ。あと、
NSArray *datasrc;
の実体は何処にあるんだ?
とか色々妙な点があるので入門書を一冊買って読んだ方がいい。
157 Name: 名称未設定 [sage] Date: 2008/06/15(日) 22:07:18 ID: S0ISsK4N0 Be:
setDataSourceに与える引数は,
numberOfRowsInTableView:と
tableView:objectValueForTableColumn:row:
がインプリメントされてる「クラス(のインスタンス)」
じゃなかった?
158 Name: 名称未設定 [sage] Date: 2008/06/15(日) 22:18:30 ID: jWHLIZ5t0 Be:
プログラマは何もする事が無い。
QuickTime Xによる最適化された再生は重いH.264等で必要な一部のみ。
QTKitの再生以外を行うAPIはLeopardと同様に動作する。
159 Name: 155 [sage] Date: 2008/06/15(日) 22:35:19 ID: zzsH9bZe0 Be:
>>156
エラーメッセージの意味が理解できました。
ありがとうございます。
>NSArray *datasrc;
>の実体は何処にあるんだ?
もうこの時点で意味が分からないので、ちょっと旅に出てきます。
現状、NSTableViewへのバインド数が画面表示分の行数を超えると、
datasrcにオブジェクトが1つしかなくなってしまって、エラーになるのも
多分この辺が原因な気もしますし。
PyObjCで作った時はあんなに簡単だったのに…orz

>>157
ということなんですね。エラーメッセージ通りの意味でした。
160 Name: 名称未設定 [sage] Date: 2008/06/15(日) 22:46:31 ID: PLDEhANR0 Be:
なんだ。じゃぁ、Component Managerとかにがっつり手を入れてくるわけ
じゃないのか。残念。

想像するに、decompressorComponentTypeに代わる新規コンポーネント
タイプを定義して処理体系を分離するような感じか?
CoreVideo Pipelineにあうような実装変更とみた。

QT7でSoundManagerなStandardCompressionSubTypeSoundから、
CoreAudioなStandardCompressionSubTypeAudioにすげ替えたような
感じと想像。

これなら互換性は確保出来るだろうけど・・・

どうせなら、InterleavedとかInterlacedとかPlanarYUVとかの扱いにくさは
改良してほしいなぁ。
161 Name: 名称未設定 [sage] Date: 2008/06/15(日) 23:22:42 ID: jWHLIZ5t0 Be:
64bit化は、次の課題。3rd partyのcomponentの変更も必要だから。
32bitエンジンとのプロセス間通信じゃBDの再生に支障を来すから、と見た。
162 Name: 155 [sage] Date: 2008/06/15(日) 23:30:07 ID: zzsH9bZe0 Be:
>>156,157
頭を切り替えようとプロジェクトをいったん削除して、
CocoaDevやら何やらのサンプルを眺めながら、
ゼロから組み直して進めたら拍子抜けするほど簡単に出来ました。
ありがとうございました。報告まで。
163 Name: 名称未設定 [sage] Date: 2008/06/16(月) 00:56:27 ID: pextnS8l0 Be:
質問です 0S10.5.3です

DivXプレイヤー2.2のコンテキストメニューからデスクトップを選択したときの様に
したいんですけど、どうすればいいですか?
こんな感じです
(1)壁紙の代わりに動画が再生されています(メニューはDivX)
(2)デスクトップに置いてあるアイコンは選択できるし、アイコンやデスクトップをクリックすれば
メニューはFinderになります、壁紙が動画になっただけのような感じです
(3)Exposeですべてのウインドウを並べると普通のウインドウのように選択できます、選択した後は(1)の状態に戻ります

自作ウインドウに対しsetLevelでkCGDesktopWindowLevelを設定すればできるかと思ったんですが無理でした
アイコンの下に描画されたがアイコン、デスクトップをクリックしたら自作ウインドウのクリックと認識される
(3)の動作でウインドウとして並ばない

このsetLevelした自作ウインドウを表示しDivXをデスクトップにしたら、DivXは自作ウインドウより前面のレベルに描画される
自作ウインドウはDivXに隠れているが、クリックイベントは受け取れる

(3)はとりあえず置いとくして、描画だけ壁紙の代わりに描画しているのか
イベントを背面のウインドウにスルーしているのかとか考えましたがどちらもやり方の検討がつきません
以上何かアドバイス、意見など頂けませんか?
DivXがcocoaかどうかは、ちょっとわかりません
164 Name: 名称未設定 [sage] Date: 2008/06/16(月) 01:30:03 ID: GXm3y6CT0 Be:
全然Cocoaはさっぱりなスレじゃ無い件
165 Name: 名称未設定 [sage] Date: 2008/06/16(月) 06:58:19 ID: AaY9TCm60 Be:
>>163
[windou setIgnoresMouseEvents:YES]

でどうだろう?
166 Name: 名称未設定 [sage] Date: 2008/06/16(月) 16:06:11 ID: xUL8HFRI0 Be:
LSUIElement = 1以外の方法で、
dockにアイコンを表示させなくする方法って無いですか?
メニューバーは出したいのです。
167 Name: 名称未設定 [sage] Date: 2008/06/16(月) 16:58:53 ID: nLvA84dY0 Be:
SetSystemUIMode
168 Name: 名称未設定 [sage] Date: 2008/06/16(月) 19:44:48 ID: J90ThS3S0 Be:
>>165
ありがとう、それでばっちりでした
169 Name: 名称未設定 [sage] Date: 2008/06/16(月) 20:07:44 ID: HnijONm20 Be:
>>165
>>163じゃないけどトンクス
170 Name: 名称未設定 [sage] Date: 2008/06/17(火) 01:32:10 ID: ypgNmm+l0 Be:
インスタンスの流儀について今ひとつ無理解なものからの質問です。

あるデータを共有するためのクラスDataを作成しました。
DataをIBでインスタンスにし、
IBでインスタンスに出来る他のクラスからの参照は
他のクラスでIBOutletを作成してDataへ接続して利用しました。
良く分からないのは、IBでインスタンスにせず、
プログラム上でインスタンスにするクラスからDataへの参照方法です。

知識的にはNSNibやNSApplicationのリファレンスを読んでみても
この件に関してさっぱり糸口が見えないレベルであります。
171 Name: 名称未設定 [sage] Date: 2008/06/17(火) 01:38:54 ID: MxqL1SlJ0 Be:
IBOutletでDataインスタンスの参照を持ってるクラスが
インスタンス化したやつに参照教えてあげればいいじゃん
172 Name: 名称未設定 [sage] Date: 2008/06/17(火) 02:01:40 ID: 2Z6DpQEF0 Be:
allocしたやつがdataを返してあげればいいじゃn
173 Name: 名称未設定 [sage] Date: 2008/06/17(火) 06:24:25 ID: HIrcziuV0 Be:
Dataって名前だとモデルなのかな?
IBでモデルをインスタンス化するのは珍しい気がする。
174 Name: 166 [sage] Date: 2008/06/17(火) 09:42:36 ID: jcIXFWOX0 Be:
>>167
SetSystemUIModeだとメニューバーまで消えちゃいませんか?
SetSystemUIMode(kUIModeAllHidden,kUIOptionDisableAppleMenu);
SetSystemUIMode(kUIModeContentHidden,kUIOptionDisableAppleMenu);
は試してみたんですが、期待する様な動作じゃありませんでした。
175 Name: 名称未設定 [sage] Date: 2008/06/17(火) 11:57:37 ID: ROOb9CQQ0 Be:
>>174
>>166メニューバーは出したくないんだろ?
176 Name: 名称未設定 [] Date: 2008/06/17(火) 11:59:09 ID: 99O8N3c20 Be:
>>174
普通 Dock に出ないアプリのときはメニューバーの右側にアイコンをだすしかないと思います。
177 Name: 170 [sage] Date: 2008/06/17(火) 12:42:15 ID: ypgNmm+l0 Be:
>171
なるほど、私自身が確実に糸口(IBOutlet)つけたものが
あるのだから、そこから手繰るわけですね。
この発想はありませんでした、ありがとうございました。

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

>173
(まだ術語的にうまく操れてる自信はありませんが)
おっしゃる通りMVCのM(モデル)の部分です。
最初、[NSApp delegate]で参照出来ないかと考えたのですが、
今の自分の知識では手法が分からず、取り敢えずその線は
あきらめて今回のIBでインスタンス化でやってみた次第であります。
流儀として珍しい系統であるとすると、今後何か支障を
来す事もあるかもしれません。他の実装方法も検討してみます。
コメントありがとうございました。
178 Name: 166 [sage] Date: 2008/06/17(火) 13:12:05 ID: jcIXFWOX0 Be:
>>175
いえ、dockのアイコンを非表示にしたいだけです。
>>174
うーん。なるほどそうですか・・・。わかりました。
179 Name: 名称未設定 [sage] Date: 2008/06/17(火) 13:18:42 ID: 99O8N3c20 Be:
>>178
というか Dock のアイコン非表示、メニューバーだけ、というソフトにほかからどうやって切り替えるの?Dock から消したら Cmd-Tab でも切り替わらないだろうし ...
180 Name: 166 [sage] Date: 2008/06/17(火) 15:52:08 ID: jcIXFWOX0 Be:
>>179
今、親ソフトから立ち上げる子アプリをバンドルの形で作ってて、
そっちはdockに出したく無いんですよ。でもメニューバーだけは子アプリを方を表示させたいんです。
181 Name: 名称未設定 [sage] Date: 2008/06/17(火) 19:02:28 ID: AF6fQ7/I0 Be:
そんな部分にこだわらなくても利用者は気にしないよ。
こういうのを「床屋のオナニー」っていうんだっけ?
182 Name: 名称未設定 [sage] Date: 2008/06/17(火) 21:57:22 ID: MxqL1SlJ0 Be:
そういうのはMenuExtraみたいな形にした方がいい気がする
183 Name: 名称未設定 [sage] Date: 2008/06/17(火) 22:46:04 ID: I13n1WLn0 Be:
>>180無駄だろ
184 Name: 名称未設定 [sage] Date: 2008/06/18(水) 00:02:46 ID: AeC8SojL0 Be:
>>180
そんな動作するソフトって他にある?
ユーザーを混乱させるだけだとおもうけど ...
185 Name: 名称未設定 [sage] Date: 2008/06/18(水) 00:40:19 ID: 0sjtBJ8F0 Be:
>>180
>そっちはdockに出したく無いんですよ

184じゃないが突飛な感じがするな
もう少し晒してくれれば誰かからいいアイデアでるかも
186 Name: 名称未設定 [sage] Date: 2008/06/18(水) 03:14:27 ID: aZaN0e+W0 Be:
こういった批判の中からブレイクスルーするんですね、わかります。
187 Name: 名称未設定 [sage] Date: 2008/06/18(水) 06:18:33 ID: ZpPcOH0s0 Be:
dockに出ないのなら子アプリにする必要すら無いと思うが。
188 Name: 名称未設定 [sage] Date: 2008/06/18(水) 19:25:38 ID: JmkHn0ES0 Be:
丸ウェアを作りたいんだよ。
189 Name: 名称未設定 [] Date: 2008/06/18(水) 20:42:19 ID: 0lBcXg5v0 Be:
軍艦みたいだな
190 Name: 名称未設定 [sage] Date: 2008/06/19(木) 07:19:02 ID: qttkZF1A0 Be:
>>188
やっぱりか。
191 Name: 名称未設定 [sage] Date: 2008/06/19(木) 10:28:55 ID: dkzo9Jj60 Be:
アプリのアイコンを透過にすればいいんじゃね?
192 Name: 名称未設定 [sage] Date: 2008/06/19(木) 10:33:02 ID: rhMGRNu40 Be:
ドックに隙間が空きますよ。あと下に起動中の印の黒三角(Tiger以前)か青白点(Leopard)がでます
193 Name: 名称未設定 [sage] Date: 2008/06/19(木) 10:38:42 ID: tLwYtAlr0 Be:
166のやりたいことはLSUIElementでできるんだけどな
もちろんそれだけじゃ駄目なんだけど
でも決定的なのは無駄だってことだな
194 Name: 170 [sage] Date: 2008/06/19(木) 12:25:14 ID: g1/Z810+0 Be:
色々調べてみたところ、IBでインスタンスを作成するのでなく、
シングルトンインスタンスの作成
http://developer.apple.com/jp/Documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_10.html
を利用して、今のところ期待した動作を得られているようです。
コメントしてくれた方々、ありがとうございました。
195 Name: 名称未設定 [sage] Date: 2008/06/19(木) 19:15:54 ID: LJCPJwrL0 Be:
わかった。
Finderのアイコンにすれば、どんくさいユーザーは欺けるかと。
196 Name: 名称未設定 [sage] Date: 2008/06/19(木) 20:00:26 ID: IN6Id/OS0 Be:
最近Cocoaやり始めた初心者です・

NSStringオブジェクトからC文字列を取り出すcStringメソッドなのですが
10.4 SDKでは問題ないんですけど
10.5 SDKだとdeprecatedのワーニングがでてくるんです。
とりあえず使えるからいいんですが、これに変わるメソッドとかあるのでしょうか?
197 Name: 196 [sage] Date: 2008/06/19(木) 20:15:22 ID: IN6Id/OS0 Be:
自己レスです

cstringを

cStringUsingEncoding:NSUTF8StringEncoding

に変えてうまくいきました。スイマセン。。
198 Name: 名称未設定 [sage] Date: 2008/06/19(木) 21:47:50 ID: CZER9Tmm0 Be:
table view のヘッダをクリックしたときに、
ソートとかせず何も反応しないようにするには
どうすればいいですか?
199 Name: 名称未設定 [sage] Date: 2008/06/19(木) 21:50:53 ID: cR2hfrj80 Be:
ソートしないように設定、、
バインド使ってるか否かで方法が違うけど
200 Name: 198 [sage] Date: 2008/06/19(木) 22:01:03 ID: CZER9Tmm0 Be:
バインディングしてます

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

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

[tableHeaderCell setAction: nil];

というのを入れてみましたが、相変わらずソートしてしまいます。
201 Name: 名称未設定 [sage] Date: 2008/06/19(木) 23:49:46 ID: IjZx3q/K0 Be:
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 Name: 名称未設定 [] Date: 2008/06/20(金) 13:01:44 ID: NyIbt5u40 Be:
IB 2.0では、新規Nibの作成時にテンプレートの言語を選べたのですが、IB 3.0ではどこで選択できるのでしょうか。
203 Name: 名称未設定 [sage] Date: 2008/06/20(金) 23:04:43 ID: emu6E9Wh0 Be:
よく分からんが、File -> Write Class Fileで言語は選択できるな。
初心者なもんで見当違いのことを言ってたらすまん。
204 Name: 名称未設定 [sage] Date: 2008/06/21(土) 06:15:41 ID: G0KE6qM/0 Be:
夜中12時をまたいでアプリが走っているときに、
日付が変わった瞬間を知る良い方法ってありますか?

NSTimer でひたすら時刻を取り続ければできますが、
残りの24時間の間は無駄な動作になるので、
日付が変わった瞬間に notification を受け取るようなのが
やりたいです。
205 Name: 名称未設定 [sage] Date: 2008/06/21(土) 06:49:08 ID: N9gnbwgv0 Be:
>>204
NSTimerは時間指定で呼び出す事も出来るけど。
206 Name: 204 [sage] Date: 2008/06/21(土) 06:58:24 ID: G0KE6qM/0 Be:
>>205 ㌧
NSTimer て、今までインターバル測るのにしか使ってなかった‥ orz
207 Name: 名称未設定 [sage] Date: 2008/06/21(土) 07:00:12 ID: LClgiSkx0 Be:
runloopで時間指定って出来なかったっけ?

それ以外だと、xNix的な考え方と組み合わせるのは?
cronサービスでnotificationを飛ばすようなやつをくむとか。
シェルスクリプトからatコマンドを使うイメージ。
208 Name: 名称未設定 [sage] Date: 2008/06/21(土) 11:32:35 ID: C54+0kUw0 Be:
Cocoaバインディングがさっぱり・・・
ややこしいなあ
209 Name: 名称未設定 [sage] Date: 2008/06/21(土) 12:32:29 ID: kIEVYzos0 Be:
>>208
どこがわからんの?IB でバインドする変数名を指定するだけだと思うけど。
(すくなくとも第一歩は。)
210 Name: 名称未設定 [sage] Date: 2008/06/21(土) 12:40:53 ID: C54+0kUw0 Be:
ああ、、そか、バインド先とkeyとパスを指定するくらいなんだ。。
沢山項目があるのでこんがらがってた。。


211 Name: 名称未設定 [sage] Date: 2008/06/21(土) 16:47:43 ID: aJQoGXKZ0 Be:
KVOがむずかしすぐる、、、
特定のインスタンス監視して変化があったら特定のメソッド叩いて欲しいだけの
時にやらなきゃいけないことが山盛りで理解しきれてない。
NSTimerぐらい簡単に設定できればいいのに、、
212 Name: 名称未設定 [sage] Date: 2008/06/21(土) 17:39:34 ID: m9NZ2CO10 Be:
>>211
ターゲット・アクションでいいんじゃね?
213 Name: 名称未設定 [sage] Date: 2008/06/22(日) 00:02:38 ID: DwFjZeXi0 Be:
>>211
なにが難しいの?山盛りではないよね。
observeValueForKeyPath:ofObject:change:context:
を実装して、
addObserver:forKeyPath:options:context:
で登録するだけだと思うんだが...
一、二、沢山の未開民族以前の、二つの時点で沢山のひとですか?
214 Name: 名称未設定 [sage] Date: 2008/06/22(日) 07:09:03 ID: sXHrp8O60 Be:
テキストフィールド2つだけの
cocoaバインディングのサンプルないかな
215 Name: 名称未設定 [sage] Date: 2008/06/22(日) 07:36:43 ID: DwFjZeXi0 Be:
それだけなら、なんか NSString* text; を中に持つオブジェクトをつくって、nib のなかにインスタンス化して、ふたつのテキストフィールドをそのオブジェクトの text にバインドするだけだけど ...
216 Name: 名称未設定 [sage] Date: 2008/06/22(日) 10:49:12 ID: N0VcqJNZ0 Be:
個人的に思うのだが、Bindingの動作メカニズムをちゃんと理解していないと落とし穴が結構ある。
で、ちゃんと理解するにはKVOのメカニズムを理解していなきゃならない。
それにはObserverパターンとKVCの理解が必要で、さらに言えばそもそもObj-Cの実装が分かっていた方がいい。
それはつまりオブジェクト指向言語はどうやって作るのか?ってことで、それをCで考えるくらいの力があれば…
Bindingを使いこなせるんじゃないかと思う。

っていうのは言い過ぎだとしても、「もう一段深いところ」を理解していると楽になること多いです。
217 Name: 名称未設定 [sage] Date: 2008/06/22(日) 11:39:09 ID: sXHrp8O60 Be:
アセンブラからやり直します。。
218 Name: 名称未設定 [] Date: 2008/06/22(日) 11:47:18 ID: RhCPffZv0 Be:
>>214
例えば、こんなのありますけど
ttp://www.stripe-net.jp/cocoa/documents/chapter1/chapter1-3.html
ttp://www.stripe-net.jp/cocoa/documents/chapter1/chapter1-6.html
219 Name: 名称未設定 [sage] Date: 2008/06/22(日) 11:58:13 ID: sXHrp8O60 Be:
>218
超さんくす!!
220 Name: 202 [] Date: 2008/06/22(日) 13:20:35 ID: 0Fs+nSDs0 Be:
>>203
すみません。プログラミング言語ではなく日本語/英語/中国語などの言語です。
221 Name: 名称未設定 [sage] Date: 2008/06/23(月) 00:11:09 ID: FKweipuD0 Be:
interface builder3.0が糞な件について

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

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

あーむかつく。
なんでこんなん使ってやらなあかんねん。
ふざけんな。研究費削っとんちゃうぞ!!!!!!!!!
222 Name: 名称未設定 [sage] Date: 2008/06/23(月) 00:17:12 ID: 2/CWbUXB0 Be:
>>221
マルチポスト乙
厶板のObj-Cスレに返事が書いてあるからそっちをみてやってくれよ
223 Name: 名称未設定 [sage] Date: 2008/06/23(月) 00:17:55 ID: I4ASgrpV0 Be:
慣れだ慣れ 考え方ちゃうからな
IBに限らずCocoa慣れるとMSにも言いたい事が出て来たりする

で、結局みんなEmacs+GCCに戻るのさ
ねーよ
224 Name: 202 [sage] Date: 2008/06/23(月) 01:29:22 ID: xvOwn1gf0 Be:
>>221
MVCアーキテクチャは慣れるまできついかもなぁ
ただ慣れたら離れられなくなる。
というか、俺の場合Cocoaに慣れて初めて俺のプログラムがいかにオブジェクト指向じゃなかったか気づいた。
自分のプロブラムを見直すチャンスって考え方もあるんじゃないかな
VBやったことないが基礎となる理論はしっかりしてるんだろうか。
ってスレ違いだなスマソ
225 Name: 名称未設定 [sage] Date: 2008/06/23(月) 04:04:59 ID: bpjMPdrC0 Be:
マルチポストをマルポって呼ぶスレに認定することにしました
226 Name: 名称未設定 [sage] Date: 2008/06/23(月) 08:46:19 ID: ZbmJMWrp0 Be:
すいませんまた初心者なんですが。。

File's OwnerとFirst Responderってこれはなんですか?
チュートリアルでも、たまにこれに向かってコネクトしてる場面があるんですが
なんのためにやっているのかの説明が無いのでなんだかぼんやり。
227 Name: 名称未設定 [sage] Date: 2008/06/23(月) 09:14:14 ID: 2/CWbUXB0 Be:
File's Owner は、nib を「開いた人」です。
MainMenu.nib は自動的に開かれて、開いた人は NSApplication (のインスタンス)になってます。
だから、MainMenu.nib の File's Owner につなぐってことは、NSApplication につなぐことになります。NSApp の delegate につなぎたいときとかにつかいます。

First Responder っていうのは、プログラム実行中にキー入力をうけつけているオブジェクトをさす抽象的なターゲットだとおもってください。
メニューバーの「文字を大きくする」メニューのターゲットを、特定のウインドウの特定のオブジェクトとかにつないでしまうと、いつもそのオブジェクトが呼ばれることになりますが、
場合場合に応じて前面のオブジェクトに命令したかったりするでしょ。
228 Name: 名称未設定 [sage] Date: 2008/06/23(月) 09:29:53 ID: ZbmJMWrp0 Be:
>227
ありがとうございます!
なるほどそうだったんですか・・

cocoaアプリの構造知らぬままやってました。。
229 Name: 名称未設定 [sage] Date: 2008/06/23(月) 15:39:38 ID: nJQGDEyG0 Be:
>>227
おまいの説明はすこぶる分かり易い。
230 Name: 名称未設定 [sage] Date: 2008/06/23(月) 15:45:03 ID: 9YeEOx5D0 Be:
>>229
俺も同じ事思ってた。
ID: ZbmJMWrp0 はいい人に出会えた。
231 Name: 名称未設定 [sage] Date: 2008/06/23(月) 19:30:38 ID: gNpGWa+A0 Be:
ヒレガスよりわかりやすいな
232 Name: 名称未設定 [sage] Date: 2008/06/25(水) 18:15:44 ID: WYDyD/990 Be:
>>227
神。説明が分かりやすい上に文体がしっくりくる。Cocoaの本書いてちょw
233 Name: 名称未設定 [sage] Date: 2008/06/25(水) 18:57:58 ID: 3DmRzNhv0 Be:
もし、友達に貸したエロ本がまた貸しされて、
さらにまた貸しされて・・・

もうあなたの手で処分出来なくなった場合、
これをメモリーリークと言います。
234 Name: 名称未設定 [sage] Date: 2008/06/25(水) 20:50:44 ID: FELUv7Tr0 Be:
>>233
違うんじゃない?
235 Name: 名称未設定 [] Date: 2008/06/25(水) 21:35:13 ID: 7oMlqkxh0 Be:
>>227
File's Ownerは、その言葉どおり、nib開いた人ではなく、オーナー(所有者)だと思います。
ADCのドキュメントによれば、MainMenu.nibを開いているのは、NSApplicationじゃないし。
まあ、たいていは、開いた人がそのままオーナーになりますが。

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

236 Name: 名称未設定 [sage] Date: 2008/06/25(水) 21:44:11 ID: c0QFEsb40 Be:
>>235
正確に書く事と分かり易い事とは違うわけだが。
とっかかりとしては十分な説明だと思う。
237 Name: 名称未設定 [sage] Date: 2008/06/25(水) 22:16:45 ID: J5cC1xD40 Be:
NSTextViewの中の文字列で
たとえば2行目の左から3文字目から5文字目を
"ABC"で上書きする場合どうすればいいのでしょうか。。
238 Name: 名称未設定 [sage] Date: 2008/06/25(水) 22:24:26 ID: QvvFgoa30 Be:
NSTextを継承してるんだから
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString
なんかを使えばいいんじゃないの?
239 Name: 名称未設定 [sage] Date: 2008/06/25(水) 22:48:50 ID: J5cC1xD40 Be:
>238
ありがとうございます!試してみます!
240 Name: 名称未設定 [sage] Date: 2008/06/26(木) 00:28:58 ID: QkkYa/qW0 Be:
オーナーとかの話しで思ったのですが、
MyObjectがインスタンスhogeを持っていた場合、
@interface MyObject:NSObject {
id hoge;
}
@end

@implementation MyObject
-(id)hoge {
return hoge;
}
@end
とアクセッサメソッドを用意してやることでIB上でMyObjectにバインドすることができるようになります。
これはMyObjectがhogeを持っているからですよね。
では他のオブジェクトと共有して使用されるグローバル変数の場合どうなるのでしょう。
241 Name: 名称未設定 [sage] Date: 2008/06/26(木) 00:32:49 ID: QkkYa/qW0 Be:
@interface MyObject:NSObject {
}
@end


id hoge;

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

とした場合バインディングはエラーが起きてしまいました。
hogeはMyObjectが持ってるんじゃないからそりゃそうかと思いましたが、
それなら誰が持っているのでしょう。
NSApplication?NSUserDefault?File's Owner?
それぞれに無理矢理バインドしてみましたがうまくいきませんでした。
アクセッサメソッで変数を返す時にグローバル変数の値を代入してやるしかないのでしょうか?
242 Name: 名称未設定 [sage] Date: 2008/06/26(木) 00:38:33 ID: QkkYa/qW0 Be:
ああああすみません、
エラー文にセッターがないって出てたんで言われた通りにセッターつけたら解決しました。
プロパティ使っとけってことですね。試す前から書き込んだ自分が馬鹿でした。お騒がせしました。
243 Name: 名称未設定 [sage] Date: 2008/06/26(木) 10:37:58 ID: DcE/JQ790 Be:
NSViewとかをNibに定義しないで、コードから直接
alloc&initWithFrameとかした場合、awakeFromNibは
呼び出されませんよね。
このメソッドも呼び出すべきですか?
244 Name: 名称未設定 [sage] Date: 2008/06/26(木) 11:18:59 ID: nOuF1tC50 Be:
それって呼ばれるの?
ログ吐いて確認してみたら?
245 Name: 名称未設定 [sage] Date: 2008/06/26(木) 20:00:15 ID: 8BlZMsUG0 Be:
>>243
-awakeFromNibはNib使わないんなら気にしなくておk
246 Name: 名称未設定 [sage] Date: 2008/06/26(木) 22:05:41 ID: DcE/JQ790 Be:
>>244-245
なんか勘違いしてたみたいで、呼ぶ必要ないですね。
ありがと。
247 Name: 名称未設定 [sage] Date: 2008/06/27(金) 02:48:34 ID: rkAsU+Fv0 Be:
既存クラスにメソッド追加してやるのはカテゴリでいいですけど、
インスタンス変数を追加しようと思ったらサブクラス化しかないですか?
サブクラス化するとIB上に置いてあるControlを全部変更しないといけないのでどうにか方法はないかと考えています
248 Name: 名称未設定 [sage] Date: 2008/06/27(金) 06:48:39 ID: 5wCaEvMQ0 Be:
>>247
ポージング(poseAsClass)でいけるかも。

ttp://journal.mycom.co.jp/column/objc/012/index.html
249 Name: 名称未設定 [sage] Date: 2008/06/27(金) 06:50:53 ID: 5wCaEvMQ0 Be:
あ、ごめん。だめやった。インスタンス変数追加できないんやった。
250 Name: 名称未設定 [sage] Date: 2008/06/27(金) 07:44:23 ID: QT0InZ8U0 Be:
posingでinstance追加できたらのっとりでなんでもできちゃいそうだね。
それはそれで面白そうだけど何か問題があるからできないようになってるのかな。
251 Name: 名称未設定 [sage] Date: 2008/06/27(金) 08:25:43 ID: cVkbRC280 Be:
>247
漏れもちょうどいまそれ悩んでた。

とりあえずそのクラスに組み込んじゃったけど、やっぱしっくりこないや
252 Name: 名称未設定 [sage] Date: 2008/06/27(金) 09:03:28 ID: YYux+Wek0 Be:
posingはLeopardからdeprecatedに指定されてる。
253 Name: 名称未設定 [sage] Date: 2008/06/27(金) 09:20:29 ID: zgdyeD0/0 Be:
>>247
既存クラスも自作だったら、既存クラスの名前のほうをかえて、
サブクラスのほうのなまえをもとのものにしておくという方法が。
254 Name: 名称未設定 [sage] Date: 2008/06/27(金) 10:21:22 ID: O3k3c+Fk0 Be:
>>252
知らなかった。すでに64ビットアプリだとサポートされてないし。
255 Name: 名称未設定 [sage] Date: 2008/06/27(金) 11:31:15 ID: OEVIo/Co0 Be:
中継クラスみたいなものを用意するってのは駄目なの?
setter と getter を書いて中継するとか。

あと、Bindingにしておけば、selectionが中継クラスになるから、
実際のターゲットクラスが変更になってもnibの変更は最小限ですむよ。
256 Name: 名称未設定 [sage] Date: 2008/06/27(金) 12:00:47 ID: zgdyeD0/0 Be:
>>254
でもいろいろと別の runtime 関数が用意されてて、class の乗っ取り自体は 64 bit でも自在にできるよ。
257 Name: 名称未設定 [sage] Date: 2008/06/27(金) 16:00:37 ID: YYux+Wek0 Be:
特にプラグインは危険だな。アプリ上の任意のクラスを簡単に乗っ取れるから。
自分で作ったプログラム用のプラグインを使ってブルートフォースアタックを
かけたら簡単にシリアル番号をボロボロ抜き出せた。笑うしかないね。
258 Name: 名称未設定 [sage] Date: 2008/06/27(金) 20:03:42 ID: pVLES8St0 Be:
まあこの辺がiPhone SDKでダウンローダブルなプラグイン禁止の理由なんだろうね。
FireFoxが移植出来ない、一番の原因。相変わらずCNETは表面的だ。
http://japan.cnet.com/news/media/story/0,2000056023,20376076,00.htm
259 Name: 名称未設定 [] Date: 2008/06/27(金) 20:24:09 ID: 5dK6eRfR0 Be:
>>247
バインディングの実装と同じように手段を取ってみては?

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

260 Name: 名称未設定 [sage] Date: 2008/06/27(金) 20:42:37 ID: NSFBdoqf0 Be:
>>259
あれってポージングで実装してるんじゃなかったの?
261 Name: 247 [sage] Date: 2008/06/27(金) 22:32:56 ID: W9Mj7Of10 Be:
いろいろと意見ありがとうございます。
poseAsClassが10.5でdeprecatedになって、木下さんがどこかの記事で代替えの方法を解説してたと思うのですが。
>>259
バインドを使用すると結局たくさん線をつなぐことになりそうなのでスマートではなさそうな気がします、、。
262 Name: 名称未設定 [sage] Date: 2008/06/27(金) 22:39:03 ID: cN+Ohq8K0 Be:
ポージングの代わりはメソッド交換でってアップルが言ってた。
263 Name: 名称未設定 [] Date: 2008/06/27(金) 22:40:13 ID: 5dK6eRfR0 Be:
>> 261
いや。バインドを使うんじゃなくて、バインドと同じ仕組みを応用すると言っています。

ところで、ポージングって、インスタンス変数の追加はできるの?
ttp://journal.mycom.co.jp/column/objc/012/index.html
264 Name: 名称未設定 [sage] Date: 2008/06/27(金) 22:53:14 ID: W9Mj7Of10 Be:
ポージングでは無理そうです。
>>259を読んでおっしゃることは理解しました。
265 Name: 名称未設定 [] Date: 2008/06/27(金) 23:30:52 ID: 5dK6eRfR0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/06/28(土) 00:52:34 ID: MqHAm5mY0 Be:
>>262
MethodReplacementってやつか。
267 Name: 名称未設定 [sage] Date: 2008/06/28(土) 01:54:47 ID: 0eKOBZUW0 Be:
MethodReplacement
http://developer.apple.com/samplecode/MethodReplacement/listing3.html

その他のMethod Swizzling
http://www.cocoadev.com/index.pl?MethodSwizzling
http://rentzsch.com/trac/wiki/JRSwizzle
268 Name: 名称未設定 [sage] Date: 2008/06/28(土) 14:28:41 ID: KIP7kd9A0 Be:
メソッドの+と-って何ですか?
269 Name: 名称未設定 [sage] Date: 2008/06/28(土) 14:31:27 ID: iKOABDQ+0 Be:
クラスメソッドとインスタンスメソッド
270 Name: 名称未設定 [sage] Date: 2008/06/28(土) 14:42:57 ID: kuOvaWBW0 Be:
クラス名 *A = [クラス名 xxx]; でインスタンスを作れるのが、 +
それ以外が -
であってるかな?
271 Name: 名称未設定 [sage] Date: 2008/06/28(土) 14:50:17 ID: 3jJ6jb9L0 Be:
>>268,270
頼むからObjective-C Programing Languageぐらい読んでからCocoaプログラミング始めてくれ。
今は日本語版もあるんだから。
272 Name: 名称未設定 [sage] Date: 2008/06/28(土) 14:52:52 ID: KXgNszZw0 Be:
むしろ頼むからプログラミング始めないでくれ
273 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:03:54 ID: Pk2Ye7oi0 Be:
むしろ神解説できたらいいのにね
分かりやすい解説シリーズキボン
274 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:12:15 ID: ICsN/hVj0 Be:
クラスとインスタンスってのはプッチ○プリンの入れ物と...

めんどくせ。
275 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:21:45 ID: oynXjVSX0 Be:
クラス=風俗
インスタンス=風俗嬢
276 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:32:53 ID: iKOABDQ+0 Be:
そういう方向で言うとアレか。
クラスメソッド:
 デリヘル ヘルス嬢 = [デリヘル 呼び出し];

インスタンスメソッド:
 [ヘルス嬢 xxx];
277 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:46:52 ID: u+ckHd7H0 Be:
ゆとりのためにゲームで説明すると
ソルジャーから派生して枝分かれしたナイト、ウィッチ、プリーストといったジョブ(クラス)のキャラ達(インスタンス達)がいたとして、
10人ぐらいのパーティだと複数人同じジョブ(クラス)の人がいるんだけど
それぞれが持ってる、戦う、防御、逃げるなんかの戦闘コマンド(インスタンスメソッド)はもとのジョブ(親クラス)から継承したコマンドで、
ウィッチのサンダーとかファイア、プリーストのヒーリングなんかはジョブ固有のコマンド(インスタンスメソッド)なわけ。
んで特殊アイテム戦いのドラムを使ってナイト全員が2回行動になったりするのがナイトのジョブコマンド(クラスメソッド)、
前衛後衛入れ替えとかで全員場所入れ替えすんのがソルジャーのジョブコマンド(親クラスのクラスメソッド)。
278 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:52:27 ID: u+ckHd7H0 Be:
あー、これだとクラスメソッドについて正しく説明できてないな、、
279 Name: 名称未設定 [sage] Date: 2008/06/28(土) 15:52:55 ID: P5MKK7iV0 Be:
TOとFFとDQが混じってる…?
280 Name: 名称未設定 [sage] Date: 2008/06/28(土) 16:16:12 ID: ICsN/hVj0 Be:
インスタンスメソッド:
 [ヘルス嬢 チェンジ]; // raise Exception if call 3 times.

こうですか><
分かりません><
281 Name: 名称未設定 [sage] Date: 2008/06/28(土) 16:16:34 ID: u+ckHd7H0 Be:
オウガバトルベースのつもりが混じってますね、、
上の流れだとalloc系のクラスメソッドをどう説明すれば良いか
282 Name: 名称未設定 [sage] Date: 2008/06/28(土) 17:27:39 ID: 3jJ6jb9L0 Be:
そもそも、クラスもインスタンスも、メッセージを受け取れる「オブジェクト」であるという点では違いはないんだ。
しかし例えば画面上の無数のウインドウがあったとき、それらは全て別々のオブジェクトであるのだが、
その動作を規定しているのは共通のコードなわけだ。それが「クラス」。
対してウインドウの位置や中身などは全て別物だ。その情報を保持するのが「インスタンス」。
よくタイヤキの型(クラス)とタイヤキ(インスタンス)に例えられるな。型はおなじでも出来たタイヤキの中身は変えられる。
俺はクラスはイデアだと思ってるけど。

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

クラスメソッドの用途は確かにそのクラスのインスタンスを作るものが多い。allocを始めとして。
ただしそれに限るものでもない。全インスタンスに共通な性質を設定するアクセサだって作れるし。
283 Name: 名称未設定 [sage] Date: 2008/06/28(土) 17:39:16 ID: 3jJ6jb9L0 Be:
ちなみに、クラスとインスタンスはどちらもオブジェクトである…んだが、Obj-Cの場合はさらにこう言える。
「クラスオブジェクトはNSObjectクラスのインスタンスとして扱える」
つまり例えば、クラスをNSArrayにつっこむということは普通に出来る。ていうか俺もやる。例えば
[anMutableArray addObject:[NSString class]];
とするとNSStringクラスがオブジェクトとしてanMutableArrayに追加される。

ということで、-と+、インスタンスメソッドとクラスメソッドは
一つのファイルの中で2種類のオブジェクトの動作を定義する必要があるから、存在するとも言える。
284 Name: 名称未設定 [sage] Date: 2008/06/28(土) 18:03:52 ID: u+ckHd7H0 Be:
すげええクラスとかまんまArrayに入れたりできるんですか!
ちなみにどういった用途で使うんでしょう?
便利な使い方が想像できないです、、
285 Name: 名称未設定 [sage] Date: 2008/06/28(土) 19:19:37 ID: wWVbcxHq0 Be:
クラスで
外部から呼べるのが-
内部でしか呼ばないのが+

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

>>285
内部と外部の意味がよく分からん。
[[NSString alloc] init]; のallocはクラスメソッドで、initはインスタンスメソッドだが、この文に内部も外部もないだろ。
どちらもオブジェクトにメッセージを送っているにすぎない。呼べる呼べないで言えば、
[NSString init]はできないしNSString *aStringに対して[aString alloc]はできない。それだけ。
287 Name: 名称未設定 [sage] Date: 2008/06/28(土) 19:38:06 ID: 3jJ6jb9L0 Be:
ってNSStringクラスはNSObjectのインスタンスとしても扱える訳だから、[NSString init]は呼べるか。
多分意味はないし、実際に試したことはないけど。
288 Name: 名称未設定 [sage] Date: 2008/06/28(土) 19:43:10 ID: yHYqfuzX0 Be:
>>285
クラスとインスタンスの関係は理解してる?

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

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

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

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

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

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

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


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

290 Name: 名称未設定 [sage] Date: 2008/06/28(土) 22:14:41 ID: 5Bx5r4xK0 Be:
ここの盛り上がりに比べてiPhoneアプリ製作スレの中身の無さといったら
291 Name: 名称未設定 [sage] Date: 2008/06/28(土) 22:31:29 ID: oyobADpU0 Be:
デリヘル嬢と本番するにはどんなメソッドを呼んだらいいの?
292 Name: 名称未設定 [sage] Date: 2008/06/28(土) 22:42:08 ID: yHYqfuzX0 Be:
>>291
[[デルヘル嬢 alloc] init]
293 Name: 名称未設定 [sage] Date: 2008/06/28(土) 22:42:48 ID: ZeRWvCBY0 Be:
release
294 Name: 名称未設定 [sage] Date: 2008/06/28(土) 23:01:21 ID: 5Bx5r4xK0 Be:
デリヘル嬢 デリ嬢 = [[デリヘル嬢 new] retain];
[デリ嬢 setMoney:1万];
[self setSkin:[Skin skin]];
[デリ嬢 play:self];
[self 射精];
[デリ嬢 release];
書いてて死にたくなってきたわ
以後建設的な話しを
295 Name: 名称未設定 [sage] Date: 2008/06/28(土) 23:22:14 ID: EmOAb5fu0 Be:
処理中にキャンセルボタンでキャンセルさせたいのですが、
どうすればよいのですか?
処理はfor文とかで回してるのですが。
296 Name: 名称未設定 [sage] Date: 2008/06/28(土) 23:27:19 ID: 3jJ6jb9L0 Be:
>>289
失礼。正確には、
「NSObjectのサブクラスのクラスオブジェクトは、NSObjectのインスタンスメソッドを持つとして扱える」かな。
えーと例えば、
[NSString isKindOfClass:[NSObject class]] とするとYESが返ってくる。
クラスオブジェクトに対してrespondsToSelector:やperformSelector:が効くのもこのおかげだと思う。
297 Name: 名称未設定 [sage] Date: 2008/06/28(土) 23:43:35 ID: +zEqA0Er0 Be:
メタクラス等はこれがわかりやすいよ
http://journal.mycom.co.jp/column/objc/016/index.html
http://journal.mycom.co.jp/photo/column/objc/016/images/MetaAndSuperl.jpg
298 Name: 名称未設定 [sage] Date: 2008/06/28(土) 23:48:33 ID: oynXjVSX0 Be:
>>295
ボタンが押されたforループから抜ければいいじゃん
299 Name: 名称未設定 [sage] Date: 2008/06/29(日) 00:38:06 ID: XlViJVqL0 Be:
ループを別スレッドに分ける。
300 Name: 名称未設定 [sage] Date: 2008/06/29(日) 02:11:05 ID: ywkudbmZ0 Be:
>>294
leakしてる
301 Name: 名称未設定 [sage] Date: 2008/06/29(日) 02:40:08 ID: QGzHDlD00 Be:
使用後のゴムが小学校の校庭に落ちていたのを思い出した。
ちゃんと処分しろよな。
302 Name: 名称未設定 [sage] Date: 2008/06/29(日) 03:10:56 ID: t568XiuI0 Be:
AVMovie* movie = [[AVLibrary sharedLibrary] objectForKey:@"InranJoshiKose"];

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

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

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

これだと、ループのなかでGUIの更新とかイベント処理とか
全部出来るからべんりだお
304 Name: 名称未設定 [sage] Date: 2008/06/29(日) 06:27:34 ID: GLTNi95n0 Be:
CoreAnimationで明示的なアニメーションをさせているのですが
アニメーションが終了するとレイヤーが開始時の状態に戻ってしまいます。
終了時の状態をキープさせるにはどうすれば良いのでしょうか?
305 Name: 304 [sage] Date: 2008/06/29(日) 09:43:32 ID: GLTNi95n0 Be:
自己レスです

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

でいけました。kCAFillModeForwardsが何なのかよく分かっていませんが。
306 Name: 名称未設定 [sage] Date: 2008/06/29(日) 10:33:07 ID: G8HUtWbV0 Be:
NSTextViewを2つ左右に配置して、改行数も同じなテキストを表示してるんですが
この2つのTextViewの垂直スクロールを同期(ホイール、スクロールバー操作時)させるにはどうしたらいいのでしょうか。。
307 Name: 名称未設定 [sage] Date: 2008/06/29(日) 10:39:31 ID: 4W+71IXB0 Be:
>>306
NSScroller用のValueを誰かに持たせて両方にbindする。


と、何も試さずに言ってみる。
308 Name: 名称未設定 [sage] Date: 2008/06/29(日) 11:40:38 ID: U0RClpmA0 Be:
>>306
ドキュメントで SynchroScroll を「全文検索」する。

309 Name: 名称未設定 [sage] Date: 2008/06/29(日) 14:13:09 ID: BWFM2zTG0 Be:
すみません。
2つのNSSplitViewで片方のNSSplitViewのディバイダーを動かした時に
もう片方のNSSplitViewのディバイダーをシンクロさせる方法はありますでしょうか?
310 Name: 名称未設定 [sage] Date: 2008/06/30(月) 18:37:03 ID: LJd79rmJ0 Be:
HMDTの2nd読んでるんだけど
cocoaバインディングのとこで

バインディング用のNSObjectControllerにある "content"というアウトレット
これってIndentify Inspectorにはでてこないんですが
(Connectionsにはでてくる)
具体的になにをやってるんでしょうか??
311 Name: 310 [sage] Date: 2008/06/30(月) 19:36:45 ID: LJd79rmJ0 Be:
これってIndentify Inspectorにはでてこないんですが

でてきてます。

すいません勘違い。。

312 Name: 名称未設定 [sage] Date: 2008/07/02(水) 00:28:07 ID: BE+n65l+0 Be:
Cocoaセミナーの資料、Leoaprd対応前のヤツどこかで入手できないでしょうか?
もしくは誰かどこかにアップして頂けると嬉しいのですが・・・
中級編と上級編を
313 Name: 名称未設定 [sage] Date: 2008/07/02(水) 09:26:55 ID: TLvP2d9t0 Be:
>>312
あきらめてレパードをかいましょう。1万円の投資はいみがあります。
なるべくAppleの提供しているとおりするのが混乱が起きなくて良いです。
Apple はどんどん過去を切り捨てる会社だからプログラムしようとおもったら仕方がないです。
314 Name: 名称未設定 [sage] Date: 2008/07/02(水) 10:22:32 ID: 7uYmBryr0 Be:
Leoaprd使ってるんですが都合上、メイン環境はまだDeveloperTools2.5なんで...

で、自己解決ですが色々ググってたらありました。
http://hmdt-web.net/Cocoa/
315 Name: 名称未設定 [sage] Date: 2008/07/02(水) 10:24:05 ID: TLvP2d9t0 Be:
それはすいません。どういう都合なのか興味深いんですが。
316 Name: 名称未設定 [sage] Date: 2008/07/02(水) 11:01:19 ID: 6x1NISwO0 Be:
>>314じゃないが、自分もメイン環境はTiger。
仕事で使うアプリがTiger用…っていうかLeopardに移行して余計なトラブルを起こしたくない
といった都合。
317 Name: 名称未設定 [sage] Date: 2008/07/02(水) 11:40:09 ID: 7uYmBryr0 Be:
僕も仕事とか、トラブルを避けたいってのがあります。

それと、自分の知識が、まだ段階的に、OS 10.3~10.4の新しいAPI勉強中、というぐらいなので
(そんなんで仕事すんなって話ですが)、Xcode3への移行も含めた10.5の勉強は後回しにしたいのです。
318 Name: 名称未設定 [sage] Date: 2008/07/02(水) 12:22:08 ID: TLvP2d9t0 Be:
>>317
なるほど。でも XCode 3.1 (iPhone SDK についてるやつ)は全然機能豊富でいいよ。XCode でも Tiger 用のソフト作れるから、XCode だけは 3.1 にしてもいいんじゃないかな...

まあ Interface Builder の仕組みとかわかってないと、見た目が案外変わってるから混乱するかもしれないけど。
319 Name: 名称未設定 [sage] Date: 2008/07/04(金) 17:15:58 ID: kZM2vvAg0 Be:
CoreAnimationについて質問です。
CoreAnimationを使うと位置や不透明度を指定するだけで中間フレームが補完されますが
アニメーションさせずに位置などを変更する方法は無いのでしょうか?
320 Name: 名称未設定 [sage] Date: 2008/07/04(金) 17:26:12 ID: BBNuNSR70 Be:
>>319

コードを共通にしたいなら、Durationを0にするのが簡単。
321 Name: 名称未設定 [sage] Date: 2008/07/04(金) 19:15:07 ID: KXtWY3ng0 Be:
CoreAnimation使わなきゃいいだろw
なんのためのAnimation機能だよ
322 Name: 319 [sage] Date: 2008/07/04(金) 20:12:49 ID: hXaLDE1k0 Be:
自己解決。トランザクション設定でいけました。

>CoreAnimation使わなきゃいいだろw
>なんのためのAnimation機能だよ
一瞬だけ無効にしたい事は結構あると思うけど。
323 Name: 名称未設定 [] Date: 2008/07/05(土) 23:17:33 ID: bbZv5NPd0 Be:
age
324 Name: 名称未設定 [sage] Date: 2008/07/07(月) 17:54:09 ID: kroflgcW0 Be:
思いっ切り余談なんだけど、新し物好きとか見てると、
なんか3日に1回は0.1バージョンアップしてトップページに
載せて貰って、DLを稼ごうとしてるアプリがない?

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

自分なら改良点が5個くらい溜まるまで+0.1は控えるな。
そうすると新バージョンの公開は大体1年に2回くらいになる。
バグフィックスは1個だけでも+0.0.1するけどな。
326 Name: 名称未設定 [sage] Date: 2008/07/07(月) 22:35:04 ID: +XUVksz/0 Be:
>>324
新し物好きの人はそれで稼いでるんだからいいんじゃない?
ユーザーとしてはバージョンアップ歓迎だし。
327 Name: 名称未設定 [sage] Date: 2008/07/08(火) 08:23:22 ID: AK0ZWKsw0 Be:
ソフトのとこクリックすると
新しもの好きにお金がはいるシステムだったんだ?
328 Name: 名称未設定 [sage] Date: 2008/07/08(火) 11:44:46 ID: hfpgV8/00 Be:
直リンだし別に金は入らないかと。
329 Name: 名称未設定 [] Date: 2008/07/09(水) 00:43:24 ID: zn8zpXSM0 Be:
バナー掲載料
330 Name: 名称未設定 [sage] Date: 2008/07/09(水) 22:25:40 ID: cjjoVqS60 Be:
現在のマウスポインタがビュー内の特定の領域内にあるかどうかを判定したいんですが
QuickDrawでいうところのRegionはCocoaではなんと呼ぶんでしょうか?
331 Name: 名称未設定 [sage] Date: 2008/07/09(水) 22:29:36 ID: sdo/FFS+0 Be:
知らん
NSMouseInRectでググれ
332 Name: 名称未設定 [sage] Date: 2008/07/09(水) 22:32:23 ID: 6VjgO1TE0 Be:
>>330
俺も昔は気になってたが、不定形はNSBezierPath使って判定してる

CGRegionだっけ?そんなのもあったような
333 Name: 名称未設定 [sage] Date: 2008/07/09(水) 22:40:03 ID: cjjoVqS60 Be:
>>332
なるほど、NSBezierPathで領域を作って、containsPointで判断すればいいんですね
ありがとうございました
334 Name: 名称未設定 [] Date: 2008/07/12(土) 23:55:07 ID: stdBe7cl0 Be:
sage禁止
335 Name: 名称未設定 [sage] Date: 2008/07/13(日) 11:37:30 ID: HJA7K/r+0 Be:
NSString で、例えば "2ch" みたいに、ダブルクォーテーション付きで
文字を表示させたいときは、

NSString * string = @"( ? )";

で、 ( ? ) のところにどう記述すればいいでしょうか。
336 Name: 名称未設定 [sage] Date: 2008/07/13(日) 11:39:09 ID: h5XyjEmR0 Be:
@" ¥" ¥" "
というふうにバックスラッシュ ¥ をつけます。
2ch に書き込むとバックスラッシュと円記号がごっちゃになる気がするけど ...
337 Name: 名称未設定 [sage] Date: 2008/07/13(日) 11:39:52 ID: h5XyjEmR0 Be:
やっぱり円記号になった ...
XCode で日本語キーボードなら、Opt-円記号でやるとでる、/ と傾きが反対向きのスラッシュをつかってください。
338 Name: 335 [sage] Date: 2008/07/13(日) 11:45:34 ID: HJA7K/r+0 Be:
>>336=337
できました!
ありがとう
339 Name: 名称未設定 [sage] Date: 2008/07/13(日) 11:53:54 ID: 9BVhVzTm0 Be:
まめ知識
NSString *AAA = @"aa";
NSString *BBB = AA @"bb";

とかくと、コンパイラで自動で結合されて
NSString *BBB = @"aabb";
と同義になる
340 Name: 名称未設定 [sage] Date: 2008/07/13(日) 13:14:40 ID: u+yV8IfN0 Be:
>>339
> NSString *BBB = AA @"bb";

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

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

#define SomeString @"index.htm"

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

みたいな感じで、定義分と組み合わせると、条件によって文字を交換とかできる。
342 Name: 名称未設定 [sage] Date: 2008/07/13(日) 13:43:48 ID: u+yV8IfN0 Be:
へえ、知らなかった。
面白いね、ありがとう。
343 Name: 名称未設定 [] Date: 2008/07/13(日) 14:11:00 ID: iD5vJJHB0 Be:
age
344 Name: 名称未設定 [sage] Date: 2008/07/13(日) 14:18:31 ID: Y1Ak5AxY0 Be:
Cの文字列リテラル連結と同じ要領だな
345 Name: 名称未設定 [sage] Date: 2008/07/13(日) 22:30:18 ID: rN/PKW4q0 Be:
iCalみたいに、起動してないアプリのアイコンを書き換えるにはどうすればいいんですか?
346 Name: 名称未設定 [sage] Date: 2008/07/13(日) 22:39:15 ID: ZrJCFMn30 Be:
[[NSWorkSpace sharedWorkspace] setIcon: SomeIcon forFile: fullPath options: nil];
とかでファイルのアイコンを書き換える。みたいなのかな
347 Name: 名称未設定 [sage] Date: 2008/07/13(日) 22:41:23 ID: u+yV8IfN0 Be:
>>345
>>90
348 Name: 名称未設定 [sage] Date: 2008/07/14(月) 10:09:46 ID: nTc4Tt9A0 Be:
HMDT 3rd 本を読んでいるところです。
core data のサンプルで、3ペインのMailアプリケーションのようなサンプルがあります。
左のテーブルにMailbox、右上のテーブルにMailboxに含まれるMailのリスト、その下にメールの内容が表示されるものです。
このサンプルを使って、Mailboxを作成、Mailを複数追加。
その後、Mailをリストから削除すると、
~/LIbrary/Application Support/Mail/Mail.xml
の中に削除したMailの部分だけ残るようになってしまいます。
Mailboxごと削除してもその部分だけ残ります。
自分でデータ削除用のコードを書かなければならないのでしょうか?
それとも設定をミスってる?

環境は、Tiger + Xcode2.5 です。
ヒントだけでもお願いします。
349 Name: 名称未設定 [sage] Date: 2008/07/14(月) 11:30:23 ID: uGWsnIyx0 Be:
>自分でデータ削除用のコードを書かなければならないのでしょうか?
うん。というかハードディスク余ってるんだから、別に消さなくても ...
350 Name: 名称未設定 [sage] Date: 2008/07/14(月) 12:20:57 ID: kfMtczJR0 Be:
>の中に削除したMailの部分だけ残るようになってしまいます。
削除していないMailは消えてるの??

コアデータは(デフオだと)アプリを終了しないとXMLに書き込まれないよ。
あと、削除といってもフラグを立ててるだけかもしれないし。
351 Name: 名称未設定 [sage] Date: 2008/07/14(月) 13:02:28 ID: nTc4Tt9A0 Be:
ありがとうございます。
>>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 Name: 名称未設定 [] Date: 2008/07/14(月) 13:49:19 ID: iCe9YYmu0 Be:
>>351
見当違いかもしれないけれど、MailboxのrelationshipからだけMailを削除しているだけではないですか?

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

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

と言う事で解決致しました。
レス頂いた皆様、ありがとうございました。
354 Name: 名称未設定 [sage] Date: 2008/07/14(月) 14:01:06 ID: nTc4Tt9A0 Be:
アンカー間違えました。
351でなく >>352 です。
355 Name: 名称未設定 [sage] Date: 2008/07/18(金) 12:43:58 ID: EhXln+vS0 Be:
そういや、気がついたらxibになってたけど、awakeFromXibにはならないのか。
356 Name: 名称未設定 [sage] Date: 2008/07/18(金) 19:06:01 ID: Lq/H4W2N0 Be:
xibはビルドするとnibになるよ。
357 Name: 名称未設定 [sage] Date: 2008/07/19(土) 00:17:13 ID: OkWOTiQ/0 Be:
awakeFromDeb
358 Name: 名称未設定 [sage] Date: 2008/07/19(土) 11:34:30 ID: yEZ0hIqg0 Be:
何でもかんでも初期処理をawakeFromNibに書いて特に不具合もないのですが、
initWithなんたらに書いた方がいいんですかね?

昔はawakeFromNibがなかったからinitWithなんたらで書いてた、
なんて記事を見た記憶もあるのですが。
359 Name: 名称未設定 [sage] Date: 2008/07/19(土) 12:53:13 ID: N9OU6Tmk0 Be:
>>358
initWith... は nib から目覚めたときには呼ばれないよ。
initWith... は IB でオブジェクトをつくったときに呼ばれていることになってる。

nib につくっておいてない、自分でプログラム内でつくるオブジェクトは initWith を alloc] initWIth... ] でつくりますが。
360 Name: 名称未設定 [sage] Date: 2008/07/19(土) 13:20:13 ID: c4RN+gO80 Be:
>>358
ここらが落とし穴らしい。
http://www013.upp.so-net.ne.jp/tanken/Tanken/no4_PitfallOfNib.html
361 Name: 名称未設定 [sage] Date: 2008/07/20(日) 00:04:28 ID: OkWOTiQ/0 Be:
そうそう、awakeFromNibはクラスの実装内容によっては複数回呼ばれるんだよね
362 Name: 名称未設定 [sage] Date: 2008/07/20(日) 01:07:49 ID: 7BP6qNun0 Be:
>>358
Viewだとnibに置いた場合はinitWithCoder:が呼ばれる。
俺はnib以外で使う場合も考えて、共通の初期化メソッドを作っておいてinitWithFrame:とinitWithCoder:から呼んでる。
アウトレットを使って何かする必要があるときはawakeFromNibも使う。
363 Name: 名称未設定 [sage] Date: 2008/07/20(日) 11:04:14 ID: 3L2wlaQd0 Be:
便乗して質問

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

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

やるとしたら、そのでかいデータは別のオブジェクトにして、そのキーだけを保存すればいい。
ファイルに保存したいなら、別ファイルにするか、バンドルを使えばいい。
365 Name: 名称未設定 [sage] Date: 2008/07/25(金) 12:33:10 ID: mF3swvCE0 Be:
Youtube APIを使用してYoutube Player/Downloaderを作成しているのですが、
ダウンロード機能のAPIはなく、サイトページを受信してリンクの文字列を抜き出して
うんぬんしか方法はないのでしょうか?

抜き出しスクリプトを探すとperl、php、pythonのスクリプトはあるのですが、
objective-cで処理してるのがなさそうです。(正規表現が弱いからできないのかな?)
366 Name: 名称未設定 [sage] Date: 2008/07/25(金) 12:36:08 ID: cN0vq8T+0 Be:
まあ正規表現使わなくても NSScanner でごにょごにょやれば出来ると思いますが。面倒だけど。
NSTask で perl かなんか呼んだほうがかんたんかも。
367 Name: 名称未設定 [sage] Date: 2008/07/25(金) 15:35:45 ID: QoefX31z0 Be:
NSXML関連は?
368 Name: 名称未設定 [] Date: 2008/07/25(金) 18:05:01 ID: AYy3UwPY0 Be:
基本的な質問です
CocoaはRPGのようなゲームを作るのに向いていますか?
Macでゲーム開発するのはObj-Cでokでしょうか?
369 Name: 名称未設定 [sage] Date: 2008/07/25(金) 18:27:36 ID: AHiEGlWW0 Be:
>>368
Core AnimationとかOpenGLとかも使えるしObj-Cでおk
370 Name: 名称未設定 [sage] Date: 2008/07/25(金) 19:45:44 ID: hr980FSd0 Be:
>>368
そのゲームのスペックや内容にもよりますが、Cocoaはゲーム用のフレームワークじゃないからね。
Cocoaを使わないなら、ObjCを使うメリット半減って感じがするし。
もし、パフォーマンスを追求することになるなら、逆にObjCは不向きな気もします。

371 Name: 名称未設定 [] Date: 2008/07/25(金) 20:08:20 ID: AYy3UwPY0 Be:
アドバイスありがとうございます
RPGツクールをやっていてちょっと高度な事がやってみたくなった
程度のものですので、内容としてはまったく低レベルなものです
ドラクエみたいなのをイメージしています。他に同じような事をやってる方のサイトでも
あれば良いのですが、内容なのでまずは全体像をつかむ所から勉強してみようと思います
372 Name: 名称未設定 [sage] Date: 2008/07/25(金) 20:13:53 ID: Rns0Tosq0 Be:
>>371
ttp://www1.odn.ne.jp/horiguchi/SoftWare.html
373 Name: 名称未設定 [sage] Date: 2008/07/25(金) 23:24:46 ID: cN0vq8T+0 Be:
ゲームをつくるときは OpenGL でやるのが普通なんじゃないでしょうか。
でも、そもそもゲームの画面を表示するウインドウを表示したりとかいうあたりは
Obj-C と Cocoa でやらないといけないと思います。
(まあ Carbon +C でやってもいいけど、資料も少ないし、かえって大変だとおもう)
374 Name: 名称未設定 [sage] Date: 2008/07/25(金) 23:52:01 ID: K08YB9VO0 Be:
アクションゲームには不向きだと思うけど、CoreAnimationってそれなりにゲームに使えそうな気がするんだよね。特に、ビジュアルノベルゲームとか。Core Animationのサンプルにカードゲームはあった気がする。
375 Name: 名称未設定 [sage] Date: 2008/07/26(土) 00:39:11 ID: 5uCYidXZ0 Be:
>>370
まぁ、同じオブジェクトに同じメソッドを繰り返し呼ぶ場合には、
MethodForSelectorで関数ポインタを取得してそこから呼び出せば
速度が向上したりする。メソッドではなく関数で処理したらいい部分とかは
関数で組んでやるといいのかもね。
376 Name: 名称未設定 [sage] Date: 2008/07/26(土) 01:23:05 ID: HVS8eIt00 Be:
Pangeaがゲーム開発者向けのプログラミングガイドを公開してる。
あんまCocoaって感じじゃないけど
ttp://www.pangeasoft.net/book/index.html
377 Name: 名称未設定 [sage] Date: 2008/07/26(土) 02:12:35 ID: UyOrFXTo0 Be:
Obj-CはCも混ぜて書けるんだから、速度出したいところではどうにでもなるだろう。
378 Name: 名称未設定 [sage] Date: 2008/07/26(土) 16:15:53 ID: Hv7t3I4z0 Be:
Cocoa / Objective-C がゲームに不向きとは思えません。
Doom が NEXTSTEP で開発されたことを思い出して欲しいです。
むしろ今の環境の方がマシンパワーが上がっていて有利に思えます。
379 Name: 名称未設定 [sage] Date: 2008/07/26(土) 17:17:50 ID: pdFJtDbq0 Be:
>>365
>>366の言うようにNSTaskからLL言語を呼ぶのは楽でいいと思う。
俺も自分用の手抜きアプリとかは基本的な処理はRubyに投げてる。

正規表現なら個人的にcocoaonigurumaがおすすめ。
http://limechat.net/cocoaoniguruma/index_ja.html
380 Name: 名称未設定 [sage] Date: 2008/07/26(土) 19:06:22 ID: 7j8Urm4Q0 Be:
あと有名どころでは OgreKit ってのがあるよな。
http://www8.ocn.ne.jp/~sonoisa/OgreKit/

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

ちなみに、私自身のプログラミングスキルは、大学時代にC言語のコンソールアプリケーションをいくつか作った事がある程度で
オブジェクト指向プログラミングは先週始めたばかりです
古本屋で見つけたXcode2入門という本で一通りXcodeとInterfaceBuilderの使い方は覚えました
382 Name: 名称未設定 [sage] Date: 2008/07/26(土) 20:46:29 ID: AdlohJ0J0 Be:
>>381
ttp://www.stripe-net.jp/cocoa/products/midiwind2/index.html
ここに、MIDIプレイヤーのソースコードがあるよ。
383 Name: 名称未設定 [sage] Date: 2008/07/26(土) 21:09:06 ID: MNwjOzXJ0 Be:
>>382
ありがとうございます
読んでみます
384 Name: 名称未設定 [sage] Date: 2008/07/26(土) 21:29:04 ID: xAyOBL3b0 Be:
ttp://chiba.cool.ne.jp/exprism/other/coreaudio_doc/music_player/music_player_file1.html
385 Name: 名称未設定 [] Date: 2008/07/27(日) 00:14:58 ID: vnIR5zO10 Be:
質問です。
SDKのOpenGLのサンプル
/Developer/Examples/OpenGL/Cocoa/CocoaGL
で、C++のコードを追加しようと思い、
Foo.cpp, Foo.h
を追加して、
空のクラスを追加したのですが、コンパイルエラーが2000個近く出てしまいました。

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

新規プロジェクトでCocoaアプリケーションやiPhoneのプロジェクトを作成した場合は、同様の事がうまくいくのですが・・・。
386 Name: 名称未設定 [sage] Date: 2008/07/27(日) 00:26:56 ID: CKmeY8Xx0 Be:
あまり詳しくは分からないけれども…
こういうのが参考になれば。

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

388 Name: 名称未設定 [sage] Date: 2008/07/27(日) 00:52:35 ID: QkLCg1mE0 Be:
>>385
根本的な解決にならんかもしれんが拡張子をcppからmmに変える
389 Name: 名称未設定 [sage] Date: 2008/07/27(日) 00:54:50 ID: CKmeY8Xx0 Be:
>>385
C++のコードを追加したとあるけれど、新しくクラスを追加という事は
ココアのクラスの中にC++のコードを組み込んだという事でしょうか。
もしそうであるなら、拡張子をmにしてみるとか。
390 Name: 名称未設定 [sage] Date: 2008/07/27(日) 01:04:35 ID: vnIR5zO10 Be:
みなさん、レスありがとうございます。
>>387さん
ごもっともです。すみません。ただ、2000個近くあるので、どれをどう説明すればいいか・・・

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

>>389さん
いえ、単に.cppと.hをプロジェクトに追加しただけです。Cocoaのクラスに直接干渉させるようなことはしていません。
追加した.cppをビルドの対象から外すと、問題なくビルドが通ります。
391 Name: 名称未設定 [sage] Date: 2008/07/27(日) 01:25:55 ID: G0AeuOUq0 Be:
ビルドのオプションじゃない
392 Name: 名称未設定 [sage] Date: 2008/07/27(日) 01:34:32 ID: QkLCg1mE0 Be:
>385
新規ファイル追加でtest.pchを作る
test.pch
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

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

書いてて内容が良くわかってないから
Developerからコピーしてからやってみて
393 Name: 名称未設定 [sage] Date: 2008/07/27(日) 01:58:17 ID: 0Z6SChht0 Be:
>ごもっともです。すみません。ただ、2000個近くあるので、どれをどう説明すればいいか・・・
まずいちばん最初から5つぐらいのエラーを教えてください。
後ろのほうのエラーは単に前のほうのエラーでコンパイラが混乱して
変なことをいってるだけのことが多いです。
394 Name: 392 [sage] Date: 2008/07/27(日) 01:58:29 ID: QkLCg1mE0 Be:
サンプルコードのPrefix Headerに$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h
が書いてあってcppファイルの時でもObjective-cのコードが関係してきてコンパイルエラーが出てるっぽい
そのパスを削除するだけでビルドできる様になったが、Prefix Headerはコンパイル時間を高速化するだけで
無くても問題なし?
395 Name: 名称未設定 [sage] Date: 2008/07/27(日) 07:59:45 ID: dQ9C+Nti0 Be:
「全角で書いてました」とかだったら大笑い
396 Name: 名称未設定 [sage] Date: 2008/07/27(日) 09:24:26 ID: mkJjDbWC0 Be:
>>393
たんにC++コードに誤りがあるってことはないよね?
397 Name: 名称未設定 [sage] Date: 2008/07/27(日) 10:57:21 ID: DcKmiVLG0 Be:
>>394
>無くても問題なし?

なし。というかエラーがでなくなることがまずは重要。
もしその推測が正しいなら、ビルドの設定でコンパイラのデフォルトの言語を
Objective-C++にしてもいいかもしれない。
398 Name: 名称未設定 [sage] Date: 2008/07/27(日) 11:41:37 ID: C9Bb+G9B0 Be:
手元にXcodeの2.5しかないんだけど、3.0には「Objective-CでC++デフォルトコンストラクタ/デストラクタを呼び出す」は
あったっけ?これにチェックが入ってないとC++のコードで大量にエラーが出ると思うんだけど。
399 Name: 名称未設定 [sage] Date: 2008/07/27(日) 12:04:55 ID: XmdTpJa10 Be:
3.1で Info パネルにそれに相当する項目があからさまにあるかは知らないけど、
何にせよ -fobjc-call-cxx-cdtors を指定すればいいです。
あと、べつにそのオプションをチェックしなくても、C++の文脈で
default constructor / destructor が呼ばれなくなるわけじゃなくて、
そのオプションは、Obj-C のクラス内にメンバ変数として
C++ のクラスのインスタンスを置いたときに、
alloc init 時にそれらのコンストラクタを
呼ばせるためのオプションなので、滅多に関係ない気がします。
というか @class 内に C++ のクラスのポインタで無いインスタンスを置くなと。
400 Name: 名称未設定 [] Date: 2008/07/27(日) 16:18:25 ID: n359+EOk0 Be:
さっき書き込んだのに反映されなかったのでもう一回。

NSTableViewで選択されたアイテムを表示する時に、
ハイライトじゃなくて下線で提示してあげるようにしたいんですが、
どうしたらいいでしょうか?
具体例あげるとこんな感じです。
ttp://www.h5.dion.ne.jp/~akt/afxss/afxss_b1.png
(現在選択されているアイテムが下線、選択済みアイテムがハイライトされてるやつ)
401 Name: 名称未設定 [sage] Date: 2008/07/27(日) 16:27:53 ID: MVJct1Bk0 Be:
似たようなプログラムを組んだ事がある。確か…
NSTableViewのサブクラスを作って、
- (void)drawRect:(NSRect)frameRect;
をオーバーライド。選択しているときに下線を引くようにする感じだったかな。
選択しているときのデフォルトの色が反映されたりちょっと苦労した記憶あり。
402 Name: 390 [sage] Date: 2008/07/27(日) 17:36:13 ID: vnIR5zO10 Be:
>>392さん
>>394さん
ご指示の方法でこちらでもうまく行きました。ありがとうございます!
その他の方々も、助けていただいてどうもありがとうございました。
精進します。
403 Name: 400 [sage] Date: 2008/07/27(日) 18:32:55 ID: n359+EOk0 Be:
>> 401
オプションとかで切り替えられるわけじゃなくて、
ハイライトさせてるメソッドをオーバーライドして、
そこで自分でセルの内部にdrawLine()するんですね。
助かりました。どうもありがとうございます。
404 Name: 名称未設定 [sage] Date: 2008/07/27(日) 18:51:41 ID: hII6V1eF0 Be:
提示してあげるようにしたい
405 Name: 名称未設定 [] Date: 2008/07/29(火) 13:56:26 ID: yPUrLNpI0 Be:
Xcode 3.1です。

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

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

http://wktk.vip2ch.com/vipper91279.png
406 Name: 名称未設定 [sage] Date: 2008/07/29(火) 15:28:44 ID: a9APv9gE0 Be:
>>405
もう3.1の話をしても良いんだっけ?
407 Name: 名称未設定 [sage] Date: 2008/07/29(火) 16:42:26 ID: +WtQKlmJ0 Be:
3.1はリリースされてる
408 Name: 名称未設定 [sage] Date: 2008/07/29(火) 16:50:05 ID: ufYnqxk40 Be:
>>405
IBで何か設定していませんか?
delegateで設定したものと、IBで設定したものの和が表示されますよ。
409 Name: 名称未設定 [sage] Date: 2008/07/29(火) 17:52:26 ID: yPUrLNpI0 Be:
>>408
NSToolbarのインスタンスはIBにて作成しています。
どこに設定があるのでしょうか…
410 Name: 名称未設定 [sage] Date: 2008/07/29(火) 18:45:42 ID: yPUrLNpI0 Be:
NSToolbarはIB使わず作った方がいいのかな…
もう限界orz
411 Name: 名称未設定 [sage] Date: 2008/07/29(火) 18:56:17 ID: yPUrLNpI0 Be:
IBでもとから入っていたNSToolbarItemをいったん抹消した後LibraryからD&Dしたら解決しました。

なんだろこの仕様…
3時間の苦労…
412 Name: 名称未設定 [sage] Date: 2008/07/29(火) 19:10:24 ID: zz+wWVx50 Be:
たまにタコな動きするからクリーンとかIBを手動で保存とか
コネクションし直しとか、あまりXcodeを信用しないほうがいいよ。
413 Name: 名称未設定 [sage] Date: 2008/07/29(火) 20:53:04 ID: gygQrOlO0 Be:
クリーンはよく分かる
IBの変更の反映ってちょっと遅いもんね
414 Name: 名称未設定 [sage] Date: 2008/07/30(水) 12:42:42 ID: iYUCSHAp0 Be:
あーもうコード書くの面倒臭くなってきた。
アップルの自社製品のUIはやたらと凝ってるし
それに似てないとみんな「○○みたいには出来ないんですか?」と
納得しないし。
415 Name: 名称未設定 [sage] Date: 2008/07/30(水) 13:25:04 ID: FLlKvH4q0 Be:
IBはCmd-0でアウトライン表示にするとレイヤー選択するの楽。
416 Name: 名称未設定 [sage] Date: 2008/07/30(水) 19:41:26 ID: pk8mMrnG0 Be:
すいません、お尋ねしたい事があるのですが・・・

FoundationやAppKitには、Windowsで言うところの「GetTickCount()」のような内部カウントを取得する関数って無いんでしょうか?
色々と探してみたのですが、どうにも見つからなくて・・・・・・
417 Name: 名称未設定 [sage] Date: 2008/07/30(水) 19:45:42 ID: ze87ztrh0 Be:
普通にBSD系関数使えば?
418 Name: 名称未設定 [sage] Date: 2008/07/30(水) 20:59:44 ID: 0xFujw9p0 Be:
>>414
似せて作る要望がそんなに強いのか…。
機能がまずは大事だろうし、気が向いたらビジュアルを作り込む
位の心意気でいいと思うよ。肩の力を抜こう
419 Name: 名称未設定 [sage] Date: 2008/07/30(水) 21:03:37 ID: PepTTP7Q0 Be:
mach_time.h
420 Name: 名称未設定 [sage] Date: 2008/07/30(水) 21:08:54 ID: R/hoyucI0 Be:
ソフトを使う人はプログラマじゃないのでUIも非常に大事だと思いますよ
あとMacを普段触ってる人ならOSXライクなUIにすることでおのずと操作性も上がると思います
421 Name: 名称未設定 [sage] Date: 2008/07/30(水) 21:46:53 ID: K7PGsPzy0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/07/30(水) 22:27:43 ID: PepTTP7Q0 Be:
>>421
返ってくるオブジェクトが、シングルトンでないかぎりautoreleseされてると思う。

423 Name: 名称未設定 [sage] Date: 2008/07/30(水) 22:32:37 ID: elk3Szvx0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/07/30(水) 23:19:27 ID: qC4aLLnW0 Be:
自作のFrameworkに含まれるMyButtonとかMyObjectとかを、
Frameworkを利用したい別プロジェクトのIB上でボタンとかオブジェクトに割り当てて置いておくことってできないのでしょうか?
425 Name: 421 [sage] Date: 2008/07/30(水) 23:33:25 ID: K7PGsPzy0 Be:
>>422
>>423
なるほど勉強になります。
ヒレガス本を見てたらP59にreleaseに関する規則が書いてありました。
古いせいかnewではじまるものは書いて無かった。Xcodeですらないし。

>>421のNSTimeIntervalなんですがドキュメントにはsub-millisecondという単語が出てくるんで
精度はサブミリ秒なんでしょうが、サブミリ秒が10ミリ秒なのか、100ミリ秒なのかその他かは解らんです。
426 Name: 名称未設定 [sage] Date: 2008/07/31(木) 00:39:45 ID: LTCTNNkm0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/07/31(木) 00:51:04 ID: kJOPwvi90 Be:
>>426
それでは、[pool release] で test が release されていた場合に、
次の [test retainCount] でクラッシュする可能性がありますぜ。
せめて NSString* test= [[NSString stringWithString:@"a"] retain];
ぐらいしておかないと。

あと、NSString* は激しく最適化されてるから、
test で何がかえってくるか定かでないよね。
NSConstantString である @"a" が、
retain autorelease されて返ってきても、
retain も autorelease もされずに返ってきても文句は言えない ...
428 Name: 名称未設定 [sage] Date: 2008/07/31(木) 00:57:12 ID: LTCTNNkm0 Be:
>>427
おおそうであった。指摘ありがとう
NSAutoreleasePoolを使う事で一時的オブジェクトである事を確認できる事を考えてて
コーディングが甘くなってたわ。いかんいかん
429 Name: 416 [sage] Date: 2008/07/31(木) 11:52:05 ID: HINI5QGu0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/07/31(木) 19:12:12 ID: jV7NgTse0 Be:
copyWithZoneって何ですか?
これを入れたら落ちなくなるおまじないだと思ってるのですがw
431 Name: 名称未設定 [sage] Date: 2008/07/31(木) 19:14:27 ID: RPCi2OoE0 Be:
じゃあ、そうなんじゃね?
432 Name: 名称未設定 [] Date: 2008/07/31(木) 19:25:16 ID: ykkdbxuS0 Be:
たまには上げるかな。

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

呼び出したらretainが一回入ってるので所有権に注意。
433 Name: 名称未設定 [sage] Date: 2008/07/31(木) 20:49:52 ID: HcoTC4VH0 Be:
>>424
もちろんできます。
434 Name: 名称未設定 [sage] Date: 2008/07/31(木) 21:04:07 ID: 52Jq8wko0 Be:
そういやIB3のライブラリに独自GUI部品追加するのってどうやるんだろ
IB2ではNIBプラグインかなにか入れてた気がするがあれはもう使えんよな
435 Name: 名称未設定 [sage] Date: 2008/07/31(木) 21:12:34 ID: NGJ8irep0 Be:
>>433
自己解決しました、どうも
436 Name: 名称未設定 [sage] Date: 2008/07/31(木) 21:28:55 ID: HcoTC4VH0 Be:
>>434
ibplugin に変わりました。
Cocoa Bindings使いまくり。
437 Name: 名称未設定 [sage] Date: 2008/07/31(木) 23:31:16 ID: XcF0aGMT0 Be:
>>431-432
なんとなくわかりました。
ありがとうございました。
438 Name: 名称未設定 [sage] Date: 2008/08/01(金) 00:46:32 ID: OOXSlUhh0 Be:
>>437
質問の背景がよくわかりませんが、例えばNSTableColumnの
dataCellはデータの増減によってコピーされます。
copyは実際はcopyWithZone:NULLが送信されています。

一例としてSample programのSourceViewのImageAndTextCellの
- (id)copyWithZone:(NSZone*)zoneをコメントアウトすれば、
super classにcopyWithZone:が送信されるため
imageが存在しないので、クラッシュするのは当然のことです。
439 Name: 名称未設定 [sage] Date: 2008/08/01(金) 08:11:32 ID: fh38Gufg0 Be:
>>438
>Sample program
突然何の sample program の話をしてるの?
440 Name: 名称未設定 [sage] Date: 2008/08/01(金) 09:33:55 ID: WJ5RtYj10 Be:
読み取れ
441 Name: 名称未設定 [age] Date: 2008/08/01(金) 15:30:22 ID: BstKir2w0 Be:
Xcode3.1でソースの一番下までスクロールした状態でコード補完させると、勝手に上へ数行スクロールするようになりました。
原因わかる人教えてくれ。

Xcodeスレは1000目前にしてDAT落ちしたね。
442 Name: 名称未設定 [sage] Date: 2008/08/01(金) 19:35:17 ID: HAWlbAH/0 Be:
xcodeスレ落ちた
だれか次スレおね
443 Name: 名称未設定 [sage] Date: 2008/08/01(金) 22:37:42 ID: E0l24OCW0 Be:
>>442
いらないでしょ
444 Name: 名称未設定 [sage] Date: 2008/08/02(土) 00:45:45 ID: flpSDaAS0 Be:
そんなに分類する必要ないでしょ
Carbonスレも最近立ってるけど、Mac開発全般1スレだけで良さげ
445 Name: 名称未設定 [sage] Date: 2008/08/02(土) 19:18:50 ID: DWJNDgjK0 Be:
質問です
NSResponderの
- (BOOL)performKeyEquivalent:(NSEvent *)anEvent メソッドを上書きしてキーを押したときのNSEventの中身を調べていました。
シフトやオプションを押しながらキーを押すと当然modifireFlagsの値は変わるのですが、
なぜかウィンドウのcontentViewをクリックした後とタイトルバーをクリックした後でも値が変わってしまいます。
Modifier FlagsのMaskについてもドキュメントを参照したのですが、なぜこの2通りのときで値が変わるのか、modifireFlagsに何が入ってているのか分かりませんでした。
どういったことでこの違いが起きているのでしょうか?

サンプルプロジェクトを上げたのでよろしければ見てください。
http://mac.hitobashira.org/up/src/maka0081.zip
446 Name: 名称未設定 [sage] Date: 2008/08/02(土) 19:56:25 ID: z2jGhNS/0 Be:
確かに、1 << 8 値が変わるな。
447 Name: 名称未設定 [sage] Date: 2008/08/02(土) 20:45:44 ID: DWJNDgjK0 Be:
内部的な何かの処理のなのでしょうか。
とりあえずその部分を無視しようと以下を追加しました。

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 Name: 421 [sage] Date: 2008/08/02(土) 20:46:57 ID: wMjpltPb0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/08/02(土) 20:51:25 ID: DWJNDgjK0 Be:
if (flag & 1 << 8) mask -= 1 << 8;
をしなくても
[self keyEquivalentModifierMask] == mask
の演算子をいじるだけで同じ働きができたりしないでしょうか?
450 Name: 名称未設定 [sage] Date: 2008/08/02(土) 20:53:41 ID: DWJNDgjK0 Be:
>>448
調査ありがとうございます。
じっくり読ませていただきます。
451 Name: 名称未設定 [sage] Date: 2008/08/02(土) 21:02:34 ID: wMjpltPb0 Be:
>>448
名前が残ってた
>>450
多分何も関係ないからさらっと流しといてください
452 Name: 名称未設定 [sage] Date: 2008/08/02(土) 21:18:52 ID: nCOEhJZL0 Be:
>>447
マスクなんだから
if ([[self keyEquivalent] isEqualToString:key] && ([self keyEquivalentModifierMask] & mask)) {
とすればよいと思いますが?
Testing for Event Type and Modifier Flags
http://developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/EventHandlingBasics/chapter_4_section_5.html#//apple_ref/doc/uid/10000060i-CH5-SW16
453 Name: 名称未設定 [sage] Date: 2008/08/02(土) 21:44:03 ID: DWJNDgjK0 Be:
>>451
読んでみたところペンタブだと現象が起きないということですね。
>>452
試してもらえば分かると思いますが、それではうまくいかなかったのです。
サンプルプロジェクトに書いたように
if (flag & NSShiftKeyMask)
if (flag & NSCommandKeyMask)
で一つ一つのflagの有無はチェックできるのですが、
if ([self keyEquivalentModifierMask] & flag)
では
[self keyEquivalentModifierMask]が設定されてないと常にNOを返してしまうようです。

ちなみに>>447のコードのmaskのとこはflagでした、すいません。
454 Name: 名称未設定 [sage] Date: 2008/08/02(土) 21:53:02 ID: VyG5QnCh0 Be:
>>453
マスクとビット演算のこと分かってないんじゃないかな。
if ([self keyEquivalentModifierMask] & flag) で[self keyEquivalentModifierMask]が0だったらNOなのは当然でしょ。
455 Name: 名称未設定 [sage] Date: 2008/08/02(土) 21:59:40 ID: wMjpltPb0 Be:
>>453
結局何をしたいのか具体的に書いてみてはいかがでしょうか
わかってないのは自分だけ?
456 Name: 名称未設定 [sage] Date: 2008/08/02(土) 22:00:20 ID: DWJNDgjK0 Be:
>>454
すいません、正直ビット演算はまだ理解が浅いですが、
上記の例で当然0になるという点は理解しています。
「返してしまうようです」という書き方は不適切でした、すいません。
>>447の例を最適なコードにするにはどうしたら良いでしょうか?
457 Name: 名称未設定 [sage] Date: 2008/08/02(土) 22:05:27 ID: wMjpltPb0 Be:
>>456
自分には難しそうです、何かわかればまた書きます
458 Name: 名称未設定 [sage] Date: 2008/08/02(土) 22:13:04 ID: VyG5QnCh0 Be:
>>456
いやそもそも何をしたいのかがさっぱり分からん。
単に修飾キーを判定したいだけならこんなごちゃごちゃ書く必要ないじゃん。
459 Name: 名称未設定 [sage] Date: 2008/08/02(土) 22:51:20 ID: DWJNDgjK0 Be:
ことの発端は>>445です。
修飾キーの判定には先に挙げたような
if (flag & NSShiftKeyMask)
といったものが使えます。
しかし特定の修飾キーに関してではなく、ここでのselfにあたるオブジェクトに設定された修飾キーと同じかどうか(もしくは全て含むかどうか)を判定しようとしたところ、
Modifire Flagsのドキュメントに載っていない 1 << 8 という値が飛んできて、しかもそれが特定の条件化で来たり来なかったりといったところで、どうしようかとなったわけです。
条件が分かればそこをチェックしてFlagの判定に組み込めばいいのですが、
ここまでの流れはそのFlagをどう無視するかというものでした。
例えば、
if (flag & NSShiftKeyMask)
if (flag & NSCommandKeyMask)
などすべて列挙していって、ドキュメントに書かれていない例外的なFlagを無視することもできます。
これは>>447の方法よりコードの信頼性は高いと思いますが、非常にアナログな手法で、もっとスマートにフラグの判定をできないかと思った次第です。
460 Name: 名称未設定 [sage] Date: 2008/08/02(土) 23:10:55 ID: VyG5QnCh0 Be:
>>459
今一よく分からんが、「selfにあたるオブジェクトに設定された修飾キーと同じかどうか(もしくは全て含むかどうか)を判定」
すればいいのね?だったら>>447
if ([self keyEquivalentModifierMask] & [anEvent modifierFlags]) {
return YES;
}
でいいじゃん。あ、上のコードは修飾キーだけの判定ね。
461 Name: 名称未設定 [sage] Date: 2008/08/02(土) 23:33:50 ID: VyG5QnCh0 Be:
>>460
間違えた。全ての修飾キーが一致しないとダメなんだったか。>>460だとどれか一つ一致すればYESになるね。
([self keyEquivalentModifierMask] == [self keyEquivalentModifierMask] & [anEvent modifierFlags])
でどうかしら。
462 Name: 名称未設定 [sage] Date: 2008/08/02(土) 23:38:24 ID: LU27e+rr0 Be:
>>461
== のが & より優先度が高いから括弧がいると思う


参考までに例外的なフラグを削除するなら
flag = flag & NSDeviceIndependentModifierFlagsMask;
で出来ると思う
OS X 10.4以上で動くはず
463 Name: 名称未設定 [sage] Date: 2008/08/02(土) 23:46:05 ID: DWJNDgjK0 Be:
やはりうまくいきません、、
またサンプルプロジェクト上げてみます。
良かったから動作を確認してください。
http://mac.hitobashira.org/up/src/maka0083.zip
実際に正しくkeyEquivalentとkeyEquivalentModifierMaskが設定されているのはIBでRunしてみて確かめてみてください。
464 Name: 名称未設定 [sage] Date: 2008/08/02(土) 23:47:24 ID: DWJNDgjK0 Be:
NSDeviceIndependentModifierFlagsMaskチャレンジしてみます。
465 Name: 名称未設定 [sage] Date: 2008/08/02(土) 23:55:12 ID: DWJNDgjK0 Be:
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 Name: 名称未設定 [sage] Date: 2008/08/03(日) 00:00:38 ID: wEE2HMGo0 Be:
>>465
それは良かった。
けど>>463のプロジェクト、俺の環境だと修飾キー関係なくて[self keyEquivalent]がそもそも空文字列だ…
467 Name: 名称未設定 [sage] Date: 2008/08/03(日) 00:03:42 ID: pibjA2T20 Be:
なぜでしょう、、
IBのバージョンとかかも知れません。プロジェクトファイルはXcode3.1とIB3.1で作りました。
IBでkeyEquivalentを設定しなおしてみてはどうでしょうか?
468 Name: 名称未設定 [sage] Date: 2008/08/03(日) 00:17:44 ID: wEE2HMGo0 Be:
>>467
ごめん一番左上のボタンの動作をデバッグで拾ってただけだった。
で、>>461+>>462だと、修飾キーが一つも合ってないときに修飾キー無しのボタンがヒットするのね。
確かにこの使い方には>>465の方がいいかも。
469 Name: 名称未設定 [sage] Date: 2008/08/04(月) 20:55:09 ID: wOXqnMoB0 Be:
時々、QuickTimeの「MPEG-4の書き出し」に似たウィンドウをQuickTime以外のアプリでも見かけるのですが、QTKit等から呼び出し可能なのでしょうか。
もし呼び出す関数をご存知の方いましたら教えていただけるとうれしいです。
470 Name: 名称未設定 [sage] Date: 2008/08/04(月) 21:15:01 ID: /6xN6LzP0 Be:
これのことかな
http://www.cocoadev.com/index.pl?QTMovieExportSettings
471 Name: 名称未設定 [sage] Date: 2008/08/05(火) 16:13:50 ID: z6ApOwxE0 Be:
>>470
ありがとうございます。
472 Name: 名称未設定 [sage] Date: 2008/08/05(火) 22:21:42 ID: hNnXXyWp0 Be:
バインディングの勉強をしています。

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 Name: 名称未設定 [sage] Date: 2008/08/05(火) 22:47:50 ID: b3PgxnPw0 Be:
>>472
+ボタンとArrayControllerの間にお手製のコントローラを挟んで、(or ArrayControllerをサブクラス化して)
その中で- [NSTableView editColumn:row:withEvent:select:]を呼んであげる。
474 Name: 名称未設定 [sage] Date: 2008/08/06(水) 13:40:02 ID: Qhr+d9FS0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/08/06(水) 17:11:45 ID: /qnHPC400 Be:
PanelにTableViewを表示させてフォーカスがTableViewのままの状態で
Panelを閉じて、Panelをreleaseすると落ちてしまうんだけど(release when
closedは当然OFF)、これを回避出来る方法ってない?
476 Name: 名称未設定 [sage] Date: 2008/08/06(水) 17:44:27 ID: nt4PhBNc0 Be:
それでは落ちない
別のとこに原因がある
477 Name: 名称未設定 [sage] Date: 2008/08/06(水) 17:54:53 ID: +eUHJTWc0 Be:
>>475
release後にpanelに配置したviewにアクセスしておらぬか?
478 Name: 名称未設定 [sage] Date: 2008/08/06(水) 18:02:41 ID: /qnHPC400 Be:
>>477
手順としては

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

...
...

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

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

とやってるので、Panelをcloseした後にreleaseしてるんだけど・・・
479 Name: 475=478 [sage] Date: 2008/08/06(水) 18:07:39 ID: /qnHPC400 Be:
さらに補足すると
他のアイテム(例えばテキストフィールド)にフォーカスがある時は問題ないけど
TableViewにフォーカスがある時はcloseしてreleaseすると落ちてしまう。
う~~~~ん・・・わからん。
480 Name: 475=478 [sage] Date: 2008/08/06(水) 18:15:13 ID: /qnHPC400 Be:
スレ汚しすまん。

落ちるというのは不正確だった。アプリ単独で起動した場合は落ちるわけでは
ないのだけど、Xcodeから起動して、上の動作をさせると必ずgdbに落ちてしまう
わけ。問題ないんだろうか?
481 Name: 名称未設定 [] Date: 2008/08/06(水) 19:14:06 ID: KUMdV5hV0 Be:
Xcode 3.1/Mac OS 10.5.4(intel)です。
[NSToolbarのインスタンス items];で、"現在ツールバーに表示されている"NSToolbarItemの配列が取得できますが、
ツールバーに現在表示されているアイテムだけでなく、「ツールバーのカスタマイズ」より追加登録可能なアイテムを含めたNSToolbarItemの配列を取得するには、どうすれば良いのでしょうか。
482 Name: 名称未設定 [sage] Date: 2008/08/06(水) 20:23:43 ID: rahF98Ee0 Be:
>>478
そのテーブルのバインディング関係じゃない??
XXXPanel がリリースされてるのに、バインディングがまだいきているとか
483 Name: 名称未設定 [sage] Date: 2008/08/06(水) 20:38:30 ID: 3rQXNAm80 Be:
だいたいこの手のトラブルはショボいミスの場合が多いので、
質問者は連投して「俺はミスっていない」な意識を高める方向に向かわず
もう一度、基本的なことを見直してみよう。
484 Name: 472,474 [sage] Date: 2008/08/06(水) 20:55:07 ID: Qhr+d9FS0 Be:
誰も気にしてないと思いますが一応報告を
>>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 Name: 475=478 [sage] Date: 2008/08/06(水) 22:22:43 ID: HSfKqTVZ0 Be:
>>482
いや、バインディグは使ってないよ。昔ながらのアウトレット。
dataSourceとdelegateしか繋いでいない。
そもそも何でTableViewにフォーカスがある時だけgdbに落ちるのかが不明。
486 Name: 名称未設定 [] Date: 2008/08/06(水) 22:28:21 ID: zXFgswAj0 Be:
>>485
落ちる時のコンソールに多分重要なヒントがあると思う
487 Name: 名称未設定 [sage] Date: 2008/08/06(水) 23:07:33 ID: OhKiyj2A0 Be:
だから、そういう時は環境変数で
NSZombieEnabled=YES
だってば。
488 Name: 名称未設定 [sage] Date: 2008/08/07(木) 06:45:41 ID: ui9Vt5Jh0 BE:45163627-2BP(193) Be:
>>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 Name: 名称未設定 [sage] Date: 2008/08/07(木) 09:28:04 ID: xPWZJ9zS0 Be:
すっごく適当でいうけど、
performSelector一発でなおる症状だったりしない?
遅延実行って結構効果あるよ
490 Name: 名称未設定 [sage] Date: 2008/08/07(木) 09:30:22 ID: xPWZJ9zS0 Be:
ごめん、performSelector:withObject:afterDelay: ね
491 Name: 名称未設定 [sage] Date: 2008/08/07(木) 11:44:51 ID: yEGuwUG30 Be:
CALayerに対するマウスイベントってどうやったら取得できますか?
mouseDown:みたいなメソッドがないみたいなんですが。
492 Name: 472,474,484 [sage] Date: 2008/08/07(木) 15:43:33 ID: mxgwQ2up0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/08/07(木) 20:23:39 ID: CLgEx8bF0 Be:
>>491
マウスイベントなどは、NSView側で受けるしかありません。
そのあと、CALayerクラスのconvertPoint:fromLayer:とか、hitTest:とか、containsPoint:とかを使って、どのレイヤーでマウスダウンが発生したか調べてください。
494 Name: 名称未設定 [sage] Date: 2008/08/07(木) 21:40:24 ID: nTPSYr960 Be:
できる限りageて質問してねっ♪
495 Name: 名称未設定 [] Date: 2008/08/07(木) 21:41:32 ID: 342M26uQ0 Be:
よっしゃ
496 Name: 名称未設定 [sage] Date: 2008/08/07(木) 22:47:33 ID: yEGuwUG30 Be:
>>493
マジっすか…ありがとうございます
497 Name: 名称未設定 [] Date: 2008/08/08(金) 01:16:25 ID: AB93afjr0 Be:
>>481は無理なのかなぁ…うぅむ
498 Name: 名称未設定 [sage] Date: 2008/08/08(金) 01:23:04 ID: ldE4dOQI0 Be:
>>497
俺は古い人間なので、ツールバーはIBじゃなくてdelegate使って作ってる。
その方法だとデフォルトのアイテムも、カスタマイズで追加可能なアイテムも、選択可能なアイテムも全てコードで指定するので
そもそも>>481のようなことをする必要がない。
499 Name: 475=478 [sage] Date: 2008/08/08(金) 13:23:11 ID: 2adz4Skg0 Be:
>>486, 487
Xcode 3のデバッガは使いにくくなった上にデバッガ自体が落ちてダメでした。
パネルを閉じてもTableViewが生きているような・・・

結局、パネルのreleaseは@finally{}ブロックでやらずに、パネルのrelease when
closedにチェックを入れたらデバッガに落ちることはなくなりました。閉じたら
すぐにreleaseしなければいけない?
500 Name: 名称未設定 [sage] Date: 2008/08/08(金) 14:01:30 ID: TM2xaHNC0 Be:
ObjCでsuperクラスのsuperクラスを取得する場合は、どうすればよいのでしょうか?
[[super super] xxxx] という感じの事をしたいのです。
superクラスがxxxxのメソッドを間違った形で上書きしているので
どうにかしてその親のメソッドを呼びたいのです。
501 Name: 名称未設定 [sage] Date: 2008/08/08(金) 14:17:40 ID: gpx4Jprm0 Be:
ぜんぜん全く推奨しないけど、

@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 Name: 名称未設定 [sage] Date: 2008/08/08(金) 14:24:54 ID: TM2xaHNC0 Be:
おおっありがとうございます。
早速試してみます。
503 Name: 名称未設定 [sage] Date: 2008/08/08(金) 14:40:30 ID: OmgHIQjD0 Be:
そんなのできるんですか、、
知らなかったから同じような状況の時、目的のクラスの機能を全部実装してたorz
504 Name: 名称未設定 [sage] Date: 2008/08/08(金) 20:23:36 ID: AB93afjr0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/08/08(金) 20:24:12 ID: AB93afjr0 Be:
訂正
全部のツールバー>全部のツールバーアイテム
506 Name: 名称未設定 [sage] Date: 2008/08/08(金) 21:01:33 ID: OmgHIQjD0 Be:
あのさ、IBにあるデフォルトに[[toolbar items] count]したら7ってでたんだけどさ、
これって追加可能な全部のツールバーアイテムじゃないのか
507 Name: 名称未設定 [sage] Date: 2008/08/08(金) 21:07:30 ID: OmgHIQjD0 Be:
あのさ、IBにあるデフォルトのToolBarに
です
508 Name: 名称未設定 [sage] Date: 2008/08/08(金) 23:19:29 ID: uUlYMw0W0 Be:
>>507
「あのさ」は必須なわけねw
509 Name: 名称未設定 [sage] Date: 2008/08/09(土) 01:24:58 ID: L1OiMG2b0 Be:
>>506
ツールバーカスタマイズして表示項目減らしてためしてみればわかると思うよ
510 Name: 名称未設定 [sage] Date: 2008/08/09(土) 01:52:31 ID: L1OiMG2b0 Be:
>>506のために
http://wktk.vip2ch.com/dl.php?f=vipper93667.zip
511 Name: 名称未設定 [] Date: 2008/08/09(土) 13:29:19 ID: 8bEhkL+N0 Be:
>>507
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
使った事がないけど、この辺のインスタンスメソッドで引っぱりだせないかな
512 Name: 名称未設定 [sage] Date: 2008/08/09(土) 13:36:24 ID: UXDEXFyx0 Be:
>>511
それはデリゲートメソッドです
513 Name: 名称未設定 [] Date: 2008/08/09(土) 13:40:08 ID: mdpOZT3D0 Be:
>>512
NIBで作った時にはその辺も作られてるなら、動作するかもしれんがどうなのだろう。
514 Name: 名称未設定 [sage] Date: 2008/08/09(土) 15:53:44 ID: UXDEXFyx0 Be:
>>513
IBでNSToolbarを作って試してみたが、delegateは設定されてなかった。
515 Name: 名称未設定 [sage] Date: 2008/08/09(土) 15:57:51 ID: L1OiMG2b0 Be:
>>511
デリゲートメソッドの意味わかってる?
516 Name: 名称未設定 [sage] Date: 2008/08/09(土) 16:01:10 ID: L1OiMG2b0 Be:
ごめん。>>515はなかったことに
517 Name: 名称未設定 [] Date: 2008/08/10(日) 01:33:59 ID: JedI4tyI0 Be:
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でhttp://192.168.0.2にアクセスすると問題なくページが表示されます。
518 Name: 名称未設定 [sage] Date: 2008/08/10(日) 02:18:51 ID: l/HlxMYs0 Be:
9 ってことは EBADF だよね。↓ここらへんが気になるところだけど。

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

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

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

そんなもんなんですかね?
521 Name: 名称未設定 [] Date: 2008/08/10(日) 16:24:26 ID: 7bJ1GIwG0 Be:
>>520
メニューはちょっと特殊でターゲットとアクションが有効でない時には
非アクティブになるという特徴がありますね。それが効いてるのかも
522 Name: 名称未設定 [sage] Date: 2008/08/10(日) 18:08:43 ID: Kamu+JT80 Be:
なんですけど、>>520の場合でサブメニューにはターゲットアクションを繋いで
enabledも設定しているので、サブメニューが全てdisabledの場合は
メニューAもdisabledになってくれるのが理想なんですが。
523 Name: 名称未設定 [sage] Date: 2008/08/10(日) 20:24:07 ID: oKYJ5JZD0 Be:
>>520
MenuのAttributes InspectorのAuto Enables Itemsのチェック外せば良さそうな気がするけど、これだと全部のアイテムをバインディングすることになりそうだな。
524 Name: 名称未設定 [] Date: 2008/08/11(月) 16:58:09 ID: zNOsZ4Ot0 Be:
画像作成についての質問です。
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 Name: 524 [] Date: 2008/08/11(月) 18:39:45 ID: zNOsZ4Ot0 Be:
524の件、自己解決しました。bitmapFormat:に渡す
NSAlphaNonpremultipliedBitmapFormat
を|したつもりが||してました…、大反省…。
526 Name: 名称未設定 [sage] Date: 2008/08/13(水) 14:51:00 ID: RefZrw740 Be:
aviファイルからQTTimeオブジェクトを作ると、
- (QTTime) durationの位置にcurrentTimeがあったときに、
- (void) playを呼ぶと最初から再生しようとするみたいなんですが、
currentTimeがムービー長さの最後にあるときはplayを呼んでもそのまま停止にできませんか。
ループしてるのかなと思ってsetMovieAttributes:でQTMovieLoopsAttributeにNOを設定してもだめでした。
527 Name: 名称未設定 [sage] Date: 2008/08/13(水) 17:38:03 ID: 8sa2ROU+0 Be:
QTView subclassすれば?
528 Name: 名称未設定 [sage] Date: 2008/08/13(水) 19:53:13 ID: 0D3wt/zD0 Be:
サブクラス作ってplayメソッドオーバーライドして
カレントタイムがデュレーションならstopで行けるんじゃね?

ちなみにavi以外でもなると思う。
529 Name: 名称未設定 [] Date: 2008/08/13(水) 21:03:47 ID: TPb3TJ9I0 Be:
@selector( method ) と
@selector( method: )
の違いを教えてください。


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



-(id) method: (id)args

の違いと同義。
531 Name: 名称未設定 [sage] Date: 2008/08/13(水) 21:10:05 ID: TPb3TJ9I0 Be:
即答サンクス
532 Name: 名称未設定 [sage] Date: 2008/08/14(木) 00:40:48 ID: I3mEPq/b0 Be:
iPhoneの電話番号入力みたいに数字の桁が増えると
自動的に文字を小さくするようにしたいのですがTextFieldだと無理でしょうか
設定方法よろしくお願いします。
533 Name: 名称未設定 [sage] Date: 2008/08/14(木) 10:02:12 ID: X6pdong60 Be:
サブクラスを作ってdrawInteriorFrame内で文字長に応じてフォントサイズを指定したattributedstringを作成して描く。

携帯なんで綴りがあってないかも。
534 Name: 526 [sage] Date: 2008/08/14(木) 10:10:06 ID: 9goEo+k30 Be:
>>528
やっぱりcurrentTimeとdurationの比較で制御するしかないですかね。
わかりました。
535 Name: 名称未設定 [sage] Date: 2008/08/14(木) 12:40:22 ID: I3mEPq/b0 Be:
WebKitを使ってGUIを持つテキストブラウザを作成する事はできますでしょうか
もしよろしければその設定方法をお教え願います。
536 Name: 名称未設定 [] Date: 2008/08/14(木) 13:10:56 ID: zjeFy/WK0 Be:
すみませぬ、目的がはっきり見えてこないのでもう少し詳しく情報を。
537 Name: 名称未設定 [sage] Date: 2008/08/14(木) 13:13:47 ID: I3mEPq/b0 Be:
w3mやlynxの様にテキストしかロードしないようにしたいのです。
デスクトップでもテキストブラウザを使いたいと思うので。
よろしくお願いします。
538 Name: 名称未設定 [sage] Date: 2008/08/14(木) 13:38:01 ID: zjeFy/WK0 Be:
>>537
単純にテキストだけをダウンロードして表示するというのれあれば…
ターミナルでcurl -i http://~~~
などとやったりするけども、それと似たような事をしたいというのであれば
NSURLConnectionでサイトから文字データとして取得、それをそのまま
NSTextFieldに書き込み、等とするといいのかもしれません。

…という目的じゃなかったらすまぬ
539 Name: 名称未設定 [sage] Date: 2008/08/14(木) 13:40:36 ID: b1/NXUz70 Be:
css でごまかせそうな予感。
540 Name: 名称未設定 [sage] Date: 2008/08/14(木) 13:52:28 ID: I3mEPq/b0 Be:
w3mをGUIアプリケーションに移植するような感じの
アプリケーションを作りたいのです。
ボタンとかはGUIだが表示はw3mの様な感じに成っているような
541 Name: 名称未設定 [sage] Date: 2008/08/14(木) 16:59:32 ID: 4Q7QDSpl0 Be:
>>540
Cocoaはやっぱり! 出張版
CocoaアプリケーションからUNIXコマンドを呼び出して非同期で処理結果を受け取る方法を解説。 ( NSTask )
http://www.big.or.jp/~crane/cocoa/9000_mdo/MDOnline_2002.01.pdf

w3mをラップしてみたら??
542 Name: 名称未設定 [sage] Date: 2008/08/14(木) 17:30:27 ID: I3mEPq/b0 Be:
>>541
これは面白い。
他の技術にも使えそうですね!!
543 Name: 名称未設定 [sage] Date: 2008/08/14(木) 17:34:05 ID: zjeFy/WK0 Be:
おぉ、その手の事に興味がおありなら、NSWorkspaceとかも一緒に勉強してみるといいかもしれんね。
544 Name: 名称未設定 [sage] Date: 2008/08/14(木) 18:39:29 ID: bvi8a3UW0 Be:
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 Name: 名称未設定 [sage] Date: 2008/08/14(木) 20:29:20 ID: zjeFy/WK0 Be:
NSTableViewに
- (void)setNeedsDisplay:(BOOL)flag;
のメッセージを送ってみるとかどうでしょう。

546 Name: 544 [sage] Date: 2008/08/14(木) 22:21:37 ID: bvi8a3UW0 Be:
>>545
おおお、できました(・∀・)
助かりました。ありがとーございます。
547 Name: 542 [sage] Date: 2008/08/14(木) 22:49:24 ID: I3mEPq/b0 Be:
NSTaskを使おうと思ったのですが、もうなんか文法とかで突っかかり
まくり凄くへこみました。
CocoaはさっぱりどころかObjective-Cがさっぱりな状態。
Objective-Cからやり直してきます。
548 Name: 名称未設定 [sage] Date: 2008/08/14(木) 22:59:42 ID: 0uVgcEUw0 Be:
別ブロセス起動時のargmentにはchar * しか渡せないでしょうか?
NSArrayやNSDictionaryをいったんchar * にして別プロセスに渡して、別プロセスの
int main (int argc, const char * argv[]) {
}
の中でまたargv[1]とかargv[2]からNSArrayやNSDictionaryに戻すようなトリッキーな変換方法はないでしょうか?
549 Name: 名称未設定 [sage] Date: 2008/08/14(木) 23:02:58 ID: zjeFy/WK0 Be:
別プロセスにオブジェクトを渡すのに、確かNSpipeなるものが使えたと思う。
ちょっと使い方が凝ってたのでまだ勉強していない所だけれども…
550 Name: 名称未設定 [sage] Date: 2008/08/14(木) 23:37:54 ID: 0uVgcEUw0 Be:
NSPipeは別プロセスからの出力と認識していましたが、入力もできるのでしょうか?
NSConnecionも検討していたのですが、上記の件はPropertyListを使う事でできました。
今日一日飯も食わずこれで悩んでたのでこんな単純なことで解決して吊りたい気分です。
551 Name: 名称未設定 [sage] Date: 2008/08/14(木) 23:51:09 ID: zjeFy/WK0 Be:
あ、オブジェクトのやり取りの話しでしたな…
NSPipeで行けると思ったけれど、NSConnecionの方がオブジェクトのやり取り
そのものを扱ってるのでこちらがいいかと思う。
552 Name: 名称未設定 [sage] Date: 2008/08/15(金) 07:55:44 ID: hUu6QEsI0 Be:
>>548
NSProcessInfoのargumentsを使うと
起動時の引数をNSStringの配列で取得できます。

数値とか文字列のような単純なオブジェクトでないものを別プロセスと
やりとりするなら分散オブジェクトが簡単だと思います。
553 Name: 名称未設定 [sage] Date: 2008/08/15(金) 11:42:06 ID: 4CEn4cp00 Be:
おおーこれは素晴らしいものを教えていただきました。
今後のためにも分散オブジェクト勉強してみます。
554 Name: 名称未設定 [] Date: 2008/08/15(金) 14:56:24 ID: 5Ul2UCXT0 Be:
いままでCocoaをRubyCocoaで使っていましたが
Appleの解説サイトでも説明はObjectiv-Cで基本書いてあるので
Objective-Cを勉強したいと思うのですが、どのへんまでかけるように
なればCocoaに手を出せば良いのでしょうか?
Objective-Cで何でもかけるようにならないとCocoaは手を出してはいけない
のでしょうか?
よろしくお願いします。
555 Name: 名称未設定 [sage] Date: 2008/08/15(金) 15:00:45 ID: AY1CyHVW0 Be:
>>554
興味を持ったら手を出してOKだと思う。自分もそうだった
556 Name: 名称未設定 [sage] Date: 2008/08/15(金) 15:28:35 ID: 5Ul2UCXT0 Be:
>>555
そうですかありがとうございます。
興味は有るのですがObjective-Cでなにもかけないんですよね・・
例えばallocってのがなんだ?みたいな感じでして
557 Name: 名称未設定 [sage] Date: 2008/08/15(金) 15:34:32 ID: AY1CyHVW0 Be:
>>556
そのレベルでもOK w
自分も#importって何じゃ、インスタンスオブジェクトって何じゃ?
一番最初のソースって一体どこに書けばいいんじゃ?
とか最初は本気で悩んだもんだ

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

ある程度分かってくると、詳解Objective-C 2.0あたりもいいけど、まずは
基本的な所からがいいと思う。NIBで自作オブジェクトをインスタンス化して
そのIBOutletとかIBActionの接続あたりを理解できると、そこあたりが
足がかりにできるかもしれん
558 Name: 名称未設定 [sage] Date: 2008/08/15(金) 15:43:40 ID: 5Ul2UCXT0 Be:
なるほど
わかりました。何か入門に成るサイトを探してサンプルプログラムを
みてみます。ありがとうございました。
559 Name: 名称未設定 [sage] Date: 2008/08/15(金) 16:50:42 ID: OQNRRDxF0 Be:
Obj-C 1.0 だが、ADC Japan に HMDT 木下さんが講師で年に数回?やってる
Cocoa セミナーのムービーがあるよ。自分はこれで流れをつかんだ。
配布資料は Obj-C 2.0 に対応している。

ADC Japan(ココの真ん中くらい)
ttp://developer.apple.com/jp/documentation/japanese.html
560 Name: 名称未設定 [sage] Date: 2008/08/15(金) 16:56:04 ID: Cd5tTLaK0 Be:
qtmovieの任意の時間のフレームをciimageに変換したいんだけど、
NSImageをqtmovieから取得して、それをimagerepに展開してCIImageに変換するってやってんですけど。
NSBitmapImageRepを使うと物凄く時間がかかってる気がするなあ。
もうちょっと高速化できるアイデアって無いもんでしょうか。
561 Name: 名称未設定 [sage] Date: 2008/08/15(金) 17:30:28 ID: 14zwALNR0 Be:
再生中のQTMovieからカレントタイムでイメージを作成するのは遅くなるよ。
表示中のサイズが大きいと、そのサイズからイメージを作成しようとするから
メモリもバンバン食うし。
562 Name: 名称未設定 [sage] Date: 2008/08/15(金) 18:53:31 ID: 4G4XJIgf0 Be:
基本的にはMovieをInactiveにした状態で取り出すと処理が軽い、らしい。
だから、同じムービーのインスタンスを二つ作るとかどうよ。
563 Name: 名称未設定 [sage] Date: 2008/08/16(土) 00:55:19 ID: 3kV+xRqE0 Be:
Cocoaの話題でなくて恐縮ですが、CoreFoundation系のものって
CFStringRef string;
みたいに宣言しただけでは中身はNULLで、
string = "abc";
みたいにするとすでにRetainされていて、いらなくなったら
CFRelease(stringRef);
で必ず解放してやらなければならない。
CFStringRef otherStringRef = stringRef;
とした場合は stringRefだけを解放して、otherStringRefは何もしなくてOK。
と、このような認識であってますか?
もう一点、
CoreFoundationにはautorelaseがないのですが、
メソッドで返した値はメソッドで呼び出した方で解放する、ということで良いでしょうか?
Cocoaは分かるのですが、CoreFoundationはさっぱり!です。
564 Name: 名称未設定 [sage] Date: 2008/08/16(土) 01:04:52 ID: 6LGW69YZ0 Be:
>>563
基本的に = で代入するだけではretain release動作は自動ではされないはずなので、
その認識で大丈夫だとは思う…。
("abc"が定数として挙動していなければ)
565 Name: 名称未設定 [sage] Date: 2008/08/16(土) 01:08:02 ID: dit8Fbpn0 Be:
>>563
http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html
566 Name: 名称未設定 [sage] Date: 2008/08/16(土) 02:27:31 ID: q2f7W2rr0 Be:
>>563
string = "abc";
これはCFSTR("abc")じゃないでしょうか?
567 Name: 名称未設定 [sage] Date: 2008/08/16(土) 04:55:25 ID: 3kV+xRqE0 Be:
>>564
ありがとうございます。
>>565
ありがとうございます、読んでみます。
>>566
おっしゃる通りです、書いてから気付きました、、

CoreFoundationにしかない機能の一部をCocoaにラップしたframeworkを作っていて
メソッドでautoreleaseされたオブジェクトを返すにはどうしたらよいのか?
NSString * とCFStringRef とでキャストを利用した場合、
実体が返されるのか新たにキャストされた実体が作られて返されるのか?その時retain releaseはどうなっているか?
など疑問が湧いてきましたが、とりあえず後日>>565のドキュメントを読んでみます。
もう朝だ、、
568 Name: 名称未設定 [sage] Date: 2008/08/16(土) 10:13:18 ID: 37xdHDFf0 Be:
>>567
そういう用途ならautorelease使えるよ。
CFStringRef string = うんたらかんたら;
[(NSString *)string autorelease];
return (NSString *)string;
みたいにキャストしてCocoaのオブジェクトとして扱える。
キャストしただけでCocoaのオブジェクトとして使えるってことはつまり、CFString構造体こそNSStringの実体なんだけどね。
569 Name: 名称未設定 [sage] Date: 2008/08/16(土) 13:31:42 ID: dit8Fbpn0 Be:
GCを考慮するなら

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

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

*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 Name: 名称未設定 [sage] Date: 2008/08/16(土) 18:17:28 ID: ujCYt6R20 Be:
続きです
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 Name: 名称未設定 [sage] Date: 2008/08/16(土) 18:25:19 ID: Ix4Ieu5n0 Be:
>>570
項目と項目の間がスペース一つではないのかもしれないですね。
試しに
NSLog(array);
を埋め込んでおくと原因が分かるかもしれない。

そして最後にこれも必要と思う。
[list release];
[aString release];
573 Name: 名称未設定 [sage] Date: 2008/08/16(土) 19:20:10 ID: L8m/lz+K0 Be:
>>570
1.デバッガ使え
2.何故lsを使う必要があるのか分からない
3.何故NSScannerを使わないのか分からない
4.split:delimiter:の処理内容が分からない、ていうかcomponentsSeparatedByString:使えばよくね?
5.やりたいことを教えてくれたら俺が書くわ
574 Name: 570 [sage] Date: 2008/08/16(土) 19:28:17 ID: ujCYt6R20 Be:
>>572
>NSLog(array);
それはやってみましたが、きちんと文字列が入っていました。
releaseに関しては失念していました。普段c#しか使わないので...

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

やりたいことに関してですが、ファイラーを作っていて、以下の内容を取得したかったのでlsを使ってみました。
1. ディレクトリ内のファイル/フォルダの一覧
2. 作成日時
3. 種類(ディレクトリ, 実行ファイル, その他のファイル, ソフトリンク, ハードリンク)
4. パーミッション
575 Name: 名称未設定 [sage] Date: 2008/08/16(土) 19:33:24 ID: 7DkApg2H0 Be:
>>570,571,574
相当に適当に組んでみた。これを改変して意図するものができるかもしれん。

ttp://nullpo.vip2ch.com/upload.cgi?mode=dl&file=21239
DLP: cocoa
576 Name: 名称未設定 [sage] Date: 2008/08/16(土) 20:08:29 ID: /aHVNfmz0 Be:
>>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 Name: 570 [sage] Date: 2008/08/16(土) 20:09:27 ID: ujCYt6R20 Be:
>>575
わざわざ組んでいただいてどうもありがとうございます。
後で自分の書き込みを読み返してみて、デバッグの手伝いをお願いしてるみたいな感じで申し訳ないし、
そうなってしまってたらすれ違いだしで(´・ω・`)でしたが、みなさん親切な方で嬉しいです。
もうちょっと考えてから書き込むことにします。ありがとうございました。
578 Name: 570 [sage] Date: 2008/08/16(土) 20:10:44 ID: ujCYt6R20 Be:
>>576
あ、入れ違いになってしまいました。
どうもありがとうございます。参考にさせていただきます(`・ω・´)
579 Name: 名称未設定 [sage] Date: 2008/08/16(土) 20:19:25 ID: 7DkApg2H0 Be:
>>576
あっはっはw

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

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

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

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

となります。

NSTableViewのdelegateで
-(void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
[self scrollRowToVisible:[self selectedRow]];
}
と記述しても10.5ではスクロールしません。
そもそも仕様が変わったのか調べているのですが、該当記事がなさそうです。
なにかよい対処方法はありませんでしょうか?
581 Name: 名称未設定 [sage] Date: 2008/08/16(土) 20:34:23 ID: 7DkApg2H0 Be:
>>580
>NSTableViewのdelegateで
とのことなので、
[self scrollRowToVisible:[self selectedRow]];

[該当テーブル scrollRowToVisible:[該当テーブル selectedRow]];
とするとうまく行くかも
582 Name: 名称未設定 [sage] Date: 2008/08/16(土) 20:37:58 ID: oyh036pp0 Be:
>>574
> やりたいことに関してですが、ファイラーを作っていて、以下の内容を取得したかったのでlsを使ってみました。

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

583 Name: 名称未設定 [sage] Date: 2008/08/16(土) 21:31:24 ID: qw2SgueW0 Be:
元ファイルとハードリンクって区別不可能じゃね?
584 Name: 名称未設定 [sage] Date: 2008/08/16(土) 22:25:35 ID: oyh036pp0 Be:
たしかに、どちらも「本体」だからね。
2つのファイルが、ハードリンクしたものなのかどうかは、ノード番号で分かるけどね。

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

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

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

このスレの上の方でNSTaskを使う話が出ていて、
そういやMacってBSDだから、コマンド呼べばいろいろできそうだな。
お、lsとmvとcpでファイラーの基本機能ほとんどできるんじゃね?
ていうかCUIで全部できるはずだからこれでできないわけないよな。
ほとんどシェルのノリで書けばいい。余計なプログラミングしなくていいやー(・∀・)カコイイ
ってノリでどんどん書き始めたので、その辺りのクラス/メソッドをよく調べてませんでした。
もうちょっと調べてみることにします(・A・)バカマルダシカコワルイ
587 Name: 名称未設定 [sage] Date: 2008/08/17(日) 01:05:11 ID: EgIgwGXn0 Be:
>>586
ドンマイ!今回の工夫はいつか生きるさ
588 Name: 名称未設定 [sage] Date: 2008/08/17(日) 01:18:35 ID: iKet9At70 Be:
あえてls,mv,cpで作ってみるのも面白いと思うけど。
別に真っ当(?)な方法で作らなきゃいけないというわけじゃないでしょ。

ところで>>582はNSFileWrapeprじゃなくてNSFileManager?
589 Name: 名称未設定 [] Date: 2008/08/18(月) 15:22:49 ID: 3+6wulaW0 Be:
Macのプログラマ向けの案系が多く掲載されている、
受注サイトがあったら教えてもらえませんか?
590 Name: 名称未設定 [sage] Date: 2008/08/18(月) 20:12:59 ID: V7XyMSEu0 Be:
>>568
土日明けて亀レスですが有益な情報ありがとうございます。
591 Name: 名称未設定 [sage] Date: 2008/08/18(月) 21:12:35 ID: vAqeF/Jn0 Be:
>589
そんなのみたことない
592 Name: 名称未設定 [] Date: 2008/08/19(火) 15:14:40 ID: nkUn3TvL0 Be:
xcode 3.1です。
NSDate型の*x、
int型のy
がある状態で、xからy秒経過した後の時刻をNSDateで取得したいのですが、どのようにしたら良いでしょうか。
593 Name: 名称未設定 [sage] Date: 2008/08/19(火) 15:58:39 ID: kzjnsRzA0 Be:
>>592
- (id)addTimeInterval:(NSTimeInterval)seconds
594 Name: 名称未設定 [] Date: 2008/08/19(火) 17:20:56 ID: nkUn3TvL0 Be:
>>593
ありがとうございます。
595 Name: 名称未設定 [sage] Date: 2008/08/20(水) 23:24:37 ID: 2x16Koxv0 Be:
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 Name: 名称未設定 [sage] Date: 2008/08/22(金) 19:32:23 ID: m7irX9zu0 Be:
Finderからのドラッグ&ドロップで、オリジナルのviewのうえに
画像を貼付けたいのですが、viewの上にドロップした時のマウスカーソルの
位置を取得できなくて困っています。
 そういう位置はどうやって取得できるのでしょうか?
597 Name: 名称未設定 [sage] Date: 2008/08/23(土) 00:03:22 ID: i795TmKu0 Be:
>>596
[[NSApp currentEvent] locationInWindow] は使えませんか?
598 Name: 名称未設定 [sage] Date: 2008/08/23(土) 07:35:48 ID: UYIKiWXA0 Be:
早速の返信ありがとうございます。
しかし、ご指摘いただいた[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 Name: 名称未設定 [sage] Date: 2008/08/23(土) 08:34:53 ID: WscyKynU0 Be:
>>598
http://developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/chapter_5_section_4.html#//apple_ref/doc/uid/10000060i-CH6-DontLinkElementID_20
600 Name: 名称未設定 [sage] Date: 2008/08/23(土) 09:45:05 ID: UYIKiWXA0 Be:
すごく早い返信ありがとうございます。
アドレスにあったCocoa Event-Handling Guide をよんで、NSWindowのメソッドのmouseLocationOutsideOfEventStream
が使えるのではないかと思って、試した所うまくいきました

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

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

//これで、mousePointにマウスカーソルの位置がはいりました(^^)
//以下ソースコード略
601 Name: 名称未設定 [] Date: 2008/08/23(土) 15:40:16 ID: leuBXtDM0 Be:
ageですね
602 Name: 名称未設定 [sage] Date: 2008/08/24(日) 17:22:44 ID: TmR2Twjv0 Be:
>>595
年の最終週は、きっちり終わってないときは翌年のweek 1と同一視することにしているのかも。
(その方が、年をまたいで週をカウントしていく時とか矛盾が出にくいかな)
12/31がきっちり土曜で終わる1994年、2005年等では53が出る。
603 Name: 名称未設定 [] Date: 2008/08/24(日) 18:10:42 ID: 51aC4O130 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/08/24(日) 18:18:18 ID: SM8lJL4p0 Be:
http://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 Name: 名称未設定 [sage] Date: 2008/08/24(日) 18:36:36 ID: LevVSdjT0 Be:
>>604
***.xcodeprojの本窓、「グループとファイル」の中にある「Frameworks」のところで右クリック
「追加→既存のフレームワーク…」
/Developer/SDKs/MacOSX*****.sdk/System/Library/Frameworks/
の階層の中から「CalendarStore.framework」を選択し、追加する。

こちらXcode2.2のため、そのフレームワークがなかったけれど、あればそれでうまく行くはず
606 Name: 名称未設定 [sage] Date: 2008/08/24(日) 20:15:01 ID: KAJx2qMD0 Be:
そういやLeopardでXcoee2.xて行けるんですかね?
607 Name: 名称未設定 [sage] Date: 2008/08/24(日) 20:52:46 ID: OIWNP41V0 Be:
>>602,603
595です。返信ありがとうございました。

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

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

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

今週、先週といったNSPredicateを作成するコードを書いていて気づいたことです。
どうもありがとうございました。
608 Name: 604 [sage] Date: 2008/08/24(日) 21:46:39 ID: SM8lJL4p0 Be:
>> 605
お返事ありがとうございます。
ただ、今見てみたら「グループとファイル」の中の、Frameworks/Other Frameworksという階層の中に、
既にCalendarStore.frameworkがありました。
ファイルをクリックしてみたら中にCalendarStore.hというファイルがあるようなので、
これを読んでくれれば動くと思うのですが、どうもこのframeworkを無視しているようです。
609 Name: 604, 608 [sage] Date: 2008/08/24(日) 21:59:32 ID: SM8lJL4p0 Be:
あ、Releaseビルドに変更したら、やたら沢山警告が出ていますが(内容はDebug時のエラーと同じ)
とりあえずコンパイル通って実行もできました。
Debug設定ではビルドできないんですか?
610 Name: 名称未設定 [sage] Date: 2008/08/24(日) 22:11:53 ID: OIWNP41V0 Be:
>>609
それで正常動作しますか?
-eventPredicateWithStartDate:endDate:calendars:はNSPredicateではなくて
CalCalendarStoreのメソッドだし、
-saveEvent:span:error:のerrorが抜けています。

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

10.4.11 Xcode 2.5
612 Name: 604, 608, 609 [sage] Date: 2008/08/24(日) 22:40:07 ID: SM8lJL4p0 Be:
>> 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 Name: 名称未設定 [sage] Date: 2008/08/24(日) 22:55:22 ID: CnjDKOKp0 Be:
>>608
あ、いあ…
その階層にあるというだけでは駄目で、それをxcodeprojの中に登録しないといけない。
さらにはCalendarStore.frameworkの右の所にチェック(読み込ませる)を入れる必要があるけど
そこまでやってますかな?
614 Name: 名称未設定 [sage] Date: 2008/08/24(日) 23:00:26 ID: CnjDKOKp0 Be:
>>608
読み違えた…
>その階層にあるというだけでは駄目で、それをxcodeprojの中に登録しないといけない。
は無視して。
あとはチェックが入っているかどうかと、あとはもしかすると
コマンド+iで「ターゲットSDKを利用したクロス開発」で指定したSDKと、
ロードしたFrameWorkでバージョンのズレがあるとうまく行かなかったような記憶も…
615 Name: 608 [sage] Date: 2008/08/24(日) 23:24:26 ID: SM8lJL4p0 Be:
私の環境ではXcodeのグループとファイルの中の、
/SimpleCalnedar/Frameworks/Other Frameworks/CalendarStore.framework
の右にはチェックボックスは見あたりません(´・ω・`)
「情報を見る」の中の「ターゲット」内にプロジェクト名とチェックボックスがありますがこれのことでしょうか?
でもこれにはもともとチェックが入っていました。
Xcodeに対するframeworkの追加についてもう一度調べ直してみます。
お手数かけてすみません。
616 Name: HK [] Date: 2008/08/25(月) 00:55:49 ID: sH5wW6Cs0 Be:
>>604
Cocoa Break! というサイトをやってる者です。
サイトのソースの部分で、ビルドの前の注意を書いてます。
「ビルドするには、いくつかの場所で NSPredicate を CalCalendarStore に変更する必要がある。
他の警告は引数 error:nil を追加する。」
Mac OS X v10.5、3.0 段階ではこれで問題なくピルドできました。
とりあえず警告ゼロってだけですけど。
説明をするために細かく動作を見ることはしてないんで…。
617 Name: 名称未設定 [sage] Date: 2008/08/25(月) 01:03:48 ID: 0vm6OJHX0 Be:
俺もカーボンブレイク!作ろうかな
618 Name: HK [] Date: 2008/08/25(月) 01:14:38 ID: sH5wW6Cs0 Be:
追記ですが、サイトを見てもらえればわかるように、
サンプルはたまにエラーが出てビルドできないものがあります。
スクリーンショットが掲載されているものは、ビルドまでは完了してます。
とはいえ、10.4 でビルドできるものは 10.4 で確認してますが…。
また、それとは別ですが、Moriarity など OS X の古いバージョンのサンプルは、
10.5 では動作しなくなっている場合もあるので、
サンプルコードを参考にする時は注意が必要です。
619 Name: 名称未設定 [sage] Date: 2008/08/25(月) 09:56:26 ID: jTkDE9uv0 Be:
>>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 Name: 604, 608 [sage] Date: 2008/08/25(月) 11:21:47 ID: OWKKkKb+0 Be:
>> HKさん
サイト拝見しました。訂正の必要なサンプルにはコメントをつけてくださってるんですね。
すばらしいサイトを作ってくださってありがとうございます。
Cocoaの勉強に利用させていただきます。
621 Name: 名称未設定 [sage] Date: 2008/08/25(月) 20:37:27 ID: 83D/x5lc0 Be:
Moriarityは一応ビルドできて、動いた。

当方 Leo Xcode3.1
622 Name: 名称未設定 [sage] Date: 2008/08/26(火) 10:32:05 ID: CiwPWnRl0 Be:
ttp://lists.apple.com/index.html
Appleのメーリングリストの検索がおかしくなってないでしょうか?
何を検索しても何もひっかからない状態になってしまってますがうちだけでしょうか;
623 Name: 名称未設定 [sage] Date: 2008/08/26(火) 11:39:06 ID: jgEO9m2Z0 Be:
>>619
>NSCalendarのminimumDaysInFirstWeek(デフォルトは1)で、第1週を決めるようになっているみたい。

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

ところで細かいことだけど、これって素のccじゃ通らないよね?
自分のとこはXcode 3.1を入れているけどデフォのccではfor内の変数宣言でエラーになります。
もしかして環境によってはObjCもC99がデフォになるのかなと思って。
624 Name: 475=478 [sage] Date: 2008/08/26(火) 13:08:14 ID: Ag+iSJqi0 Be:
for文って条件式のところで変数の宣言をしてるとこ?
拡張子をmmにしてObjective-C++にしてんじゃないの?
625 Name: 名称未設定 [sage] Date: 2008/08/26(火) 16:10:29 ID: 2IRoqpso0 Be:
1)I.BでNSMenuのインスタンスをMenuA、MenuBと2つ作る。
2)NSMenuのサブクラスMyMenuを作り、MenuA、MenuBのカスタムクラスに設定する。

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

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

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

よろしくお願いいたします。
626 Name: 名称未設定 [sage] Date: 2008/08/26(火) 16:49:45 ID: kPx+BItI0 Be:
たぶん、すっごく勘違いしてる。
けど、通常は tag を設定する。
627 Name: 名称未設定 [sage] Date: 2008/08/26(火) 18:26:20 ID: tnusyOvp0 Be:
説明不足ですみません。

仰せの通り通常はタグを設定して判別するのですが、
I.BでNSMenuにはタグが設定出来なかったので困っている次第です。
628 Name: 名称未設定 [sage] Date: 2008/08/26(火) 18:45:23 ID: kPx+BItI0 Be:
あ、やっと大体意味が分かった。
アプローチが間違ってる。
- (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 Name: 名称未設定 [] Date: 2008/08/26(火) 22:27:36 ID: TlM0EGE00 Be:
Xcode 3.1でDocument-based Applicationを作っています。
MyDocumentクラスのmyStringをTextViewのAttributed StringにIBでbindingしているのですが、
自作のメソッドを実行するときに、myStringにTextViewの内容を反映させるにはどのようにしたらよいのでしょうか。
630 Name: 名称未設定 [sage] Date: 2008/08/26(火) 23:24:47 ID: zAbcxQXm0 Be:
myString=[TextView stringValue]ではダメ?

myString<->TextViewの双方向にバインディングするNSValueTransformerのクラスを書いて
バインディングの設定画面のvalueTransformerに定義するとか。
631 Name: 名称未設定 [sage] Date: 2008/08/26(火) 23:46:31 ID: TlM0EGE00 Be:
>>630
なるほど、バインディングは双方向ではなく片方向ずつなんですか。
myString=[TextView stringValue];
でやることにします。ありがとうございます。
632 Name: 名称未設定 [sage] Date: 2008/08/27(水) 01:08:05 ID: HG7wkgv10 Be:
>>629
myStringがNSStringならば、attributedStringにはbindできません。
NSStringをbindするならvalueとbindしなくてはいけません。
そのためには、Multiple fonts allowedをoffにする必要があります。

そうした上で、setMyString:やsetValue:forKey@"myString"を実行すればKVO(NSKeyValueObserving)が働きます。
bindingについて解説しているサイトや書籍を参照することをお勧めします。
633 Name: 名称未設定 [sage] Date: 2008/08/27(水) 01:20:18 ID: HG7wkgv10 Be:
>>629
632です。ちょっと勘違いですね。
myStringにTextViewの内容を反映させるにはコントローラにcommitEditingを送信します。


634 Name: 名称未設定 [sage] Date: 2008/08/27(水) 02:22:49 ID: wf34hNXG0 Be:
>>633
ありがとうございます。別途Controllerを作ってやる必要があるんですか。なるほど。
635 Name: 名称未設定 [sage] Date: 2008/08/27(水) 02:40:39 ID: 3tAcl1TP0 Be:
>>634
頼むからドキュメントとサンプルちゃんと見てくれ。
人に聞くのはそれからだ。
636 Name: 名称未設定 [sage] Date: 2008/08/27(水) 11:45:40 ID: prT6DVto0 Be:
アプリが大きくなってきてメインのクラスの記述が非常に多くエディットしにくい状態です。
一つのクラスを複数ファイルへ分けて記述することは可能でしょうか?可能ならどのようにすれば良いでしょうか?
637 Name: 名称未設定 [sage] Date: 2008/08/27(水) 11:49:21 ID: wuThmqJw0 Be:
>>636
カテゴリー
638 Name: 名称未設定 [sage] Date: 2008/08/27(水) 11:53:24 ID: prT6DVto0 Be:
ああ!なるほど
カテゴリって既存クラスの拡張ってイメージありましたけど、
確かに自作のクラスでも同じですよね、ありがとうございます。
639 Name: 名称未設定 [sage] Date: 2008/08/27(水) 13:13:04 ID: h/VQOtmq0 Be:
コンパイラにとって自作のクラスと既存のクラスって区別できないんじゃないかな
640 Name: 名称未設定 [sage] Date: 2008/08/27(水) 19:33:03 ID: x9/18bUo0 Be:
>>636
そのメインのクラスが、どんなものなのか知らないけど、
リファクタリングしたら、複数のクラスに分かれたりはしないかい?

641 Name: 名称未設定 [sage] Date: 2008/08/27(水) 19:55:05 ID: UdEkpoZd0 Be:
>>636
させる仕事の役割をきちんと分類し、それを別オブジェクトにするもよし、カテゴリで分割するも良し
カテゴリで分けた場合、
main+Private.h、main+Private.m
などとファイルをわけるといいです。
642 Name: 名称未設定 [] Date: 2008/08/30(土) 20:49:35 ID: hzRge4tB0 Be:
objective cでクロージャが使えるようになるらしいって、本当ですか?
643 Name: 名称未設定 [sage] Date: 2008/09/01(月) 00:08:41 ID: CKjm/P3D0 Be:
2年くらい前には10.5のObjectiveC 2.0で導入されるという噂がありました。
それのことじゃないでしょうか。
644 Name: 名称未設定 [sage] Date: 2008/09/01(月) 20:06:07 ID: k3tEwtc60 Be:
POCで使えなかったっけ?
645 Name: 名称未設定 [sage] Date: 2008/09/01(月) 23:09:28 ID: CKjm/P3D0 Be:
>>644
そうみたい。
ttp://users.pandora.be/stes/block98/index.html
Smalltalkっぽいスタイル?

646 Name: 名称未設定 [] Date: 2008/09/02(火) 18:40:20 ID: 1UJh/BMk0 Be:
llvm-gccかclangが対応してくれます(きっと)。
647 Name: 名称未設定 [] Date: 2008/09/02(火) 20:56:45 ID: VUOngefQ0 Be:
たのしいCocoaプログラミング[Leopard対応版]で
Hello World表示もできなかった
648 Name: 名称未設定 [] Date: 2008/09/02(火) 21:24:30 ID: fo5slvFb0 Be:
>>647
さっぱりすぎワロタw
649 Name: 名称未設定 [sage] Date: 2008/09/02(火) 22:38:58 ID: agEX2R6R0 Be:
>>646
ほんとうにclangが来てるwww
ttp://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-August/002670.html

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

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

HMDTのサイトはよく参照するけど、本の方は出来良くないという印象。
651 Name: 名称未設定 [sage] Date: 2008/09/03(水) 14:39:37 ID: iULcM77e0 Be:
>650
単なる「私は馬鹿です」宣言でしょ。

Cocoa的Hello Worldは
XcodeでCocoa Applicationテンプレートからプロジェクト作って、
MainMenu.nibを開いてWindow上のテキストフィールドに
「Hello World」って入れて、保存して、
Xcodeに戻ってビルドと実行すればいいだけ。
652 Name: 名称未設定 [sage] Date: 2008/09/03(水) 14:42:37 ID: t13feepc0 Be:
NSLog(@"Hello World");
これが動かないのか?
653 Name: 名称未設定 [sage] Date: 2008/09/03(水) 15:02:10 ID: iULcM77e0 Be:
stderr に出力するHello Worldはあんまり見ないよね。
しかも余計な出力付くし。
それがしたいなら printf("Hello world");の方が良いと思う。
654 Name: 名称未設定 [sage] Date: 2008/09/03(水) 15:33:47 ID: +g6j8XH20 Be:
Foundation的に書いてみると、

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

ながいな。
655 Name: 名称未設定 [sage] Date: 2008/09/03(水) 21:01:18 ID: /rdLXYXb0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/09/03(水) 22:06:03 ID: cOJMtB+R0 Be:
そういえばヒレガス本第3版邦訳まだかな
657 Name: 名称未設定 [sage] Date: 2008/09/03(水) 22:14:05 ID: qucRX3eD0 Be:
アプリのメインのクラスをAppControllerって名前にするのたぶん彼の流儀なんだけど
国内ですげー広まってる気がするw
Appleのサンプル見るとメインのクラスはプロジェクトの名前とかだよね?
658 Name: 名称未設定 [sage] Date: 2008/09/03(水) 22:21:59 ID: BhsIDDum0 Be:
>>657
おれの流儀はXXAppDelegateだぜ。XXの部分はプロジェクト毎にサフィックスを決める。

プログラムを作る時にはサフィックスのXXを決めるのに一番時間がかかる(w
659 Name: 名称未設定 [sage] Date: 2008/09/03(水) 23:09:33 ID: S2My4fpG0 Be:
× suffix
○ prefix
660 Name: 名称未設定 [sage] Date: 2008/09/03(水) 23:29:06 ID: q20130QRP Be:
Core Dataなアプリだと、
プロジェクト作成時に自動的に
"プロジェクト名_AppDelegate"ができるから、
それをメインのコントローラとして弄ればいいのか
661 Name: 名称未設定 [sage] Date: 2008/09/04(木) 06:48:05 ID: phG/aT9q0 Be:
>>658
メインのクラスはだいたいNSApplicationのデリゲートを受けるかも知れないけど、
デリゲート使用しない時もあるよね
まぁ細かいとこだけど俺も名前決めに時間かかる、他のクラスとかでも
662 Name: 名称未設定 [sage] Date: 2008/09/04(木) 10:36:29 ID: gMkAqZ6m0 Be:
>>656
漏れも、ヒレガス本は心待ちにしている。
663 Name: 名称未設定 [sage] Date: 2008/09/04(木) 10:50:12 ID: pQ8weQW+0 Be:
質問です。どうにもIB上のBindingとControllerが良く分からないので、
HMDTの黒表紙を買おうかと思案中です。そこでお聞きしたいのですが、
本の内容で、よく理解できるような解説はあるのでしょうか?
お持ちの方、よろしくお願いします。
664 Name: 663 [sage] Date: 2008/09/04(木) 11:07:05 ID: pQ8weQW+0 Be:
思案してても仕方が無いので、やっぱ買う事にします。
日記になってしまって済みません。
665 Name: 名称未設定 [sage] Date: 2008/09/04(木) 13:29:39 ID: WdpeVM9o0 Be:
>>657
NEXTSTEPのころのいろんなソースはだいたい
"プロジェクト名の略称Controller" って命名だった気がするよ

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

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

ちなみに何を読んだりどこまで自分でやって binding と controller がわからなかったのか
によってその本がためになるか変わるかも
666 Name: 名称未設定 [sage] Date: 2008/09/04(木) 20:48:22 ID: pQuggfDa0 Be:
ヒレガス3rdの邦訳?

出るなら買うけど
出る予定なんてないんでしょ?
667 Name: 名称未設定 [sage] Date: 2008/09/04(木) 21:08:09 ID: AE37cJ/00 Be:
>>666
>出る予定なんてないんでしょ?

ま、ないんじゃね。あれだけ図がついてりゃ訳なんて不要でわ
668 Name: 名称未設定 [sage] Date: 2008/09/05(金) 09:28:01 ID: Y7BbIuNw0 Be:
まだ古い日本語版本屋に並んでるけど、さすがにもう・・・。地味に売れてたと
思うんで、いい加減新版出して欲しいものだ。英語版も買ったけど、やはり
時間がかかるわ、眠くなるわで、効率が悪い。
669 Name: 名称未設定 [sage] Date: 2008/09/05(金) 15:45:38 ID: 70Xyj+YO0 Be:
Xcode 3.1
LSUIElement=1の、メニューバー(ステータスバー?)アプリを作成しています。
メニューバーのアイコンのメニューからopenPanel等を開くと、openPanelがアクティブにならないのですが、自動でアクティブにするにはどのようにしたら良いのでしょうか。
670 Name: 名称未設定 [sage] Date: 2008/09/05(金) 15:51:32 ID: 3OZbGjxI0 Be:
-(IBAction)makeKeyAndOrderFront:(id)sender;
671 Name: 名称未設定 [] Date: 2008/09/05(金) 15:59:01 ID: 70Xyj+YO0 Be:
>>670
NSWindowをアクティブにするときはそれでいけるかもしれないですが、NSOpenPanelをアクティブにするのにはどのようにしたら…
あと、- (void)orderFrontStandardAboutPanel:(id)senderで表示したAboutパネルもアクティブになりません。
672 Name: 名称未設定 [sage] Date: 2008/09/05(金) 16:10:02 ID: 70Xyj+YO0 Be:
なんか邪道ですが、openPanelを開く前に
NSAppleScript *AS=[[NSAppleScript alloc] initWithSource:[NSString stringWithString: @"tell application ¥"アプリ名¥"¥nactivate¥nend tell"]];
を行うことでうまくいきました。
もっとスマートな方法はないのかな…
673 Name: 名称未設定 [sage] Date: 2008/09/05(金) 16:15:24 ID: 70Xyj+YO0 Be:
>>672
[AS executeAndReturnError:nil];
を書き忘れ。
674 Name: 名称未設定 [sage] Date: 2008/09/05(金) 16:18:16 ID: rvDtJprx0 Be:
それそのまんまのメソッドがあるわけだが……
675 Name: 名称未設定 [sage] Date: 2008/09/05(金) 16:28:04 ID: 70Xyj+YO0 Be:
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
でいけました…
676 Name: 名称未設定 [sage] Date: 2008/09/05(金) 16:28:36 ID: 3OZbGjxI0 Be:
クラス階層
677 Name: 名称未設定 [sage] Date: 2008/09/06(土) 17:24:41 ID: pbA83sM10 Be:
ドラッグ&ドロップ中にコマンドキーなどが押されたら、
ドラッグ中のアイコンを変更できますかね?

ドラッグ開始時の自作アイコン表示とドロップ時の
キー押下判定は実装できたのですが。
678 Name: 名称未設定 [] Date: 2008/09/07(日) 11:52:19 ID: K5MfR1iP0 Be:
>>677
うーん。自前でイベントループを作って、自前でドラッグ処理を書く以外に、方法が思いつかない。
679 Name: 名称未設定 [sage] Date: 2008/09/07(日) 12:50:58 ID: YlD2TZRv0 Be:
すみません、質問です。
ファイルのダウンローダーを作成していて、保存ファイル名に自動でタイトルなどを付加しているのですが、
ファイル名に"/"が含まれている場合、ダウンロードに失敗します。

// デスクトップのパス
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 Name: 名称未設定 [sage] Date: 2008/09/07(日) 12:54:11 ID: WGY8NPzr0 Be:
ファイル名に/を使わないようにすればいいんじゃないか
681 Name: 名称未設定 [sage] Date: 2008/09/07(日) 13:21:02 ID: 6VPpG5Yl0 Be:
¥/
682 Name: 名称未設定 [sage] Date: 2008/09/07(日) 20:12:21 ID: yQpTS6OD0 Be:
>>681
ありがとうございます。
NSMutableStringに入れて置換をかけてみましたが、
"バックスラッシュ+/"ではワーニングが出ました。
683 Name: 名称未設定 [sage] Date: 2008/09/08(月) 09:02:43 ID: 1EifQ6YV0 Be:
>>682
普通に/を:に置換するだけじゃだめなん?
684 Name: 名称未設定 [sage] Date: 2008/09/08(月) 22:18:36 ID: VBoZ6EQN0 Be:
試してないしひどく適当なこと書いてるが「/」って単純にパスの区切りとして
扱われてるだけなんじゃね?デスクトップ上に「foo」ってフォルダ作っといて

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

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

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

でもダウンロードしてくるファイル名に/が含まれる
ことなんてあるの?
686 Name: 名称未設定 [sage] Date: 2008/09/09(火) 10:11:47 ID: V/uZJd3h0 Be:
凄く基本的な質問です
以前からメモに// もしくは/* */ でコメントアウトを使用していたのですが
#pragma mark もビルド時には完全に無視されると考えてよいでしょうか?
687 Name: 名称未設定 [ge] Date: 2008/09/09(火) 17:46:39 ID: tjWw4zqq0 Be:
ソースコードから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 Name: 名称未設定 [sage] Date: 2008/09/09(火) 17:49:59 ID: eVGJsD0p0 Be:
何がどうダメになるんだい?
689 Name: 名称未設定 [sage] Date: 2008/09/09(火) 17:57:24 ID: tjWw4zqq0 Be:
あー、肝心なところを書き忘れてた。。
ボタンが表示されないんですよ。
690 Name: 名称未設定 [sage] Date: 2008/09/09(火) 18:06:04 ID: CHK+3i9f0 Be:
指定イニシャライザはinitWithFrame:だね。
691 Name: 名称未設定 [mage] Date: 2008/09/09(火) 18:18:31 ID: tjWw4zqq0 Be:
最初からもっと詳しく書けば良かったね。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 Name: 名称未設定 [sage] Date: 2008/09/09(火) 18:25:40 ID: y/3nMAT/0 Be:
>>691
長々コピペする前に1つ上のレスを見れば良かったね。
693 Name: 名称未設定 [sage] Date: 2008/09/09(火) 19:27:16 ID: tjWw4zqq0 Be:
>>690
ありがとー
694 Name: 名称未設定 [sage] Date: 2008/09/09(火) 22:15:47 ID: 5CcqCsPV0 Be:
>>691
・とりあえず、drawRect:内で、subViewを追加している所がダメだ。subViewは前もって追加しておかなければならない。
・ボタンの数量が変わるということは、それに合わせて自身のViewサイズも変えなきゃダメじゃないの?
・どうしても、drawRect:のタイミングでしかボタンの数量が決定しないなら、NSButtonCellを使うとよいかもしれない。
・最終的に何を作りたいのか知らないけど、ボタンを並べるだけなら、NSMatrixを使ってみたら?

695 Name: 名称未設定 [] Date: 2008/09/10(水) 01:56:04 ID: JdO1QrgE0 Be:
タスクバーはまだですか?
696 Name: 名称未設定 [] Date: 2008/09/10(水) 22:59:36 ID: erl+1Dgh0 Be:
IBでUILabel のフォントサイズを変更しても、なんか画面上でうまく反映されてない気がするんですが気のせいですかね。
最初に配置したとたんはちゃんと追従するのに、一度フォーカス外しちゃうと駄目なきがしますが、いまいちよく判ってないかも。
697 Name: 名称未設定 [sage] Date: 2008/09/10(水) 23:48:34 ID: iCA9fuIC0 Be:
AutoSizeなんとかみたいなん入ってないですか?
FitToだっけか何か
698 Name: 名称未設定 [sage] Date: 2008/09/11(木) 08:31:58 ID: VW8cs/5N0 Be:
>>697
IBの話?Layout>Size to fit の事かな。
699 Name: 名称未設定 [sage] Date: 2008/09/11(木) 23:15:45 ID: hstXwgpC0 Be:
たのcocoのHelloWorldでさっそくつまづいた。なんとか解決したけど。

.hファイルを編集するとあるが、どこにも「編集後に保存する」とは書いてないじゃないか。アイコンが灰色になってる意味すらわからなかったorz。
700 Name: 名称未設定 [] Date: 2008/09/12(金) 00:15:46 ID: g6XUsCdX0 Be:
>>699
あ、それおれも一瞬つまづいた。
わかってしまえばなんてことないんだけどね。
701 Name: 名称未設定 [sage] Date: 2008/09/12(金) 00:42:34 ID: giTvRlty0 Be:
ソースファイルを保存してないとそれはメモリ上にしかなくて
コンパイラが参照するディスクに保存してあるソースファイルは前のものだというのは
別に Cocoa に限った話じゃなくてコンパイラを使うプログラミングなら全部共通の常識だと思うのだが
702 Name: 名称未設定 [sage] Date: 2008/09/12(金) 01:00:38 ID: aLiSGFXa0 Be:
君らはパソコンで文章とか絵とか書いても保存しないのか。
703 Name: 名称未設定 [sage] Date: 2008/09/12(金) 01:04:35 ID: cm2FlxP60 Be:
>>701
いや、>>699はビルド時のことじゃないと思うよ。ビルド時には保存しますか?って聞かれるし。
多分Interface BuilderのほうにIBOutletとかが反映されるのが保存後ってとこじゃないかな。
たのcocoは買ってないけど、俺もXcode 3.xになってちょっと戸惑った。
704 Name: 名称未設定 [sage] Date: 2008/09/12(金) 07:29:43 ID: R3vW2eSc0 Be:
>703
ずばりその通りです。
「アクションとアウトレットの接続」が何度やっても接続できなかった。
705 Name: 名称未設定 [sage] Date: 2008/09/12(金) 10:05:16 ID: kIdPh2bR0 Be:
Xcode 3.xはIBで変更してもビルド時に保存するか聞いてこないってこと?
それはちょっと嫌だなあ。まだ2.xなもんで。
706 Name: 名称未設定 [sage] Date: 2008/09/12(金) 10:26:27 ID: blJgYNL40 Be:
じゃなくて、関連付けられたXcodeのプロジェクト内のファイルが変更されたら
勝手に見に行って追加削除されたIBAction IBOutletを自動的に同期するんだよ。
707 Name: 名称未設定 [sage] Date: 2008/09/12(金) 16:10:14 ID: TZxbpOjR0 Be:
勝手に保存される方が気持ち悪くない?
708 Name: 名称未設定 [sage] Date: 2008/09/12(金) 19:15:18 ID: Vsc3ghHA0 Be:
Xcodeのリファクタリングで、nibのoutletとかも、リプレースしてくれるのが嬉しい。
709 Name: 名称未設定 [sage] Date: 2008/09/12(金) 20:48:14 ID: Oj5mxfWI0 Be:
>>701
ということを知らない初心者向けの本の話をしてるんですが。
710 Name: 名称未設定 [sage] Date: 2008/09/12(金) 22:11:37 ID: eLlq91pJ0 Be:
なるほど。
「ファイルとは何か。」
「保存すると何が起こる?」
ぐらいから始めないと何らかのクレームがつく訳か。
711 Name: 名称未設定 [sage] Date: 2008/09/12(金) 22:30:14 ID: rysqu+9T0 Be:
>>710

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


まあ、その誤解の仕方にも些か無理があるが……。
712 Name: 名称未設定 [sage] Date: 2008/09/12(金) 23:18:43 ID: Oj5mxfWI0 Be:
>>710
大丈夫ですか?
713 Name: 名称未設定 [sage] Date: 2008/09/12(金) 23:29:05 ID: cm2FlxP60 Be:
ていうか未だに2.xな人が多いのかな?この誤解されっぷりは。
714 Name: 名称未設定 [sage] Date: 2008/09/12(金) 23:56:30 ID: 5MYImlaK0 Be:
開発は3.0でやってるよ。3.1に上げると古いCarbonのAPIが使えなくなるから。
今のところ64bit必要ないし。
715 Name: 名称未設定 [sage] Date: 2008/09/13(土) 00:22:50 ID: HlQcU5id0 Be:
>3.1に上げると古いCarbonのAPIが使えなくなるから。
それは初耳... SDK を古い奴に設定かえてもだめなの?
716 Name: 名称未設定 [sage] Date: 2008/09/13(土) 00:47:17 ID: U/Et2gQU0 Be:
ライブラリに古いCarbonのAPIがないからリンク出来んという話だったと思う。
717 Name: 名称未設定 [sage] Date: 2008/09/13(土) 07:33:10 ID: RcIrvjqx0 Be:
うむー初耳だらけ。
3.1でCarbonいじってる。古いAPIを使っててコンパイラからdeprecatedを連呼されるが
連呼されるだけで一応コンパイルできてる。いい加減Cocoaで書き直そうと思ってるけどそれは
置いといてw
ライブラリがなかったら既存のバイナリも走らないし。
718 Name: 名称未設定 [sage] Date: 2008/09/13(土) 08:00:02 ID: HlQcU5id0 Be:
XCode 3.1.1 が来てるよ。
719 Name: 名称未設定 [sage] Date: 2008/09/13(土) 10:24:10 ID: LE/mlm6F0 Be:
実際AppleはいつまでCarbonを長らえさせる気なんだろうな?
Snow Leopardで切ってしまうのは少々過激な気もするし(PowerPCは切られるっぽいが)。
720 Name: 名称未設定 [sage] Date: 2008/09/13(土) 10:42:12 ID: AGky0g5f0 Be:
CocoaとCarbonが全然基盤の異なる環境で、CarbonはOS 9との互換性のために残してある…
などと考えているならそれは間違いだと言っておく。
721 Name: 名称未設定 [sage] Date: 2008/09/13(土) 10:49:37 ID: LE/mlm6F0 Be:
>>720
それは分かってる。
両者混在可能だしiTunesとかFinderとか純正でもCarbon要素が多いソフトもあることだから。
722 Name: 名称未設定 [sage] Date: 2008/09/13(土) 11:27:59 ID: aVqvEgPV0 Be:
最悪、Carbon.framework及び関連Frameworkをぶっこ抜いてきて、内蔵しちゃう。
723 Name: 名称未設定 [sage] Date: 2008/09/13(土) 11:39:14 ID: CsYE4bq/0 Be:
最近のCocoaはスタック見てもCarbon呼んでないお。
CarbonからCoreServieに移ったのはあるけど。
724 Name: 名称未設定 [sage] Date: 2008/09/13(土) 12:06:38 ID: aVqvEgPV0 Be:
SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar);
これだけのためにCarbon使ってる。
これぐらいはCocoaに付けてくれ。 DockもAuoShowするようにして。
725 Name: 名称未設定 [sage] Date: 2008/09/14(日) 14:12:32 ID: 095CqlGt0 Be:
NSTableColumnにNSImageViewを組み込み、
NSImageViewにローカルパスではなくURLから画像を取得する場合、
非同期で取得、表示させるにはどうするばよろしいでしょうか?
726 Name: 名称未設定 [sage] Date: 2008/09/14(日) 14:31:19 ID: hXVHKg6D0 Be:
非同期で取得したいならNSURLDownloadで
727 Name: 名称未設定 [sage] Date: 2008/09/14(日) 14:47:35 ID: 095CqlGt0 Be:
NSURLDownloadで一旦ローカルに保存せずに
直接NSImageを作成することは出来るのですか?

それらしい方法があればよいのですが。
728 Name: 名称未設定 [sage] Date: 2008/09/14(日) 15:02:12 ID: /Z2RSCRo0 Be:
どの部分が分からないのか分からない
取得?非同期?表示?
729 Name: 名称未設定 [sage] Date: 2008/09/14(日) 15:08:23 ID: p8KzSniT0 Be:
NSURLConnection
730 Name: 名称未設定 [sage] Date: 2008/09/14(日) 15:32:55 ID: AYWcGIb70 Be:
NSURLConnectionで非同期で画像をNSDataとして取得して、
それをもとにNSImageを生成してNSImageViewに設定
731 Name: 名称未設定 [sage] Date: 2008/09/14(日) 15:38:26 ID: p1p/oAlk0 Be:
現在はNSImageのfileContentOfURLでNSImageを作成しているのですが、
取得に時間がかかると固まったようになるのです。

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

お手数ですがお知恵をいただければと。
732 Name: 名称未設定 [sage] Date: 2008/09/14(日) 15:49:38 ID: 6NIJPt3y0 Be:
>>731
>>730じゃだめなん?
733 Name: 名称未設定 [sage] Date: 2008/09/14(日) 16:02:55 ID: cIfGvRb00 Be:
>>731
/Developer/Examples/PubSub/NewMusic/
のコードを見れば、>>730の実例がありますよ。
734 Name: 名称未設定 [sage] Date: 2008/09/14(日) 16:21:15 ID: p1p/oAlk0 Be:
みなさまありがとうございます。
家に帰ってからチャレンジしてみます。
735 Name: 名称未設定 [sage] Date: 2008/09/14(日) 16:56:06 ID: /Z2RSCRo0 Be:
普通にメインスレッド以外で読み込めば良いのでは?
736 Name: 名称未設定 [] Date: 2008/09/14(日) 23:21:50 ID: MZtdcUbF0 Be:
age
737 Name: 名称未設定 [sage] Date: 2008/09/15(月) 00:47:43 ID: 23PGzCcT0 Be:
格闘すること4時間、ようやく非同期で画像表示ができました。
みなさま本当にありがとうございました。
738 Name: 名称未設定 [sage] Date: 2008/09/15(月) 10:05:56 ID: gN/nGyHB0 Be:
>>737
>みなさま本当にありがとうございました。

老婆心だがどうやったらできたかも書いとくといいぞ。
他の人の参考になるかもしれん品
739 Name: 名称未設定 [sage] Date: 2008/09/15(月) 10:43:43 ID: 1fLwojEv0 Be:
相談したら解決法を書くのが礼儀かと
740 Name: 名称未設定 [sage] Date: 2008/09/15(月) 12:18:29 ID: 23PGzCcT0 Be:
ですね。失礼しました。
>>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 Name: 名称未設定 [sage] Date: 2008/09/15(月) 16:21:54 ID: yHVGCdW40 Be:
すみません、また質問です。
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 Name: 名称未設定 [sage] Date: 2008/09/15(月) 16:53:15 ID: oR3oM3f30 Be:
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 Name: 名称未設定 [sage] Date: 2008/09/15(月) 17:01:20 ID: mcKY8VJv0 Be:
本題からは外れるが、そのメソッド名でownershipを渡してしまうのはどうかと思う。
744 Name: 名称未設定 [sage] Date: 2008/09/15(月) 17:20:08 ID: A7RLo79t0 Be:
文字列定数って解放されんの?
745 Name: 名称未設定 [sage] Date: 2008/09/15(月) 17:37:27 ID: 1fLwojEv0 Be:
>>743
[@"aaa" retain]するならcopyStringで
[@"aaa" autorelease]ならgetStringってこと?

そもそも返り値が複数の場合ってNSArrayとかNSDictionaryにしてやるイメージがあるけど、どうなんでしょ
746 Name: 名称未設定 [] Date: 2008/09/15(月) 17:45:44 ID: nEj7kIm/0 Be:
「replacing NaN with 0.」というエラー(ウォーニン?)の対処方法を教えてください。詳細はこうです。

http://hmdt.jp/coral/index.htmlのcoral.appを改造しました。
コマンドで
./coral http://www.apple.com/jp/ipodnano/ -o ~/Desktop/test.pdf -p
とすると,問題なく終了しますが,
当のHMDTサイトだと,上記のエラーが16行出力されます。
./coral http://hmdt.jp/coral -o ~/Desktop/test.pdf -p

改造の趣旨は,PDFの出力をページごとにすることです。
(「PDFとして保存...」と同じことをコマンドラインからできるように)
いわゆるhtmltopdfとかHTMLDOCみたいで日本語可なものです。
このあとパッチを記載します。
747 Name: 名称未設定 [] Date: 2008/09/15(月) 17:47:00 ID: nEj7kIm/0 Be:
$ 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 Name: 747 [] Date: 2008/09/15(月) 17:58:21 ID: nEj7kIm/0 Be:
*** 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 Name: 名称未設定 [sage] Date: 2008/09/15(月) 18:01:08 ID: oR3oM3f30 Be:
>>745
質問の内容に合うように回答してみたが、
自分なら >>742 みたいなことはしない。
750 Name: 747 [] Date: 2008/09/15(月) 18:01:15 ID: nEj7kIm/0 Be:
$ 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 Name: 747 [] Date: 2008/09/15(月) 18:04:59 ID: nEj7kIm/0 Be:
--- 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 Name: 名称未設定 [sage] Date: 2008/09/15(月) 18:08:19 ID: 1fLwojEv0 Be:
>>749
ですよね
そして本人がいないという
753 Name: 名称未設定 [] Date: 2008/09/15(月) 18:11:07 ID: nEj7kIm/0 Be:
! 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 Name: 名称未設定 [sage] Date: 2008/09/15(月) 19:08:29 ID: yHVGCdW40 Be:
>> 741です。
>>742 - 745 >>749
ありがとうございます。おかげさまでできました。
(NSString**)にして代入は*にすればいいんですね。
NSArrayやNSDictionaryの考えましたが、面倒くさいというか、
参照渡しができるはずだと思ったもので。

メソッド名はあまり規約は考えていません。(汗)


755 Name: 名称未設定 [sage] Date: 2008/09/18(木) 00:36:35 ID: P7aTv+8m0 Be:
- (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 Name: 名称未設定 [sage] Date: 2008/09/18(木) 01:11:02 ID: M4ahfae1P Be:
NSColorの内部で後者みたいなことがすでに行われているんじゃないかなぁ。
引数なしで呼び出せる色は代表的な色ばかりだし。
知らずに答えてるので、実際は知らない。
757 Name: 名称未設定 [sage] Date: 2008/09/18(木) 01:17:09 ID: P7aTv+8m0 Be:
やっぱ内部的にやってんですかねぇ。
ここ見て気になったんです。
ttp://hmdt.jp/cocoaProg/AppKit/NSTableView/NSTableView.html#section05

ここで使われてる
+ (NSColor *)colorWithCalibratedWhite:(CGFloat)white alpha:(CGFloat)alpha
の方なんかはなんとなく保持しておいたほうが良いような気がしますが、
おっしゃるようにwhiteColorなどの代表的な色ってどうなんでしょうね。
758 Name: 名称未設定 [sage] Date: 2008/09/18(木) 02:56:51 ID: s+En6PJ+0 Be:
NSMutableArray *array=[NSMutableArray array];
while([array count]<10000)
[array addObject:[NSColor whiteColor]];

とかやってみてObjectAllocとかでいちいちオブジェクトが生成されているかチェックすれば?
arrayに入っているオブジェクトのポインタを比較するだけでもわかるかな?
759 Name: 名称未設定 [sage] Date: 2008/09/18(木) 03:20:51 ID: moZQjecs0 Be:
InterfaceBuilderで設置したボタンを、ある変数の値によって
表示したり消したり(操作も無効に)させたいのですが
どうすればよいでしょうか。
こういう場合ソースコードからボタンを作らないといけないんですかね?
760 Name: 名称未設定 [sage] Date: 2008/09/18(木) 03:49:01 ID: s+En6PJ+0 Be:
ボタンのisHiddenにバインドするだけでいけるでしょ
761 Name: 名称未設定 [sage] Date: 2008/09/18(木) 05:27:34 ID: moZQjecs0 Be:
>>760
どうもです。それでやってみます。
762 Name: 名称未設定 [sage] Date: 2008/09/18(木) 12:11:19 ID: P7aTv+8m0 Be:
>>758
作ったarrayをretainしてアクティビティモニタで確かめてみたんですが、
whiteColorやgrayColorなどはメモリ使用量が全然増えず、
colorWithDeviceRed:1 green:1 blue:1 alpha:1
などだとメモリ使用量が増えました。
ObjectAllocを理解してないのですが、試してみたところ前者はあまり反応が無いのに対して後者はAllocateされまくってるようでした。
brownColorやpurpleColorなどシステムや標準のアプリに使われてない色でテストしてみると分かりやすく
初回呼び出し時のみAllocateされてされているようでした。
どうやらこれらはNSCachedRGBColorというカテゴリらしく勝手にうまいことやってくれてるようですね。
763 Name: 名称未設定 [sage] Date: 2008/09/18(木) 13:26:26 ID: Zp1Zi8dY0 Be:
>>746
俺にはいちいちこのパッチを当ててテストするパワーはないが、

とりあえずデバッガにかけてisnan()あたりでブレークするかやってみるとか?
764 Name: 名称未設定 [sage] Date: 2008/09/19(金) 01:58:22 ID: I8I+Mir80 Be:
Objective-Cって拡張子cppなC++で書かれた関数って呼び出しできないの?
なんか参照できないみたいなエラーでる


765 Name: 名称未設定 [sage] Date: 2008/09/19(金) 02:09:25 ID: wgE41EU70 Be:
エラーの内容が曖昧だけどObj-C++なら混ぜられる。
拡張子はmm。
766 Name: 名称未設定 [sage] Date: 2008/09/19(金) 10:40:19 ID: hXEJrUVN0 Be:
CからC++の関数を呼ぶ時と同じ。
extern "C"でぐぐれ。
767 Name: 名称未設定 [sage] Date: 2008/09/19(金) 15:34:56 ID: guHg/OSE0 Be:
fp = fopen( "test00.bmp" , "rb" );

でファイルtest00.bmpがあるにもかかわらず
失敗するのですが、ファイル指定方法間違ってるのでしょうか?
768 Name: 名称未設定 [sage] Date: 2008/09/19(金) 15:43:50 ID: Z5XmRcRR0 Be:
”何処に”有るのか分からない。
769 Name: 名称未設定 [sage] Date: 2008/09/19(金) 16:03:15 ID: guHg/OSE0 Be:
読んでもだめなら書いてみるってことで
ファイル書き込んだら、ユーザーのディレクトリ直下にファイルが生成されました。

そこにデータを置いたら読み込めました。

実行時カレントディレクトリがおかしかったみたいです。

わけわからん
770 Name: 名称未設定 [sage] Date: 2008/09/19(金) 16:14:16 ID: XMT3wHyR0 Be:
>>769
ワーキングディレクトリにファイルがあればパスを指定しなくてもいいが、
普通はパスも含めて指定するものだ。お前の方がわけわからんよ。
771 Name: 名称未設定 [sage] Date: 2008/09/19(金) 16:44:22 ID: +88FPv300 Be:
>>769
わけわかってから先に進んだ方がいいよ
772 Name: 名称未設定 [sage] Date: 2008/09/19(金) 20:26:50 ID: kkVdyAHJ0 Be:
>>769
NSBundle使うなら、それくらい適当な指示でも探してきてくれるんだが。
773 Name: 名称未設定 [sage] Date: 2008/09/19(金) 20:33:14 ID: zh18Biru0 Be:
fopen を使う意味が分からん
774 Name: 名称未設定 [sage] Date: 2008/09/20(土) 00:52:56 ID: QCGx6Cy40 Be:
なんかフルボッコされてる><。
>fopenを使う意味
ウィンドウズで書いてたプログラムをそのまま移植してみたんです><
Mac使用暦3日ですいません。
Mac使いこなしてから出直してきます。
775 Name: 名称未設定 [] Date: 2008/09/20(土) 01:11:31 ID: 6P09LMLz0 Be:
>>774
がんばって
776 Name: 名称未設定 [sage] Date: 2008/09/20(土) 01:12:40 ID: 2Q6+WcPN0 Be:
Cの標準ライブラリでソフト作るんならスレ違いだと思うよ。
777 Name: 名称未設定 [sage] Date: 2008/09/20(土) 02:51:56 ID: y/ouZ/EC0 Be:
>>774
Macでプログラミング{9}
http://pc11.2ch.net/test/read.cgi/mac/1216824430/

【マック】Macintoshプログラミング質問箱
http://pc11.2ch.net/test/read.cgi/tech/1113058054/

の方がC言語標準でソフト作るのには向いているかも。
ただしどちらも適度に過疎っているのでそこが問題か。
778 Name: 名称未設定 [] Date: 2008/09/20(土) 04:40:03 ID: TXb4ST/Q0 Be:
http://wktk.vip2ch.com/vipper103088.png
FinderやMail等で使用されている↑のUIを使いたいのですが、
どなたか方法ご存知のかたいないでしょうか。
779 Name: 名称未設定 [sage] Date: 2008/09/20(土) 05:19:39 ID: cXIvNawZ0 Be:
Recessed Buttonじゃない??
780 Name: 名称未設定 [sage] Date: 2008/09/20(土) 05:29:36 ID: TXb4ST/Q0 Be:
>>779
ありがとうございます。Recessed Buttonありました!
あとは背景かぁ…
この背景のすこしカーブしているような感じはどうやってるんだろ。
オリジナル画像?
781 Name: 名称未設定 [sage] Date: 2008/09/20(土) 07:27:15 ID: JW0iPyXCP Be:
.appのパッケージを見ると、ボタンのふちとか画像つかってるのがわかるよ
782 Name: 名称未設定 [sage] Date: 2008/09/20(土) 13:28:58 ID: hXrkeK7L0 Be:
正式に売るアプリならパッケージの中の画像パクって使ってはいけないってうちの社の方針なんだけど、(Apple製のアプリでも)
やっぱ売り物に使うとまずいのかな?詳しい人いませんか?
783 Name: 名称未設定 [sage] Date: 2008/09/20(土) 14:17:29 ID: rgm2k6nl0 Be:
何だって?
784 Name: 名称未設定 [sage] Date: 2008/09/20(土) 14:28:35 ID: ULascG860 Be:
>>782
Appleに問い合わせろ。

俺はダメだと思うけど、判断するのはAppleだからな。
785 Name: 名称未設定 [sage] Date: 2008/09/20(土) 15:56:12 ID: LLE/vX/80 Be:
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 Name: 名称未設定 [sage] Date: 2008/09/20(土) 16:12:30 ID: pqLJOpdL0 Be:
質問です。
NSDictionaryのインスタンスに登録したオブジェクトの参照カウンタは
NSDictionaryのインスタンスのdealloc時にreleaseされるのでしょうか?
787 Name: 名称未設定 [sage] Date: 2008/09/20(土) 16:14:08 ID: pqLJOpdL0 Be:
それともdealloc時にremoveAllObjectsを呼ぶ必要がありますか?
788 Name: 名称未設定 [sage] Date: 2008/09/20(土) 16:21:10 ID: uslRtMKV0 Be:
ない
789 Name: 名称未設定 [sage] Date: 2008/09/20(土) 16:27:12 ID: pqLJOpdL0 Be:
どうもありがとう!
すっきりしました。

× NSDictionary
○ NSMutableDictionary
790 Name: 名称未設定 [sage] Date: 2008/09/20(土) 16:36:49 ID: TXb4ST/Q0 Be:
>>781
やっぱり画像ですか…

>>785
おぉ、その手がw
ありがとうございます。
791 Name: 名称未設定 [sage] Date: 2008/09/20(土) 16:37:14 ID: hXrkeK7L0 Be:
>>785
俺もそんな感じ
792 Name: 名称未設定 [sage] Date: 2008/09/20(土) 17:12:02 ID: RYHkLcyT0 Be:
しかしそれでは参照元が消えたら壊滅。
心を込めて1ドットずつ写せば問題なし。
793 Name: 名称未設定 [sage] Date: 2008/09/20(土) 17:12:43 ID: a7bWHByb0 Be:
他のメーラー使ってる人の中には
Mailを削除した人も居るんでない?
794 Name: 名称未設定 [sage] Date: 2008/09/20(土) 20:59:21 ID: hXrkeK7L0 Be:
まぁMailアプリは一例だろうけど
勝手に標準アプリを消すようなクライアントはあまりいないだろう
795 Name: 名称未設定 [] Date: 2008/09/21(日) 02:55:13 ID: U0GaFiaU0 Be:
小さな画像に著作権は無かったような
796 Name: 名称未設定 [sage] Date: 2008/09/21(日) 19:06:34 ID: 00WHdogq0 Be:
Appleとしても同じアイコン使ってくれた方が統一されて
うれしいと思うんだけどな。
というか、商用アプリでリソースパクりは山ほどあるだろ。
797 Name: 名称未設定 [sage] Date: 2008/09/21(日) 19:34:22 ID: f0YS1Y1Y0 Be:
http://service.shoppingfinder.jp/case/case01.html
Win用なのにモロパク
798 Name: 名称未設定 [] Date: 2008/09/21(日) 19:35:41 ID: 9pFmn9NQ0 Be:
商売第一のヤツにオリジナリティの道を説くだけ無駄
799 Name: 名称未設定 [sage] Date: 2008/09/21(日) 19:44:26 ID: 1Y9VMPly0 Be:
>>797
UIはOS X、アイディアは→ttp://hmdt.jp/icart/index.html
800 Name: 名称未設定 [sage] Date: 2008/09/21(日) 19:57:32 ID: nOczMaxO0 Be:
>>797
こういう会社はやだな
801 Name: 名称未設定 [] Date: 2008/09/21(日) 20:33:16 ID: 9pFmn9NQ0 Be:
こういうヤな会社でも売れれば勝ちだからな。
こういうヤな会社に負けないにはどうすべきか考えないとな。
802 Name: 名称未設定 [sage] Date: 2008/09/21(日) 21:12:36 ID: ZjTwY0rm0 Be:
うわ、ここまでやっちゃうか。
えげつないなあ
803 Name: 名称未設定 [sage] Date: 2008/09/21(日) 21:17:46 ID: eybcE3Lo0 Be:
どうせここまでやるならCocoaで開発しちゃえよ……。
804 Name: 名称未設定 [sage] Date: 2008/09/21(日) 21:19:46 ID: nY6XTthc0 Be:
>>796
そういや、Appleから警告を受けたY'z Dockはリソースもパクってたな。
それがなきゃ警告はなかったかも?
805 Name: 名称未設定 [sage] Date: 2008/09/21(日) 21:28:04 ID: nOczMaxO0 Be:
>>801
1行目>>そういう考え方もやだな
806 Name: 名称未設定 [] Date: 2008/09/22(月) 00:20:34 ID: +KhZs1Nw0 Be:
iTunesみたいなUIをつくりたいんだがドキュメントのどこみればいいか分かりません。
だれか教えて下さい。

ちなみにつくりたいiTunesみたいなUIとは、
左ペインの部分です。
807 Name: 名称未設定 [sage] Date: 2008/09/22(月) 00:44:33 ID: Zw418t180 Be:
>>806
ツリーかな?
808 Name: 名称未設定 [sage] Date: 2008/09/22(月) 00:46:31 ID: +hiVdtXuP Be:
>>806
http://park15.wakwak.com/~concordia/cocoa_break/dev/src/ADCSamples/index.html
のSourceViewが参考になるのでは。
NSTreeControllerを使ってるので、ちょっと敷居が高いかもしれないけど。
809 Name: 名称未設定 [sage] Date: 2008/09/22(月) 01:02:34 ID: AYeTay2Z0 Be:
>>806
NSTreeController
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTreeController_Class/Reference/Reference.html

R.Natori氏による使用例
http://d.hatena.ne.jp/RNatori/20080716
810 Name: 名称未設定 [sage] Date: 2008/09/22(月) 11:17:41 ID: jh2DSqbR0 Be:
みんな親切だね
811 Name: 名称未設定 [sage] Date: 2008/09/22(月) 16:43:21 ID: YwUHAmLG0 Be:
>>804
ま、あれはwidnows用だしね。
Mac用で同じリソース使ってくれたら統一感出してくれてありがとう
の一言だと思うけど。

ま、あくまでも憶測w
812 Name: 名称未設定 [] Date: 2008/09/22(月) 18:05:30 ID: AYeTay2Z0 Be:
NSURLの、
relativeStringとabsoluteStringの違いがよくわからないのですが、
具体的にどのようなときに違いが現れるのでしょうか。
813 Name: 名称未設定 [sage] Date: 2008/09/22(月) 18:38:52 ID: gvOmEYnc0 Be:
+[NSURL URLWithString:relativeToURL:]
-[NSURL initWithString:relativeToURL:]
を使ったとき意外は一緒です。
814 Name: 名称未設定 [sage] Date: 2008/09/22(月) 18:50:38 ID: AYeTay2Z0 Be:
>>813
ありがとうございます。
815 Name: 名称未設定 [] Date: 2008/09/23(火) 12:51:58 ID: DvYJX4re0 Be:
806です

>>807,808,809
ありがとうございます
816 Name: 名称未設定 [] Date: 2008/09/23(火) 17:58:23 ID: KUSPWosD0 Be:
>>696 同じとこでつまずいた…orz

UILabelのフォントサイズを18以上にすると追従して大きくなるけど、そこから小さくできない。

うーむ
817 Name: 名称未設定 [] Date: 2008/09/23(火) 19:16:28 ID: g/RzbGfr0 Be:
Dock上の特定のアイコンの座標を取得する方法ってあるんでしょうか?
Stackみたいにちょうどアイコンの上にウィンドウが開くようなUIを作りたいのですが・・・。
818 Name: 名称未設定 [sage] Date: 2008/09/23(火) 22:47:20 ID: 7MN5oJ1o0 Be:
プロパティで
@property (readWrite, retain, nonatomic) NSObject *object;
とした場合
self.object = nil;

[object release];
もしくは
[self.object release];
と同義でしょうか?
819 Name: 名称未設定 [sage] Date: 2008/09/24(水) 00:22:02 ID: aStVeHik0 Be:
久しぶりにプログラムいじってるんですが、quartzのCGLayerRef(スクリーン
外)にCocoaのメソッド使って描画してます。
CGLayerRefからNSContextつくって、それをsetCurrentContextで設定して
描画を行い、NSViewの次のdrawRect:の段階で画面上に描画しています。

10.4ではうまくいっていたんですが、10.5にすると、このメソッド以降描画がさ
れなくなります。

CurrentContextがCGLayerRefになったままなのかと疑い、以前のCurrentContext
を一次退避させて、描画が終わった段階で元に戻すと正常に描画されるように
なったんですが、これは正しい解決方法なんでしょうか。

どなたかアドバイスして頂ければ幸いです。
820 Name: 名称未設定 [] Date: 2008/09/24(水) 19:26:25 ID: jwopSb5h0 Be:
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 Name: 名称未設定 [sage] Date: 2008/09/24(水) 19:59:35 ID: EW93wwHW0 Be:
>>820
基本的な確認だけども。
そのNSWindowControllerは読み込んでるNibの中でFile's Ownerになっている?
そのアウトレットがちゃんと目的のWindowに繋がってる?
822 Name: 名称未設定 [sage] Date: 2008/09/24(水) 21:02:40 ID: jwopSb5h0 Be:
>>821
ありがとうございます。windowをアウトレットで繋いだらうまくいきました。
823 Name: 名称未設定 [sage] Date: 2008/09/24(水) 21:27:01 ID: iIaK2s1u0 Be:
>>818
ttp://www.stripe-net.jp/cocoa/program/blog20080511.html
824 Name: 名称未設定 [sage] Date: 2008/09/24(水) 21:55:28 ID: /GxHzA8A0 Be:
>>823
んはーありがとうございます。
ちなみに上記コードでreleaseした後に
self.source = hoge; で再設定しようとすると落ちました。
retainCountが0だからってnilではないんですね。
825 Name: 名称未設定 [sage] Date: 2008/09/25(木) 07:07:20 ID: lA2ZC0x+0 Be:
iPhotoを起動するときにoptionキーを押しながら起動すると
ライブラリの選択が行えるわけですが、
同じように自前のアプリケーションでも起動時のキー判定を行うには
どうしたらいいんでしょうか。
826 Name: 名称未設定 [] Date: 2008/09/25(木) 07:34:41 ID: bTE/wwXK0 Be:
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 Name: 名称未設定 [sage] Date: 2008/09/25(木) 10:03:12 ID: pGcOup570 Be:
>825
http://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 Name: 名称未設定 [sage] Date: 2008/09/25(木) 10:09:07 ID: uj5o01Zl0 Be:
>>826
そもそもhttp%3A%2F%2Fがいけないと思うよ。
http://にしないと。
デコードするメソッドはググれば見つかると思う。
829 Name: 名称未設定 [sage] Date: 2008/09/25(木) 11:05:14 ID: sKStzvQr0 Be:
>>828
そういう問題じゃないでしょ

>>826
NSLog(@"%@", [[NSString alloc]...);

NSLog の第一引数は format を指定するためのもの。典型的な security hole の原因だわ。
830 Name: 名称未設定 [sage] Date: 2008/09/25(木) 11:13:32 ID: pGcOup570 Be:
>826
NSString *hoge = /* NSLogの中身 */;
NSLog(@"%@", hoge); // 第一引数に直接指定しない。
だと、どうですか?

NSLogの第一引数に直接指定してるのが問題です。
NSLogの第一引数はprintfとほぼ同じformat文字列ですので、
NSLogが%を解決しようとしてぶっ飛んでるんだと思います。

変換自体はそれでちゃんと出来ているはずです。
831 Name: 名称未設定 [sage] Date: 2008/09/25(木) 13:08:06 ID: 4oC2NP4f0 Be:
>>826
あと、NSShiftJISStringEncoding で決めうちするのはよくないよ。
URL は ShiftJIS のばあいもあれば、 EUC の場合もあるし、
最近は Unicode もふえてるから、ちゃんとその URL を含む頁の
コードを判定してからやりましょう。
832 Name: 名称未設定 [sage] Date: 2008/09/25(木) 13:33:02 ID: q/UtwYK70 Be:
便乗ですみませんが、どうやって取得前に文字コードを判別できるのですか?
833 Name: 名称未設定 [sage] Date: 2008/09/25(木) 13:58:05 ID: bTE/wwXK0 Be:
>>829-830
ありがとうございます。うまくいきました。
formatを扱う時は気をつけます。

>>831
今回やろうとしていることの場合、NSString化するデータが日本語を含まないとわかっているため、NSShiftJISEncodeで決めうちしています。

>>832
http://blogs.dion.ne.jp/fujidana/archives/4169016.html
これぐらいしかわからない…
もっといい方法あれば良いんだが
834 Name: 名称未設定 [sage] Date: 2008/09/25(木) 15:46:00 ID: sKStzvQr0 Be:
>>833
日本語を含まないことがわかっているのであれば NSASCIIStringEncoding にするべきでは

>>831
URL は %xx を decode しないなら文字コードは関係ないでしょ
835 Name: 名称未設定 [sage] Date: 2008/09/25(木) 16:11:06 ID: cN/guz5p0 Be:
>>819
そうだよ。
10.4で問題がなかったのはたまたまでしょうね。
836 Name: 名称未設定 [sage] Date: 2008/09/26(金) 22:02:33 ID: cU/wlxV80 Be:
>>835
遅くなりましたが、レスありがとうございます。

ひとまず安心しました。
DrawRect:が呼ばれる辺りでNSContextも再設定されると思ってたので意外です。
837 Name: 名称未設定 [] Date: 2008/09/27(土) 17:38:47 ID: PUMQQB4h0 Be:
NSViewをpdfにして(「PDFとして保存...」)プリントパネルを出さずに,保存したいと考えてます。
その際,プリントパネルでレイアウトのページ数/枚を2とか4とか設定するのと同様のことを
コードの中で設定したいのだがうまくいきません。
NSPagesAcross(横方向),NSPagesDown(縦方向)に整数をセットすればいい筈なのですが,
うまくいきません。
しかも,http://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 Name: 名称未設定 [sage] Date: 2008/09/27(土) 20:08:21 ID: 3BeeyAhv0 Be:
>>836
drawRectで再設定されるから良いという問題ではないですよ。
思わぬ所で上書きされる可能性もあるし、
currentContextかえたら元に戻すのが作法だと思います。
839 Name: 名称未設定 [sage] Date: 2008/09/28(日) 00:16:59 ID: 4kM6Mp/Q0 Be:
>>837
NSPagesAcrossってNSPrintPagesAcrossのこと?
後こういう定数は「@"NSPrintPagesAcross"」じゃなくてそのまま「NSPrintPagesAcross」でいいと思う。
840 Name: 837 [] Date: 2008/09/28(日) 12:00:57 ID: UPVPAS6R0 Be:
>>839
アドバイスサンクスです。NSPagesAcrossとNSPrintPagesAcrossとの関係はつかめません。
NSPrintPagesAcrossにかえても,NSPrintInfoをダンプ(NSLog)は「NSPagesAcross = 2;」になってます。
しかも,期待した結果を得られないし,,,
[printInfo setJobDisposition:NSPrintSaveJob];としても
runOperation中では,無視されているみたいです。
841 Name: 名称未設定 [sage] Date: 2008/09/28(日) 12:39:44 ID: qIiqZsDr0 Be:
>>838
なるほど、言われてみればその通りです。

アドバイスありがとうございました。
842 Name: 837 [] Date: 2008/09/29(月) 11:02:33 ID: El694lAQ0 Be:
NSLogで出力したとき,日本語がエスケープされる(\U5185みたいになる)のですが,
エスケープされない方法か,コピペで,変換してくれるようなサイトがあったら,
教えてください。ちなみにこれはUTF8?UTF16?
843 Name: 名称未設定 [sage] Date: 2008/09/29(月) 12:49:55 ID: z/XCBa2L0 Be:
>>842
>ちなみにこれはUTF8?UTF16?

いわゆるNonLossyASCII。
844 Name: 名称未設定 [sage] Date: 2008/09/29(月) 16:20:22 ID: gW8PSnBP0 Be:
>>842
>>NSLogで出力したとき
問題があった時は自分で原因を狭めてしまわず、どういうことをしたらそうなったのかちゃんと詳しく書くべき
NSLogは日本語表示してくれる
ArrayとかDictionaryのdescriptionだと言ってるように変換されて表示される
君はそれを言ってるんじゃないかな?
まずは質問の仕方から勉強しようね
845 Name: 837 [] Date: 2008/09/29(月) 16:21:31 ID: El694lAQ0 Be:
ページ設定パネルで設定された結果(プリンタとか,用紙サイズ,方向など)を
チェックしたくて,
NSPageLayout *pageLayout = [NSPageLayout pageLayout];
runModalResult = [pageLayout runModal];
NSLog([NSString stringWithFormat: @"%@" ,[[[NSPrintInfo sharedPrintInfo] dictionary] description]]);
というのを差し込んでいるのですが,
ログには全然,パネルでの変更が反映されていません。
(デフォルトの設定がつらつらと出力されるだけ)
なんか勘違いしているみたいなのですが,その勘違いに気付けないので,よろしくお願いします。

846 Name: 名称未設定 [sage] Date: 2008/09/29(月) 16:48:46 ID: FPqjXq0v0 Be:
だから、NSLogの第一引数に直接内容不明な文字列を指定するなっていったじゃん。

と、全然別の所に突っ込んでみた。
847 Name: 名称未設定 [sage] Date: 2008/09/29(月) 17:04:44 ID: gW8PSnBP0 Be:
>>845
お前人の話し聞けよwww
そんでNSPageLayoutとかNSPrintInfoとか、
つかそもそもstringWithFormatとかdescriptionとかrunModalとか全部ドキュメント読んでこいよw
コード見てるとなんかどこじゃなくてたくさん勘違いしてるから
848 Name: 名称未設定 [sage] Date: 2008/09/29(月) 18:04:53 ID: aNtcQVm00 Be:
NSLogの引数の中が全部デフォルトのものばかりかと。
変更された値を保持するオブジェクトを引数にいれないと。
849 Name: 名称未設定 [sage] Date: 2008/09/30(火) 00:10:06 ID: AyM7tJ3A0 Be:
>>847
>どこじゃなくてたくさん勘違い

845はよーくドキュメントあたった方がいいぞ
850 Name: 名称未設定 [sage] Date: 2008/09/30(火) 00:37:30 ID: ra4ctouo0 Be:
>>840
>>837のコードを参考に自分でもいろいろ試してみたんだけど、ダメだ。
カスタムのNSPrintInfo作って、それを使ってNSPrintOperationを動かしても全然一枚あたりのページ数が反映されない。
NSPrintOperationにパネル表示させて、一枚あたり2ページにしてやると正常に作動するのに、
その正常に作動したNSPrintInfoの内容と全く同じカスタムのNSPrintInfoを事前に指定してやると全然反映されない。
(多分>>837のコードは四苦八苦した後のものなんだろう。NSPrintOperation作った後に設定したりしてるから。
 自分はNSPrintOperation作る前にNSPrintInfoに設定したけど、結果は同じだった)

CocoaBuilderで似たような質問が出ていないか捜してみると、いくつかあった。
http://www.cocoabuilder.com/archive/message/cocoa/2007/11/16/193220
しかし困ったことに回答が付いたものはゼロだった。
誰か正解を教えてくれ。俺が困ってるわけじゃないけど。
851 Name: 名称未設定 [sage] Date: 2008/09/30(火) 00:58:00 ID: jXZPfbh50 Be:
>>849
お前さんもどこがおかしいのか分からないのかい?
おかしいってか意味の無いことをしてるなって感じだけど
852 Name: 名称未設定 [sage] Date: 2008/09/30(火) 01:45:32 ID: ra4ctouo0 Be:
>>845
まずNSLogだが、これはstringWithFormat:と同じで第一引数にフォーマット、次から挿入する引数になる。
それを直すとこうなる。
NSLog(@"%@" ,[[[NSPrintInfo sharedPrintInfo] dictionary] description]);

次に「%@」だが、これは引数に指定したオブジェクトのdescriptionが挿入される。NSStringのdescriptionは自分自身。
それを直すとこう。まあ動作は同じなんだけど。
NSLog(@"%@" ,[[NSPrintInfo sharedPrintInfo] dictionary]);

だが俺の理解だと、sharedPrintInfoはカスタムのNSPrintInfoを指定していないNSPageLayoutや他のNSPrintOperationとは
共有されているはずだ。それの変更が反映されていないというのは腑に落ちない。
ていうかそこが本質なんだから、>>846-849はそっちも答えてやってくれよ。
853 Name: 名称未設定 [sage] Date: 2008/09/30(火) 02:02:03 ID: ra4ctouo0 Be:
>>852に追記。
NSLog([[NSPrintInfo sharedPrintInfo] dictionary]);
これをやってはいけない訳はつまり、descriptionが返したNSStringの中に「%@」やなんかがあったらどうなるか?ってこと。
質の悪いバグになる。
854 Name: 名称未設定 [sage] Date: 2008/10/01(水) 00:24:05 ID: fZLF4RYJ0 Be:
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 Name: 名称未設定 [sage] Date: 2008/10/01(水) 07:44:49 ID: Au+Xh+xi0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/10/01(水) 13:40:46 ID: 2vvkNhJP0 Be:
NSStringのrangeOfString:options:を使って、文字列の部分一致検索を処理してます。
アルファベットの大文字小文字、全角と半角、ひらがなとカタカナの違いを無視して一致させたいのですが、
ひらがなとカタカナを無視するオプションが見つかりません。
大文字小文字はNSCaseInsensitiveSearch、全角半角はNSWidthInsensitiveSearchが使えました。
どなたか、このあたりをご存知ないでしょうか?
857 Name: 名称未設定 [sage] Date: 2008/10/01(水) 14:50:47 ID: Jxg6CwEI0 Be:
そんな日本語特有の処理が入ってるの?
858 Name: 名称未設定 [sage] Date: 2008/10/01(水) 15:40:30 ID: QJCrV6zO0 Be:
印刷するアプリ作ったことない。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 Name: 名称未設定 [sage] Date: 2008/10/01(水) 17:39:48 ID: EWXwe1rT0 Be:
>>856
全く調べてないし、その気もないけど、そんな日本人に都合の良いっていうか日本人くらいしか使わないようなAPIがあるとは思えない。

自前で文字列をどっちかに変換して検索するとかしかないんじゃない?

860 Name: 名称未設定 [sage] Date: 2008/10/01(水) 18:27:50 ID: 2vvkNhJP0 Be:
>>856
ありがとうございます。
CFのオプションを試します。
ダメなら、CFの検索関数も試してみます。
861 Name: 名称未設定 [sage] Date: 2008/10/01(水) 21:16:10 ID: 2yWM9Tj30 Be:
AppleScriptは一部ヴァージョンでひらカタ無視するらしいけど、まあCocoaには関係ないか……。
862 Name: 名称未設定 [sage] Date: 2008/10/01(水) 23:57:24 ID: YpUBWQie0 Be:
一部バージョンて
最新のAppleScript2.0のことでしょ
863 Name: 名称未設定 [sage] Date: 2008/10/02(木) 08:58:20 ID: ZCB6ua8+0 Be:
iPhoneの連絡先も、かなを無視して絞り込むな。
やっぱ、CFあたりにあるんじゃないのか。
864 Name: 名称未設定 [sage] Date: 2008/10/02(木) 09:24:10 ID: DEyPKUgT0 Be:
>>856
ttp://blogs.dion.ne.jp/fujidana/archives/4410801.html
NSPredicateだから、メールなどの絞り込み検索にはともかくテキストエディタなどの文字列検索だとしたらニーズに合うかは分からないけど。
865 Name: 名称未設定 [sage] Date: 2008/10/02(木) 21:22:47 ID: 6I84zxEw0 Be:
基本的な質問で恐縮ですが、
NSMutableDictionary *dict = [NSMutableDictionary dictionary];

NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelease];
では、どう違うのでしょうか?

下の方が解放してくれていい感じがするのですが、
明確に使い分ける意図があれば教えて下さい。
866 Name: 名称未設定 [sage] Date: 2008/10/02(木) 21:30:49 ID: /nxJVGj90 Be:
同じ
867 Name: 名称未設定 [sage] Date: 2008/10/02(木) 22:10:36 ID: 6I84zxEw0 Be:
そうですか、ありがとうございます。
これで迷わずにコードがかけます^^;
868 Name: 名称未設定 [sage] Date: 2008/10/03(金) 08:29:27 ID: oZRcqq8c0 Be:
>>867
ドキュメントのどっかをよめばかいてあるけど、
メソッド名に init... , copy... があるやつは autorelease されてなくて、
メソッド名にそれらがないやつは autorelease されてる、
と「決まってます」。
自分でメソッド書くときもそれに従っとくと混乱がすくないです。
869 Name: 名称未設定 [sage] Date: 2008/10/03(金) 11:02:40 ID: mGVGEXof0 Be:
>>868
>>423
init は出てこない。

まあ普通は alloc と init の組み合わせで使うから、関係なくないといえばそうだけど。
870 Name: 名称未設定 [sage] Date: 2008/10/03(金) 16:51:46 ID: lnmhxgeU0 Be:
CABasicAnimationで画像を複数回移動するアニメーション部分をやっているのですが、
speed、durationなどの設定が同じならtoValueに設定した値までの移動距離が短くなるほど、
移動するスピードが遅くなります。(長くなると速くなる)

違った移動距離でも同じスピードで移動させたのですが、そのような設定は出来ますでしょうか?
毎回、speed、durationなどの値を入れ替えるしかないのでしょうか?


871 Name: 名称未設定 [sage] Date: 2008/10/04(土) 14:48:53 ID: YvRU7BHV0 Be:
>>859
無いという確信がどこから来るのか不思議だが、見事にハズレ。APIはちゃんとある。
CFでもUnicode UtilitiesでもLocaleとoptionを正しく与えれば、ひらがなとカタカナを
同一視した比較ができる。この動作をするのはJapanese Localeの時だけだから、
System Preferences > International設定の影響を受けたくなければLocale明示が必要
872 Name: 名称未設定 [sage] Date: 2008/10/05(日) 05:38:25 ID: uziPsw3m0 Be:
>>871
別に確信を持って言ってるようには感じないけど。


いい感じ通信だったかな日本語文字列検索のこと書いてたけどこのオプションを使ってるのかな?

勉強になりました。
873 Name: 名称未設定 [sage] Date: 2008/10/06(月) 10:26:21 ID: JVQiKRWo0 Be:
>>871
kCFCompareLocalizedをオプションに入れて、
ロケールに日本語を入れれば良いという事ですか?
874 Name: 名称未設定 [sage] Date: 2008/10/06(月) 22:13:17 ID: 0Tq6ORkh0 Be:
>>873
CFStringCompareWithOptionsAndLocale()を使う場合はそう。
Leopard以前でLocale明示した比較をする場合はUnicode Utilitiesの
UCCompareText()を使う。
875 Name: 名称未設定 [] Date: 2008/10/07(火) 01:33:37 ID: e/RkVFA40 Be:
すんません、古いOS持ってないので確認できないんだけど・・
例えばSDK10.4でビルドしたアプリって、OS10.3で起動したなら勝手にエラー出して終わるのかな?
それとも自分でチェックのコードを書かなきゃいけない?
876 Name: 名称未設定 [sage] Date: 2008/10/07(火) 01:36:38 ID: QWJWi9xM0 Be:
>>875
デプロイメントターゲットも10.4にしておけば起動しない。
俺は10.3にも対応してるアプリを書いてるが、SDKは10.4でユニバーサルバイナリ、デプロイメントターゲットは10.3。
877 Name: 875 [sage] Date: 2008/10/07(火) 01:40:17 ID: e/RkVFA40 Be:
>>876
了解です、ありがとう。
878 Name: 名称未設定 [sage] Date: 2008/10/07(火) 10:06:27 ID: h1HNxZeI0 Be:
>>874
ありがとうございます。
879 Name: 名称未設定 [sage] Date: 2008/10/08(水) 17:22:36 ID: HG8PgwVu0 Be:
CocoaでSOAP通信しようとした時に、まず何から手をつければ(何から読めば)いいんでしょうか…
880 Name: 名称未設定 [sage] Date: 2008/10/08(水) 18:48:52 ID: ttuSaGVV0 Be:
>>879
私が参考にしたのはこれ
http://developer.apple.com/internet/webservices/webservicescoreandcfnetwork.html
881 Name: 名称未設定 [sage] Date: 2008/10/08(水) 18:55:02 ID: HG8PgwVu0 Be:
ふんふん、やっぱそれが一番いいですか!
ありがとうございます!!
882 Name: 名称未設定 [sage] Date: 2008/10/08(水) 19:23:55 ID: 4ZTxCEDH0 Be:
ローカライズ作業をしていたところ突如Xcodeが強制終了して
立ち上げ直したのですがなぜかローカライズがまったく反映されなくなってしまい
前日まで作業していた分も全てローカライズがはずれてしまいました。
Localizable.stringファイルを削除し新規に作り直したのですが、まったく反映されません。
試しに新規プロジェクトでローカライズしてみたところ、ちゃんと反映されました。
強制終了した際にプロジェクトファイルが壊れてしまったのでしょうか?
どこかXcode側で設定しなおしてみる項目などはありますか?
883 Name: 名称未設定 [sage] Date: 2008/10/09(木) 00:31:21 ID: mF789dp10 Be:
一番初めのObjective-Cプログラム - @IT
http://www.atmarkit.co.jp/fcoding/articles/objc/02/objc02a.html
884 Name: 882 [sage] Date: 2008/10/09(木) 05:14:32 ID: qeuBkKCx0 Be:
Xcodeが強制終了したので先入観でファイルが破壊されたのかと疑っていたのですが、
結局、事前に一度にたくさん編集していたLocalizable.stringファイル内でセミコロンが抜けていただけでした。
失礼致しました。
885 Name: 名称未設定 [sage] Date: 2008/10/10(金) 19:16:18 ID: L0qzaxQU0 Be:
Cocoa-Dev-Japan (GoogleML) が… ちょっお前、binding の前に KVC が…
とにかくHMDT本か荻原本読めよ、って感じになってる ヽ(#`Д´)ノ
886 Name: 名称未設定 [] Date: 2008/10/12(日) 08:38:45 ID: UeP+1Xtv0 Be:
Xcode 3.1です。
Mail.appのspliter下部の、縦3本線が入ったもの(↓)を実現したいのですが、どのようにしたら良いのでしょうか。
http://wktk.vip2ch.com/vipper106389.png
887 Name: 名称未設定 [sage] Date: 2008/10/12(日) 11:11:46 ID: 4WLMBQ1Y0 Be:
>>886
画像用意すれば?
888 Name: 名称未設定 [sage] Date: 2008/10/12(日) 13:07:15 ID: D9KSzLTv0 Be:
>>886
Bathyscaphe のコードを読めば?
889 Name: 名称未設定 [sage] Date: 2008/10/12(日) 13:39:33 ID: EkZL2P090 Be:
boolで設定できるようなメソッドなんてないからな
890 Name: 名称未設定 [sage] Date: 2008/10/12(日) 16:33:30 ID: UeP+1Xtv0 Be:
回答ありがとうございます。

>>888
BathyScaphe見てみます。

>>887,889
標準でCocoaに搭載されているわけでは無いんですか、了解です。
891 Name: 名称未設定 [sage] Date: 2008/10/13(月) 10:23:40 ID: fnx1FSJm0 Be:
ヒレガス本 (3rd ed.) 買ったら、なんとスクリーンショットが XCode 3.1 系になってた。びっくり。
892 Name: 名称未設定 [sage] Date: 2008/10/13(月) 15:10:17 ID: qv+NzKd90 Be:
日本語版出たの?
893 Name: 名称未設定 [sage] Date: 2008/10/14(火) 00:28:17 ID: mOuH6PRf0 Be:
あ、いや、英語版。新規ファイルの画面とか、iPhone 用... とかいう項目も表示されてて、ちょっと NDA 破っていたんではないかと思います。
894 Name: 名称未設定 [sage] Date: 2008/10/14(火) 06:18:27 ID: isaZ0j8N0 Be:
Document-based Application以外の方法で作ったプロジェクトに
あとからNSDocumentのサブクラスとMyDocument.nib追加しても
MyDocumentをインスタンス化してくれないのは、やっぱり
リンクしてるフレームワークが違うからなんですかね。
途中でドキュメントベースアプリケーションに切り替える方法って
ないんですかね
895 Name: 名称未設定 [sage] Date: 2008/10/14(火) 06:23:20 ID: uAJ7zTji0 Be:
Document-based Applicationとしては、最低限Cocoaフレームワークにリンクしてればいいはず。
Info.plistの設定が足りてないんじゃないかと。
新規Document-based Applicationプロジェクト作って見比べてみれば。
896 Name: 名称未設定 [sage] Date: 2008/10/14(火) 07:15:03 ID: R8Rv/utE0 Be:
切り替えってか、最初に選ぶのはただのテンプレだから
>>895のおっしゃる通り、何かしらの設定が足りてないだけ
897 Name: 名称未設定 [sage] Date: 2008/10/14(火) 09:45:43 ID: iYELuUXd0 Be:
>894
Info.plistの設定をする必要があります。
898 Name: 名称未設定 [sage] Date: 2008/10/14(火) 10:18:36 ID: KQeOZJ2S0 Be:
一度 [x] でウインドウを閉じた後、
Dockのアイコンをクリックして再度ウインドウを表示するには
どうしたらよいのでしょうか?
899 Name: 898 [sage] Date: 2008/10/14(火) 11:28:43 ID: KQeOZJ2S0 Be:
ちなみに Cocoa Application で作成しています。
900 Name: 名称未設定 [sage] Date: 2008/10/14(火) 16:40:23 ID: isaZ0j8N0 Be:
>>895,896,897
なるほど。もうちょっと調べてみます。
901 Name: 名称未設定 [sage] Date: 2008/10/14(火) 18:10:17 ID: iYELuUXd0 Be:
>>900
Info.plistを直接いじるんじゃなくて、
ターゲットの情報(プロジェクトじゃない)から設定するのが普通です。
空のDocument-Base Applicationを作って見て見るといいと思います。
902 Name: 名称未設定 [sage] Date: 2008/10/15(水) 13:05:53 ID: X12wPIuI0 Be:
NSExpression/NSPredicate についてご教示ください。
NSExpression の expressionForKeyPath: と expressionForVariable:
って何が違うのでしょうか? それぞれ、NSPredicate predicateWIthFormat中の
%K、$ に相当すると理解しているのですが、$ ってどう使うのかガイドを
読んでもよく分からず(SQLを知らないから?)。やりたいことはできたのですが、
$ が分からないのが気持ち悪くて…よろしくお願い致します。
903 Name: 名称未設定 [sage] Date: 2008/10/15(水) 14:03:04 ID: yNmlq9pv0 Be:
SQLに'$'なんてあったかな?

Predicate Format String Syntaxにも$なんて出てこないけど?
904 Name: 名称未設定 [sage] Date: 2008/10/15(水) 14:04:18 ID: yNmlq9pv0 Be:
と思ったら書いてあるじゃん

Variables are denoted with a $ (for example $VARIABLE_NAME).

ちゃんとドキュメント読めよ。
905 Name: 名称未設定 [sage] Date: 2008/10/15(水) 14:27:54 ID: X12wPIuI0 Be:
言葉足らずですみません。ガイドやリファレンスは読んだのですが、その例が
理解できなくって。その、VARIABLE はどういったものになるのでしょう?
クラス変数は expressionForKeyPath: で取れて来るのは確かめたのですが、
expressionForVariable: でやってみると、'NSInvalidArgumentException'が
投げられて、reason: 'Can't get value for 'hoge' in bindings'、となりました。
'bindings' とあるので、controller に対して掛けるものなのかなぁ?とか、
考えたのですがよく分からず…よろしくお願いします。
906 Name: 名称未設定 [sage] Date: 2008/10/15(水) 15:23:33 ID: X4uGROjz0 Be:
>>905
どこが解らないのか、理解できませんが、
Predicate Programming Guideの
Creating Predicates Using Predicate Templates
http://developer.apple.com/documentation/Cocoa/Conceptual/Predicates/Articles/pCreating.html#//apple_ref/doc/uid/TP40001793-219639-BCIIHDCH

を参照してください。

有効なpredicateにするにはpredicateWithSubstitutionVariablesでvariableを変換します。
907 Name: 名称未設定 [sage] Date: 2008/10/15(水) 16:06:02 ID: X12wPIuI0 Be:
>>906
>どこが解らないのか、理解できませんが、
レスありがとうございます。うまく伝えられずごめんなさい。
以下のような事だと理解していいでしょうか?
・$hoge は述語の中の place holder みたいになっている。
・NSPredicate を実際に使うときに、$hoge の中身を predicateWithSubstitutionVariables
で(動的に)指定する。
・同じ処理を$... を使わない場合には、NSpredicate を個別にインスタンス化する
必要があるので、$... を使う方がよい。
ということですか?
908 Name: 名称未設定 [sage] Date: 2008/10/15(水) 17:34:16 ID: X4uGROjz0 Be:
>>907
906です。
おおむね、その理解で良いのではないかと思います。

variableが有用なのは、特にdateです。
「dateが今日である」とか「dateが2週間以内」といったpredicateはvariableでないと作れません。

spotlight query には$timeが使えますが、それ以外では自前で作成する必要があります。
909 Name: 907 [sage] Date: 2008/10/15(水) 18:59:48 ID: X12wPIuI0 Be:
>>908
なるほど、とてもすっきりしました。ありがとうございます。
自分の作っている物では、数値やboolの比較しかやってないので、その用途が
document 読んだにもかかわらず(汗、イメージすら出来ていませんでした。
ありがとうございました。
910 Name: 名称未設定 [] Date: 2008/10/15(水) 20:06:29 ID: cArxvyPQ0 Be:
NSStringに関する質問です。
hoge=[NSString stringWithString:@"test"];
を行った場合は、hogeはメインスレッド終了後解放され、
hoge=[[NSString alloc] initWithString:@"test"];
を行った場合はメインスレッド終了後も解放されないのはわかるのですが、
hoge=@"test";を行った場合はどうなるのでしょうか。
hoge=[NSString stringWithString:@"test"];と同様の処理になるのでしょうか。それとも違うのかな…
911 Name: 名称未設定 [sage] Date: 2008/10/15(水) 20:25:32 ID: f5mk9D5/0 Be:
メインスレッドが終了するとすべてのオブジェクトが破棄されます。
解放の処理は行われません。

てのは置いといて、
[[NSString alloc] initWith...]
と同じと考えておけば良いです。
912 Name: 名称未設定 [sage] Date: 2008/10/15(水) 20:27:46 ID: cArxvyPQ0 Be:
>>911
stringWith…
dictionaryWith…
arrayWith…
とかは、デフォでautoreleaseしているものだと思っていたのですが、違うのでしょうか。

initWith…と同等ですか、ありがとうございます。
913 Name: 名称未設定 [sage] Date: 2008/10/15(水) 20:29:41 ID: X4uGROjz0 Be:
>>910
hoge=@"test" のretainCount を調べてみると良いですよ。
914 Name: 名称未設定 [sage] Date: 2008/10/15(水) 20:30:38 ID: cArxvyPQ0 Be:
>デフォでautoreleaseしているものだと思っていたのですが、違うのでしょうか。

ソースは、詳解Objective-C 2.0 P103
"一方、一時的に使われることを前提として、オーナーを持たない形で生成されるインスタンスもあります。
このような一時的なインスタンスは、生成直後に自動解放プールに登録することで実現されています。"
915 Name: 名称未設定 [sage] Date: 2008/10/15(水) 20:48:12 ID: f5mk9D5/0 Be:
意地悪すぎましたか。
あなたが「メインスレッド」という名称だと思っているものは多分「メインランループ」です。
そうだとしても間違った解釈をしてますが。
メインスレッドというのは簡単にいっちゃえば、アプリケーションの実行の流れです。
これが終了するってことはつまり、アプリケーションが終了するってことです。

>911の始めで言ってるのは
「アプリケーションが終了したらオブジェクトはすべて破棄されます」
ってことです。

916 Name: 名称未設定 [sage] Date: 2008/10/15(水) 22:44:59 ID: cArxvyPQ0 Be:
>>915
ありがとうございます。
917 Name: 名称未設定 [sage] Date: 2008/10/15(水) 23:34:58 ID: PvLIPph40 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/10/16(木) 00:33:11 ID: yCQlP8sI0 Be:
>>917
ありがとうございます。オブジェクト定数で調べたら載っていました。
919 Name: 名称未設定 [sage] Date: 2008/10/16(木) 02:55:17 ID: IxQHpoVP0 Be:
というかそれぐらい基本的なことはまず聞く前に過去ログを呼んだ方がいい
920 Name: 名称未設定 [] Date: 2008/10/16(木) 02:58:26 ID: u4dOHZt50 Be:
おーい、過去ログーっ!
921 Name: 名称未設定 [sage] Date: 2008/10/16(木) 03:03:04 ID: IxQHpoVP0 Be:
呼んで見つかったら次は読んでね
922 Name: 名称未設定 [sage] Date: 2008/10/16(木) 04:30:30 ID: 4acnW/Ie0 Be:
http://sankei.jp.msn.com/photos/culture/arts/080501/art0805011905006-p1.jpg
923 Name: 名称未設定 [sage] Date: 2008/10/16(木) 05:09:11 ID: dwqlPggA0 Be:
うまいねえ、これでインスタンスかい?
924 Name: 名称未設定 [sage] Date: 2008/10/17(金) 04:12:23 ID: T8gpvSXs0 Be:
10/15 付けの新ドキュメントをざっとながめてたんだけど、
http://developer.apple.com/documentation/Cocoa/Reference/NSTextInputClient_Protocol/Reference/Reference.html
ていう新 protocol がでてた。しかし
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSTextInput_Protocol/Reference/Reference.html
との違いがほとんどわかりません。詳しい方よろすく
925 Name: 名称未設定 [sage] Date: 2008/10/17(金) 11:51:31 ID: wwiyQt7f0 Be:
NSDictionaryをファイルに書き出す時に日本語文字列が
"\Uxxxx" のようにUnicodeの文字コードに変換されてしまうのを回避することはできないでしょうか?

PropertyListでなくてNSDictionaryのdescriptionInStringsFileFormatの形式で書き出したいのです。
NSStringやNSPropertyListSerializationを経由してどうにかならないかとやってみましたが解決できませんでした。
Property List Editor.appでファイルフォーマットをText Property Listにして書き出した場合も日本語は文字コードに変換されてしまうのでやっぱり無理なのでしょうか?
926 Name: 名称未設定 [sage] Date: 2008/10/17(金) 12:18:02 ID: dwaA01i20 Be:
直接やる方法はわかりませんが、
単に NSDictionary のキーを keyEnumerator で列挙して、
それを徐々に NSMutableString かなにかにつなげていって、
ファイルに書き込みたい文字列をつくったら、
NSString の -writeToFile:atomically:encoding:error:
で書き込めばいいと思います。
encoding 指定は NSUTF8StringEncoding でいいと思います。
927 Name: 名称未設定 [sage] Date: 2008/10/17(金) 12:46:30 ID: wwiyQt7f0 Be:
ありがとうございます
とりあえず今それでやっていますが辞書がいれごになって複雑になると大変ですね;
自前のdescriptionとしてカテゴリにしておこうかな
直接的に変換しない方法もあればよろしくお願いします
928 Name: 名称未設定 [sage] Date: 2008/10/17(金) 15:21:26 ID: 7NVYtTTJ0 Be:
>>925
たぶんプロパティリストのシリアライズと関係があると思うけど、
key = value; 型のものは旧式 (OPENSTEP由来)のもので、基本的にASCII。それが¥Uxxxxになる
理由だったと思う。
今はなるべくXML形式かバイナリ形式でシリアライズすることになっている。
ローカライズに使う.stringsファイルはちょっと例外的で、UTF-8/UTF-16をそのまま使えるけど。

ちなみに¥UxxxxというやつはNSNonLossyASCIIStringEncodingというエンコーディングとして
定義されているので、NSStringとかでこれを指定して読み込めば本来のUnicodeに戻る。

>とりあえず今それでやっていますが辞書がいれごになって複雑になると大変ですね;

リーフノードが規約かどうかで再帰コードでも書いたらいいだけだと思うけど。
そもそも入れ子(?)になってたら、stringsファイル形式では表現できないような。
あ、上で書いたいわゆるOPENSTEP形式のプロパティリストで入れ子にしたいということかな。
929 Name: 名称未設定 [sage] Date: 2008/10/17(金) 16:18:00 ID: wwiyQt7f0 Be:
そうです、おっしゃる通りstringsファイル形式ではなくてNSPropertyListOpenStepFormat形式のプロパティリストファイルで、
かつ日本語表示させたいということでした。
説明していただいた文章を読むと、\Uxxxxはユニコードの文字コードがASCIIエンコーディングで表示されているということですかね。
そのあたり勘違いしていたようです。
複数のプログラム、プラットフォーム間でのデータのやり取りを想定しているので、プロパティリストではなく編集も容易なテキスト形式が好ましいかなと思い、かつ日本語表示もできるほうがいいよなと試行錯誤中でした。
XMLだと普通に日本語表示されるけど(PropertyListEditorなんかは除いて)テキスト編集が大変かなぁと、、
どうしたらいいのか分からなくなってきたのでもう一度やりとりするファイルの形式から考えなおしてみます。
Javaとか分かれば解決なんでしょうけどorz
930 Name: 名称未設定 [sage] Date: 2008/10/17(金) 19:47:10 ID: wLdb94V30 Be:
>>924
単純に、NSTextInputを機能拡張したものが、NSTextInputClientなのでは?
NSTextInputは、インフォーマルではない普通のプロトコルなので、メソッドの追加や変更ができません。
そのため、新しいプロトコルが定義されたのではないかと思います。

931 Name: 名称未設定 [sage] Date: 2008/10/18(土) 00:52:35 ID: BOpHtGbQ0 Be:
>>929
プロパティリストっていってもただのXMLだから大体の環境で読み込みとか問題なさそうな気がするけど違うのかな?
まあ、簡単に編集ができると言う部分はちょっとだけ微妙かもしれないか。
932 Name: 名称未設定 [sage] Date: 2008/10/18(土) 01:27:26 ID: G97j1AaDP Be:
DOM面倒だし、YAMLとかにしたほうがいいのかな
933 Name: 名称未設定 [sage] Date: 2008/10/18(土) 02:24:23 ID: iCLvp6LK0 Be:
>>929
>そうです、おっしゃる通りstringsファイル形式ではなくてNSPropertyListOpenStepFormat形式のプロパティリストファイルで、
>かつ日本語表示させたいということでした。

というわけで、これ自体は、一旦OPENSTEP形式で書き出してからそれをNSStringに
NSNonLossyASCIIStringEncodingで読み込んで、最終的にUTF-8等で書き出し、でいいと思うけど。

クロスプラットフォームならむしろXML形式の方がいいと思うけどね.... Mac OS X以外の
環境でどういう処理をしたいのかによるけど。
934 Name: 名称未設定 [sage] Date: 2008/10/18(土) 03:46:52 ID: IhdInhk50 Be:
xml のパーサは OS X以外のどの環境でも最近は標準で備わっていたり、オープンソースであったりするので、UTF8 + XML でデータをやりとりするのがかんたんだと思いますよ。

OpenStep 形式のファイルのパーサを OS X 以外の環境で自前で書くのは車輪の再発明で無駄だというのに同意。
935 Name: 925 [sage] Date: 2008/10/18(土) 05:35:50 ID: Z6oi/mZ20 Be:
みなさんありがとうございます。
今回PCに詳しくない人でもなんとかテキストエディタで編集できるレベルでと考えてたこと、
またProperty List EditorなんかはDeveloperが入っていないといけないというのと、
自分がWinの方でのXMLの処理についての知識が浅かったということで、XML形式でなくOPENSTEP形式にこだわっていました。
昨晩は結局自前のdescriptionを書いて日本語表示をちまちま実装していましたが、力尽きて寝てしまい起きて>>933氏の書き込みを見てやり直してみたら一瞬でできました。
ちなみにプロパティリストの書き出し時に関してですが、NSPropertyListOpenStepFormatは読み込み時にしか使えないため以下のようにしました。
936 Name: 925 [sage] Date: 2008/10/18(土) 06:12:47 ID: Z6oi/mZ20 Be:
カテゴリを実装
@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 Name: 名称未設定 [sage] Date: 2008/10/18(土) 08:05:10 ID: jwVyMTzD0 Be:
カテゴリ内のメソッド名は UnicodeString とかいうめちゃくちゃ一般的な名前じゃなくて、
stringByInterpretingUnicodeEscapes
とかのほうがいいのでは ... 将来ソースコードみたときに判らんようになると思います。
938 Name: 名称未設定 [sage] Date: 2008/10/18(土) 08:15:39 ID: iCLvp6LK0 Be:
>>936
あそうそう、OPENSTEP形式だとさらに、いくつかの種類のオブジェクトがちゃんと扱えないという
制限があったはず。ひょっとするとNSDateもそうかも。
939 Name: 名称未設定 [] Date: 2008/10/18(土) 21:57:33 ID: yxG0x10r0 Be:
http://blog.livedoor.jp/applebrothers/archives/51710722.html

Mac OS X Snow Leopard

Appleの次期 Mac OS X ”Snow Leopard”の Finder をCocoaベースに書き直されるそうです。
開発者に配布されていたビデルドの中には、Appleのアプリケーションの多くがCocoaベースになるみたい。



使う側はどんなメリットを享受できるの??
940 Name: 名称未設定 [sage] Date: 2008/10/18(土) 22:27:20 ID: QKUic2LJ0 Be:
>>939
微妙にスレチだが。

RubiscoとかがFinderでも使えるようになるとかじゃね?
941 Name: 名称未設定 [sage] Date: 2008/10/19(日) 00:30:28 ID: GocoJ3Jz0 Be:
>>939

>>940が言うように
現状「Cocoaアプリ」に対してしか有効にならないようなInputManager・SIMBL系ユーティリティーアプリ(InputSwitcherとか)がFinderでも使えるようになるとか、
Finderに何らかの機能を追加するものが新たに現れてくるかも知れないとかかな?
942 Name: 名称未設定 [sage] Date: 2008/10/19(日) 00:36:37 ID: fyHuP6sk0 Be:
Cocoaになると、
情報ウインドウのテキストフィールドみたいに右クリックが効かないような
変態コントロールが消滅する。
943 Name: 名称未設定 [sage] Date: 2008/10/19(日) 00:38:10 ID: qkdgIcer0 Be:
SafariやTerminalのタブUIをFinderについに持ってくるとか?
944 Name: 名称未設定 [] Date: 2008/10/19(日) 00:55:24 ID: ovHjUs7s0 Be:
64bit対応
945 Name: 名称未設定 [sage] Date: 2008/10/19(日) 01:54:13 ID: r4448ZUV0 Be:
>現状「Cocoaアプリ」に対してしか有効にならないようなInputManager・SIMBL系ユーティリティーアプリ(InputSwitcherとか)がFinderでも使えるようになるとか、
64bit 環境では InputManager は読み込まれないよ。すくなくとも Leopard では。No luck。
http://developer.apple.com/releasenotes/Cocoa/AppKit.html#NSInputManager
946 Name: 名称未設定 [sage] Date: 2008/10/19(日) 02:32:44 ID: 83U3hEGa0 Be:
HIToolBoxとは何だったのか
947 Name: 名称未設定 [sage] Date: 2008/10/19(日) 22:20:00 ID: l6O+M1yT0 Be:
うーむ。

CGImageからNSBitmapImageRepを作成して、ColorAtX: y:でピクセルを走査
して輪郭抽出をしようとしてるんだが、だいたい同じピクセルでColorAtX: y:がク
ラッシュする…

なんか忘れてるのかな…
948 Name: 名称未設定 [sage] Date: 2008/10/19(日) 22:35:14 ID: NSsk/A210 Be:
>>947
参考までにコードが見てみたい
949 Name: 名称未設定 [sage] Date: 2008/10/19(日) 23:28:44 ID: l6O+M1yT0 Be:
>948
長いのでrtfにしてアップした。素人なんで読みにくかったりしたらスマン。
ttp://www1.axfc.net/uploader/He/so/149527.rtf&key=hagehage
950 Name: 948 [sage] Date: 2008/10/20(月) 00:33:39 ID: 7+Ajp/DO0 Be:
>>949
俺のレベルじゃさっぱり解らん

CGImageRef imageRef = CGWindowListCreateImage(CGRectInfinite,
kCGWindowListOptionOnScreenOnly,
kCGNullWindowID,
kCGWindowImageDefault);
if(imageRef != nil)
{
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:imageRef];
int kk;
int ii = -100;
while(1)
{
_++ii;
_if( [[bitmapRep colorAtX:ii y:ii] blueComponent] != 1.0f)
_{
__kk++;
_}
}
...
とやってxyに不正っぽい値を入れてみたがクラッシュしなかった

maskのreleaseが抜けてると思う
951 Name: 名称未設定 [sage] Date: 2008/10/20(月) 00:58:35 ID: tYbaNcny0 Be:
>>947
これが原因かはわからないけど、大量にループを行う場合は、自分でNSAutoreleasePoolを作って、一回転するごとに解放したほうが良いよ。
952 Name: 名称未設定 [sage] Date: 2008/10/20(月) 02:09:05 ID: +9jJpcbV0 Be:
おお、皆さんありがとうございます。

>948
クラッシュしませんか。何が悪いんだろう。
デバッガ見てるとmach_msgなんちゃらってのが呼ばれることが多いです。
んでレインボーが戻らなくなる。

あと、ガベコレ使ってるんでmaskはreleaseしてやらなくて良かったと思うです。

>951
collectIfNeededでガベコレ起動してみましたが同じでしたorz

とりあえず今日は寝ます…
953 Name: 名称未設定 [sage] Date: 2008/10/20(月) 03:41:51 ID: /f27WlYe0 Be:
colorAtXって糞重いだろ。
CGImageならそこからビットマップの配列を得て直接アクセスしちゃった方がいいよ。
もしくはシェーダー書いてCoreImageにやらせちゃうとか。
954 Name: 名称未設定 [sage] Date: 2008/10/20(月) 13:08:24 ID: nIC0u2zZ0 Be:
とあるCで書かれたライブラリを使用してアプリを作ってるんですが、
そのライブラリの中でsyslogでログを吐き出している部分があります。
ログの吐き出す部分をNSLogで拾いたいんですが、どうすればいいんでしょう?
CからObjective-Cで書かれた関数を呼ぶのだと思うのですが、やりかたがわかりません。
955 Name: 名称未設定 [sage] Date: 2008/10/20(月) 13:29:56 ID: QUsMcljN0 Be:
syslogdと直接会話してるから、通常の方法だと無理です。
トロイの木馬的手法が必要かと。
956 Name: 名称未設定 [sage] Date: 2008/10/20(月) 13:43:57 ID: WleJ6NH/0 Be:
ソースかきかえてしまえるなら、
syslog 読んでるところを
CFStringRef stringRef=CFStringCreateWithCString...
CFShow(CFStr("%@"),stringRef);
CFRelease(stringRef);
とかにしてしまえばいいです。
957 Name: 名称未設定 [sage] Date: 2008/10/20(月) 15:26:16 ID: nIC0u2zZ0 Be:
>>955
言い忘れてました。すみません。
ライブラリをソースで持ってきて、手を入れまくってました。
syslogを呼んでいるところを書き換えて~と書くべきでした。

>>996
ありがとうございます。
ちょっと書き換えましたが、これでうまく動きました。

CFStringRef stringRef = CFStringCreateWithCString(kCFAllocatorDefault, str, kCFStringEncodingUTF8);
CFShow(stringRef);
CFRelease(stringRef);

CFShowでstderrに吐き出してやればよかったんですね。
勉強になりました。ありがとうございました。
958 Name: 390 [sage] Date: 2008/10/21(火) 10:25:22 ID: w4YMV4Y10 Be:
すみません。Cocoaというより、C/C++の質問なのですが、
Mac環境ということでお許しください。
.cファイル中では
errno変数を使ったコードのビルドにうまくいくのですが、

.cppファイルに記述すると
では以下のようなリンクエラーになってしまいます。
"__error()", referenced from:

どうも、C++としてコンパイルすると、定義が以下のようになっているので
__BEGIN_DECLS
extern int * __error(void);
#define errno (*__error())
__END_DECLS
関数ポインタのマクロとしてerrnoが扱われているようです。
しかし、この実装がみつからないとしてエラーになっているようです。

この実装はMacではどのライブラリに存在するのでしょうか。普通Cランタイムとかlibcだと思うのですが、訳が分かりません。
ちなみにXcodeのテンプレートはCocoaアプリケーションです。
959 Name: 390 [sage] Date: 2008/10/21(火) 10:59:51 ID: w4YMV4Y10 Be:
すみません。自己解決しました。
.cの時に自分で
extern int errno;
とか書いてたのをそのままにしてだけでした。
申し訳ありませんorz
960 Name: 名称未設定 [sage] Date: 2008/10/22(水) 08:48:42 ID: G4xuy3MvO Be:
cocoa初心者なのですが、アクション/ターゲットについて質問です。

例えばNSButtonがクリックされるとIBで指定されたアクションを実行しますが、ターゲット側(NSButton)のソースでは、アクションについてどのように記述されているのでしょうか。

-mouseDownメソッド内で“指定されたアクションを実行する”のような処理が記述されていると
予想していますが、実際はどのようにアクションを認識・実行しているかが気になっています。
分かりにくい文章で申し訳ございませんが、よろしければお答えお願い致します。
961 Name: 名称未設定 [sage] Date: 2008/10/22(水) 09:30:24 ID: G4xuy3MvO Be:
960です。
すみません、自己解決しました。以後気をつけます。
962 Name: 名称未設定 [sage] Date: 2008/10/22(水) 09:49:16 ID: Mw0YFpd20 Be:
>>961
まあまあそう言わずにw ってゆうか自己解決したんだ。

>-mouseDownメソッド内で“指定されたアクションを実行する”のような処理が記述されていると
>予想していますが、実際はどのようにアクションを認識・実行しているかが気になっています。

Appleの中の人しかソースは見ることができないので、適当なところでデバッガをブレークすると例えば

#0 0x90912556 in -[NSTextField selectText:] ()
#1 0x9089ab03 in -[NSApplication sendAction:to:from:] ()
#2 0x9089aa40 in -[NSControl sendAction:to:] ()
#3 0x9089a8c6 in -[NSCell _sendActionFrom:] ()
#4 0x90899f1f in -[NSCell trackMouse:inRect:ofView:untilMouseUp:] ()
#5 0x90899772 in -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] ()
#6 0x9089902c in -[NSControl mouseDown:] ()
#7 0x9089776b in -[NSWindow sendEvent:] ()
#8 0x90864311 in -[NSApplication sendEvent:] ()
#9 0x907c1d0f in -[NSApplication run] ()
#10 0x9078ef14 in NSApplicationMain ()
#11 0x00001ffc in main (argc=1, argv=0xbffff6f4)

#0 が最終的に実行されたアクション(とりあえずテキストフィールドでテキストを選択するだけ)。
どうでしょう、想像通りだったでしょうか。
963 Name: 名称未設定 [sage] Date: 2008/10/23(木) 20:07:08 ID: MMbmu+X20 Be:
質問するまではわからないんだけど、質問し終わると
何故か解決方法がひらめくのはよくあること。

質問を書いてるうちに頭の中が整理されるんだろうね。
964 Name: 名称未設定 [sage] Date: 2008/10/23(木) 21:43:43 ID: Yy5H9pzU0 Be:
>>963
いわゆるconfessional debuggingというやつね。それはまあいいんだけど

>ソースでは、アクションについてどのように記述されているのでしょうか

>実際はどのようにアクションを認識・実行しているかが気になっています。

という質問で、結局何が知りたかったのかなあと思って。
いろんなレベルの回答がありえると思うので。
965 Name: 名称未設定 [] Date: 2008/10/24(金) 06:40:46 ID: B/J0lmE00 Be:
Pythonと連携した文字コード自動判別を試しています。
以下のソースを実行した際、変数sには"SHIFT_JIS"が入っていることを確認しているのですが、
[[encodingDB valueForKey:s] intValue]は、0が返されてしまいます。
[[encodingDB valueForKey:@"SHIFT_JIS"] intValue]では、ちゃんと8が帰ってきます。
考えられる原因はなんでしょうか…

NSTask* t=[[NSTask alloc] init];
NSPipe* p=[NSPipe pipe];
NSPipe* e=[NSPipe pipe];
NSData* d;
NSData* f;
NSString* s;
NSLog([[NSBundle mainBundle] pathForResource:@"chardet" ofType:@"py" inDirectory:@"chardet-1.0.1"]);
[t setLaunchPath:@"/usr/bin/python"];
[t setArguments:[[NSArray alloc] initWithObjects:[[NSBundle mainBundle] pathForResource:@"chardet" ofType:@"py" inDirectory:@"chardet-1.0.1"],[absoluteURL relativePath],nil]];
[t setStandardOutput:p];
[t setStandardError:e];
[t launch];
[t waitUntilExit];
f=[[e fileHandleForReading] availableData];
if([f bytes] != NULL){
s=[[NSString alloc] initWithData:f encoding:NSShiftJISStringEncoding];
NSLog(@"Python Error:%@",s);
*outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
return NO;
}
d=[[p fileHandleForReading] availableData];
s=[[NSString alloc] initWithData:d encoding:NSShiftJISStringEncoding];
NSLog(@"%@",s);

966 Name: 名称未設定 [] Date: 2008/10/24(金) 06:42:18 ID: B/J0lmE00 Be:
//続き
NSMutableDictionary* encodingDB=[[NSMutableDictionary alloc] init];
[encodingDB setValue:[NSNumber numberWithInt:NSASCIIStringEncoding] forKey:@"ASCII"];
[encodingDB setValue:[NSNumber numberWithInt:NSISO2022JPStringEncoding] forKey:@"ISO-2022-JP"];
[encodingDB setValue:[NSNumber numberWithInt:NSJapaneseEUCStringEncoding] forKey:@"EUC-JP"];
[encodingDB setValue:[NSNumber numberWithInt:NSShiftJISStringEncoding] forKey:@"SHIFT_JIS"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF8StringEncoding] forKey:@"UTF-8"];
[encodingDB setValue:[NSNumber numberWithInt:NSUnicodeStringEncoding] forKey:@"UTF-16"];
[encodingDB setValue:[NSNumber numberWithInt:NSWindowsCP1250StringEncoding] forKey:@"windows-1250"];
[encodingDB setValue:[NSNumber numberWithInt:NSWindowsCP1251StringEncoding] forKey:@"windows-1251"];
[encodingDB setValue:[NSNumber numberWithInt:NSWindowsCP1253StringEncoding] forKey:@"windows-1253"];
[encodingDB setValue:[NSNumber numberWithInt:NSWindowsCP1254StringEncoding] forKey:@"windows-1254"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF16BigEndianStringEncoding] forKey:@"UTF-16BE"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF16BigEndianStringEncoding] forKey:@"UTF-16BE"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF16LittleEndianStringEncoding] forKey:@"UTF-16LE"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF32StringEncoding] forKey:@"UTF-32"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF32BigEndianStringEncoding] forKey:@"UTF-32BE"];
[encodingDB setValue:[NSNumber numberWithInt:NSUTF32LittleEndianStringEncoding] forKey:@"UTF-32LE"];

NSLog(@"%d",[[encodingDB valueForKey:s] intValue]);
967 Name: 名称未設定 [sage] Date: 2008/10/24(金) 07:19:07 ID: INydzdlX0 Be:
うちでは問題なく 8 が帰ってくるよ。
python 部分はためしてないけど、NSLog で s をみる直前で s=@"SHIFT_JIS" をいれて試してみました。
chardet.py の出力に改行がはいってませんか? SHIFT_JIS¥n みたいなかんじ。
968 Name: 名称未設定 [sage] Date: 2008/10/24(金) 07:26:19 ID: INydzdlX0 Be:
あと、手で dictionary を設定しないでも
CFStringConvertIANACharSetNameToEncoding
というのがあります。

というか、折角 python 読んでしまうのなら、エンコーディング判定だけにつかうんでなくて、
そもそも UTF8 に python で変換してしまって Obj-C のコード側は Unicode 扱うだけにしてしまえばいいのでは?
969 Name: 名称未設定 [sage] Date: 2008/10/24(金) 11:43:34 ID: PesN4ZfR0 Be:
すっごく初歩的な話で申し訳ないんですが、
QTMovieにsetRate:を渡すとその瞬間に再生まで始まるのはやめさせられないんでしょうか?
あと、一旦再生終了すると再生レートが1.0に戻っちゃう気がするんですが。
970 Name: 名称未設定 [sage] Date: 2008/10/24(金) 14:10:56 ID: AE3DkSdm0 Be:
setRate:のドキュメント読んでみ
971 Name: 名称未設定 [sage] Date: 2008/10/24(金) 15:40:29 ID: PesN4ZfR0 Be:
>>970

and so on.
(:I)rz その他って言われても・・・。
972 Name: 名称未設定 [sage] Date: 2008/10/24(金) 17:41:32 ID: DNmWcLFs0 Be:
setRate:0.0は停止
setRate:1.0は1.0倍速で再生
setRate:1.5は1.5倍速で再生

再生スピードのみを設定しているわけではなく
再生状態も含めての設定だったと思ったよ。
973 Name: 名称未設定 [sage] Date: 2008/10/24(金) 19:34:37 ID: AE3DkSdm0 Be:
exactly
974 Name: 名称未設定 [sage] Date: 2008/10/24(金) 20:09:45 ID: B/J0lmE00 Be:
>>967-968
ありがとうございます。改行が入っていたのが原因でした。
s = [s substringToIndex:[s length]-1];
にて最後の1文字を除去したところ、うまくいきました。

CFStringConvertIANACharSetNameToEncodingってあったんですか…
975 Name: 名称未設定 [sage] Date: 2008/10/24(金) 21:20:59 ID: SmJ05MaZ0 Be:
>>974
>CFStringConvertIANACharSetNameToEncodingってあったんですか…

そして NSShiftJISStringEncoding != SHIFT_JIS であることを知る、と…
IANA charset を使うということはもしかして html のエンコーディングを扱おうとしてる?
Windows で作った html には気を付ける必要があったりするかもねえ…
976 Name: 名称未設定 [sage] Date: 2008/10/24(金) 23:15:12 ID: 7WBwsZ1F0 Be:
質問です。
サイトのfaviconを取得するにはどうすれば良いのでしょうか?
htmlから<link rel="icon" href="xxx" >を探し出すか、
ルートにfavicon.icoがあるか探し出すしかないのでしょうか?
もっと簡単な方法があればありがたいのですが。
977 Name: 名称未設定 [sage] Date: 2008/10/24(金) 23:40:02 ID: INydzdlX0 Be:
何に使いたいの?WebKit すでに使ってるなら、
WebFrameLoadDelegate の一部として通知されるけど。
http://developer.apple.com/documentation/Cocoa/Reference/WebKit/Protocols/WebFrameLoadDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20001910-CIABDIEH
978 Name: 名称未設定 [sage] Date: 2008/10/25(土) 13:34:32 ID: dAG3ht8q0 Be:
>>977
ありがとうございます。WebKitではあるんですね。
んー、当方はNSURLConnectionでHTMLデータ取ってきたり、
自作のブックマーク機能にURL文字列を登録した際にfaviconが表示できるといいなと。
979 Name: 名称未設定 [sage] Date: 2008/10/26(日) 00:37:02 ID: yTC0LMQm0 Be:
サブクラスを作った時に基底クラスを呼ぶべきものとその他の区別はどうやってつけてますか?
NSViewのサブクラスを作成したら
initWithFrameは[super initWithFrame:frame];が作成されてて
drawRectには無いですよね
リファレンスには何も書いてないように見えますが、initとdeallocだけ基底を呼んどけば良い?
980 Name: 名称未設定 [sage] Date: 2008/10/26(日) 02:57:54 ID: VIU1E1PZ0 Be:
init...: と dealloc: にかんしては
http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_6.html
にかいてある。
それ以外の method に関しては、 super を呼ぶかどうかは
決まりごとじゃなくてどうしたいかでしょう。
-keyDown: で、動作を付け加えたいなら [super keyDown:]も呼ぶべきだし、
動作を完全にのっとりたいなら super はよばないほうがいい。
981 Name: 名称未設定 [sage] Date: 2008/10/26(日) 03:44:12 ID: Ato5tySs0 Be:
Cocoaはさっぱり!!! version.11
http://pc11.2ch.net/test/read.cgi/mac/1224960170/
982 Name: 979 [sage] Date: 2008/10/26(日) 04:59:11 ID: JUMWnuQe0 Be:
>>980
なるほど、とりあえず呼んどくことにします。
983 Name: 名称未設定 [sage] Date: 2008/10/26(日) 19:45:32 ID: PmjoJ6HJ0 Be:
984 Name: 名称未設定 [sage] Date: 2008/10/26(日) 21:06:27 ID: oz3o+Uig0 Be:
985 Name: 名称未設定 [sage] Date: 2008/10/26(日) 21:48:11 ID: oz3o+Uig0 Be:
さらに梅
986 Name: 名称未設定 [sage] Date: 2008/10/26(日) 21:53:52 ID: PmjoJ6HJ0 Be:
うま
987 Name: 名称未設定 [sage] Date: 2008/10/26(日) 21:57:17 ID: 9R7bhdy60 Be:
988 Name: 名称未設定 [] Date: 2008/10/26(日) 22:13:30 ID: NOr9EILb0 Be:
梅さんと南先生はライバル!
989 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:18:38 ID: PmjoJ6HJ0 Be:
うも
990 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:21:18 ID: Wcazo9Bp0 Be:
ここはMac界の名だたるフリーウェアの作者さんも多いんですかね?
991 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:22:14 ID: PmjoJ6HJ0 Be:
いいえ
992 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:22:56 ID: PmjoJ6HJ0 Be:
うみぇ
993 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:23:59 ID: PmjoJ6HJ0 Be:

ttp://mac.ascii24.com/mac/news/misc/2007/01/10/images/images831088.jpg
994 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:25:57 ID: leFDhUAz0 Be:
青い箱でアメリカ大統領の名前でローマ法王に電話をかける訳か>>993
995 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:27:33 ID: PmjoJ6HJ0 Be:
Cocoaはさっぱり!!! version.11
http://pc11.2ch.net/test/read.cgi/mac/1224960170/
996 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:29:19 ID: PmjoJ6HJ0 Be:
Cocoaはさっぱり!!! version.11
http://pc11.2ch.net/test/read.cgi/mac/1224960170/
997 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:31:42 ID: PmjoJ6HJ0 Be:
Cocoaはさっぱり!!! version.11
http://pc11.2ch.net/test/read.cgi/mac/1224960170/
998 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:31:53 ID: Wcazo9Bp0 Be:
そうですか
999 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:32:43 ID: PmjoJ6HJ0 Be:
いいえ
1000 Name: 名称未設定 [sage] Date: 2008/10/26(日) 22:33:22 ID: PmjoJ6HJ0 Be:
1000ならObjective-C 3.0で
1001 Name: 1001 [] Date: Over 1000 Thread ID: Be:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
This page was generated by Dat2HTML Rev.