Cocoaはさっぱり!!! version.X(10)
1 :
Cocoa :
2008/05/20(火) 22:27:35 ID:ItX/CuiA0 前スレが終了したみたいなので立てました。 過去ログとかよくわからないのでフォローお願いします。
2 :
名称未設定 :2008/05/20(火) 22:43:11 ID:sG8g16K80
3 :
名称未設定 :2008/05/20(火) 22:57:38 ID:8Odxygdm0
4 :
名称未設定 :2008/05/20(火) 23:10:29 ID:7Hvy2BoK0
5 :
名称未設定 :2008/05/20(火) 23:12:32 ID:7Hvy2BoK0
6 :
名称未設定 :2008/05/20(火) 23:23:40 ID:RwxhciDA0
ObjectiveC++最高ぉ
7 :
名称未設定 :2008/05/20(火) 23:30:39 ID:tYSiPPVw0
8 :
名称未設定 :2008/05/20(火) 23:37:49 ID:KHEABemo0
9 :
名称未設定 :2008/05/20(火) 23:50:51 ID:HRwZ9j3i0
>>7 Java がトップとは、当たり前のような、そうでないような…
10 :
名称未設定 :2008/05/21(水) 00:08:18 ID:rWpwWuzp0
え、当たり前以外の何物でもなくね?
11 :
名称未設定 :2008/05/21(水) 09:23:41 ID:f3o28oAX0
そもそも今MacOSX用アプリを開発してる会社が何社あるのやら・・・。
12 :
名称未設定 :2008/05/21(水) 10:22:01 ID:Y93RS+ry0
アメリカには一杯あるよ 日本にはほとんどないけど ...
13 :
名称未設定 :2008/05/21(水) 21:18:40 ID:21cJALCV0
HMDTが募集してんじゃんw
14 :
名称未設定 :2008/05/21(水) 22:13:00 ID:L3QcPzgd0
>>7 俺、Lispやろうかな。へたれPGの俺は求人件数よりも求人倍率の低さ
で採用されるかもしれないから。
15 :
名称未設定 :2008/05/22(木) 00:54:28 ID:pDh7HLnh0
それってさらに Emacs Lisp Common Lisp Scheme とかに細分化されてるだろうからなぁ 一つに絞りたがっても意味ないよ 煽りじゃなく色々やった方がいいよ 得意分野として特定の言語を伸ばすのはアリだけど、特性の違う2、3の言語にまたがっといた方がいい 折角Macportsで手軽に色々入れられるんだし
16 :
名称未設定 :2008/05/22(木) 19:23:46 ID:F0xUDbhN0
ようつべを利用したいのですが、サンプルプロジェクトによくある GData.frameworkというのはどうすれば手に入れられるのでしょうか?
17 :
名称未設定 :2008/05/22(木) 19:48:31 ID:46WSZxhf0
ヒレガス本第3版今届イタ━━━━(゚∀゚)━━━━!!!! Garbage Collection も Core Animation も載ってるね つーか、やっぱり Leopard に対応するために、当初の予定より 出版が遅れたんだろうな‥
18 :
名称未設定 :2008/05/22(木) 19:51:27 ID:QT31KVFx0
そういえば、Leopardも遅れたな。
19 :
名称未設定 :2008/05/22(木) 20:02:40 ID:O70xzo5x0
>>17 第2版と比べて
どれくらい変わってます?
目次でいいので教えて。
20 :
17 :2008/05/22(木) 20:23:52 ID:46WSZxhf0
>>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 :
19 :2008/05/22(木) 21:11:01 ID:O70xzo5x0
22 :
名称未設定 :2008/05/22(木) 22:56:09 ID:3rHyH/v/0
ページ数も増えてるよね>第3版
23 :
名称未設定 :2008/05/22(木) 23:11:40 ID:u2zk9cyj0
>>16 ググれ。
つーか、googleに聞け。
つーか、googleを調べろ。
24 :
17 :2008/05/22(木) 23:41:56 ID:46WSZxhf0
>>22 第2版 450ページ
第3版 433ページ
25 :
名称未設定 :2008/05/23(金) 00:17:04 ID:T833at980
>>23 Googleとは小一時間格闘して敗北したんですけど、
objective-c用?のをダウンロードできるところが無さそうでした。
(っていうか、そもそもそういうものなのかもわからず)
ソースを落としてコンパイルするのですかね?
26 :
名称未設定 :2008/05/23(金) 00:29:38 ID:o+/m2vgU0
27 :
名称未設定 :2008/05/23(金) 02:24:54 ID:j99xmi9d0
28 :
名称未設定 :2008/05/23(金) 02:48:48 ID:3AyFrRZN0
>>27 attributesにPreserves Aspect Ratioってチェックがあるけど。
29 :
名称未設定 :2008/05/23(金) 03:01:23 ID:j99xmi9d0
30 :
名称未設定 :2008/05/23(金) 04:21:31 ID:dXEXmQ0i0
>>27 こういうのってなんで作ってるんだろうと思う
ターゲットはいるのかな、趣味なのかな
31 :
名称未設定 :2008/05/23(金) 04:25:01 ID:IL6J9Zwh0
>>30 ゆくゆくはiTunesよりも高機能に育てる過程の一つとか。
32 :
名称未設定 :2008/05/23(金) 09:58:56 ID:cwPsB5600
シンプルに連続再生して垂れ流ししたい iTunesが重い iTunesが扱えないフォーマットが扱える(QuickTimeで再生出来れば) Cocoaプログラミングの勉強 などです。
33 :
名称未設定 :2008/05/23(金) 22:33:32 ID:T833at980
>>26 ああ、お恥ずかしい限りで。
そのページは何度も見ていたはずなのですが(^^;
なんというか、「GData.Framework」という文字ばかり探してました。
DLしてビルドしたら(エラーになりましたけど)GData.Frameworkフォルダが生成されたので
これを使えば良いのだろうと思って次に進みます。
34 :
名称未設定 :2008/05/23(金) 22:51:17 ID:jKCdJQha0
Foundationは思想かなにかですか?
35 :
名称未設定 :2008/05/24(土) 01:12:15 ID:DcLAwtro0
>>32 iTunesが扱えないフォーマット、に関してはすごく同意する
ようするに他のフリーソフトに関してもしがらみがないってある種強みだよね
36 :
名称未設定 :2008/05/24(土) 01:22:23 ID:LruzwE630
現在、NSOutlineViewの使い方を勉強中です。 で、サンプルプロジェクトやネット上での解説ページを見ていたところ、 return (item == nil) ? YES : ([item numberOfChildren] != -1); の様な表記をよくみかけました。 これはどのように解釈すれば良いのでしょうか。
37 :
名称未設定 :2008/05/24(土) 01:55:20 ID:gZp6b3Ai0
>>36 itemがrootなら、YESを返す。
itemが内包数0のフォルダ(num = 0)ではなく、ファイルなのでexpandしないようにする。
つーか、その質問だけではちょっと意味不明だよ。
FileSystemItemのアレについて質問しているのだろうけど。
38 :
36 :2008/05/24(土) 03:01:01 ID:NtDdGehO0
>>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 :
名称未設定 :2008/05/24(土) 03:26:59 ID:gZp6b3Ai0
>>38 > となっていた場合、aを評価した結果がYESならbを、NOならcを返す、という理解でよろしいでしょうか。
うん。
40 :
36 :2008/05/24(土) 03:28:15 ID:NtDdGehO0
41 :
名称未設定 :2008/05/25(日) 17:58:40 ID:lLZMSYBY0
>>35 wmvとかflvとか、コンテナmovにしちゃえばいいのに。
全部まとめて管理できる所に意味があると思う。
42 :
名称未設定 :2008/05/27(火) 23:52:33 ID:CZYQD03h0
萩原さんの「詳解 Objective-C 2.0」 もう手に入れた人居ます? 買いなのかな?
43 :
名称未設定 :2008/05/28(水) 09:09:00 ID:L3/IqKQ00
44 :
名称未設定 :2008/05/28(水) 12:55:17 ID:opb4iFeH0
アマゾンで、ヒレガスさん3+萩原さん2.0=9,321円、萩原さん2.0は明日到着
45 :
名称未設定 :2008/05/28(水) 21:49:31 ID:VttZwart0
46 :
名称未設定 :2008/05/29(木) 00:53:38 ID:WGFKGrSC0
>>42 まだぱらぱらめくった程度だけど
おととしに出た「Objective-C Mac OS Xプログラミング」の
バージョンアップといった感じ。章の構成や内容は同じものが多いです。
前の本を持っていないなら、買って損はしないと思うよ。
47 :
42 :2008/05/29(木) 08:33:18 ID:rVgTXt350
>>46 前の本も
前の前の本も
持ってるだけに
悩むな〜
今日出勤前に本屋に寄って
少し眺めてから決めます。
48 :
名称未設定 :2008/05/30(金) 00:33:33 ID:PlwTpTkX0
Cocoaと言うよりObjective-Cの質問?なのですが、いいですか? 現在Cで記述したプログラムがあります。 データの最大数は不定なので、可変でデータを保持したかったのですが、面倒だったので、 データ領域を大きめに確保して、固定長の配列として処理しています。 データは配列の番号でインデックスされ、歯抜けになっても新たなデータが来ると若い順に 埋めていきます。 ObjCに移植するにあたって、NSMutableArrayに置き換えようと思ったのですが、NSMutable Arrayは要素が消されると自動的に配列を詰める、とのことで、配列番号での索引が利かなく なるようです。 このような場合、データ数を可変で確保でき、且つ、配列番号での索引ができるいい方法が ありますか?
49 :
名称未設定 :2008/05/30(金) 00:40:51 ID:xrC+L8bu0
>>48 別に Obj-C は C の拡張なので、すでに配列で出来てる箇所を
NSArray に変える必要がないとおもうんですが ...
どうしても Cocoa にかえたければ、NSDictionary つかって、数字じゃなくて文字列でタグをつければしまいだとおもいます。
50 :
名称未設定 :2008/05/30(金) 00:47:59 ID:CkhV8SZM0
>>48 要素を削除するときにその位置にあるオブジェクトを取り除くのでなく、
値をNSNullに変更するようにすれば、元の処理と同じようにできると思います。
元のCのコードでもNULLにするなどしていますよね?
51 :
名称未設定 :2008/05/30(金) 23:32:12 ID:L1G/osgq0
>>47 >持ってるだけに
>悩むな〜
今日尼から届いた。1.0→2.0の変化詳しく50ページほど増量。
ま、前版もってても買いじゃね、とおもた
52 :
名称未設定 :2008/05/31(土) 00:41:36 ID:9zILcVHo0
>>49 折角良さげなものがあるので、固定長配列を可変長に変えたかった、というのが主な理由です。
>>50 なるほど、考えてみれば別に取り除かなくてもいいんですもんね。有り難うございました。
53 :
46 :2008/05/31(土) 01:28:09 ID:m3HKOXME0
>>47 10.5の新しいトピックを中心に1/3くらいまで読み進めました。
32/64bit、ガーベジコレクションで注意が必要なところなど、
細かいとこが丁寧にフォローされてる。
てゆーか、罠多すぎ>ガベコレ
・10.5以降でプログラムを書かない
・あとで買えなくても泣かない
というのでなけりゃ、買いかと。
54 :
名称未設定 :2008/05/31(土) 12:29:28 ID:WjiDQvAu0
名古屋大須の三洋堂で買ってきた。まだ2冊あったぞ。昨日の話だけど。
55 :
名称未設定 :2008/05/31(土) 13:03:56 ID:MFBihJHB0
今Amazonから届いた けど読む暇がない
56 :
名称未設定 :2008/05/31(土) 16:52:17 ID:EZpALD+x0
>あとで買えなくても泣かない これが一番問題になるなw
57 :
名称未設定 :2008/05/31(土) 22:53:52 ID:r05FKlJl0
IM制御をしようとしてます。 前スレ 915 を参考にして、ターミナル上で、ことえり日本語入力時に int main() { TISInputSourceRef tis = TISCopyCurrentASCIICapableKeyboardInputSource(); TISSelectInputSource(tis); CFRelease(tis); } を実行すると、見た目(メニューバーのとこ)は英字になるのに いざ入力しようとすると日本語のままなんですが、 うまくいく方法ありますか?
58 :
名称未設定 :2008/06/01(日) 11:09:53 ID:bmGuDI3g0
>>57 うちではそれでちゃんと動く気がする
(ことえり、egbridge とも)
59 :
57 :2008/06/02(月) 00:17:15 ID:5l7yqjBi0
>>58 ども。
一旦、ターミナルを非アクティブにして、もう一度アクティブにすると
入力も英字になるんですけど...
そういう処理を入れりゃいいのか。。
60 :
名称未設定 :2008/06/02(月) 05:46:08 ID:U2iAatA00
>>59 それしなくてもうちは英字入力に切り替わるけど?
日本語変換中の文字が残っている場合のこと?その状態でどうやってプログラムを走らせればいいか良くわからんけど ...
61 :
57 :2008/06/02(月) 15:42:09 ID:5l7yqjBi0
>>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 :
名称未設定 :2008/06/02(月) 23:49:54 ID:U2iAatA00
>>61 うちでは再現しないよ ... 謎。
メニューバーも英字になって、入力してもちゃんと英字になります。
ためしてみたけど、bash/zsh のちがいでもなさそう。
IM はなにをつかってる? キーボードは英語キーボードなのかな。
こちらは日本語キーボードなので。それぐらいしか違いが見当たらない。
63 :
名称未設定 :2008/06/03(火) 01:33:09 ID:wMSlazAP0
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 :
名称未設定 :2008/06/03(火) 01:34:22 ID:wMSlazAP0
>>63 訂正
×UserDefaultsと"ThreadURL"キー
○Shared User Defaults Controllerの"ThreadURL"キー
65 :
名称未設定 :2008/06/03(火) 06:10:10 ID:pp+RRbGE0
あるViewの上にテンプレートのようなViewを置きたいと思ってます。 下のViewは通常通り動くものが出来上がっていて、その上にImageViewをのせて そのViewに - (void)mouseDown:(NSEvent *)theEvent { [[self nextResponder] mouseDown:theEvent]; } - (void)mouseUp:(NSEvent *)theEvent { [[self nextResponder] mouseUp:theEvent]; } とか各種イベントをスルーするようにすれば下に行くものだと思っていたらう まく下のViewにイベントが渡って行きませんでした。何か根本的な考え違いが あるのでしょうか?
66 :
名称未設定 :2008/06/03(火) 07:40:43 ID:IEedy5rj0
superviewに渡すもんじゃない?
67 :
名称未設定 :2008/06/03(火) 08:03:37 ID:91xa2rp50
何をしたいか分からんけど、 下のviewの描画をオーバーライドすればいいんじゃね? - (void)drawRect:(NSRect)rect { [super drawRect:rect]; //テンプレ描画 }
68 :
名称未設定 :2008/06/03(火) 08:10:05 ID:pp+RRbGE0
>>66 >>67 上に乗っているViewは下のViewのsubViewではありません。描画上重なっている
だけで、上のテンプレート表示は下のViewより大きくなる場合があります。
イメージのオブジェクトがいくつかあって、その上に定規のステンシルがオー
バーレイで乗っている状況です。この状態で定規は動かさず、下のオブジェク
トの操作がしたい訳です。
69 :
名称未設定 :2008/06/03(火) 08:49:49 ID:oXsq6zVd0
>>63 う〜ん、たしかにかなり変わってるね。
IB3 でも、単純に URL の中身を表示させたかったら、WebView の takeUTLfrom: というアクションを NSTextField のターゲットにしておくという方法があるけど。
70 :
名称未設定 :2008/06/03(火) 12:58:41 ID:aw4+EDm70
弟がスーパーハカーを目指してるらしく、まずCから始めようと思ってるらしい 1からC言語を勉強するサイトってどこがいいかな。書籍はamazonで購入して発送待ち 目当てはMacやiPhoneで使う自作アプリだからObjective-Cをやりたいんだと思うけど このままでは俺の3日間しかない黄金週間が潰されてしまうので助けてください
71 :
名称未設定 :2008/06/03(火) 13:08:46 ID:XD4GWoXw0
その黄金週間までに、スーパーハカーへの道を閉ざすというのも手だ。
72 :
名称未設定 :2008/06/03(火) 22:56:02 ID:kOTQ+iAx0
>>68 ViewにとってのnextResponderはsuperViewだよ。
だから、下のViewとsubViewの関係にないなら、イベントを中継するコードを手動で書かないとダメかもね。
つまり、マウスダウンした座標から、下のどのViewの上にいるのかを計算して、そのViewのmouseDown:メソッドを直接呼び出すみたいな感じ。
73 :
名称未設定 :2008/06/04(水) 00:09:16 ID:p9a2L9Dk0
acceptsFirstResponderでNOを返すんじゃだめだっけ? これはキーイベントだけだったかな…
74 :
名称未設定 :2008/06/04(水) 00:09:50 ID:T5rsQU4g0
>>72 なるほど、下にオブジェクトがそこそこ沢山あるので結構複雑になりますね。
単に「イベントはスルーするけど描画はするレイヤ」を上に置きたいためだけ
なのに、、、
ウィンドウを上において[window2 setIgnoresMouseEvents:YES];しておいて
このウィンドウに描画してやるとうまく行くかと思ったけど、このウィンド
ウをクリックした瞬間に下のウィンドウが上にでてきた←あたりまえ
もう少し考えてみます。
75 :
名称未設定 :2008/06/04(水) 00:47:24 ID:T5rsQU4g0
>>73 - (BOOL)acceptsFirstResponder {
return NO;
}
- (BOOL)becomeFirstResponder {
return NO;
}
- (BOOL)resignFirstResponder {
return NO;
}
やってみました。残念ながらオーバーレイの
- (void)mouseDown:(NSEvent *)theEvent {
に処理が飛んできました。
76 :
名称未設定 :2008/06/04(水) 04:43:59 ID:l7IMH3zH0
おれだったら、superviewにわたして、superviewからsubviewを全部チェックして適合するviewを探すかな。
77 :
57 :2008/06/04(水) 09:51:22 ID:FsqvQyEC0
>>62 IMはことえり
MacBook CoreDuoのUSキーボード
anthyでも試してみたけど、入力するとやっぱりひらがな。。
他にintelマシンないし、Cocoaはさっぱりなんで、AppleScriptで逃げます..
ありがとう。
78 :
名称未設定 :2008/06/04(水) 13:23:44 ID:PLLPbHtE0
Xcode 3.1/IB3です iTunesのように、閉じても"ウィンドウ"メニューから再び表示できるウィンドウはどのようにしたら作れるのでしょうか。
79 :
名称未設定 :2008/06/04(水) 14:33:09 ID:aQgm8y1m0
IBで"Dispose When Close"をoff ウインドウメニューにアイテム追加。 アクションを oderFront: とかその辺。
80 :
名称未設定 :2008/06/04(水) 14:56:02 ID:KlJQ+yiW0
OS 10.5だと、iCalは起動してなくてもDockのアイコンをカスタムにしてますがこれどうやってるんでしょう? -[NSApplication setApplicationIconImage:]の拡張っぽいものは見つかりませんが
81 :
名称未設定 :2008/06/04(水) 14:58:34 ID:2RtF4pPv0
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 :
名称未設定 :2008/06/04(水) 15:05:01 ID:PLLPbHtE0
>>79 "Dispose When Close"が見つからないのですが、Release when Closedのことで良いのでしょうか。
メニューアイテムを追加して、orderFlontにつなぐ方法は、IB2/Tigerのときは問題なく動いたのですが、IB3/Leopardでやるとアプリが起動時にフリーズします。
makeKeyandOrderFlontにつなぐと、つないだメニューは消えてしまうのですが、ウィンドウメニュー一番下のウィンドウ名の項目が閉じても残るようになります。
この方法でもウィンドウを再度開くことができることはできるのですが、ウィンドウを開いているとき、そのウィンドウを示す項目がウィンドウメニューに2つ表示されてしまうことになります。
また、閉じたときも項目がぽっかり消えてしまうのでなんか違和感があります。
83 :
名称未設定 :2008/06/04(水) 15:45:21 ID:aQgm8y1m0
>>82 おお。それそれ。
>とアプリが起動時にフリーズします。
うちでは問題ないけどな。なんかあるのかな?
>ウィンドウメニューに2つ表示されてしまうことになります。
-[NSWindow setExcludedFromWindowsMenu:]
これ。
84 :
名称未設定 :2008/06/04(水) 20:21:25 ID:xLFIAeEO0
>>80 Info.plist に
<key>DockExtra</key>
<string>iCalDockExtra.bundle</string>
ってあって,Dockがこれを呼び出してると思う。
85 :
名称未設定 :2008/06/04(水) 21:03:50 ID:FtD8O2Sd0
>>81 基本的にNSFastEnumerationが何回ループしたのか、ベースとなっている配列オブジェクト側で知るすべは無いように思います。
そのサンプルコードがうまく動作しているのは、NSEnumeratorをベースとしているからだと思います。
NSFastEnumerationは一気に16回ぐらいループできますが、NSEnumeratorの場合は1回づつ回してるんじゃないですかね。
特に調べた訳ではないですが。
86 :
名称未設定 :2008/06/04(水) 21:09:23 ID:0ZiY20sM0
87 :
名称未設定 :2008/06/04(水) 21:28:03 ID:PLLPbHtE0
88 :
87 :2008/06/04(水) 21:54:41 ID:PLLPbHtE0
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 :
名称未設定 :2008/06/04(水) 21:54:51 ID:FtD8O2Sd0
>>74 NSWindowのサブクラスを作って、-displayか-displayIfNeededあたりをオーバーライドすれば、Viewの再描画処理に割り込めるんじゃないかな?
もし、うまく割り込めたら、すべてのViewの再描画が完了した直後に、
[[window contentsView] lockFocus] か [NSGraphicsContext setCurrentContext: [window graphicsContext]]で
グラフィクスコンテキストを設定して、すべてのViewの上に画像を上描きできます。
手前に、ViewやWindowを重ねてる訳じゃないので、イベントを取られる事はないはず。
90 :
名称未設定 :2008/06/04(水) 22:06:28 ID:mSrg2YBE0
91 :
名称未設定 :2008/06/04(水) 22:07:39 ID:mSrg2YBE0
>>88 gc つかってる?それなら window が解放されてしまってるんでないかと思うけど ...
92 :
87 :2008/06/04(水) 22:25:26 ID:PLLPbHtE0
93 :
名称未設定 :2008/06/04(水) 22:30:53 ID:mSrg2YBE0
94 :
名称未設定 :2008/06/04(水) 22:31:08 ID:p9a2L9Dk0
Release When Closedはチェック「しない」って話じゃなかったか
95 :
87 :2008/06/04(水) 22:40:26 ID:PLLPbHtE0
>>93 [MainWindow setExcludedFromWindowsMenu: YES];
をするためにコントローラオブジェクトのアウトレットにMainWindowを繋いでいるんですが…
@interface NSApplicationDelegate : NSObject {
IBOutlet id Send2chView;
__strong IBOutlet id MainWindow;
}
ためしに__strongをつけてみましたが効果無しでした(´・ω・`)
96 :
名称未設定 :2008/06/04(水) 22:40:34 ID:YuPHi7F30
>91 どうだろう? 最初の5行を考えると、 主要nibファイル - NSMainNibFile -のFile's Ownerなんだと思う。 MainWindowはそのインスタンス変数。 で、[MainWindow setExcludedFromWindowsMenu: YES];でちゃんと動くってことは、 IBで MainWindowにちゃんと接続できてるんだと思うんだよね。 てことは、主要nibファイルのFile'sOwnerが解放されるってあり得ないから、 そのインスタンス変数がgcで解放されるなんてあり得ないと思うんだけど。 まあ、状況的にはMainWindowが解放されてるには違いないんだけど。 とはいっても、常人には理解不能な摩訶不思議な事をやってる可能性もあるんだよね。 ソースコード一式どかーんと見せてくれたら、みんな寄ってたかって直してくれると思うよ。 あと、 >88 それエラーじゃないから。
97 :
87 :2008/06/04(水) 22:42:01 ID:PLLPbHtE0
>>94 orz
Release When Closedのチェックを外したらいけましたorzorz
98 :
名称未設定 :2008/06/04(水) 22:45:07 ID:YuPHi7F30
あう。 リロードしてから書き込むべきだった。 しかもそれ一番始めに言ったじゃん。w
99 :
名称未設定 :2008/06/04(水) 23:15:26 ID:WH5iIvoT0
>>84 ,90
ありがとうございます。
まだprivateなAPIのようですね。
100 :
名称未設定 :2008/06/05(木) 03:28:08 ID:Iy8p9dIO0
PragmaticBookshelfからRubyCocoaの本出るみたいだね びっくりした
101 :
名称未設定 :2008/06/05(木) 03:28:39 ID:Iy8p9dIO0
102 :
名称未設定 :2008/06/05(木) 06:38:16 ID:N70IRzNR0
>>89 これ、挑戦してみます。
とりあえず、NSFloatingWindowLevelの透明ウィンドウを作って、setIgnoresMouseEvents
したものを描画したいウィンドウに自動追従する形で実装してみました。
移動したとき付いてくるのがちょっと遅れるのが気になる、、、
103 :
名称未設定 :2008/06/06(金) 18:58:26 ID:/nwOtou00
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 :
名称未設定 :2008/06/06(金) 19:04:13 ID:K898eDqK0
とりあえず +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] ね。 Forが一個足りない。 補完機能を使うかコピペしましょう。
105 :
名称未設定 :2008/06/06(金) 19:08:43 ID:/nwOtou00
106 :
81 :2008/06/06(金) 23:24:48 ID:DnNWuDyX0
>>85 > ベースとなっている配列オブジェクト側で知るすべは無いように思います。
NSFastEnumerationState構造体に空きスペースは充分あるんだから
情報を入れてほしいと思う今日この頃・・・
>>86 やはりそれしかなさそうですね。
ループ周りのコードをスッキリさせたかったんですが、残念です。
107 :
名称未設定 :2008/06/07(土) 03:06:06 ID:czfM+cV40
乱暴にコード減らしてみた 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 :
名称未設定 :2008/06/07(土) 05:36:42 ID:oLB88PWk0
ヒレガス本第3版のPDF買ってみたけど AdobeDigitalEditionという電子書籍ビュワー 入れないと見られないし、コピペも出来なので $35の値段のわりに微妙だった。
109 :
名称未設定 :2008/06/07(土) 08:19:56 ID:lneVQl2h0
それはひどい 経験を共有してくれてありがとう
110 :
名称未設定 :2008/06/07(土) 14:51:12 ID:bqgf91t00
>>106 NSFastEnumerationプロトコルを実装してる配列オブジェクト側からは、NSFastEnumerationState構造体に自由に情報を格納することができます。
問題となっているのは、そのNSFastEnumerationState構造体を他の場所から参照できないことだと思います。
111 :
名称未設定 :2008/06/07(土) 16:29:39 ID:TibeL3oq0
複数のNSButtonやNSTextFieldが集まって一つの機能を持った物。仮にこれをモジュー ルと呼びますが、このモジュールを部品として、IBで他のウインドウ上に配置でき るようにしたいのですが、スマートにする方法ってあるでしょうか? とりあえず今実現しているやり方はこうです: ・モジュールを表すカスタムビューを作る。モジュールを利用する側のウインドウ 上にはこのビューを配置する。 ・モジュール専用のnibファイルを用意して、その中にモジュールで使用するコント ロール類を並べ、モジュール内部のふるまいを実現するコントローラのインスタ ンスも作っておく。 ・カスタムビューは自分がロードされたら上記nibファイルをロードする。 ・モジュールを利用する側はカスタムビューとだけやり取りする。モジュール内部 には触れないようにする。(モジュール用nibて使っているOutletが表に見えない ようにする) これでうまくは行ってますが、なんかスマートじゃない気がします。 また理想的にはモジュールのパラメータ類もIB上で設定できるようにしたい・・。 となると、究極的にはIBのプラグインを作ればいいんでしょうけど、配布したり他 のアプリで使えるようなものでもないので、それはちょっと大げさかな、と。
112 :
名称未設定 :2008/06/07(土) 16:35:31 ID:TwyUwYCb0
>それはちょっと大げさかな、と。 面倒くさいとかやり方わからないの間違いでしょ。 あなたの実現したいものはibplugin以外の何者でもないじゃん。
113 :
名称未設定 :2008/06/07(土) 18:43:39 ID:TibeL3oq0
>>112 実のところibpluginも途中まで進めてましたが、ターゲットOSが
10.5以上でないとだめなようなので(今回は開発も実行も10.4)
他のやり方を探してるわけです。
「パラメータをIBで設定」なんかは無理だとしても、
複数のコントロールを一つにまとめて同じプロジェクト内で
使いまわす程度の事って、最新版のOS・・と言うほど
高度な話とは思えませんし、珍しい要求でもないですよね?
だから、今までは皆さんどうやっていたのか、
何か定番みたいな方法があるのでは?
と気になったから書いたんですが。
114 :
名称未設定 :2008/06/07(土) 18:48:34 ID:TwyUwYCb0
115 :
名称未設定 :2008/06/07(土) 19:21:17 ID:T3VD/+310
116 :
名称未設定 :2008/06/07(土) 19:35:40 ID:VBQ7XzHf0
117 :
名称未設定 :2008/06/07(土) 20:20:20 ID:N0VOrekx0
俺のdel.icio.usのsubscriptionsがObjective-Jでいっぱいなんだが
118 :
名称未設定 :2008/06/07(土) 22:50:58 ID:VBQ7XzHf0
119 :
名称未設定 :2008/06/10(火) 11:53:52 ID:v6XJxThv0
Xcode3.1 ベータ6を使ったCocoa Applicationの開発をして、友人にテストのためできあがったものをビルド構成Releaseでビルドして渡したのですが、起動しないと言われてしまいました。 ここでは私のプログラムした内容は正しかった、と仮定した上で質問があります。友人の環境はPPC G4, G5で10.4のはずなので、プロジェクトの設定のディプロイメントターゲットを10.4にしたのですが、デフォルトの設定から変更しなければならない項目は他にありますか?
120 :
名称未設定 :2008/06/10(火) 12:03:43 ID:8XOktTUG0
コンソールに出力されたものの内容を送ってもらう。
121 :
名称未設定 :2008/06/10(火) 12:25:46 ID:ZtjOgx420
>>119 新規プロジェクトでCocoaApplicationを選択、「プロジェクト設定を編集」の
「すべての構成のベースSDK」で「Mac OS X 10.4」を選択、Releaseをビルド
してG4 10.4.11に持っていったら普通に起動してウィンドウが出ました。
プロジェクトの設定が悪いのか、自分のプログラムが悪いのか、それとも
ツールがβ版だからなのか、という切り分けをした方がいいと思いますけど。
122 :
名称未設定 :2008/06/10(火) 14:51:37 ID:UgSK0RIy0
・PPC のコードが含まれていない ・友人のマックにはないフレームワークを使っているのに アプリに入れ忘れている とか
123 :
名称未設定 :2008/06/10(火) 14:52:35 ID:NdfOdpVf0
>119です。みなさんありがとうございます。 ベースSDKの設定の可能性が高いようです。今外なので確かめられませんが。 >121の方が言っているとおりもちろんそうすべきと思いますが、 自分の環境では問題なく動いていたため、 プログラミングミスはないものと仮定しました。 また、先日はベータ5を使って成功していたこと(ベータなので理由にはなりませんが)と、 私が一番自信がなかった部分がプロジェクト設定だったため そこに絞った質問にした次第です。 細かい説明を省いてしまい申し訳ありません。
124 :
名称未設定 :2008/06/10(火) 19:29:34 ID:M+lv1G8s0
122さんも書いてるけど、ディプロイメントターゲットだけでなく、アーキテクチャもよく確認を。 32bit Universal Binaryね
125 :
名称未設定 :2008/06/10(火) 20:26:50 ID:zi/2SxUe0
プログラムのミスうんぬんじゃなくてコンソール見て起動しない原因探せって意味だろうが 起動どころか開けないのなら配布する時に気付くだろうし
126 :
名称未設定 :2008/06/10(火) 20:56:17 ID:UzQ8SNX80
ビルド構成DebugのままでReleaseにし忘れてるとかはないか
127 :
名称未設定 :2008/06/10(火) 21:21:06 ID:tXsfQ9xo0
ここで公開すればいいじゃん。 よっぽど早くけりがつくよ。
128 :
名称未設定 :2008/06/10(火) 22:29:17 ID:RnNeIuj80
特定の時間になったら音を鳴らすアプリを作っているのですが 主音量を上げるメソッドってないんでしょうか?
129 :
名称未設定 :2008/06/11(水) 00:30:49 ID:+Muj4NnA0
勝手に音量を上げるとはウザいアプリだな。
130 :
名称未設定 :2008/06/11(水) 01:02:21 ID:BuT1Yz540
できるだろうけどCocoaじゃ無理じゃねーかな
131 :
名称未設定 :2008/06/11(水) 12:23:53 ID:7YtizGAL0
132 :
名称未設定 :2008/06/11(水) 16:35:05 ID:raOc4tIo0
>119です。
>>122 すいません、書き込んだとき気付きませんでした。
結論から言うと、設定ミスとプログラミングミスでした。
アーキテクチャはあっていました。
ベースSDKの設定、もしくはアクティブSDKの設定を変更し、
それでも起動しないためログを送ってもらったところ、
setImageScaling:が悪さをしていることが判明しました。
ビルド時にエラーが出なかったため、10.4ではメソッド自体が
無視されるものと勘違いしていました。
IBとコード内のImageScalingに関連している箇所を修正したところ
無事に起動しました。
お手数おかけしました。ありがとうございました。
133 :
名称未設定 :2008/06/11(水) 17:27:22 ID:7YtizGAL0
>>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 :
128 :2008/06/11(水) 23:17:21 ID:VSIeQFLB0
>130 確かにw 環境設定で制御できるようにしますw >131 >133 できました! ありがとうございました!
135 :
名称未設定 :2008/06/11(水) 23:23:57 ID:lty4nRSj0
>>132 結局プログラムミスもあったのか
性格的に向いてないよ
136 :
名称未設定 :2008/06/12(木) 04:36:35 ID:gv1qz7ju0
>>132 設定はよかったんじゃないの?
10.5以降にしかないメソッドを普通に使って、何もしてなかったということではないのかな?
137 :
名称未設定 :2008/06/14(土) 13:13:47 ID:BS7eOK3p0
10.6はQuickTimeに大ナタを振るのか。 こりゃ、のたれ死にするアプリが続出する予感。
138 :
名称未設定 :2008/06/14(土) 17:03:06 ID:r3BUjdUn0
139 :
名称未設定 :2008/06/14(土) 18:15:22 ID:chqMToVQ0
なんで開発してるのにWWDCの情報追っかけてないの?
140 :
名称未設定 :2008/06/14(土) 18:44:58 ID:FubexbBn0
>>137 んなこと言って無いが。QuickTime X、理解した?
141 :
名称未設定 :2008/06/15(日) 00:47:11 ID:Cygey6F/0
Quicktime「X」だなんて、いかにも 過去のレガシーAPIをバッサリいきそうな感じじゃない?
142 :
名称未設定 :2008/06/15(日) 03:35:28 ID:UNwFe1i20
143 :
名称未設定 :2008/06/15(日) 08:19:09 ID:XnhWKJTp0
144 :
名称未設定 :2008/06/15(日) 09:58:09 ID:oSH6UPle0
いきなり旧APIが使えなくなる訳じゃないだろうね、普通。 っていうか、もうQTKitを使っているアプリならば、互換性の問題を 避けて楽にQuickTime Xが使えるようになるってことだと思う。 現状、QTKitの下のQuickTimeはレガシーAPIの固まり。QTがあんまりにも あちこちで使われているものだから、上位Frameworkを用意してあげないと ベースをすげ替えるのが困難だということですね。 ・・・でも、QTKitって旧APIに相当する機能の大半を、今だに提供できて いないんだが、ホントにこれですげ替え出来るのかね?
145 :
名称未設定 :2008/06/15(日) 10:29:43 ID:XnhWKJTp0
>>144 12^2オメ
と云うのはさておき、提供出来てない部分は切り捨てられる可能性がある、と云うことでは?
まあ何がサポートされていないのかは知らないので自身は無いが。
146 :
名称未設定 :2008/06/15(日) 13:45:34 ID:ylVUqXAE0
VR とか 3D とか MIDI とか Text とか使ってる人いるんかいな? この辺が切り捨てられるんじゃ
147 :
名称未設定 :2008/06/15(日) 14:07:25 ID:wTLy4n/p0
メディアスキンとかね。 MIDIとTextは需要あると思う。
148 :
名称未設定 :2008/06/15(日) 14:08:32 ID:qeeMQ1ni0
VR はアップルの製品ページのギャラリー自体に使われてるので ...
149 :
名称未設定 :2008/06/15(日) 14:19:47 ID:wTLy4n/p0
もう今iPodぐらいしかVR使ってないんじゃん。
150 :
名称未設定 :2008/06/15(日) 14:38:33 ID:259xwVUM0
でも、来年初めにリリース&切り捨てなら、 今から「作り替えてくれ」なんてアナウンスしても遅すぎじゃない?
151 :
名称未設定 :2008/06/15(日) 14:46:39 ID:DgXC+pk00
>>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 :
名称未設定 :2008/06/15(日) 14:53:05 ID:wTLy4n/p0
>>151 あーあったw
iMac見たけど思わぬとこにあったわ
切り捨てはともかく、推奨しないってのはさんざん言ってきたような
移行期間は修了したってことじゃないかな
153 :
名称未設定 :2008/06/15(日) 14:58:22 ID:DgXC+pk00
普通はデザインのところにあると思うよなw
154 :
名称未設定 :2008/06/15(日) 18:15:00 ID:OFFyy1VM0
155 :
名称未設定 :2008/06/15(日) 20:53:59 ID:zzsH9bZe0
156 :
名称未設定 :2008/06/15(日) 21:10:50 ID:ylVUqXAE0
[tableView setDataSource:self]; ってやってみ。あと、 NSArray *datasrc; の実体は何処にあるんだ? とか色々妙な点があるので入門書を一冊買って読んだ方がいい。
157 :
名称未設定 :2008/06/15(日) 22:07:18 ID:S0ISsK4N0
setDataSourceに与える引数は, numberOfRowsInTableView:と tableView:objectValueForTableColumn:row: がインプリメントされてる「クラス(のインスタンス)」 じゃなかった?
158 :
名称未設定 :2008/06/15(日) 22:18:30 ID:jWHLIZ5t0
プログラマは何もする事が無い。 QuickTime Xによる最適化された再生は重いH.264等で必要な一部のみ。 QTKitの再生以外を行うAPIはLeopardと同様に動作する。
159 :
155 :2008/06/15(日) 22:35:19 ID:zzsH9bZe0
>>156 エラーメッセージの意味が理解できました。
ありがとうございます。
>NSArray *datasrc;
>の実体は何処にあるんだ?
もうこの時点で意味が分からないので、ちょっと旅に出てきます。
現状、NSTableViewへのバインド数が画面表示分の行数を超えると、
datasrcにオブジェクトが1つしかなくなってしまって、エラーになるのも
多分この辺が原因な気もしますし。
PyObjCで作った時はあんなに簡単だったのに…orz
>>157 ということなんですね。エラーメッセージ通りの意味でした。
160 :
名称未設定 :2008/06/15(日) 22:46:31 ID:PLDEhANR0
なんだ。じゃぁ、Component Managerとかにがっつり手を入れてくるわけ じゃないのか。残念。 想像するに、decompressorComponentTypeに代わる新規コンポーネント タイプを定義して処理体系を分離するような感じか? CoreVideo Pipelineにあうような実装変更とみた。 QT7でSoundManagerなStandardCompressionSubTypeSoundから、 CoreAudioなStandardCompressionSubTypeAudioにすげ替えたような 感じと想像。 これなら互換性は確保出来るだろうけど・・・ どうせなら、InterleavedとかInterlacedとかPlanarYUVとかの扱いにくさは 改良してほしいなぁ。
161 :
名称未設定 :2008/06/15(日) 23:22:42 ID:jWHLIZ5t0
64bit化は、次の課題。3rd partyのcomponentの変更も必要だから。 32bitエンジンとのプロセス間通信じゃBDの再生に支障を来すから、と見た。
162 :
155 :2008/06/15(日) 23:30:07 ID:zzsH9bZe0
>>156 ,157
頭を切り替えようとプロジェクトをいったん削除して、
CocoaDevやら何やらのサンプルを眺めながら、
ゼロから組み直して進めたら拍子抜けするほど簡単に出来ました。
ありがとうございました。報告まで。
163 :
名称未設定 :2008/06/16(月) 00:56:27 ID:pextnS8l0
質問です 0S10.5.3です DivXプレイヤー2.2のコンテキストメニューからデスクトップを選択したときの様に したいんですけど、どうすればいいですか? こんな感じです (1)壁紙の代わりに動画が再生されています(メニューはDivX) (2)デスクトップに置いてあるアイコンは選択できるし、アイコンやデスクトップをクリックすれば メニューはFinderになります、壁紙が動画になっただけのような感じです (3)Exposeですべてのウインドウを並べると普通のウインドウのように選択できます、選択した後は(1)の状態に戻ります 自作ウインドウに対しsetLevelでkCGDesktopWindowLevelを設定すればできるかと思ったんですが無理でした アイコンの下に描画されたがアイコン、デスクトップをクリックしたら自作ウインドウのクリックと認識される (3)の動作でウインドウとして並ばない このsetLevelした自作ウインドウを表示しDivXをデスクトップにしたら、DivXは自作ウインドウより前面のレベルに描画される 自作ウインドウはDivXに隠れているが、クリックイベントは受け取れる (3)はとりあえず置いとくして、描画だけ壁紙の代わりに描画しているのか イベントを背面のウインドウにスルーしているのかとか考えましたがどちらもやり方の検討がつきません 以上何かアドバイス、意見など頂けませんか? DivXがcocoaかどうかは、ちょっとわかりません
164 :
名称未設定 :2008/06/16(月) 01:30:03 ID:GXm3y6CT0
全然Cocoaはさっぱりなスレじゃ無い件
165 :
名称未設定 :2008/06/16(月) 06:58:19 ID:AaY9TCm60
>>163 [windou setIgnoresMouseEvents:YES]
でどうだろう?
166 :
名称未設定 :2008/06/16(月) 16:06:11 ID:xUL8HFRI0
LSUIElement = 1以外の方法で、 dockにアイコンを表示させなくする方法って無いですか? メニューバーは出したいのです。
167 :
名称未設定 :2008/06/16(月) 16:58:53 ID:nLvA84dY0
SetSystemUIMode
168 :
名称未設定 :2008/06/16(月) 19:44:48 ID:J90ThS3S0
169 :
名称未設定 :2008/06/16(月) 20:07:44 ID:HnijONm20
170 :
名称未設定 :2008/06/17(火) 01:32:10 ID:ypgNmm+l0
インスタンスの流儀について今ひとつ無理解なものからの質問です。 あるデータを共有するためのクラスDataを作成しました。 DataをIBでインスタンスにし、 IBでインスタンスに出来る他のクラスからの参照は 他のクラスでIBOutletを作成してDataへ接続して利用しました。 良く分からないのは、IBでインスタンスにせず、 プログラム上でインスタンスにするクラスからDataへの参照方法です。 知識的にはNSNibやNSApplicationのリファレンスを読んでみても この件に関してさっぱり糸口が見えないレベルであります。
171 :
名称未設定 :2008/06/17(火) 01:38:54 ID:MxqL1SlJ0
IBOutletでDataインスタンスの参照を持ってるクラスが インスタンス化したやつに参照教えてあげればいいじゃん
172 :
名称未設定 :2008/06/17(火) 02:01:40 ID:2Z6DpQEF0
allocしたやつがdataを返してあげればいいじゃn
173 :
名称未設定 :2008/06/17(火) 06:24:25 ID:HIrcziuV0
Dataって名前だとモデルなのかな? IBでモデルをインスタンス化するのは珍しい気がする。
174 :
166 :2008/06/17(火) 09:42:36 ID:jcIXFWOX0
>>167 SetSystemUIModeだとメニューバーまで消えちゃいませんか?
SetSystemUIMode(kUIModeAllHidden,kUIOptionDisableAppleMenu);
SetSystemUIMode(kUIModeContentHidden,kUIOptionDisableAppleMenu);
は試してみたんですが、期待する様な動作じゃありませんでした。
175 :
名称未設定 :2008/06/17(火) 11:57:37 ID:ROOb9CQQ0
176 :
名称未設定 :2008/06/17(火) 11:59:09 ID:99O8N3c20
>>174 普通 Dock に出ないアプリのときはメニューバーの右側にアイコンをだすしかないと思います。
177 :
170 :2008/06/17(火) 12:42:15 ID:ypgNmm+l0
>171
なるほど、私自身が確実に糸口(IBOutlet)つけたものが
あるのだから、そこから手繰るわけですね。
この発想はありませんでした、ありがとうございました。
>172
確かにおっしゃる通りで、例えば、ここら
http://cocoawithlove.com/2008/03/cocoa-application-startup.html 辺り等を読んでどこらへんで何がallocするのかを検討したのですが
今の私の知識では理解出来ませんでした。
引き続き調べてみます、ありがとうございました。
>173
(まだ術語的にうまく操れてる自信はありませんが)
おっしゃる通りMVCのM(モデル)の部分です。
最初、[NSApp delegate]で参照出来ないかと考えたのですが、
今の自分の知識では手法が分からず、取り敢えずその線は
あきらめて今回のIBでインスタンス化でやってみた次第であります。
流儀として珍しい系統であるとすると、今後何か支障を
来す事もあるかもしれません。他の実装方法も検討してみます。
コメントありがとうございました。
178 :
166 :2008/06/17(火) 13:12:05 ID:jcIXFWOX0
>>175 いえ、dockのアイコンを非表示にしたいだけです。
>>174 うーん。なるほどそうですか・・・。わかりました。
179 :
名称未設定 :2008/06/17(火) 13:18:42 ID:99O8N3c20
>>178 というか Dock のアイコン非表示、メニューバーだけ、というソフトにほかからどうやって切り替えるの?Dock から消したら Cmd-Tab でも切り替わらないだろうし ...
180 :
166 :2008/06/17(火) 15:52:08 ID:jcIXFWOX0
>>179 今、親ソフトから立ち上げる子アプリをバンドルの形で作ってて、
そっちはdockに出したく無いんですよ。でもメニューバーだけは子アプリを方を表示させたいんです。
181 :
名称未設定 :2008/06/17(火) 19:02:28 ID:AF6fQ7/I0
そんな部分にこだわらなくても利用者は気にしないよ。 こういうのを「床屋のオナニー」っていうんだっけ?
182 :
名称未設定 :2008/06/17(火) 21:57:22 ID:MxqL1SlJ0
そういうのはMenuExtraみたいな形にした方がいい気がする
183 :
名称未設定 :2008/06/17(火) 22:46:04 ID:I13n1WLn0
184 :
名称未設定 :2008/06/18(水) 00:02:46 ID:AeC8SojL0
>>180 そんな動作するソフトって他にある?
ユーザーを混乱させるだけだとおもうけど ...
185 :
名称未設定 :2008/06/18(水) 00:40:19 ID:0sjtBJ8F0
>>180 >そっちはdockに出したく無いんですよ
184じゃないが突飛な感じがするな
もう少し晒してくれれば誰かからいいアイデアでるかも
186 :
名称未設定 :2008/06/18(水) 03:14:27 ID:aZaN0e+W0
こういった批判の中からブレイクスルーするんですね、わかります。
187 :
名称未設定 :2008/06/18(水) 06:18:33 ID:ZpPcOH0s0
dockに出ないのなら子アプリにする必要すら無いと思うが。
188 :
名称未設定 :2008/06/18(水) 19:25:38 ID:JmkHn0ES0
丸ウェアを作りたいんだよ。
189 :
名称未設定 :2008/06/18(水) 20:42:19 ID:0lBcXg5v0
軍艦みたいだな
190 :
名称未設定 :2008/06/19(木) 07:19:02 ID:qttkZF1A0
191 :
名称未設定 :2008/06/19(木) 10:28:55 ID:dkzo9Jj60
アプリのアイコンを透過にすればいいんじゃね?
192 :
名称未設定 :2008/06/19(木) 10:33:02 ID:rhMGRNu40
ドックに隙間が空きますよ。あと下に起動中の印の黒三角(Tiger以前)か青白点(Leopard)がでます
193 :
名称未設定 :2008/06/19(木) 10:38:42 ID:tLwYtAlr0
166のやりたいことはLSUIElementでできるんだけどな もちろんそれだけじゃ駄目なんだけど でも決定的なのは無駄だってことだな
194 :
170 :2008/06/19(木) 12:25:14 ID:g1/Z810+0
195 :
名称未設定 :2008/06/19(木) 19:15:54 ID:LJCPJwrL0
わかった。 Finderのアイコンにすれば、どんくさいユーザーは欺けるかと。
196 :
名称未設定 :2008/06/19(木) 20:00:26 ID:IN6Id/OS0
最近Cocoaやり始めた初心者です・ NSStringオブジェクトからC文字列を取り出すcStringメソッドなのですが 10.4 SDKでは問題ないんですけど 10.5 SDKだとdeprecatedのワーニングがでてくるんです。 とりあえず使えるからいいんですが、これに変わるメソッドとかあるのでしょうか?
197 :
196 :2008/06/19(木) 20:15:22 ID:IN6Id/OS0
自己レスです cstringを cStringUsingEncoding:NSUTF8StringEncoding に変えてうまくいきました。スイマセン。。
198 :
名称未設定 :2008/06/19(木) 21:47:50 ID:CZER9Tmm0
table view のヘッダをクリックしたときに、 ソートとかせず何も反応しないようにするには どうすればいいですか?
199 :
名称未設定 :2008/06/19(木) 21:50:53 ID:cR2hfrj80
ソートしないように設定、、 バインド使ってるか否かで方法が違うけど
200 :
198 :2008/06/19(木) 22:01:03 ID:CZER9Tmm0
バインディングしてます [tableColumn bind: toObject: withKeyPath: options:]; でバインディングを設定した後に、 [tableHeaderCell setAction: nil]; というのを入れてみましたが、相変わらずソートしてしまいます。
201 :
名称未設定 :2008/06/19(木) 23:49:46 ID:IjZx3q/K0
AppleのサンプルコードのRoundTransparentWindowはNSWindowを透明にして
NSViewの一部分を透明にすることで、透明部分のマウスイベントがスルーされる様ですが
NSViewでOpenGLを使って描画すると
GLint opq = 0;
[openGLContext setValues:&opq forParameter:NSOpenGLCPSurfaceOpacity];
で透明にはなるんですが、透明部分でもマウスイベントがスルーされません
透明部分のマウスイベントはスルーしたいのですが
マウスイベントで透明部分かどうか判定し
>>72 の様に下のViewを検索して通知するしか無いでしょうか?
イメージはこんな感じで
ttp://www.watch.impress.co.jp/pc/docs/2002/0508/wwdc0141.jpg 動作はサンプルコードのRoundTransparentWindowみたいに色のついてるところだけ反応したい
202 :
名称未設定 :2008/06/20(金) 13:01:44 ID:NyIbt5u40
IB 2.0では、新規Nibの作成時にテンプレートの言語を選べたのですが、IB 3.0ではどこで選択できるのでしょうか。
203 :
名称未設定 :2008/06/20(金) 23:04:43 ID:emu6E9Wh0
よく分からんが、File -> Write Class Fileで言語は選択できるな。 初心者なもんで見当違いのことを言ってたらすまん。
204 :
名称未設定 :2008/06/21(土) 06:15:41 ID:G0KE6qM/0
夜中12時をまたいでアプリが走っているときに、 日付が変わった瞬間を知る良い方法ってありますか? NSTimer でひたすら時刻を取り続ければできますが、 残りの24時間の間は無駄な動作になるので、 日付が変わった瞬間に notification を受け取るようなのが やりたいです。
205 :
名称未設定 :2008/06/21(土) 06:49:08 ID:N9gnbwgv0
>>204 NSTimerは時間指定で呼び出す事も出来るけど。
206 :
204 :2008/06/21(土) 06:58:24 ID:G0KE6qM/0
>>205 d
NSTimer て、今までインターバル測るのにしか使ってなかった‥ orz
207 :
名称未設定 :2008/06/21(土) 07:00:12 ID:LClgiSkx0
runloopで時間指定って出来なかったっけ? それ以外だと、xNix的な考え方と組み合わせるのは? cronサービスでnotificationを飛ばすようなやつをくむとか。 シェルスクリプトからatコマンドを使うイメージ。
208 :
名称未設定 :2008/06/21(土) 11:32:35 ID:C54+0kUw0
Cocoaバインディングがさっぱり・・・ ややこしいなあ
209 :
名称未設定 :2008/06/21(土) 12:32:29 ID:kIEVYzos0
>>208 どこがわからんの?IB でバインドする変数名を指定するだけだと思うけど。
(すくなくとも第一歩は。)
210 :
名称未設定 :2008/06/21(土) 12:40:53 ID:C54+0kUw0
ああ、、そか、バインド先とkeyとパスを指定するくらいなんだ。。 沢山項目があるのでこんがらがってた。。
211 :
名称未設定 :2008/06/21(土) 16:47:43 ID:aJQoGXKZ0
KVOがむずかしすぐる、、、 特定のインスタンス監視して変化があったら特定のメソッド叩いて欲しいだけの 時にやらなきゃいけないことが山盛りで理解しきれてない。 NSTimerぐらい簡単に設定できればいいのに、、
212 :
名称未設定 :2008/06/21(土) 17:39:34 ID:m9NZ2CO10
>>211 ターゲット・アクションでいいんじゃね?
213 :
名称未設定 :2008/06/22(日) 00:02:38 ID:DwFjZeXi0
>>211 なにが難しいの?山盛りではないよね。
observeValueForKeyPath:ofObject:change:context:
を実装して、
addObserver:forKeyPath:options:context:
で登録するだけだと思うんだが...
一、二、沢山の未開民族以前の、二つの時点で沢山のひとですか?
214 :
名称未設定 :2008/06/22(日) 07:09:03 ID:sXHrp8O60
テキストフィールド2つだけの cocoaバインディングのサンプルないかな
215 :
名称未設定 :2008/06/22(日) 07:36:43 ID:DwFjZeXi0
それだけなら、なんか NSString* text; を中に持つオブジェクトをつくって、nib のなかにインスタンス化して、ふたつのテキストフィールドをそのオブジェクトの text にバインドするだけだけど ...
216 :
名称未設定 :2008/06/22(日) 10:49:12 ID:N0VcqJNZ0
個人的に思うのだが、Bindingの動作メカニズムをちゃんと理解していないと落とし穴が結構ある。 で、ちゃんと理解するにはKVOのメカニズムを理解していなきゃならない。 それにはObserverパターンとKVCの理解が必要で、さらに言えばそもそもObj-Cの実装が分かっていた方がいい。 それはつまりオブジェクト指向言語はどうやって作るのか?ってことで、それをCで考えるくらいの力があれば… Bindingを使いこなせるんじゃないかと思う。 っていうのは言い過ぎだとしても、「もう一段深いところ」を理解していると楽になること多いです。
217 :
名称未設定 :2008/06/22(日) 11:39:09 ID:sXHrp8O60
アセンブラからやり直します。。
218 :
名称未設定 :2008/06/22(日) 11:47:18 ID:RhCPffZv0
219 :
名称未設定 :2008/06/22(日) 11:58:13 ID:sXHrp8O60
>218 超さんくす!!
220 :
202 :2008/06/22(日) 13:20:35 ID:0Fs+nSDs0
>>203 すみません。プログラミング言語ではなく日本語/英語/中国語などの言語です。
221 :
名称未設定 :2008/06/23(月) 00:11:09 ID:FKweipuD0
interface builder3.0が糞な件について 研究室でObjective-Cを使ってプログラミングを書けって言われたんだけど、 何この糞みたいにめんどくさい開発ツールは。 なんでわざわざオブジェクトとコードのコネクションを手動で接続しなくちゃいけないわけ? Visul Studioをちょっとは学べよ。 あんなのダブルクリックで済むんだぞ。 あーむかつく。 なんでこんなん使ってやらなあかんねん。 ふざけんな。研究費削っとんちゃうぞ!!!!!!!!!
222 :
名称未設定 :2008/06/23(月) 00:17:12 ID:2/CWbUXB0
>>221 マルチポスト乙
厶板のObj-Cスレに返事が書いてあるからそっちをみてやってくれよ
223 :
名称未設定 :2008/06/23(月) 00:17:55 ID:I4ASgrpV0
慣れだ慣れ 考え方ちゃうからな IBに限らずCocoa慣れるとMSにも言いたい事が出て来たりする で、結局みんなEmacs+GCCに戻るのさ ねーよ
224 :
202 :2008/06/23(月) 01:29:22 ID:xvOwn1gf0
>>221 MVCアーキテクチャは慣れるまできついかもなぁ
ただ慣れたら離れられなくなる。
というか、俺の場合Cocoaに慣れて初めて俺のプログラムがいかにオブジェクト指向じゃなかったか気づいた。
自分のプロブラムを見直すチャンスって考え方もあるんじゃないかな
VBやったことないが基礎となる理論はしっかりしてるんだろうか。
ってスレ違いだなスマソ
225 :
名称未設定 :2008/06/23(月) 04:04:59 ID:bpjMPdrC0
マルチポストをマルポって呼ぶスレに認定することにしました
226 :
名称未設定 :2008/06/23(月) 08:46:19 ID:ZbmJMWrp0
すいませんまた初心者なんですが。。 File's OwnerとFirst Responderってこれはなんですか? チュートリアルでも、たまにこれに向かってコネクトしてる場面があるんですが なんのためにやっているのかの説明が無いのでなんだかぼんやり。
227 :
名称未設定 :2008/06/23(月) 09:14:14 ID:2/CWbUXB0
File's Owner は、nib を「開いた人」です。 MainMenu.nib は自動的に開かれて、開いた人は NSApplication (のインスタンス)になってます。 だから、MainMenu.nib の File's Owner につなぐってことは、NSApplication につなぐことになります。NSApp の delegate につなぎたいときとかにつかいます。 First Responder っていうのは、プログラム実行中にキー入力をうけつけているオブジェクトをさす抽象的なターゲットだとおもってください。 メニューバーの「文字を大きくする」メニューのターゲットを、特定のウインドウの特定のオブジェクトとかにつないでしまうと、いつもそのオブジェクトが呼ばれることになりますが、 場合場合に応じて前面のオブジェクトに命令したかったりするでしょ。
228 :
名称未設定 :2008/06/23(月) 09:29:53 ID:ZbmJMWrp0
>227 ありがとうございます! なるほどそうだったんですか・・ cocoaアプリの構造知らぬままやってました。。
229 :
名称未設定 :2008/06/23(月) 15:39:38 ID:nJQGDEyG0
230 :
名称未設定 :2008/06/23(月) 15:45:03 ID:9YeEOx5D0
>>229 俺も同じ事思ってた。
ID: ZbmJMWrp0 はいい人に出会えた。
231 :
名称未設定 :2008/06/23(月) 19:30:38 ID:gNpGWa+A0
ヒレガスよりわかりやすいな
232 :
名称未設定 :2008/06/25(水) 18:15:44 ID:WYDyD/990
>>227 神。説明が分かりやすい上に文体がしっくりくる。Cocoaの本書いてちょw
233 :
名称未設定 :2008/06/25(水) 18:57:58 ID:3DmRzNhv0
もし、友達に貸したエロ本がまた貸しされて、 さらにまた貸しされて・・・ もうあなたの手で処分出来なくなった場合、 これをメモリーリークと言います。
234 :
名称未設定 :2008/06/25(水) 20:50:44 ID:FELUv7Tr0
235 :
名称未設定 :2008/06/25(水) 21:35:13 ID:7oMlqkxh0
>>227 File's Ownerは、その言葉どおり、nib開いた人ではなく、オーナー(所有者)だと思います。
ADCのドキュメントによれば、MainMenu.nibを開いているのは、NSApplicationじゃないし。
まあ、たいていは、開いた人がそのままオーナーになりますが。
First Responderは、マウスでクリックされたりして、フォーカスの当たってるオブジェクトのことです。
First Responderが必ずしもキー入力を受け付ける訳ではありません。
236 :
名称未設定 :2008/06/25(水) 21:44:11 ID:c0QFEsb40
>>235 正確に書く事と分かり易い事とは違うわけだが。
とっかかりとしては十分な説明だと思う。
237 :
名称未設定 :2008/06/25(水) 22:16:45 ID:J5cC1xD40
NSTextViewの中の文字列で たとえば2行目の左から3文字目から5文字目を "ABC"で上書きする場合どうすればいいのでしょうか。。
238 :
名称未設定 :2008/06/25(水) 22:24:26 ID:QvvFgoa30
NSTextを継承してるんだから - (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString なんかを使えばいいんじゃないの?
239 :
名称未設定 :2008/06/25(水) 22:48:50 ID:J5cC1xD40
>238 ありがとうございます!試してみます!
240 :
名称未設定 :2008/06/26(木) 00:28:58 ID:QkkYa/qW0
オーナーとかの話しで思ったのですが、 MyObjectがインスタンスhogeを持っていた場合、 @interface MyObject:NSObject { id hoge; } @end @implementation MyObject -(id)hoge { return hoge; } @end とアクセッサメソッドを用意してやることでIB上でMyObjectにバインドすることができるようになります。 これはMyObjectがhogeを持っているからですよね。 では他のオブジェクトと共有して使用されるグローバル変数の場合どうなるのでしょう。
241 :
名称未設定 :2008/06/26(木) 00:32:49 ID:QkkYa/qW0
@interface MyObject:NSObject { } @end id hoge; @implementation MyObject -(id)hoge { return hoge; } @end とした場合バインディングはエラーが起きてしまいました。 hogeはMyObjectが持ってるんじゃないからそりゃそうかと思いましたが、 それなら誰が持っているのでしょう。 NSApplication?NSUserDefault?File's Owner? それぞれに無理矢理バインドしてみましたがうまくいきませんでした。 アクセッサメソッで変数を返す時にグローバル変数の値を代入してやるしかないのでしょうか?
242 :
名称未設定 :2008/06/26(木) 00:38:33 ID:QkkYa/qW0
ああああすみません、 エラー文にセッターがないって出てたんで言われた通りにセッターつけたら解決しました。 プロパティ使っとけってことですね。試す前から書き込んだ自分が馬鹿でした。お騒がせしました。
243 :
名称未設定 :2008/06/26(木) 10:37:58 ID:DcE/JQ790
NSViewとかをNibに定義しないで、コードから直接 alloc&initWithFrameとかした場合、awakeFromNibは 呼び出されませんよね。 このメソッドも呼び出すべきですか?
244 :
名称未設定 :2008/06/26(木) 11:18:59 ID:nOuF1tC50
それって呼ばれるの? ログ吐いて確認してみたら?
245 :
名称未設定 :2008/06/26(木) 20:00:15 ID:8BlZMsUG0
>>243 -awakeFromNibはNib使わないんなら気にしなくておk
246 :
名称未設定 :2008/06/26(木) 22:05:41 ID:DcE/JQ790
247 :
名称未設定 :2008/06/27(金) 02:48:34 ID:rkAsU+Fv0
既存クラスにメソッド追加してやるのはカテゴリでいいですけど、 インスタンス変数を追加しようと思ったらサブクラス化しかないですか? サブクラス化するとIB上に置いてあるControlを全部変更しないといけないのでどうにか方法はないかと考えています
248 :
名称未設定 :2008/06/27(金) 06:48:39 ID:5wCaEvMQ0
249 :
名称未設定 :2008/06/27(金) 06:50:53 ID:5wCaEvMQ0
あ、ごめん。だめやった。インスタンス変数追加できないんやった。
250 :
名称未設定 :2008/06/27(金) 07:44:23 ID:QT0InZ8U0
posingでinstance追加できたらのっとりでなんでもできちゃいそうだね。 それはそれで面白そうだけど何か問題があるからできないようになってるのかな。
251 :
名称未設定 :2008/06/27(金) 08:25:43 ID:cVkbRC280
>247 漏れもちょうどいまそれ悩んでた。 とりあえずそのクラスに組み込んじゃったけど、やっぱしっくりこないや
252 :
名称未設定 :2008/06/27(金) 09:03:28 ID:YYux+Wek0
posingはLeopardからdeprecatedに指定されてる。
253 :
名称未設定 :2008/06/27(金) 09:20:29 ID:zgdyeD0/0
>>247 既存クラスも自作だったら、既存クラスの名前のほうをかえて、
サブクラスのほうのなまえをもとのものにしておくという方法が。
254 :
名称未設定 :2008/06/27(金) 10:21:22 ID:O3k3c+Fk0
>>252 知らなかった。すでに64ビットアプリだとサポートされてないし。
255 :
名称未設定 :2008/06/27(金) 11:31:15 ID:OEVIo/Co0
中継クラスみたいなものを用意するってのは駄目なの? setter と getter を書いて中継するとか。 あと、Bindingにしておけば、selectionが中継クラスになるから、 実際のターゲットクラスが変更になってもnibの変更は最小限ですむよ。
256 :
名称未設定 :2008/06/27(金) 12:00:47 ID:zgdyeD0/0
>>254 でもいろいろと別の runtime 関数が用意されてて、class の乗っ取り自体は 64 bit でも自在にできるよ。
257 :
名称未設定 :2008/06/27(金) 16:00:37 ID:YYux+Wek0
特にプラグインは危険だな。アプリ上の任意のクラスを簡単に乗っ取れるから。 自分で作ったプログラム用のプラグインを使ってブルートフォースアタックを かけたら簡単にシリアル番号をボロボロ抜き出せた。笑うしかないね。
258 :
名称未設定 :2008/06/27(金) 20:03:42 ID:pVLES8St0
259 :
名称未設定 :2008/06/27(金) 20:24:09 ID:5dK6eRfR0
>>247 バインディングの実装と同じように手段を取ってみては?
バインディングした場合、NSView側でバインド先のオブジェクトとキーパスの情報を保存しなければならない。
でも、MacOSX10.3でバインドが追加されたとき、NSViewにインスタンス変数が増えたりはしなかった。
たぶんNSBinderというヘルパークラスが、NSViewに代わって、その辺の情報を保存してるっぽい。
260 :
名称未設定 :2008/06/27(金) 20:42:37 ID:NSFBdoqf0
>>259 あれってポージングで実装してるんじゃなかったの?
261 :
247 :2008/06/27(金) 22:32:56 ID:W9Mj7Of10
いろいろと意見ありがとうございます。
poseAsClassが10.5でdeprecatedになって、木下さんがどこかの記事で代替えの方法を解説してたと思うのですが。
>>259 バインドを使用すると結局たくさん線をつなぐことになりそうなのでスマートではなさそうな気がします、、。
262 :
名称未設定 :2008/06/27(金) 22:39:03 ID:cN+Ohq8K0
ポージングの代わりはメソッド交換でってアップルが言ってた。
263 :
名称未設定 :2008/06/27(金) 22:40:13 ID:5dK6eRfR0
264 :
名称未設定 :2008/06/27(金) 22:53:14 ID:W9Mj7Of10
ポージングでは無理そうです。
>>259 を読んでおっしゃることは理解しました。
265 :
名称未設定 :2008/06/27(金) 23:30:52 ID:5dK6eRfR0
>>264 いちおう、詳しく説明すると。
まず、カテゴリー使ってNSViewにgetterとsetterを追加する。
- (id)hoge{ return [Helper getValueWithOwner:self]; }
- (void)setHoge:(id)value { [Helper setValue:value withOwner:self]; }
で、Helperクラス側に値を格納する。
static NSMutableDictionary* dict;
+ (id)getValueWithOwner:(id)owner{ return [dict valueForKey:owner]; }
+ (void)setValue:(id)value withOwner:(id)owner { [dict setValue:value forKey:owner]; }
こんな感じ。
266 :
名称未設定 :2008/06/28(土) 00:52:34 ID:MqHAm5mY0
>>262 MethodReplacementってやつか。
267 :
名称未設定 :2008/06/28(土) 01:54:47 ID:0eKOBZUW0
268 :
名称未設定 :2008/06/28(土) 14:28:41 ID:KIP7kd9A0
メソッドの+と-って何ですか?
269 :
名称未設定 :2008/06/28(土) 14:31:27 ID:iKOABDQ+0
クラスメソッドとインスタンスメソッド
270 :
名称未設定 :2008/06/28(土) 14:42:57 ID:kuOvaWBW0
クラス名 *A = [クラス名 xxx]; でインスタンスを作れるのが、 + それ以外が - であってるかな?
271 :
名称未設定 :2008/06/28(土) 14:50:17 ID:3jJ6jb9L0
>>268 ,270
頼むからObjective-C Programing Languageぐらい読んでからCocoaプログラミング始めてくれ。
今は日本語版もあるんだから。
272 :
名称未設定 :2008/06/28(土) 14:52:52 ID:KXgNszZw0
むしろ頼むからプログラミング始めないでくれ
273 :
名称未設定 :2008/06/28(土) 15:03:54 ID:Pk2Ye7oi0
むしろ神解説できたらいいのにね 分かりやすい解説シリーズキボン
274 :
名称未設定 :2008/06/28(土) 15:12:15 ID:ICsN/hVj0
クラスとインスタンスってのはプッチ○プリンの入れ物と... めんどくせ。
275 :
名称未設定 :2008/06/28(土) 15:21:45 ID:oynXjVSX0
クラス=風俗 インスタンス=風俗嬢
276 :
名称未設定 :2008/06/28(土) 15:32:53 ID:iKOABDQ+0
そういう方向で言うとアレか。 クラスメソッド: デリヘル ヘルス嬢 = [デリヘル 呼び出し]; インスタンスメソッド: [ヘルス嬢 xxx];
277 :
名称未設定 :2008/06/28(土) 15:46:52 ID:u+ckHd7H0
ゆとりのためにゲームで説明すると ソルジャーから派生して枝分かれしたナイト、ウィッチ、プリーストといったジョブ(クラス)のキャラ達(インスタンス達)がいたとして、 10人ぐらいのパーティだと複数人同じジョブ(クラス)の人がいるんだけど それぞれが持ってる、戦う、防御、逃げるなんかの戦闘コマンド(インスタンスメソッド)はもとのジョブ(親クラス)から継承したコマンドで、 ウィッチのサンダーとかファイア、プリーストのヒーリングなんかはジョブ固有のコマンド(インスタンスメソッド)なわけ。 んで特殊アイテム戦いのドラムを使ってナイト全員が2回行動になったりするのがナイトのジョブコマンド(クラスメソッド)、 前衛後衛入れ替えとかで全員場所入れ替えすんのがソルジャーのジョブコマンド(親クラスのクラスメソッド)。
278 :
名称未設定 :2008/06/28(土) 15:52:27 ID:u+ckHd7H0
あー、これだとクラスメソッドについて正しく説明できてないな、、
279 :
名称未設定 :2008/06/28(土) 15:52:55 ID:P5MKK7iV0
TOとFFとDQが混じってる…?
280 :
名称未設定 :2008/06/28(土) 16:16:12 ID:ICsN/hVj0
インスタンスメソッド: [ヘルス嬢 チェンジ]; // raise Exception if call 3 times. こうですか>< 分かりません><
281 :
名称未設定 :2008/06/28(土) 16:16:34 ID:u+ckHd7H0
オウガバトルベースのつもりが混じってますね、、 上の流れだとalloc系のクラスメソッドをどう説明すれば良いか
282 :
名称未設定 :2008/06/28(土) 17:27:39 ID:3jJ6jb9L0
そもそも、クラスもインスタンスも、メッセージを受け取れる「オブジェクト」であるという点では違いはないんだ。 しかし例えば画面上の無数のウインドウがあったとき、それらは全て別々のオブジェクトであるのだが、 その動作を規定しているのは共通のコードなわけだ。それが「クラス」。 対してウインドウの位置や中身などは全て別物だ。その情報を保持するのが「インスタンス」。 よくタイヤキの型(クラス)とタイヤキ(インスタンス)に例えられるな。型はおなじでも出来たタイヤキの中身は変えられる。 俺はクラスはイデアだと思ってるけど。 じゃあ動作を規定すると言ったけど、ウインドウにメッセージを送るときそれを受け取るのはインスタンスだ。 インスタンスが受け取るメッセージ(に対する動作)を規定するのが「インスタンスメソッド」だ。 クラスもオブジェクトである以上、クラスが受け取るメッセージもある。それを規定するのは「クラスメソッド」になる。 で、これを実際にObj-Cで書くときには、クラスメソッドの定義には「+」、インスタンスメソッドの定義には「-」をつけてる。 クラスメソッドの用途は確かにそのクラスのインスタンスを作るものが多い。allocを始めとして。 ただしそれに限るものでもない。全インスタンスに共通な性質を設定するアクセサだって作れるし。
283 :
名称未設定 :2008/06/28(土) 17:39:16 ID:3jJ6jb9L0
ちなみに、クラスとインスタンスはどちらもオブジェクトである…んだが、Obj-Cの場合はさらにこう言える。 「クラスオブジェクトはNSObjectクラスのインスタンスとして扱える」 つまり例えば、クラスをNSArrayにつっこむということは普通に出来る。ていうか俺もやる。例えば [anMutableArray addObject:[NSString class]]; とするとNSStringクラスがオブジェクトとしてanMutableArrayに追加される。 ということで、-と+、インスタンスメソッドとクラスメソッドは 一つのファイルの中で2種類のオブジェクトの動作を定義する必要があるから、存在するとも言える。
284 :
名称未設定 :2008/06/28(土) 18:03:52 ID:u+ckHd7H0
すげええクラスとかまんまArrayに入れたりできるんですか! ちなみにどういった用途で使うんでしょう? 便利な使い方が想像できないです、、
285 :
名称未設定 :2008/06/28(土) 19:19:37 ID:wWVbcxHq0
クラスで 外部から呼べるのが- 内部でしか呼ばないのが+ という理解でよろしいですか?
286 :
名称未設定 :2008/06/28(土) 19:35:34 ID:3jJ6jb9L0
>>284 コンパイル時にはどういうクラスを何個使うか分からないとき…かな。別にNSArrayに限らず、NSDictionaryでもいいし
Class型やid型に入れてもいい。
>>285 内部と外部の意味がよく分からん。
[[NSString alloc] init]; のallocはクラスメソッドで、initはインスタンスメソッドだが、この文に内部も外部もないだろ。
どちらもオブジェクトにメッセージを送っているにすぎない。呼べる呼べないで言えば、
[NSString init]はできないしNSString *aStringに対して[aString alloc]はできない。それだけ。
287 :
名称未設定 :2008/06/28(土) 19:38:06 ID:3jJ6jb9L0
ってNSStringクラスはNSObjectのインスタンスとしても扱える訳だから、[NSString init]は呼べるか。 多分意味はないし、実際に試したことはないけど。
288 :
名称未設定 :2008/06/28(土) 19:43:10 ID:yHYqfuzX0
>>285 クラスとインスタンスの関係は理解してる?
クラスって云うのは、いわば機械の設計図みた様なもので、材料とかその分量とか作る手順が書かれてる。インスタンスはその設計図を基に作った現物。
でまあ、+がついてるの = クラスメソッド が レシピについての操作。材料の分量を変更するとか、材料を準備するのもこれに入ってる。
要は、クラスに対する操作な。
で、現物を使ってテレビ点けたり、部屋冷やしたりする様な作業が-のついたインスタンスメソッド。例外的に用意した材料を加工するのもこれに当たる。
例えば、まあこんな感じかな。
// 疑似コード
パイ' = [パイのレシピ 材料の準備]
パイ = [パイ' 調理]
ここで、『材料の準備』はレシピについて行われてるから、クラスメソッドの呼出し。で、この後の調理は材料=ほぼ現物に対して行われてるから、インスタンスメソッド。一々こうかいてるのは面倒だから、
パイ = [[パイのレシピ 材料の準備] 調理]
みたいな感じで呼べる。
……こんな感じでおk?
289 :
名称未設定 :2008/06/28(土) 22:02:07 ID:r6CxQJy60
290 :
名称未設定 :2008/06/28(土) 22:14:41 ID:5Bx5r4xK0
ここの盛り上がりに比べてiPhoneアプリ製作スレの中身の無さといったら
291 :
名称未設定 :2008/06/28(土) 22:31:29 ID:oyobADpU0
デリヘル嬢と本番するにはどんなメソッドを呼んだらいいの?
292 :
名称未設定 :2008/06/28(土) 22:42:08 ID:yHYqfuzX0
>>291 [[デルヘル嬢 alloc] init]
293 :
名称未設定 :2008/06/28(土) 22:42:48 ID:ZeRWvCBY0
release
294 :
名称未設定 :2008/06/28(土) 23:01:21 ID:5Bx5r4xK0
デリヘル嬢 デリ嬢 = [[デリヘル嬢 new] retain]; [デリ嬢 setMoney:1万]; [self setSkin:[Skin skin]]; [デリ嬢 play:self]; [self 射精]; [デリ嬢 release]; 書いてて死にたくなってきたわ 以後建設的な話しを
295 :
名称未設定 :2008/06/28(土) 23:22:14 ID:EmOAb5fu0
処理中にキャンセルボタンでキャンセルさせたいのですが、 どうすればよいのですか? 処理はfor文とかで回してるのですが。
296 :
名称未設定 :2008/06/28(土) 23:27:19 ID:3jJ6jb9L0
>>289 失礼。正確には、
「NSObjectのサブクラスのクラスオブジェクトは、NSObjectのインスタンスメソッドを持つとして扱える」かな。
えーと例えば、
[NSString isKindOfClass:[NSObject class]] とするとYESが返ってくる。
クラスオブジェクトに対してrespondsToSelector:やperformSelector:が効くのもこのおかげだと思う。
297 :
名称未設定 :2008/06/28(土) 23:43:35 ID:+zEqA0Er0
298 :
名称未設定 :2008/06/28(土) 23:48:33 ID:oynXjVSX0
>>295 ボタンが押されたforループから抜ければいいじゃん
299 :
名称未設定 :2008/06/29(日) 00:38:06 ID:XlViJVqL0
ループを別スレッドに分ける。
300 :
名称未設定 :2008/06/29(日) 02:11:05 ID:ywkudbmZ0
301 :
名称未設定 :2008/06/29(日) 02:40:08 ID:QGzHDlD00
使用後のゴムが小学校の校庭に落ちていたのを思い出した。 ちゃんと処分しろよな。
302 :
名称未設定 :2008/06/29(日) 03:10:56 ID:t568XiuI0
AVMovie* movie = [[AVLibrary sharedLibrary] objectForKey:@"InranJoshiKose"]; [self watchMovie:movie]; [self playWith:self]; [[AVLibrary sharedLibrary] removeObjectForKey:@"InranJoshiKose"]; [self sleep];
303 :
名称未設定 :2008/06/29(日) 05:58:26 ID:azI+MvI70
>>295 forループでなくて、runLoopにて処理させるってのもある。
performSelector:withObject:afterDelay:を待ち0で指定。
次のrunloopで動く。
これだと、ループのなかでGUIの更新とかイベント処理とか
全部出来るからべんりだお
304 :
名称未設定 :2008/06/29(日) 06:27:34 ID:GLTNi95n0
CoreAnimationで明示的なアニメーションをさせているのですが アニメーションが終了するとレイヤーが開始時の状態に戻ってしまいます。 終了時の状態をキープさせるにはどうすれば良いのでしょうか?
305 :
304 :2008/06/29(日) 09:43:32 ID:GLTNi95n0
自己レスです CABasicAnimation* animation; animation.removedOnCompletion = NO; animation.fillMode = kCAFillModeForwards; でいけました。kCAFillModeForwardsが何なのかよく分かっていませんが。
306 :
名称未設定 :2008/06/29(日) 10:33:07 ID:G8HUtWbV0
NSTextViewを2つ左右に配置して、改行数も同じなテキストを表示してるんですが この2つのTextViewの垂直スクロールを同期(ホイール、スクロールバー操作時)させるにはどうしたらいいのでしょうか。。
307 :
名称未設定 :2008/06/29(日) 10:39:31 ID:4W+71IXB0
>>306 NSScroller用のValueを誰かに持たせて両方にbindする。
と、何も試さずに言ってみる。
308 :
名称未設定 :2008/06/29(日) 11:40:38 ID:U0RClpmA0
>>306 ドキュメントで SynchroScroll を「全文検索」する。
309 :
名称未設定 :2008/06/29(日) 14:13:09 ID:BWFM2zTG0
すみません。 2つのNSSplitViewで片方のNSSplitViewのディバイダーを動かした時に もう片方のNSSplitViewのディバイダーをシンクロさせる方法はありますでしょうか?
310 :
名称未設定 :2008/06/30(月) 18:37:03 ID:LJd79rmJ0
HMDTの2nd読んでるんだけど cocoaバインディングのとこで バインディング用のNSObjectControllerにある "content"というアウトレット これってIndentify Inspectorにはでてこないんですが (Connectionsにはでてくる) 具体的になにをやってるんでしょうか??
311 :
310 :2008/06/30(月) 19:36:45 ID:LJd79rmJ0
これってIndentify Inspectorにはでてこないんですが ↓ でてきてます。 すいません勘違い。。
312 :
名称未設定 :2008/07/02(水) 00:28:07 ID:BE+n65l+0
Cocoaセミナーの資料、Leoaprd対応前のヤツどこかで入手できないでしょうか? もしくは誰かどこかにアップして頂けると嬉しいのですが・・・ 中級編と上級編を
313 :
名称未設定 :2008/07/02(水) 09:26:55 ID:TLvP2d9t0
>>312 あきらめてレパードをかいましょう。1万円の投資はいみがあります。
なるべくAppleの提供しているとおりするのが混乱が起きなくて良いです。
Apple はどんどん過去を切り捨てる会社だからプログラムしようとおもったら仕方がないです。
314 :
名称未設定 :2008/07/02(水) 10:22:32 ID:7uYmBryr0
315 :
名称未設定 :2008/07/02(水) 10:24:05 ID:TLvP2d9t0
それはすいません。どういう都合なのか興味深いんですが。
316 :
名称未設定 :2008/07/02(水) 11:01:19 ID:6x1NISwO0
>>314 じゃないが、自分もメイン環境はTiger。
仕事で使うアプリがTiger用…っていうかLeopardに移行して余計なトラブルを起こしたくない
といった都合。
317 :
名称未設定 :2008/07/02(水) 11:40:09 ID:7uYmBryr0
僕も仕事とか、トラブルを避けたいってのがあります。 それと、自分の知識が、まだ段階的に、OS 10.3〜10.4の新しいAPI勉強中、というぐらいなので (そんなんで仕事すんなって話ですが)、Xcode3への移行も含めた10.5の勉強は後回しにしたいのです。
318 :
名称未設定 :2008/07/02(水) 12:22:08 ID:TLvP2d9t0
>>317 なるほど。でも XCode 3.1 (iPhone SDK についてるやつ)は全然機能豊富でいいよ。XCode でも Tiger 用のソフト作れるから、XCode だけは 3.1 にしてもいいんじゃないかな...
まあ Interface Builder の仕組みとかわかってないと、見た目が案外変わってるから混乱するかもしれないけど。
319 :
名称未設定 :2008/07/04(金) 17:15:58 ID:kZM2vvAg0
CoreAnimationについて質問です。 CoreAnimationを使うと位置や不透明度を指定するだけで中間フレームが補完されますが アニメーションさせずに位置などを変更する方法は無いのでしょうか?
320 :
名称未設定 :2008/07/04(金) 17:26:12 ID:BBNuNSR70
>>319 コードを共通にしたいなら、Durationを0にするのが簡単。
321 :
名称未設定 :2008/07/04(金) 19:15:07 ID:KXtWY3ng0
CoreAnimation使わなきゃいいだろw なんのためのAnimation機能だよ
322 :
319 :2008/07/04(金) 20:12:49 ID:hXaLDE1k0
自己解決。トランザクション設定でいけました。 >CoreAnimation使わなきゃいいだろw >なんのためのAnimation機能だよ 一瞬だけ無効にしたい事は結構あると思うけど。
323 :
名称未設定 :2008/07/05(土) 23:17:33 ID:bbZv5NPd0
age
324 :
名称未設定 :2008/07/07(月) 17:54:09 ID:kroflgcW0
思いっ切り余談なんだけど、新し物好きとか見てると、 なんか3日に1回は0.1バージョンアップしてトップページに 載せて貰って、DLを稼ごうとしてるアプリがない? いやまあ、別にいいんだけどさ。 新し物好きの人とか大変そうだなあと。
325 :
名称未設定 :2008/07/07(月) 18:45:38 ID:pUa99p1P0
新し物好きの人はどうでもいいんだが、 あまり改良点が少ないと、わざわざダウンロードしてくれた人に申し訳ない。 自分なら改良点が5個くらい溜まるまで+0.1は控えるな。 そうすると新バージョンの公開は大体1年に2回くらいになる。 バグフィックスは1個だけでも+0.0.1するけどな。
326 :
名称未設定 :2008/07/07(月) 22:35:04 ID:+XUVksz/0
>>324 新し物好きの人はそれで稼いでるんだからいいんじゃない?
ユーザーとしてはバージョンアップ歓迎だし。
327 :
名称未設定 :2008/07/08(火) 08:23:22 ID:AK0ZWKsw0
ソフトのとこクリックすると 新しもの好きにお金がはいるシステムだったんだ?
328 :
名称未設定 :2008/07/08(火) 11:44:46 ID:hfpgV8/00
直リンだし別に金は入らないかと。
329 :
名称未設定 :2008/07/09(水) 00:43:24 ID:zn8zpXSM0
バナー掲載料
330 :
名称未設定 :2008/07/09(水) 22:25:40 ID:cjjoVqS60
現在のマウスポインタがビュー内の特定の領域内にあるかどうかを判定したいんですが QuickDrawでいうところのRegionはCocoaではなんと呼ぶんでしょうか?
331 :
名称未設定 :2008/07/09(水) 22:29:36 ID:sdo/FFS+0
知らん NSMouseInRectでググれ
332 :
名称未設定 :2008/07/09(水) 22:32:23 ID:6VjgO1TE0
>>330 俺も昔は気になってたが、不定形はNSBezierPath使って判定してる
CGRegionだっけ?そんなのもあったような
333 :
名称未設定 :2008/07/09(水) 22:40:03 ID:cjjoVqS60
>>332 なるほど、NSBezierPathで領域を作って、containsPointで判断すればいいんですね
ありがとうございました
334 :
名称未設定 :2008/07/12(土) 23:55:07 ID:stdBe7cl0
sage禁止
335 :
名称未設定 :2008/07/13(日) 11:37:30 ID:HJA7K/r+0
NSString で、例えば "2ch" みたいに、ダブルクォーテーション付きで 文字を表示させたいときは、 NSString * string = @"( ? )"; で、 ( ? ) のところにどう記述すればいいでしょうか。
336 :
名称未設定 :2008/07/13(日) 11:39:09 ID:h5XyjEmR0
@" ¥" ¥" " というふうにバックスラッシュ ¥ をつけます。 2ch に書き込むとバックスラッシュと円記号がごっちゃになる気がするけど ...
337 :
名称未設定 :2008/07/13(日) 11:39:52 ID:h5XyjEmR0
やっぱり円記号になった ... XCode で日本語キーボードなら、Opt-円記号でやるとでる、/ と傾きが反対向きのスラッシュをつかってください。
338 :
335 :2008/07/13(日) 11:45:34 ID:HJA7K/r+0
339 :
名称未設定 :2008/07/13(日) 11:53:54 ID:9BVhVzTm0
まめ知識 NSString *AAA = @"aa"; NSString *BBB = AA @"bb"; とかくと、コンパイラで自動で結合されて NSString *BBB = @"aabb"; と同義になる
340 :
名称未設定 :2008/07/13(日) 13:14:40 ID:u+yV8IfN0
>>339 > NSString *BBB = AA @"bb";
AAA@"bb";
かな?
341 :
名称未設定 :2008/07/13(日) 13:26:45 ID:NHNxxr7S0
間にスペースとか改行とかを入れると、ばしっとつながる。
(コンパイラでの接続なので定数オブジェクトに限られるけど)
NSString *strings = @"aaaa¥n"
@"bbbb¥n" @"cccc¥n";
#define SomeString @"index.htm"
NSString *TheURL = @"
http:/aaa.com/ " SomeString @"#anchor";
みたいな感じで、定義分と組み合わせると、条件によって文字を交換とかできる。
342 :
名称未設定 :2008/07/13(日) 13:43:48 ID:u+yV8IfN0
へえ、知らなかった。 面白いね、ありがとう。
343 :
名称未設定 :2008/07/13(日) 14:11:00 ID:iD5vJJHB0
age
344 :
名称未設定 :2008/07/13(日) 14:18:31 ID:Y1Ak5AxY0
Cの文字列リテラル連結と同じ要領だな
345 :
名称未設定 :2008/07/13(日) 22:30:18 ID:rN/PKW4q0
iCalみたいに、起動してないアプリのアイコンを書き換えるにはどうすればいいんですか?
346 :
名称未設定 :2008/07/13(日) 22:39:15 ID:ZrJCFMn30
[[NSWorkSpace sharedWorkspace] setIcon: SomeIcon forFile: fullPath options: nil]; とかでファイルのアイコンを書き換える。みたいなのかな
347 :
名称未設定 :2008/07/13(日) 22:41:23 ID:u+yV8IfN0
348 :
名称未設定 :2008/07/14(月) 10:09:46 ID:nTc4Tt9A0
HMDT 3rd 本を読んでいるところです。 core data のサンプルで、3ペインのMailアプリケーションのようなサンプルがあります。 左のテーブルにMailbox、右上のテーブルにMailboxに含まれるMailのリスト、その下にメールの内容が表示されるものです。 このサンプルを使って、Mailboxを作成、Mailを複数追加。 その後、Mailをリストから削除すると、 ~/LIbrary/Application Support/Mail/Mail.xml の中に削除したMailの部分だけ残るようになってしまいます。 Mailboxごと削除してもその部分だけ残ります。 自分でデータ削除用のコードを書かなければならないのでしょうか? それとも設定をミスってる? 環境は、Tiger + Xcode2.5 です。 ヒントだけでもお願いします。
349 :
名称未設定 :2008/07/14(月) 11:30:23 ID:uGWsnIyx0
>自分でデータ削除用のコードを書かなければならないのでしょうか? うん。というかハードディスク余ってるんだから、別に消さなくても ...
350 :
名称未設定 :2008/07/14(月) 12:20:57 ID:kfMtczJR0
>の中に削除したMailの部分だけ残るようになってしまいます。 削除していないMailは消えてるの?? コアデータは(デフオだと)アプリを終了しないとXMLに書き込まれないよ。 あと、削除といってもフラグを立ててるだけかもしれないし。
351 :
名称未設定 :2008/07/14(月) 13:02:28 ID:nTc4Tt9A0
ありがとうございます。
>>349 さん
追加と削除を繰り返すだけでデータが増えていないのに、ファイルサイズが大きくなっていくのが気持ち悪かったので...
>>350 さん
>削除していないMailは消えてるの??
書き方が分かりにくかったでしょうか。
削除したMailがxmlファイルにはずっと残ってしまうという状態です。
例えば
アプリを起動 > Mailboxを1つ作成 > Mailを2件登録 > Mailを1件削除 > Mailboxを削除 > アプリ終了
で、確認すると削除したMailだけ残っています。
上の例で、Mailboxを削除しなければ、MailboxとMail2件が残っています。
削除ボタンはMail用のArrayControllerのremoveアクションに繋がっています。
Mailboxを削除するボタンもMailbox用ArrayControllerのremoveアクションに繋がってますが、Mailboxは追加や削除を繰り返してもきちんと削除されます。
352 :
名称未設定 :2008/07/14(月) 13:49:19 ID:iCe9YYmu0
>>351 見当違いかもしれないけれど、MailboxのrelationshipからだけMailを削除しているだけではないですか?
Deletes Objects on Remove オプションはどうなっていますか?
353 :
名称未設定 :2008/07/14(月) 13:59:47 ID:nTc4Tt9A0
>>351 さん
ありがとうございます。
Deletes Objects on Remove オプションがOFFになってました。
ONにすれば削除されますね。
お恥ずかしい限りです...
と言う事で解決致しました。
レス頂いた皆様、ありがとうございました。
354 :
名称未設定 :2008/07/14(月) 14:01:06 ID:nTc4Tt9A0
アンカー間違えました。
351でなく
>>352 です。
355 :
名称未設定 :2008/07/18(金) 12:43:58 ID:EhXln+vS0
そういや、気がついたらxibになってたけど、awakeFromXibにはならないのか。
356 :
名称未設定 :2008/07/18(金) 19:06:01 ID:Lq/H4W2N0
xibはビルドするとnibになるよ。
357 :
名称未設定 :2008/07/19(土) 00:17:13 ID:OkWOTiQ/0
awakeFromDeb
358 :
名称未設定 :2008/07/19(土) 11:34:30 ID:yEZ0hIqg0
何でもかんでも初期処理をawakeFromNibに書いて特に不具合もないのですが、 initWithなんたらに書いた方がいいんですかね? 昔はawakeFromNibがなかったからinitWithなんたらで書いてた、 なんて記事を見た記憶もあるのですが。
359 :
名称未設定 :2008/07/19(土) 12:53:13 ID:N9OU6Tmk0
>>358 initWith... は nib から目覚めたときには呼ばれないよ。
initWith... は IB でオブジェクトをつくったときに呼ばれていることになってる。
nib につくっておいてない、自分でプログラム内でつくるオブジェクトは initWith を alloc] initWIth... ] でつくりますが。
360 :
名称未設定 :2008/07/19(土) 13:20:13 ID:c4RN+gO80
361 :
名称未設定 :2008/07/20(日) 00:04:28 ID:OkWOTiQ/0
そうそう、awakeFromNibはクラスの実装内容によっては複数回呼ばれるんだよね
362 :
名称未設定 :2008/07/20(日) 01:07:49 ID:7BP6qNun0
>>358 Viewだとnibに置いた場合はinitWithCoder:が呼ばれる。
俺はnib以外で使う場合も考えて、共通の初期化メソッドを作っておいてinitWithFrame:とinitWithCoder:から呼んでる。
アウトレットを使って何かする必要があるときはawakeFromNibも使う。
363 :
名称未設定 :2008/07/20(日) 11:04:14 ID:3L2wlaQd0
便乗して質問 initWithCoder で渡される coder って、具体的に何で、 誰から渡されてるんでしょうか。 デカいデータを必要になったときだけ読み込みたくて、 initWithCoder の中でそのデータだけは decode せず、 後から明示的に decode させるようにしたいんですが。
364 :
名称未設定 :2008/07/20(日) 11:41:21 ID:7BP6qNun0
>>363 「Archives and Serializations Programming Guide for Cocoa」を読むと分かると思う。
ただしでかいデータを遅延読み込みなんてのはそもそもcoderに頼むべきことじゃない。
何故ならcoderがどうやって、どんな形式でファイルを保存しているかを気にしなくていいのがこの方式の利点だから。
やるとしたら、そのでかいデータは別のオブジェクトにして、そのキーだけを保存すればいい。
ファイルに保存したいなら、別ファイルにするか、バンドルを使えばいい。
365 :
名称未設定 :2008/07/25(金) 12:33:10 ID:mF3swvCE0
Youtube APIを使用してYoutube Player/Downloaderを作成しているのですが、 ダウンロード機能のAPIはなく、サイトページを受信してリンクの文字列を抜き出して うんぬんしか方法はないのでしょうか? 抜き出しスクリプトを探すとperl、php、pythonのスクリプトはあるのですが、 objective-cで処理してるのがなさそうです。(正規表現が弱いからできないのかな?)
366 :
名称未設定 :2008/07/25(金) 12:36:08 ID:cN0vq8T+0
まあ正規表現使わなくても NSScanner でごにょごにょやれば出来ると思いますが。面倒だけど。 NSTask で perl かなんか呼んだほうがかんたんかも。
367 :
名称未設定 :2008/07/25(金) 15:35:45 ID:QoefX31z0
NSXML関連は?
368 :
名称未設定 :2008/07/25(金) 18:05:01 ID:AYy3UwPY0
基本的な質問です CocoaはRPGのようなゲームを作るのに向いていますか? Macでゲーム開発するのはObj-Cでokでしょうか?
369 :
名称未設定 :2008/07/25(金) 18:27:36 ID:AHiEGlWW0
>>368 Core AnimationとかOpenGLとかも使えるしObj-Cでおk
370 :
名称未設定 :2008/07/25(金) 19:45:44 ID:hr980FSd0
>>368 そのゲームのスペックや内容にもよりますが、Cocoaはゲーム用のフレームワークじゃないからね。
Cocoaを使わないなら、ObjCを使うメリット半減って感じがするし。
もし、パフォーマンスを追求することになるなら、逆にObjCは不向きな気もします。
371 :
名称未設定 :2008/07/25(金) 20:08:20 ID:AYy3UwPY0
アドバイスありがとうございます RPGツクールをやっていてちょっと高度な事がやってみたくなった 程度のものですので、内容としてはまったく低レベルなものです ドラクエみたいなのをイメージしています。他に同じような事をやってる方のサイトでも あれば良いのですが、内容なのでまずは全体像をつかむ所から勉強してみようと思います
372 :
名称未設定 :2008/07/25(金) 20:13:53 ID:Rns0Tosq0
373 :
名称未設定 :2008/07/25(金) 23:24:46 ID:cN0vq8T+0
ゲームをつくるときは OpenGL でやるのが普通なんじゃないでしょうか。 でも、そもそもゲームの画面を表示するウインドウを表示したりとかいうあたりは Obj-C と Cocoa でやらないといけないと思います。 (まあ Carbon +C でやってもいいけど、資料も少ないし、かえって大変だとおもう)
374 :
名称未設定 :2008/07/25(金) 23:52:01 ID:K08YB9VO0
アクションゲームには不向きだと思うけど、CoreAnimationってそれなりにゲームに使えそうな気がするんだよね。特に、ビジュアルノベルゲームとか。Core Animationのサンプルにカードゲームはあった気がする。
375 :
名称未設定 :2008/07/26(土) 00:39:11 ID:5uCYidXZ0
>>370 まぁ、同じオブジェクトに同じメソッドを繰り返し呼ぶ場合には、
MethodForSelectorで関数ポインタを取得してそこから呼び出せば
速度が向上したりする。メソッドではなく関数で処理したらいい部分とかは
関数で組んでやるといいのかもね。
376 :
名称未設定 :2008/07/26(土) 01:23:05 ID:HVS8eIt00
377 :
名称未設定 :2008/07/26(土) 02:12:35 ID:UyOrFXTo0
Obj-CはCも混ぜて書けるんだから、速度出したいところではどうにでもなるだろう。
378 :
名称未設定 :2008/07/26(土) 16:15:53 ID:Hv7t3I4z0
Cocoa / Objective-C がゲームに不向きとは思えません。 Doom が NEXTSTEP で開発されたことを思い出して欲しいです。 むしろ今の環境の方がマシンパワーが上がっていて有利に思えます。
379 :
名称未設定 :2008/07/26(土) 17:17:50 ID:pdFJtDbq0
380 :
名称未設定 :2008/07/26(土) 19:06:22 ID:7j8Urm4Q0
381 :
名称未設定 :2008/07/26(土) 20:36:32 ID:MNwjOzXJ0
CoreMIDIをつかったアプリケーションのプログラミングをしたいのですが、何か良い参考資料はないでしょうか ADCの中を見ていても、CoreAudio関連の詳細な資料が見つけられないので困っています とりあえず、当面の目標は、システムエクスクルージブなどのMIDIデータをMIDIに流すだけのプログラムで 外部MIDI音源の音色エディットなどに使えるものを作ろうとしているのですが MIDIエンドポイントにデータを渡す方法からして、どこをどう調べれば良いのかわかりません 環境はMacOS X 10.4.11,Xcode2.5です ちなみに、私自身のプログラミングスキルは、大学時代にC言語のコンソールアプリケーションをいくつか作った事がある程度で オブジェクト指向プログラミングは先週始めたばかりです 古本屋で見つけたXcode2入門という本で一通りXcodeとInterfaceBuilderの使い方は覚えました
382 :
名称未設定 :2008/07/26(土) 20:46:29 ID:AdlohJ0J0
383 :
名称未設定 :2008/07/26(土) 21:09:06 ID:MNwjOzXJ0
384 :
名称未設定 :2008/07/26(土) 21:29:04 ID:xAyOBL3b0
385 :
名称未設定 :2008/07/27(日) 00:14:58 ID:vnIR5zO10
質問です。 SDKのOpenGLのサンプル /Developer/Examples/OpenGL/Cocoa/CocoaGL で、C++のコードを追加しようと思い、 Foo.cpp, Foo.h を追加して、 空のクラスを追加したのですが、コンパイルエラーが2000個近く出てしまいました。 どういう原因が考えられるでしょうか。 新規プロジェクトでCocoaアプリケーションやiPhoneのプロジェクトを作成した場合は、同様の事がうまくいくのですが・・・。
386 :
名称未設定 :2008/07/27(日) 00:26:56 ID:CKmeY8Xx0
387 :
名称未設定 :2008/07/27(日) 00:50:25 ID:0wQFrli+0
>>385 コンパイルエラーの内容が少しでも分からないと、何もアドバイスできないのだが。
388 :
名称未設定 :2008/07/27(日) 00:52:35 ID:QkLCg1mE0
>>385 根本的な解決にならんかもしれんが拡張子をcppからmmに変える
389 :
名称未設定 :2008/07/27(日) 00:54:50 ID:CKmeY8Xx0
>>385 C++のコードを追加したとあるけれど、新しくクラスを追加という事は
ココアのクラスの中にC++のコードを組み込んだという事でしょうか。
もしそうであるなら、拡張子をmにしてみるとか。
390 :
名称未設定 :2008/07/27(日) 01:04:35 ID:vnIR5zO10
みなさん、レスありがとうございます。
>>387 さん
ごもっともです。すみません。ただ、2000個近くあるので、どれをどう説明すればいいか・・・
>>388 さん
試してみます。ただ、マルチプラットフォームにしたいコードをC++で書いていて、それをCocoaから利用したいという想定なので・・・。
>>389 さん
いえ、単に.cppと.hをプロジェクトに追加しただけです。Cocoaのクラスに直接干渉させるようなことはしていません。
追加した.cppをビルドの対象から外すと、問題なくビルドが通ります。
391 :
名称未設定 :2008/07/27(日) 01:25:55 ID:G0AeuOUq0
ビルドのオプションじゃない
392 :
名称未設定 :2008/07/27(日) 01:34:32 ID:QkLCg1mE0
>385 新規ファイル追加でtest.pchを作る test.pch #ifdef __OBJC__ #import <Cocoa/Cocoa.h> #endif ビルドオプションの GCC4.0 languageの項目 Prefix Headerの項目をダブルクリックして入力されているのを削除し test.pchを入力する で、ビルドする 書いてて内容が良くわかってないから Developerからコピーしてからやってみて
393 :
名称未設定 :2008/07/27(日) 01:58:17 ID:0Z6SChht0
>ごもっともです。すみません。ただ、2000個近くあるので、どれをどう説明すればいいか・・・ まずいちばん最初から5つぐらいのエラーを教えてください。 後ろのほうのエラーは単に前のほうのエラーでコンパイラが混乱して 変なことをいってるだけのことが多いです。
394 :
392 :2008/07/27(日) 01:58:29 ID:QkLCg1mE0
サンプルコードのPrefix Headerに$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h が書いてあってcppファイルの時でもObjective-cのコードが関係してきてコンパイルエラーが出てるっぽい そのパスを削除するだけでビルドできる様になったが、Prefix Headerはコンパイル時間を高速化するだけで 無くても問題なし?
395 :
名称未設定 :2008/07/27(日) 07:59:45 ID:dQ9C+Nti0
「全角で書いてました」とかだったら大笑い
396 :
名称未設定 :2008/07/27(日) 09:24:26 ID:mkJjDbWC0
>>393 たんにC++コードに誤りがあるってことはないよね?
397 :
名称未設定 :2008/07/27(日) 10:57:21 ID:DcKmiVLG0
>>394 >無くても問題なし?
なし。というかエラーがでなくなることがまずは重要。
もしその推測が正しいなら、ビルドの設定でコンパイラのデフォルトの言語を
Objective-C++にしてもいいかもしれない。
398 :
名称未設定 :2008/07/27(日) 11:41:37 ID:C9Bb+G9B0
手元にXcodeの2.5しかないんだけど、3.0には「Objective-CでC++デフォルトコンストラクタ/デストラクタを呼び出す」は あったっけ?これにチェックが入ってないとC++のコードで大量にエラーが出ると思うんだけど。
399 :
名称未設定 :2008/07/27(日) 12:04:55 ID:XmdTpJa10
3.1で Info パネルにそれに相当する項目があからさまにあるかは知らないけど、 何にせよ -fobjc-call-cxx-cdtors を指定すればいいです。 あと、べつにそのオプションをチェックしなくても、C++の文脈で default constructor / destructor が呼ばれなくなるわけじゃなくて、 そのオプションは、Obj-C のクラス内にメンバ変数として C++ のクラスのインスタンスを置いたときに、 alloc init 時にそれらのコンストラクタを 呼ばせるためのオプションなので、滅多に関係ない気がします。 というか @class 内に C++ のクラスのポインタで無いインスタンスを置くなと。
400 :
名称未設定 :2008/07/27(日) 16:18:25 ID:n359+EOk0
401 :
名称未設定 :2008/07/27(日) 16:27:53 ID:MVJct1Bk0
似たようなプログラムを組んだ事がある。確か… NSTableViewのサブクラスを作って、 - (void)drawRect:(NSRect)frameRect; をオーバーライド。選択しているときに下線を引くようにする感じだったかな。 選択しているときのデフォルトの色が反映されたりちょっと苦労した記憶あり。
402 :
390 :2008/07/27(日) 17:36:13 ID:vnIR5zO10
>>392 さん
>>394 さん
ご指示の方法でこちらでもうまく行きました。ありがとうございます!
その他の方々も、助けていただいてどうもありがとうございました。
精進します。
403 :
400 :2008/07/27(日) 18:32:55 ID:n359+EOk0
>> 401 オプションとかで切り替えられるわけじゃなくて、 ハイライトさせてるメソッドをオーバーライドして、 そこで自分でセルの内部にdrawLine()するんですね。 助かりました。どうもありがとうございます。
404 :
名称未設定 :2008/07/27(日) 18:51:41 ID:hII6V1eF0
提示してあげるようにしたい
405 :
名称未設定 :2008/07/29(火) 13:56:26 ID:yPUrLNpI0
Xcode 3.1です。
ツールバーのデリゲートで、
- (NSArray *) toolbarDefaultItemIdentifiers : (NSToolbar *) toolbar {
return [ NSArray arrayWithObjects :
NSToolbarPrintItemIdentifier,
NSToolbarPrintItemIdentifier,
nil
];
}
と設定しているにも関わらず、デフォルトセットに"カスタマイズ"等のツールバー項目が表示されてしまうのですが、なにか他に設定すべき箇所があるのでしょうか。
http://wktk.vip2ch.com/vipper91279.png
406 :
名称未設定 :2008/07/29(火) 15:28:44 ID:a9APv9gE0
407 :
名称未設定 :2008/07/29(火) 16:42:26 ID:+WtQKlmJ0
3.1はリリースされてる
408 :
名称未設定 :2008/07/29(火) 16:50:05 ID:ufYnqxk40
>>405 IBで何か設定していませんか?
delegateで設定したものと、IBで設定したものの和が表示されますよ。
409 :
名称未設定 :2008/07/29(火) 17:52:26 ID:yPUrLNpI0
>>408 NSToolbarのインスタンスはIBにて作成しています。
どこに設定があるのでしょうか…
410 :
名称未設定 :2008/07/29(火) 18:45:42 ID:yPUrLNpI0
NSToolbarはIB使わず作った方がいいのかな… もう限界orz
411 :
名称未設定 :2008/07/29(火) 18:56:17 ID:yPUrLNpI0
IBでもとから入っていたNSToolbarItemをいったん抹消した後LibraryからD&Dしたら解決しました。 なんだろこの仕様… 3時間の苦労…
412 :
名称未設定 :2008/07/29(火) 19:10:24 ID:zz+wWVx50
たまにタコな動きするからクリーンとかIBを手動で保存とか コネクションし直しとか、あまりXcodeを信用しないほうがいいよ。
413 :
名称未設定 :2008/07/29(火) 20:53:04 ID:gygQrOlO0
クリーンはよく分かる IBの変更の反映ってちょっと遅いもんね
414 :
名称未設定 :2008/07/30(水) 12:42:42 ID:iYUCSHAp0
あーもうコード書くの面倒臭くなってきた。 アップルの自社製品のUIはやたらと凝ってるし それに似てないとみんな「○○みたいには出来ないんですか?」と 納得しないし。
415 :
名称未設定 :2008/07/30(水) 13:25:04 ID:FLlKvH4q0
IBはCmd-0でアウトライン表示にするとレイヤー選択するの楽。
416 :
名称未設定 :2008/07/30(水) 19:41:26 ID:pk8mMrnG0
すいません、お尋ねしたい事があるのですが・・・ FoundationやAppKitには、Windowsで言うところの「GetTickCount()」のような内部カウントを取得する関数って無いんでしょうか? 色々と探してみたのですが、どうにも見つからなくて・・・・・・
417 :
名称未設定 :2008/07/30(水) 19:45:42 ID:ze87ztrh0
普通にBSD系関数使えば?
418 :
名称未設定 :2008/07/30(水) 20:59:44 ID:0xFujw9p0
>>414 似せて作る要望がそんなに強いのか…。
機能がまずは大事だろうし、気が向いたらビジュアルを作り込む
位の心意気でいいと思うよ。肩の力を抜こう
419 :
名称未設定 :2008/07/30(水) 21:03:37 ID:PepTTP7Q0
mach_time.h
420 :
名称未設定 :2008/07/30(水) 21:08:54 ID:R/hoyucI0
ソフトを使う人はプログラマじゃないのでUIも非常に大事だと思いますよ あとMacを普段触ってる人ならOSXライクなUIにすることでおのずと操作性も上がると思います
421 :
名称未設定 :2008/07/30(水) 21:46:53 ID:K7PGsPzy0
>>416 使い方も精度もよくわからんけどNSDateとかどうでしょう
NSDate *date1 = [NSDate date];
〜〜
時間のかかる処理
〜〜
NSDate *date2 = [NSDate date];
NSTimeInterval time = [date2 timeIntervalSinceDate: date1];
NSTimeIntervalはdoubleのtypedefです。
ところで別の質問ですが
[NSString stringWith...]の戻り値はautoreleaseされてると思うんですが、
autoreleaseされてる、されていないの区別はどうやってつけるんですか?
たとえば上の[NSDate date]はどっちになるんでしょうか。
422 :
名称未設定 :2008/07/30(水) 22:27:43 ID:PepTTP7Q0
>>421 返ってくるオブジェクトが、シングルトンでないかぎりautoreleseされてると思う。
423 :
名称未設定 :2008/07/30(水) 22:32:37 ID:elk3Szvx0
424 :
名称未設定 :2008/07/30(水) 23:19:27 ID:qC4aLLnW0
自作のFrameworkに含まれるMyButtonとかMyObjectとかを、 Frameworkを利用したい別プロジェクトのIB上でボタンとかオブジェクトに割り当てて置いておくことってできないのでしょうか?
425 :
421 :2008/07/30(水) 23:33:25 ID:K7PGsPzy0
>>422 >>423 なるほど勉強になります。
ヒレガス本を見てたらP59にreleaseに関する規則が書いてありました。
古いせいかnewではじまるものは書いて無かった。Xcodeですらないし。
>>421 のNSTimeIntervalなんですがドキュメントにはsub-millisecondという単語が出てくるんで
精度はサブミリ秒なんでしょうが、サブミリ秒が10ミリ秒なのか、100ミリ秒なのかその他かは解らんです。
426 :
名称未設定 :2008/07/31(木) 00:39:45 ID:LTCTNNkm0
>>421 NSAutoreleasePool *pool;
NSSring *test = [NSString stringWithString: @"a"];
printf("%d¥n", [test retaincount]);
[pool release];
printf("%d¥n", [test retaincount]);
[pool release];
ではautoreleaseで仮開放されたオブジェクトが開放される。
これでautoreleaseされている事を数値として確認できるはず
427 :
名称未設定 :2008/07/31(木) 00:51:04 ID:kJOPwvi90
>>426 それでは、[pool release] で test が release されていた場合に、
次の [test retainCount] でクラッシュする可能性がありますぜ。
せめて NSString* test= [[NSString stringWithString:@"a"] retain];
ぐらいしておかないと。
あと、NSString* は激しく最適化されてるから、
test で何がかえってくるか定かでないよね。
NSConstantString である @"a" が、
retain autorelease されて返ってきても、
retain も autorelease もされずに返ってきても文句は言えない ...
428 :
名称未設定 :2008/07/31(木) 00:57:12 ID:LTCTNNkm0
>>427 おおそうであった。指摘ありがとう
NSAutoreleasePoolを使う事で一時的オブジェクトである事を確認できる事を考えてて
コーディングが甘くなってたわ。いかんいかん
429 :
416 :2008/07/31(木) 11:52:05 ID:HINI5QGu0
430 :
名称未設定 :2008/07/31(木) 19:12:12 ID:jV7NgTse0
copyWithZoneって何ですか? これを入れたら落ちなくなるおまじないだと思ってるのですがw
431 :
名称未設定 :2008/07/31(木) 19:14:27 ID:RPCi2OoE0
じゃあ、そうなんじゃね?
432 :
名称未設定 :2008/07/31(木) 19:25:16 ID:ykkdbxuS0
たまには上げるかな。
>>430 - (id)copyl;
- (id)copyWithZone: (NSZone*)theZone;
copyというのは、自分のオブジェクトが持っているインスタンスをまるまる
複写して所有権付きで呼び出し主に渡すというもの。
copyWithZoneてのは、メモリゾーンを指定して同様の事をするもの。
落ちなくなるおまじないってわけでもない。
呼び出したらretainが一回入ってるので所有権に注意。
433 :
名称未設定 :2008/07/31(木) 20:49:52 ID:HcoTC4VH0
434 :
名称未設定 :2008/07/31(木) 21:04:07 ID:52Jq8wko0
そういやIB3のライブラリに独自GUI部品追加するのってどうやるんだろ IB2ではNIBプラグインかなにか入れてた気がするがあれはもう使えんよな
435 :
名称未設定 :2008/07/31(木) 21:12:34 ID:NGJ8irep0
436 :
名称未設定 :2008/07/31(木) 21:28:55 ID:HcoTC4VH0
>>434 ibplugin に変わりました。
Cocoa Bindings使いまくり。
437 :
名称未設定 :2008/07/31(木) 23:31:16 ID:XcF0aGMT0
438 :
名称未設定 :2008/08/01(金) 00:46:32 ID:OOXSlUhh0
>>437 質問の背景がよくわかりませんが、例えばNSTableColumnの
dataCellはデータの増減によってコピーされます。
copyは実際はcopyWithZone:NULLが送信されています。
一例としてSample programのSourceViewのImageAndTextCellの
- (id)copyWithZone:(NSZone*)zoneをコメントアウトすれば、
super classにcopyWithZone:が送信されるため
imageが存在しないので、クラッシュするのは当然のことです。
439 :
名称未設定 :2008/08/01(金) 08:11:32 ID:fh38Gufg0
>>438 >Sample program
突然何の sample program の話をしてるの?
440 :
名称未設定 :2008/08/01(金) 09:33:55 ID:WJ5RtYj10
読み取れ
441 :
名称未設定 :2008/08/01(金) 15:30:22 ID:BstKir2w0
Xcode3.1でソースの一番下までスクロールした状態でコード補完させると、勝手に上へ数行スクロールするようになりました。 原因わかる人教えてくれ。 Xcodeスレは1000目前にしてDAT落ちしたね。
442 :
名称未設定 :2008/08/01(金) 19:35:17 ID:HAWlbAH/0
xcodeスレ落ちた だれか次スレおね
443 :
名称未設定 :2008/08/01(金) 22:37:42 ID:E0l24OCW0
444 :
名称未設定 :2008/08/02(土) 00:45:45 ID:flpSDaAS0
そんなに分類する必要ないでしょ Carbonスレも最近立ってるけど、Mac開発全般1スレだけで良さげ
445 :
名称未設定 :2008/08/02(土) 19:18:50 ID:DWJNDgjK0
質問です
NSResponderの
- (BOOL)performKeyEquivalent:(NSEvent *)anEvent メソッドを上書きしてキーを押したときのNSEventの中身を調べていました。
シフトやオプションを押しながらキーを押すと当然modifireFlagsの値は変わるのですが、
なぜかウィンドウのcontentViewをクリックした後とタイトルバーをクリックした後でも値が変わってしまいます。
Modifier FlagsのMaskについてもドキュメントを参照したのですが、なぜこの2通りのときで値が変わるのか、modifireFlagsに何が入ってているのか分かりませんでした。
どういったことでこの違いが起きているのでしょうか?
サンプルプロジェクトを上げたのでよろしければ見てください。
http://mac.hitobashira.org/up/src/maka0081.zip
446 :
名称未設定 :2008/08/02(土) 19:56:25 ID:z2jGhNS/0
確かに、1 << 8 値が変わるな。
447 :
名称未設定 :2008/08/02(土) 20:45:44 ID:DWJNDgjK0
内部的な何かの処理のなのでしょうか。 とりあえずその部分を無視しようと以下を追加しました。 NSString *key = [theEvent charactersIgnoringModifiers]; NSUInteger flag = [anEvent modifierFlags]; if (flag & 1 << 8) mask -= 1 << 8; if ([[self keyEquivalent] isEqualToString:key] && [self keyEquivalentModifierMask] == mask) { return YES; } 正しく動作はしますが、やり方としてはこのような感じで合ってるのでしょうか? そもそも 0x100 16進数 256 10進数 1 << 8 ??? って感じで最後のがよく理解できてない状態ですが、、。
448 :
421 :2008/08/02(土) 20:46:57 ID:wMjpltPb0
>>445 ちっとも進展してないが、とりあえず報告
OS X10.5.4
Macbook Pro
トラックパッドの下のボタンを使ってクリック
T1:ViewをクリックしてからShift+Option+アルファベット 655650
T2:タイトルバーをクリックしてからShift+Option+アルファベット 655394
で、USBで接続しているワコム[ペンタブ/マウス]を使うと再現せず
W1:ViewをクリックしてからShift+Option+アルファベット 655650か655394
W2:タイトルバーをクリックしてからShift+Option+アルファベット 655650か655394
数値はトラックパッドで行った時のが引き継がれる模様
T1のあとならW1,W2共に655650でした
もちろんwacom[ペンタブ/マウス]でも普通の操作はできる
で、NEC製の普通のマウスで同様にするとトラックパッドと同じ結果
単にワコムのペンタブとマウスが特殊なのが解っただけでしたw
449 :
名称未設定 :2008/08/02(土) 20:51:25 ID:DWJNDgjK0
if (flag & 1 << 8) mask -= 1 << 8; をしなくても [self keyEquivalentModifierMask] == mask の演算子をいじるだけで同じ働きができたりしないでしょうか?
450 :
名称未設定 :2008/08/02(土) 20:53:41 ID:DWJNDgjK0
>>448 調査ありがとうございます。
じっくり読ませていただきます。
451 :
名称未設定 :2008/08/02(土) 21:02:34 ID:wMjpltPb0
452 :
名称未設定 :2008/08/02(土) 21:18:52 ID:nCOEhJZL0
453 :
名称未設定 :2008/08/02(土) 21:44:03 ID:DWJNDgjK0
>>451 読んでみたところペンタブだと現象が起きないということですね。
>>452 試してもらえば分かると思いますが、それではうまくいかなかったのです。
サンプルプロジェクトに書いたように
if (flag & NSShiftKeyMask)
if (flag & NSCommandKeyMask)
で一つ一つのflagの有無はチェックできるのですが、
if ([self keyEquivalentModifierMask] & flag)
では
[self keyEquivalentModifierMask]が設定されてないと常にNOを返してしまうようです。
ちなみに
>>447 のコードのmaskのとこはflagでした、すいません。
454 :
名称未設定 :2008/08/02(土) 21:53:02 ID:VyG5QnCh0
>>453 マスクとビット演算のこと分かってないんじゃないかな。
if ([self keyEquivalentModifierMask] & flag) で[self keyEquivalentModifierMask]が0だったらNOなのは当然でしょ。
455 :
名称未設定 :2008/08/02(土) 21:59:40 ID:wMjpltPb0
>>453 結局何をしたいのか具体的に書いてみてはいかがでしょうか
わかってないのは自分だけ?
456 :
名称未設定 :2008/08/02(土) 22:00:20 ID:DWJNDgjK0
>>454 すいません、正直ビット演算はまだ理解が浅いですが、
上記の例で当然0になるという点は理解しています。
「返してしまうようです」という書き方は不適切でした、すいません。
>>447 の例を最適なコードにするにはどうしたら良いでしょうか?
457 :
名称未設定 :2008/08/02(土) 22:05:27 ID:wMjpltPb0
>>456 自分には難しそうです、何かわかればまた書きます
458 :
名称未設定 :2008/08/02(土) 22:13:04 ID:VyG5QnCh0
>>456 いやそもそも何をしたいのかがさっぱり分からん。
単に修飾キーを判定したいだけならこんなごちゃごちゃ書く必要ないじゃん。
459 :
名称未設定 :2008/08/02(土) 22:51:20 ID:DWJNDgjK0
ことの発端は
>>445 です。
修飾キーの判定には先に挙げたような
if (flag & NSShiftKeyMask)
といったものが使えます。
しかし特定の修飾キーに関してではなく、ここでのselfにあたるオブジェクトに設定された修飾キーと同じかどうか(もしくは全て含むかどうか)を判定しようとしたところ、
Modifire Flagsのドキュメントに載っていない 1 << 8 という値が飛んできて、しかもそれが特定の条件化で来たり来なかったりといったところで、どうしようかとなったわけです。
条件が分かればそこをチェックしてFlagの判定に組み込めばいいのですが、
ここまでの流れはそのFlagをどう無視するかというものでした。
例えば、
if (flag & NSShiftKeyMask)
if (flag & NSCommandKeyMask)
などすべて列挙していって、ドキュメントに書かれていない例外的なFlagを無視することもできます。
これは
>>447 の方法よりコードの信頼性は高いと思いますが、非常にアナログな手法で、もっとスマートにフラグの判定をできないかと思った次第です。
460 :
名称未設定 :2008/08/02(土) 23:10:55 ID:VyG5QnCh0
>>459 今一よく分からんが、「selfにあたるオブジェクトに設定された修飾キーと同じかどうか(もしくは全て含むかどうか)を判定」
すればいいのね?だったら
>>447 は
if ([self keyEquivalentModifierMask] & [anEvent modifierFlags]) {
return YES;
}
でいいじゃん。あ、上のコードは修飾キーだけの判定ね。
461 :
名称未設定 :2008/08/02(土) 23:33:50 ID:VyG5QnCh0
>>460 間違えた。全ての修飾キーが一致しないとダメなんだったか。
>>460 だとどれか一つ一致すればYESになるね。
([self keyEquivalentModifierMask] == [self keyEquivalentModifierMask] & [anEvent modifierFlags])
でどうかしら。
462 :
名称未設定 :2008/08/02(土) 23:38:24 ID:LU27e+rr0
>>461 == のが & より優先度が高いから括弧がいると思う
参考までに例外的なフラグを削除するなら
flag = flag & NSDeviceIndependentModifierFlagsMask;
で出来ると思う
OS X 10.4以上で動くはず
463 :
名称未設定 :2008/08/02(土) 23:46:05 ID:DWJNDgjK0
464 :
名称未設定 :2008/08/02(土) 23:47:24 ID:DWJNDgjK0
NSDeviceIndependentModifierFlagsMaskチャレンジしてみます。
465 :
名称未設定 :2008/08/02(土) 23:55:12 ID:DWJNDgjK0
flags = flags & NSDeviceIndependentModifierFlagsMask; をしてから if ([self keyEquivalentModifierMask] == flags) すれば完璧に動作しました! NSButtonの場合ですが、まとめるとこうです。 - (BOOL)performKeyEquivalent:(NSEvent *)anEvent { if ([anEvent type] == NSKeyDown) { NSString *key = [anEvent charactersIgnoringModifiers]; NSUInteger flags = [anEvent modifierFlags]; flags = flags & NSDeviceIndependentModifierFlagsMask; if ([[self keyEquivalent] isEqualToString:key] && [self keyEquivalentModifierMask] == flags) { [self performClick:nil]; return YES; } else { return NO; } } return [super performKeyEquivalent:anEvent]; } 感激です、みなさまありがとうございます!
466 :
名称未設定 :2008/08/03(日) 00:00:38 ID:wEE2HMGo0
>>465 それは良かった。
けど
>>463 のプロジェクト、俺の環境だと修飾キー関係なくて[self keyEquivalent]がそもそも空文字列だ…
467 :
名称未設定 :2008/08/03(日) 00:03:42 ID:pibjA2T20
なぜでしょう、、 IBのバージョンとかかも知れません。プロジェクトファイルはXcode3.1とIB3.1で作りました。 IBでkeyEquivalentを設定しなおしてみてはどうでしょうか?
468 :
名称未設定 :2008/08/03(日) 00:17:44 ID:wEE2HMGo0
>>467 ごめん一番左上のボタンの動作をデバッグで拾ってただけだった。
で、
>>461 +
>>462 だと、修飾キーが一つも合ってないときに修飾キー無しのボタンがヒットするのね。
確かにこの使い方には
>>465 の方がいいかも。
469 :
名称未設定 :2008/08/04(月) 20:55:09 ID:wOXqnMoB0
時々、QuickTimeの「MPEG-4の書き出し」に似たウィンドウをQuickTime以外のアプリでも見かけるのですが、QTKit等から呼び出し可能なのでしょうか。 もし呼び出す関数をご存知の方いましたら教えていただけるとうれしいです。
470 :
名称未設定 :2008/08/04(月) 21:15:01 ID:/6xN6LzP0
471 :
名称未設定 :2008/08/05(火) 16:13:50 ID:z6ApOwxE0
472 :
名称未設定 :2008/08/05(火) 22:21:42 ID:hNnXXyWp0
バインディングの勉強をしています。 IBで、ArrayControllerと、Window、その上に1列のTableViewと「+」Button、「-」Buttonを配置します。 TableViewのColumumのvalueを、ArrayControllerのarrangedObjectsの適当なModel Key Path名にバインドします。 「+」ButtonをArrayControllerのadd:アクションに繋げます。 「-」ButtonをArrayControllerのremove:アクションに繋げます。 これで、編集可能なTableViewができたのですが、「+」Buttonで行を追加したとき、 追加された行は選択状態にはなりますが、編集状態にはなりません。 編集状態にするには何をすべきでしょう? Xcode2.5/Interface Builder2.5.6
473 :
名称未設定 :2008/08/05(火) 22:47:50 ID:b3PgxnPw0
>>472 +ボタンとArrayControllerの間にお手製のコントローラを挟んで、(or ArrayControllerをサブクラス化して)
その中で- [NSTableView editColumn:row:withEvent:select:]を呼んであげる。
474 :
名称未設定 :2008/08/06(水) 13:40:02 ID:Qhr+d9FS0
>>473 やはりIBだけでは無理なんですね。とりあえず以下のようにしたらできました。
@interface MyTableController : NSArrayController{
IBOutlet NSTableView* _tableView;
}
@end
@implementation MyTableController
// たった今追加&選択されたのを編集状態に
- (void)editSelected:(id)sender{
int r = [_tableView selectedRow];
if( (0 <= r) && (r < [_tableView numberOfRows]) ){
[_tableView editColumn:0 row:r withEvent:nil select:YES];
}
}
- (void)add:(id)sender{
[super add:sender]; //本来の処理
// 次のイベントループ?で編集状態にする
[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)0.0
target:self selector:@selector(editSelected:) userInfo:nil repeats:NO];
}
@end
Timerで一度間を置かないと成功しませんでした。これは、add:自体はモデル(arrangedObjects)に
1要素追加しただけで、TableViewが新規行を認識するのはそれより後だから、だと認識しています。
で、add:→TableViewが新規行を選択→編集状態にする の順でやるのが自然な流れかと思います。
TableViewのDelegateかNotificationでもできそうですが、バインディング的にはKVOでやるべき
なのかな〜?とか推測してますが理解不十分でよく分からん状態です。
何であれ上の方法ではちょっと不確実のようにも思えるのでもうちょっと追求してみます。
とりあえずはレスありがとうございました。
475 :
名称未設定 :2008/08/06(水) 17:11:45 ID:/qnHPC400
PanelにTableViewを表示させてフォーカスがTableViewのままの状態で Panelを閉じて、Panelをreleaseすると落ちてしまうんだけど(release when closedは当然OFF)、これを回避出来る方法ってない?
476 :
名称未設定 :2008/08/06(水) 17:44:27 ID:nt4PhBNc0
それでは落ちない 別のとこに原因がある
477 :
名称未設定 :2008/08/06(水) 17:54:53 ID:+eUHJTWc0
>>475 release後にpanelに配置したviewにアクセスしておらぬか?
478 :
名称未設定 :2008/08/06(水) 18:02:41 ID:/qnHPC400
>>477 手順としては
XXXPanel *panel = nil;
@try {
panel = [[XXXPanel alloc] initWith...];
...
...
// OKで値を取り出してclose
// CancelはPanelをcloseするだけ
}
@finally {
if (panel)
[panel release];
}
とやってるので、Panelをcloseした後にreleaseしてるんだけど・・・
さらに補足すると 他のアイテム(例えばテキストフィールド)にフォーカスがある時は問題ないけど TableViewにフォーカスがある時はcloseしてreleaseすると落ちてしまう。 う〜〜〜〜ん・・・わからん。
スレ汚しすまん。 落ちるというのは不正確だった。アプリ単独で起動した場合は落ちるわけでは ないのだけど、Xcodeから起動して、上の動作をさせると必ずgdbに落ちてしまう わけ。問題ないんだろうか?
481 :
名称未設定 :2008/08/06(水) 19:14:06 ID:KUMdV5hV0
Xcode 3.1/Mac OS 10.5.4(intel)です。 [NSToolbarのインスタンス items];で、"現在ツールバーに表示されている"NSToolbarItemの配列が取得できますが、 ツールバーに現在表示されているアイテムだけでなく、「ツールバーのカスタマイズ」より追加登録可能なアイテムを含めたNSToolbarItemの配列を取得するには、どうすれば良いのでしょうか。
482 :
名称未設定 :2008/08/06(水) 20:23:43 ID:rahF98Ee0
>>478 そのテーブルのバインディング関係じゃない??
XXXPanel がリリースされてるのに、バインディングがまだいきているとか
483 :
名称未設定 :2008/08/06(水) 20:38:30 ID:3rQXNAm80
だいたいこの手のトラブルはショボいミスの場合が多いので、 質問者は連投して「俺はミスっていない」な意識を高める方向に向かわず もう一度、基本的なことを見直してみよう。
誰も気にしてないと思いますが一応報告を
>>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
>>482 いや、バインディグは使ってないよ。昔ながらのアウトレット。
dataSourceとdelegateしか繋いでいない。
そもそも何でTableViewにフォーカスがある時だけgdbに落ちるのかが不明。
486 :
名称未設定 :2008/08/06(水) 22:28:21 ID:zXFgswAj0
>>485 落ちる時のコンソールに多分重要なヒントがあると思う
487 :
名称未設定 :2008/08/06(水) 23:07:33 ID:OhKiyj2A0
だから、そういう時は環境変数で NSZombieEnabled=YES だってば。
488 :
名称未設定 :2008/08/07(木) 06:45:41 ID:ui9Vt5Jh0 BE:45163627-2BP(193)
>>484 >>474 みたいに NSArrayController をサブクラス化して、_tableView を持たせて、
-add: ではなく-addObject: をオーバーライドしてみては?
- (void)addObject:(id)object
{
[super addObject:object];
[_tableView editColumn:0 row:[_tableView selectedRow] withEvent:nil select:YES];
}
-add: は結局 -addObject: を呼ぶので。
当方のソフトでは、これだけで(Timer なしで)うまく動いているようです。
489 :
名称未設定 :2008/08/07(木) 09:28:04 ID:xPWZJ9zS0
すっごく適当でいうけど、 performSelector一発でなおる症状だったりしない? 遅延実行って結構効果あるよ
490 :
名称未設定 :2008/08/07(木) 09:30:22 ID:xPWZJ9zS0
ごめん、performSelector:withObject:afterDelay: ね
491 :
名称未設定 :2008/08/07(木) 11:44:51 ID:yEGuwUG30
CALayerに対するマウスイベントってどうやったら取得できますか? mouseDown:みたいなメソッドがないみたいなんですが。
>>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 :
名称未設定 :2008/08/07(木) 20:23:39 ID:CLgEx8bF0
>>491 マウスイベントなどは、NSView側で受けるしかありません。
そのあと、CALayerクラスのconvertPoint:fromLayer:とか、hitTest:とか、containsPoint:とかを使って、どのレイヤーでマウスダウンが発生したか調べてください。
494 :
名称未設定 :2008/08/07(木) 21:40:24 ID:nTPSYr960
できる限りageて質問してねっ♪
495 :
名称未設定 :2008/08/07(木) 21:41:32 ID:342M26uQ0
よっしゃ
496 :
名称未設定 :2008/08/07(木) 22:47:33 ID:yEGuwUG30
497 :
名称未設定 :2008/08/08(金) 01:16:25 ID:AB93afjr0
498 :
名称未設定 :2008/08/08(金) 01:23:04 ID:ldE4dOQI0
>>497 俺は古い人間なので、ツールバーはIBじゃなくてdelegate使って作ってる。
その方法だとデフォルトのアイテムも、カスタマイズで追加可能なアイテムも、選択可能なアイテムも全てコードで指定するので
そもそも
>>481 のようなことをする必要がない。
>>486 , 487
Xcode 3のデバッガは使いにくくなった上にデバッガ自体が落ちてダメでした。
パネルを閉じてもTableViewが生きているような・・・
結局、パネルのreleaseは@finally{}ブロックでやらずに、パネルのrelease when
closedにチェックを入れたらデバッガに落ちることはなくなりました。閉じたら
すぐにreleaseしなければいけない?
500 :
名称未設定 :2008/08/08(金) 14:01:30 ID:TM2xaHNC0
ObjCでsuperクラスのsuperクラスを取得する場合は、どうすればよいのでしょうか? [[super super] xxxx] という感じの事をしたいのです。 superクラスがxxxxのメソッドを間違った形で上書きしているので どうにかしてその親のメソッドを呼びたいのです。
501 :
名称未設定 :2008/08/08(金) 14:17:40 ID:gpx4Jprm0
ぜんぜん全く推奨しないけど、 @implementation SuperClass (overwride) -xxxx { return [super xxxx]; } @end か、だめなら +(void)initialize; あたりで Class sc = [super class]; Class ssc = sc->super_class; Method sm = class_getInstanceMethod(sc, @selector(xxxx)); Method ssm = class_getInstanceMethod(ssc, @selector(xxxx)); sm->method_imp = ssm->method_imp; とするか。
502 :
名称未設定 :2008/08/08(金) 14:24:54 ID:TM2xaHNC0
おおっありがとうございます。 早速試してみます。
503 :
名称未設定 :2008/08/08(金) 14:40:30 ID:OmgHIQjD0
そんなのできるんですか、、 知らなかったから同じような状況の時、目的のクラスの機能を全部実装してたorz
504 :
名称未設定 :2008/08/08(金) 20:23:36 ID:AB93afjr0
>>498 Tigerのときみたいにソースで実装するしかないのかな…
IBでNSToolbar作ると、Identifierがランダムな文字列になるので、
Identifierを知るために
テストランして、ツールバーカスタマイズして、全部のツールバー表示した状態で
for(int i=0;i<[[MyToolbar items] count];i++){
NSLog([[[MyToolbar items] objectAtIndex:i] label]);
NSLog([[[NyToolbar items] objectAtIndex:i] itemIdentifier]);
}
をするというめんどくさいことやっている。
どうにかIdentifierだけでも手に入れられる関数があればいいんだが…
505 :
名称未設定 :2008/08/08(金) 20:24:12 ID:AB93afjr0
訂正 全部のツールバー>全部のツールバーアイテム
506 :
名称未設定 :2008/08/08(金) 21:01:33 ID:OmgHIQjD0
あのさ、IBにあるデフォルトに[[toolbar items] count]したら7ってでたんだけどさ、 これって追加可能な全部のツールバーアイテムじゃないのか
507 :
名称未設定 :2008/08/08(金) 21:07:30 ID:OmgHIQjD0
あのさ、IBにあるデフォルトのToolBarに です
508 :
名称未設定 :2008/08/08(金) 23:19:29 ID:uUlYMw0W0
509 :
名称未設定 :2008/08/09(土) 01:24:58 ID:L1OiMG2b0
>>506 ツールバーカスタマイズして表示項目減らしてためしてみればわかると思うよ
510 :
名称未設定 :2008/08/09(土) 01:52:31 ID:L1OiMG2b0
511 :
名称未設定 :2008/08/09(土) 13:29:19 ID:8bEhkL+N0
>>507 - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
使った事がないけど、この辺のインスタンスメソッドで引っぱりだせないかな
512 :
名称未設定 :2008/08/09(土) 13:36:24 ID:UXDEXFyx0
513 :
名称未設定 :2008/08/09(土) 13:40:08 ID:mdpOZT3D0
>>512 NIBで作った時にはその辺も作られてるなら、動作するかもしれんがどうなのだろう。
514 :
名称未設定 :2008/08/09(土) 15:53:44 ID:UXDEXFyx0
>>513 IBでNSToolbarを作って試してみたが、delegateは設定されてなかった。
515 :
名称未設定 :2008/08/09(土) 15:57:51 ID:L1OiMG2b0
516 :
名称未設定 :2008/08/09(土) 16:01:10 ID:L1OiMG2b0
517 :
名称未設定 :2008/08/10(日) 01:33:59 ID:JedI4tyI0
Xcode 3.1です。
@implementation MainClass
-(IBAction)connection:(id)sender{
NSLog(@"connection");
NSSocketPort *sock=[[NSSocketPort alloc] initRemoteWithTCPPort:80 host:@"192.168.0.2"];
NSFileHandle *socketHandle = [[NSFileHandle alloc] initWithFileDescriptor: [sock socket]
closeOnDealloc: YES];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(receiveMessage:)
name: NSFileHandleConnectionAcceptedNotification
object: socketHandle];
[socketHandle acceptConnectionInBackgroundAndNotify];
}
- (void)receiveMessage: (NSNotification*)notification {
NSLog(@"receiveMessage:");
// check error
NSNumber *pUNIXError = [ NSNumber numberWithInt:0 ];
pUNIXError = [[notification userInfo] objectForKey:@"NSFileHandleError"];
if( ![ pUNIXError intValue ] ){
NSData* data=[[[notification userInfo] objectForKey:NSFileHandleNotificationFileHandleItem] readDataToEndOfFile];
NSString* string = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding];
NSLog(string);
}else{
NSLog([NSString stringWithFormat:@"SocketError:%d",[ pUNIXError intValue ]]);
}
}
これで、「SocketError:9」が出てしまうのですが、考えられる原因は何でしょうか。
Safariで
http://192.168.0.2にアクセスすると問題なくページが表示されます 。
518 :
名称未設定 :2008/08/10(日) 02:18:51 ID:l/HlxMYs0
9 ってことは EBADF だよね。↓ここらへんが気になるところだけど。 initRemoteWithTCPPort:host: ... Discussion A connection is not opened to the remote host until data is sent.
519 :
名称未設定 :2008/08/10(日) 06:00:14 ID:JedI4tyI0
>>518 >A connection is not opened to the remote host until data is sent.
データを送るまでコネクションが開かないんですかorz
大変そうなのでBSD Socket使います。
520 :
名称未設定 :2008/08/10(日) 15:59:36 ID:0HgkgHJ00
IBで メニューA サブメニューB サブメニューC で、メニューAにアクションを繋げない場合、 バインディングでメニューAのenabledを設定しても上手く効いてくれません。 (どこかにアクションを繋げると効くため、なにもしないアクションを作って繋げてる) そんなもんなんですかね?
521 :
名称未設定 :2008/08/10(日) 16:24:26 ID:7bJ1GIwG0
>>520 メニューはちょっと特殊でターゲットとアクションが有効でない時には
非アクティブになるという特徴がありますね。それが効いてるのかも
522 :
名称未設定 :2008/08/10(日) 18:08:43 ID:Kamu+JT80
なんですけど、
>>520 の場合でサブメニューにはターゲットアクションを繋いで
enabledも設定しているので、サブメニューが全てdisabledの場合は
メニューAもdisabledになってくれるのが理想なんですが。
523 :
名称未設定 :2008/08/10(日) 20:24:07 ID:oKYJ5JZD0
>>520 MenuのAttributes InspectorのAuto Enables Itemsのチェック外せば良さそうな気がするけど、これだと全部のアイテムをバインディングすることになりそうだな。
524 :
名称未設定 :2008/08/11(月) 16:58:09 ID:zNOsZ4Ot0
画像作成についての質問です。 ARGB各8bitのplanarな配列をNSBitmapImageRepの initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel: に渡して画像を作ろうとしています。 「白っぽい」色のアルファ値によるグラデーションを作ると、 アルファ値が255から下がるにつれてすぐさまRGBの各値が同じに 揃っていき、「白っぽい」でなく「白」(実際255より小さい 値なので灰色ですが)になってしまいます。 暗い部分にいくにつれて表示されている色のRGBの各値が小さくなるので、 「白」(灰色)に近づいていくのは原理的にわかるのですが、 表示されている色の各RGBの値が均等に下がっていくのではなく、 大雑把ですが(R,G,B)の変化が (255,255,200)→(230,230,200)→(200,200,200)→(180,180,180) のようにまず大きい値だけが小さくなっているようです。 配列を直接NSBitmapImageRepに与えずに、 配列の内容をsetColor:atX:yで一点一点塗っていくと期待している 「白っぽい」色のグラデーションになっているので、 配列を直接与える際に何か注意すべき点があるのでしょうか。
525 :
524 :2008/08/11(月) 18:39:45 ID:zNOsZ4Ot0
524の件、自己解決しました。bitmapFormat:に渡す NSAlphaNonpremultipliedBitmapFormat を|したつもりが||してました…、大反省…。
526 :
名称未設定 :2008/08/13(水) 14:51:00 ID:RefZrw740
aviファイルからQTTimeオブジェクトを作ると、 - (QTTime) durationの位置にcurrentTimeがあったときに、 - (void) playを呼ぶと最初から再生しようとするみたいなんですが、 currentTimeがムービー長さの最後にあるときはplayを呼んでもそのまま停止にできませんか。 ループしてるのかなと思ってsetMovieAttributes:でQTMovieLoopsAttributeにNOを設定してもだめでした。
527 :
名称未設定 :2008/08/13(水) 17:38:03 ID:8sa2ROU+0
QTView subclassすれば?
528 :
名称未設定 :2008/08/13(水) 19:53:13 ID:0D3wt/zD0
サブクラス作ってplayメソッドオーバーライドして カレントタイムがデュレーションならstopで行けるんじゃね? ちなみにavi以外でもなると思う。
529 :
名称未設定 :2008/08/13(水) 21:03:47 ID:TPb3TJ9I0
@selector( method ) と @selector( method: ) の違いを教えてください。
530 :
名称未設定 :2008/08/13(水) 21:05:27 ID:sc0254TI0
-(id)method と -(id) method: (id)args の違いと同義。
531 :
名称未設定 :2008/08/13(水) 21:10:05 ID:TPb3TJ9I0
即答サンクス
532 :
名称未設定 :2008/08/14(木) 00:40:48 ID:I3mEPq/b0
iPhoneの電話番号入力みたいに数字の桁が増えると 自動的に文字を小さくするようにしたいのですがTextFieldだと無理でしょうか 設定方法よろしくお願いします。
533 :
名称未設定 :2008/08/14(木) 10:02:12 ID:X6pdong60
サブクラスを作ってdrawInteriorFrame内で文字長に応じてフォントサイズを指定したattributedstringを作成して描く。 携帯なんで綴りがあってないかも。
534 :
526 :2008/08/14(木) 10:10:06 ID:9goEo+k30
>>528 やっぱりcurrentTimeとdurationの比較で制御するしかないですかね。
わかりました。
535 :
名称未設定 :2008/08/14(木) 12:40:22 ID:I3mEPq/b0
WebKitを使ってGUIを持つテキストブラウザを作成する事はできますでしょうか もしよろしければその設定方法をお教え願います。
536 :
名称未設定 :2008/08/14(木) 13:10:56 ID:zjeFy/WK0
すみませぬ、目的がはっきり見えてこないのでもう少し詳しく情報を。
537 :
名称未設定 :2008/08/14(木) 13:13:47 ID:I3mEPq/b0
w3mやlynxの様にテキストしかロードしないようにしたいのです。 デスクトップでもテキストブラウザを使いたいと思うので。 よろしくお願いします。
538 :
名称未設定 :2008/08/14(木) 13:38:01 ID:zjeFy/WK0
>>537 単純にテキストだけをダウンロードして表示するというのれあれば…
ターミナルでcurl -i
http://~~~ などとやったりするけども、それと似たような事をしたいというのであれば
NSURLConnectionでサイトから文字データとして取得、それをそのまま
NSTextFieldに書き込み、等とするといいのかもしれません。
…という目的じゃなかったらすまぬ
539 :
名称未設定 :2008/08/14(木) 13:40:36 ID:b1/NXUz70
css でごまかせそうな予感。
540 :
名称未設定 :2008/08/14(木) 13:52:28 ID:I3mEPq/b0
w3mをGUIアプリケーションに移植するような感じの アプリケーションを作りたいのです。 ボタンとかはGUIだが表示はw3mの様な感じに成っているような
541 :
名称未設定 :2008/08/14(木) 16:59:32 ID:4Q7QDSpl0
542 :
名称未設定 :2008/08/14(木) 17:30:27 ID:I3mEPq/b0
>>541 これは面白い。
他の技術にも使えそうですね!!
543 :
名称未設定 :2008/08/14(木) 17:34:05 ID:zjeFy/WK0
おぉ、その手の事に興味がおありなら、NSWorkspaceとかも一緒に勉強してみるといいかもしれんね。
544 :
名称未設定 :2008/08/14(木) 18:39:29 ID:bvi8a3UW0
NSTableViewに、 NSPoint aStartPoint = NSMakePoint(0.0, 0.0); NSPoint anEndPoint = NSMakePoint(100.0, 200.0); [self lockFocus]; NSBezierPath *aHighlightPath = [NSBezierPath bezierPath]; [aHighlightPath moveToPoint:aStartPoint]; [aHighlightPath lineToPoint:anEndPoint]; [aHighlightPath setLineWidth:2.0]; [[NSColor blackColor] set]; [aHighlightPath stroke]; [self unlockFocus]; したら、マウスが上にあってアクティブなセルにしか描画されなかったんで、 他のセルも再描画してやったらいいだろうと思って、 [self drawRow:1 clipRect:[self bounds]]; してみたけど変化ありませんでした。 どうやってやるのが正しいんでしょうか?
545 :
名称未設定 :2008/08/14(木) 20:29:20 ID:zjeFy/WK0
NSTableViewに - (void)setNeedsDisplay:(BOOL)flag; のメッセージを送ってみるとかどうでしょう。
546 :
544 :2008/08/14(木) 22:21:37 ID:bvi8a3UW0
>>545 おおお、できました(・∀・)
助かりました。ありがとーございます。
547 :
542 :2008/08/14(木) 22:49:24 ID:I3mEPq/b0
NSTaskを使おうと思ったのですが、もうなんか文法とかで突っかかり まくり凄くへこみました。 CocoaはさっぱりどころかObjective-Cがさっぱりな状態。 Objective-Cからやり直してきます。
548 :
名称未設定 :2008/08/14(木) 22:59:42 ID:0uVgcEUw0
別ブロセス起動時のargmentにはchar * しか渡せないでしょうか? NSArrayやNSDictionaryをいったんchar * にして別プロセスに渡して、別プロセスの int main (int argc, const char * argv[]) { } の中でまたargv[1]とかargv[2]からNSArrayやNSDictionaryに戻すようなトリッキーな変換方法はないでしょうか?
549 :
名称未設定 :2008/08/14(木) 23:02:58 ID:zjeFy/WK0
別プロセスにオブジェクトを渡すのに、確かNSpipeなるものが使えたと思う。 ちょっと使い方が凝ってたのでまだ勉強していない所だけれども…
550 :
名称未設定 :2008/08/14(木) 23:37:54 ID:0uVgcEUw0
NSPipeは別プロセスからの出力と認識していましたが、入力もできるのでしょうか? NSConnecionも検討していたのですが、上記の件はPropertyListを使う事でできました。 今日一日飯も食わずこれで悩んでたのでこんな単純なことで解決して吊りたい気分です。
551 :
名称未設定 :2008/08/14(木) 23:51:09 ID:zjeFy/WK0
あ、オブジェクトのやり取りの話しでしたな… NSPipeで行けると思ったけれど、NSConnecionの方がオブジェクトのやり取り そのものを扱ってるのでこちらがいいかと思う。
552 :
名称未設定 :2008/08/15(金) 07:55:44 ID:hUu6QEsI0
>>548 NSProcessInfoのargumentsを使うと
起動時の引数をNSStringの配列で取得できます。
数値とか文字列のような単純なオブジェクトでないものを別プロセスと
やりとりするなら分散オブジェクトが簡単だと思います。
553 :
名称未設定 :2008/08/15(金) 11:42:06 ID:4CEn4cp00
おおーこれは素晴らしいものを教えていただきました。 今後のためにも分散オブジェクト勉強してみます。
554 :
名称未設定 :2008/08/15(金) 14:56:24 ID:5Ul2UCXT0
いままでCocoaをRubyCocoaで使っていましたが Appleの解説サイトでも説明はObjectiv-Cで基本書いてあるので Objective-Cを勉強したいと思うのですが、どのへんまでかけるように なればCocoaに手を出せば良いのでしょうか? Objective-Cで何でもかけるようにならないとCocoaは手を出してはいけない のでしょうか? よろしくお願いします。
555 :
名称未設定 :2008/08/15(金) 15:00:45 ID:AY1CyHVW0
>>554 興味を持ったら手を出してOKだと思う。自分もそうだった
556 :
名称未設定 :2008/08/15(金) 15:28:35 ID:5Ul2UCXT0
>>555 そうですかありがとうございます。
興味は有るのですがObjective-Cでなにもかけないんですよね・・
例えばallocってのがなんだ?みたいな感じでして
557 :
名称未設定 :2008/08/15(金) 15:34:32 ID:AY1CyHVW0
>>556 そのレベルでもOK w
自分も#importって何じゃ、インスタンスオブジェクトって何じゃ?
一番最初のソースって一体どこに書けばいいんじゃ?
とか最初は本気で悩んだもんだ
とりあえず、簡単なサンプルプログラムを見て勉強したり
HMDTなどの書籍等を読んでみるのもいいかも。mixiなどのコミュニティーとか
相談してみるのもいいかもしれんし(あ、最近更新してなかった…w)
ある程度分かってくると、詳解Objective-C 2.0あたりもいいけど、まずは
基本的な所からがいいと思う。NIBで自作オブジェクトをインスタンス化して
そのIBOutletとかIBActionの接続あたりを理解できると、そこあたりが
足がかりにできるかもしれん
558 :
名称未設定 :2008/08/15(金) 15:43:40 ID:5Ul2UCXT0
なるほど わかりました。何か入門に成るサイトを探してサンプルプログラムを みてみます。ありがとうございました。
559 :
名称未設定 :2008/08/15(金) 16:50:42 ID:OQNRRDxF0
560 :
名称未設定 :2008/08/15(金) 16:56:04 ID:Cd5tTLaK0
qtmovieの任意の時間のフレームをciimageに変換したいんだけど、 NSImageをqtmovieから取得して、それをimagerepに展開してCIImageに変換するってやってんですけど。 NSBitmapImageRepを使うと物凄く時間がかかってる気がするなあ。 もうちょっと高速化できるアイデアって無いもんでしょうか。
561 :
名称未設定 :2008/08/15(金) 17:30:28 ID:14zwALNR0
再生中のQTMovieからカレントタイムでイメージを作成するのは遅くなるよ。 表示中のサイズが大きいと、そのサイズからイメージを作成しようとするから メモリもバンバン食うし。
562 :
名称未設定 :2008/08/15(金) 18:53:31 ID:4G4XJIgf0
基本的にはMovieをInactiveにした状態で取り出すと処理が軽い、らしい。 だから、同じムービーのインスタンスを二つ作るとかどうよ。
563 :
名称未設定 :2008/08/16(土) 00:55:19 ID:3kV+xRqE0
Cocoaの話題でなくて恐縮ですが、CoreFoundation系のものって CFStringRef string; みたいに宣言しただけでは中身はNULLで、 string = "abc"; みたいにするとすでにRetainされていて、いらなくなったら CFRelease(stringRef); で必ず解放してやらなければならない。 CFStringRef otherStringRef = stringRef; とした場合は stringRefだけを解放して、otherStringRefは何もしなくてOK。 と、このような認識であってますか? もう一点、 CoreFoundationにはautorelaseがないのですが、 メソッドで返した値はメソッドで呼び出した方で解放する、ということで良いでしょうか? Cocoaは分かるのですが、CoreFoundationはさっぱり!です。
564 :
名称未設定 :2008/08/16(土) 01:04:52 ID:6LGW69YZ0
>>563 基本的に = で代入するだけではretain release動作は自動ではされないはずなので、
その認識で大丈夫だとは思う…。
("abc"が定数として挙動していなければ)
565 :
名称未設定 :2008/08/16(土) 01:08:02 ID:dit8Fbpn0
566 :
名称未設定 :2008/08/16(土) 02:27:31 ID:q2f7W2rr0
>>563 string = "abc";
これはCFSTR("abc")じゃないでしょうか?
567 :
名称未設定 :2008/08/16(土) 04:55:25 ID:3kV+xRqE0
>>564 ありがとうございます。
>>565 ありがとうございます、読んでみます。
>>566 おっしゃる通りです、書いてから気付きました、、
CoreFoundationにしかない機能の一部をCocoaにラップしたframeworkを作っていて
メソッドでautoreleaseされたオブジェクトを返すにはどうしたらよいのか?
NSString * とCFStringRef とでキャストを利用した場合、
実体が返されるのか新たにキャストされた実体が作られて返されるのか?その時retain releaseはどうなっているか?
など疑問が湧いてきましたが、とりあえず後日
>>565 のドキュメントを読んでみます。
もう朝だ、、
568 :
名称未設定 :2008/08/16(土) 10:13:18 ID:37xdHDFf0
>>567 そういう用途ならautorelease使えるよ。
CFStringRef string = うんたらかんたら;
[(NSString *)string autorelease];
return (NSString *)string;
みたいにキャストしてCocoaのオブジェクトとして扱える。
キャストしただけでCocoaのオブジェクトとして使えるってことはつまり、CFString構造体こそNSStringの実体なんだけどね。
569 :
名称未設定 :2008/08/16(土) 13:31:42 ID:dit8Fbpn0
GCを考慮するなら return (NSString *)[ NSMakeCollectable(string) autorelease ]; にするべき
570 :
名称未設定 :2008/08/16(土) 18:16:23 ID:ujCYt6R20
質問です。どの辺りが問題なのかよく分からないので関係のあるメソッドの中身を全部張ります。 長いソースでスレ汚ししてすみません。 *2のところで-(void) appendString:(NSString *)aStringしてるんですが、 連結されずに元々入っていた文字列のままになってしまっています。 *1のところで[array objectAtIndex:9]の代わりに@"あああ"とか入れるときちんと連結されます。 また、parsedStringはnilとかじゃなくて元々意図した文字列(lsの結果)が入っているので原因がよくわかりません。 何が問題なんでしょうか?ご教示ください。 NSMutableArray *list = [[NSMutableArray alloc] init]; NSTask *task = [[NSTask alloc] init]; [task setLaunchPath:@"/bin/ls"]; NSArray *array = [NSArray arrayWithObjects:@"-AlFcT", currentDirectory, nil]; [task setArguments:array]; NSPipe *outPipe = [[NSPipe alloc] init]; [task setStandardOutput: outPipe]; [outPipe release]; [task launch]; NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile]; [task waitUntilExit]; int status = [task terminationStatus]; [task release];
571 :
名称未設定 :2008/08/16(土) 18:17:28 ID:ujCYt6R20
続きです if(status == 0){ NSString *aString = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding]; NSString *bString; NSMutableString* parsedString; NSRange range, subrange; int length; length = [aString length]; range = NSMakeRange(0, length); [list addObject: @".."]; // total * の部分をスキップする subrange = [aString lineRangeForRange: NSMakeRange(range.location, 0)]; range.location = NSMaxRange(subrange); range.length -= subrange.length; while(range.length > 0) { subrange = [aString lineRangeForRange: NSMakeRange(range.location, 0)]; bString = [aString substringWithRange:subrange]; range.location = NSMaxRange(subrange); range.length -= subrange.length; NSArray *array = [self split:bString delimiter:@" "]; parsedString = [NSMutableString stringWithString: [array objectAtIndex:9]]; //*1 [parsedString appendString: [array objectAtIndex:8]]; //*2 NSLog(parsedString); [list addObject: parsedString]; } }
572 :
名称未設定 :2008/08/16(土) 18:25:19 ID:Ix4Ieu5n0
>>570 項目と項目の間がスペース一つではないのかもしれないですね。
試しに
NSLog(array);
を埋め込んでおくと原因が分かるかもしれない。
そして最後にこれも必要と思う。
[list release];
[aString release];
573 :
名称未設定 :2008/08/16(土) 19:20:10 ID:L8m/lz+K0
>>570 1.デバッガ使え
2.何故lsを使う必要があるのか分からない
3.何故NSScannerを使わないのか分からない
4.split:delimiter:の処理内容が分からない、ていうかcomponentsSeparatedByString:使えばよくね?
5.やりたいことを教えてくれたら俺が書くわ
574 :
570 :2008/08/16(土) 19:28:17 ID:ujCYt6R20
>>572 >NSLog(array);
それはやってみましたが、きちんと文字列が入っていました。
releaseに関しては失念していました。普段c#しか使わないので...
>>573 NSScanner, componentsSeparatedByStringについては存在を知りませんでした。
どうもありがとうございます。調べてみます。
やりたいことに関してですが、ファイラーを作っていて、以下の内容を取得したかったのでlsを使ってみました。
1. ディレクトリ内のファイル/フォルダの一覧
2. 作成日時
3. 種類(ディレクトリ, 実行ファイル, その他のファイル, ソフトリンク, ハードリンク)
4. パーミッション
575 :
名称未設定 :2008/08/16(土) 19:33:24 ID:7DkApg2H0
576 :
名称未設定 :2008/08/16(土) 20:08:29 ID:/aHVNfmz0
>>575 おお、早速誰か書いてくれた…ってそれほぼCじゃねーかw
というわけで俺も書いてみた。豪語しておいて稚拙ですまんが。if(status == 0){ 以下のだけ書くね。
ちなみにlsの出力の意味は知らん。
if(status == 0){
NSString *aString = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];
NSArray *lsOutputLines = [aString componentsSeparatedByString:@"\n"];
NSEnumerator *lsOutputLineEnumerator = [lsOutputLines objectEnumerator];
NSString *lsOutputLine;
lsOutputLine = [lsOutputLineEnumerator nextObject]; // Skip first line
while (lsOutputLine = [lsOutputLineEnumerator nextObject]) {
NSScanner *lsOutputScanner = [NSScanner scannerWithString:lsOutputLine];
NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet];
NSString *item;
NSMutableArray *items= [NSMutableArray array];
while (![lsOutputScanner isAtEnd]) {
if ([lsOutputScanner scanUpToCharactersFromSet:whitespaceCharacterSet intoString:&item])
[items addObject:item];
}
if ([items count] > 9) {
NSMutableString* parsedString = [[[items objectAtIndex:9] mutableCopy] autorelease];
[parsedString appendString:[items objectAtIndex:8]];
NSLog(parsedString);
}
}
}
577 :
570 :2008/08/16(土) 20:09:27 ID:ujCYt6R20
>>575 わざわざ組んでいただいてどうもありがとうございます。
後で自分の書き込みを読み返してみて、デバッグの手伝いをお願いしてるみたいな感じで申し訳ないし、
そうなってしまってたらすれ違いだしで(´・ω・`)でしたが、みなさん親切な方で嬉しいです。
もうちょっと考えてから書き込むことにします。ありがとうございました。
578 :
570 :2008/08/16(土) 20:10:44 ID:ujCYt6R20
>>576 あ、入れ違いになってしまいました。
どうもありがとうございます。参考にさせていただきます(`・ω・´)
579 :
名称未設定 :2008/08/16(土) 20:19:25 ID:7DkApg2H0
>>576 あっはっはw
>>577 いいってことよ。
俺にとっちゃ意図を定めたときに頭の中にコードが浮かんで、それを打ち込む瞬間が
パズルを解いてるみたいで、どんなゲームをやるより楽しい。
580 :
名称未設定 :2008/08/16(土) 20:31:19 ID:xXXJwvxN0
NSTableViewのカラムをNSArrayControllerのカラムにバインディングした状態で、 NSArrayControllerに対してselectPrevious:、selectNext:を実行した場合、(もしくは上下 カーソルキーで選択行を変更した場合)NSTableViewの行の選択も追従するのですが、 10.4なら 選択された行がvisibleになるようにスクロールする。 10.5なら スクロールせず選択された行だけが変わっていく。 となります。 NSTableViewのdelegateで -(void)tableViewSelectionDidChange:(NSNotification *)aNotification { [self scrollRowToVisible:[self selectedRow]]; } と記述しても10.5ではスクロールしません。 そもそも仕様が変わったのか調べているのですが、該当記事がなさそうです。 なにかよい対処方法はありませんでしょうか?
581 :
名称未設定 :2008/08/16(土) 20:34:23 ID:7DkApg2H0
>>580 >NSTableViewのdelegateで
とのことなので、
[self scrollRowToVisible:[self selectedRow]];
を
[該当テーブル scrollRowToVisible:[該当テーブル selectedRow]];
とするとうまく行くかも
582 :
名称未設定 :2008/08/16(土) 20:37:58 ID:oyh036pp0
>>574 > やりたいことに関してですが、ファイラーを作っていて、以下の内容を取得したかったのでlsを使ってみました。
なぜ、NSFileWrapperを使わないんですか?
583 :
名称未設定 :2008/08/16(土) 21:31:24 ID:qw2SgueW0
元ファイルとハードリンクって区別不可能じゃね?
584 :
名称未設定 :2008/08/16(土) 22:25:35 ID:oyh036pp0
たしかに、どちらも「本体」だからね。 2つのファイルが、ハードリンクしたものなのかどうかは、ノード番号で分かるけどね。
585 :
名称未設定 :2008/08/16(土) 22:37:10 ID:0tW9+cNm0
>>581 回答ありがとうございます。
>NSTableViewのdelegateで
すみません記述を間違えました。
NSTableViewのサブクラスで [super setDelegate:self];をかましています。
当方10.4/Xcode2.5なので10.5での動作確認がいまいち不安なのですが、
(友人宅の10.5で挙動がおかしかった)まあ、あまり気にしない事にします。
>> 582 > NSFileWrapper すみません。単なる勉強不足です。 教えてくださってありがとうございます。 このスレの上の方でNSTaskを使う話が出ていて、 そういやMacってBSDだから、コマンド呼べばいろいろできそうだな。 お、lsとmvとcpでファイラーの基本機能ほとんどできるんじゃね? ていうかCUIで全部できるはずだからこれでできないわけないよな。 ほとんどシェルのノリで書けばいい。余計なプログラミングしなくていいやー(・∀・)カコイイ ってノリでどんどん書き始めたので、その辺りのクラス/メソッドをよく調べてませんでした。 もうちょっと調べてみることにします(・A・)バカマルダシカコワルイ
587 :
名称未設定 :2008/08/17(日) 01:05:11 ID:EgIgwGXn0
588 :
名称未設定 :2008/08/17(日) 01:18:35 ID:iKet9At70
あえてls,mv,cpで作ってみるのも面白いと思うけど。
別に真っ当(?)な方法で作らなきゃいけないというわけじゃないでしょ。
ところで
>>582 はNSFileWrapeprじゃなくてNSFileManager?
589 :
名称未設定 :2008/08/18(月) 15:22:49 ID:3+6wulaW0
Macのプログラマ向けの案系が多く掲載されている、 受注サイトがあったら教えてもらえませんか?
590 :
名称未設定 :2008/08/18(月) 20:12:59 ID:V7XyMSEu0
>>568 土日明けて亀レスですが有益な情報ありがとうございます。
591 :
名称未設定 :2008/08/18(月) 21:12:35 ID:vAqeF/Jn0
>589 そんなのみたことない
592 :
名称未設定 :2008/08/19(火) 15:14:40 ID:nkUn3TvL0
xcode 3.1です。 NSDate型の*x、 int型のy がある状態で、xからy秒経過した後の時刻をNSDateで取得したいのですが、どのようにしたら良いでしょうか。
593 :
名称未設定 :2008/08/19(火) 15:58:39 ID:kzjnsRzA0
>>592 - (id)addTimeInterval:(NSTimeInterval)seconds
594 :
名称未設定 :2008/08/19(火) 17:20:56 ID:nkUn3TvL0
595 :
名称未設定 :2008/08/20(水) 23:24:37 ID:2x16Koxv0
NSCalendar, NSDateComponentsについて質問があります。 インスタンス変数としてNSDate *theDateを設定、NSDatePickerとバインドして NSDateComponentsの各プロパティを表示する実験をしました。 NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSEraCalendarUnit |NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit; NSDateComponents *comps = [calendar components:unitFlags fromDate:[self theDate]]; ....... [self setWeek:[comps week]]; ...... theDateを年末の53週に相当する日に設定するとNSDateComponentsのweekが 53ではなく1になることに気づきました。 NSCalendar *calendar = [NSCalendar currentCalendar]; NSRange range = [calendar maximumRangeOfUnit:NSWeekCalendarUnit]; NSLog(@"maximumRangeOfUnit:NSWeekCalendarUnit = %@", NSStringFromRange(range)); を実行すると、{1, 53}が返ってきますし、setWeek:で53を設定できるので、weekの値が52まで ということはないと思います。 これはバグなのでしょうか?それとも当方だけの問題でしょうか?
596 :
名称未設定 :2008/08/22(金) 19:32:23 ID:m7irX9zu0
Finderからのドラッグ&ドロップで、オリジナルのviewのうえに 画像を貼付けたいのですが、viewの上にドロップした時のマウスカーソルの 位置を取得できなくて困っています。 そういう位置はどうやって取得できるのでしょうか?
597 :
名称未設定 :2008/08/23(土) 00:03:22 ID:i795TmKu0
>>596 [[NSApp currentEvent] locationInWindow] は使えませんか?
598 :
名称未設定 :2008/08/23(土) 07:35:48 ID:UYIKiWXA0
早速の返信ありがとうございます。 しかし、ご指摘いただいた[NSApp currentEvent]を使ってマウスの位置情報の入ったNSEventを取り出してみるというのを、試したのですがうまくいきませんでした。 説明が足りず申し訳有りません。以下にソースコードをそのままペーストします。 ほとんど、どこかで拾ってきたサンプルコードのつぎはぎですが、、 eventCheckというのをつくって、[NSApp currentEvent]でわたされたイベントの中身を デバッガで見てみたのですが、この時点でマウスの位置情報がx=0,y=0になっています。 pathはNSStringで、画像の位置情報です。 MyNCは、自分で作ったクラスです。 -(BOOL)performDragOperation: (id) sender { MyDocument *document = [[[self window] windowController] document]; MyNC *DragNC =[[MyNC alloc] init]; //イベントから、マウスの位置をゲットしたかったが、まだやり方がよくわからない。 NSEvent *eventCheck =[NSApp currentEvent]; NSPoint testOfEvent =[eventCheck locationInWindow]; NSPoint pos =[self convertPoint:testOfEvent fromView:nil]; //??? [DragNC setTest:path]; [DragNC setImage:[ [NSImage alloc] initWithContentsOfFile:path] ]; [DragNC setBasepoint:pos]; [DragNC rectOfImage]; [document addFromView:DragNC]; return YES; }
599 :
名称未設定 :2008/08/23(土) 08:34:53 ID:WscyKynU0
600 :
名称未設定 :2008/08/23(土) 09:45:05 ID:UYIKiWXA0
すごく早い返信ありがとうございます。 アドレスにあったCocoa Event-Handling Guide をよんで、NSWindowのメソッドのmouseLocationOutsideOfEventStream が使えるのではないかと思って、試した所うまくいきました 599さん、ならびに597さんありがとう。 -(BOOL)performDragOperation: (id) sender { NSWindow *testWindow =[self window]; NSPoint mousePoint =[testWindow mouseLocationOutsideOfEventStream]; //これで、mousePointにマウスカーソルの位置がはいりました(^^) //以下ソースコード略
601 :
名称未設定 :2008/08/23(土) 15:40:16 ID:leuBXtDM0
ageですね
602 :
名称未設定 :2008/08/24(日) 17:22:44 ID:TmR2Twjv0
>>595 年の最終週は、きっちり終わってないときは翌年のweek 1と同一視することにしているのかも。
(その方が、年をまたいで週をカウントしていく時とか矛盾が出にくいかな)
12/31がきっちり土曜で終わる1994年、2005年等では53が出る。
603 :
名称未設定 :2008/08/24(日) 18:10:42 ID:51aC4O130
604 :
名称未設定 :2008/08/24(日) 18:18:18 ID:SM8lJL4p0
605 :
名称未設定 :2008/08/24(日) 18:36:36 ID:LevVSdjT0
>>604 ***.xcodeprojの本窓、「グループとファイル」の中にある「Frameworks」のところで右クリック
「追加→既存のフレームワーク…」
/Developer/SDKs/MacOSX*****.sdk/System/Library/Frameworks/
の階層の中から「CalendarStore.framework」を選択し、追加する。
こちらXcode2.2のため、そのフレームワークがなかったけれど、あればそれでうまく行くはず
606 :
名称未設定 :2008/08/24(日) 20:15:01 ID:KAJx2qMD0
そういやLeopardでXcoee2.xて行けるんですかね?
607 :
名称未設定 :2008/08/24(日) 20:52:46 ID:OIWNP41V0
>>602 ,603
595です。返信ありがとうございました。
バグであるにせよ、仕様であるにせよ、yearとweekからdateを算出する時には
注意する必要がありますね。
if ([comps month] == 12 && [comps week] == 1){
[comps setWeek:53];
}
のようなコードで回避可能ではありますが。
今週、先週といったNSPredicateを作成するコードを書いていて気づいたことです。
どうもありがとうございました。
608 :
604 :2008/08/24(日) 21:46:39 ID:SM8lJL4p0
>> 605 お返事ありがとうございます。 ただ、今見てみたら「グループとファイル」の中の、Frameworks/Other Frameworksという階層の中に、 既にCalendarStore.frameworkがありました。 ファイルをクリックしてみたら中にCalendarStore.hというファイルがあるようなので、 これを読んでくれれば動くと思うのですが、どうもこのframeworkを無視しているようです。
あ、Releaseビルドに変更したら、やたら沢山警告が出ていますが(内容はDebug時のエラーと同じ) とりあえずコンパイル通って実行もできました。 Debug設定ではビルドできないんですか?
610 :
名称未設定 :2008/08/24(日) 22:11:53 ID:OIWNP41V0
611 :
名称未設定 :2008/08/24(日) 22:22:23 ID:oDeSyiM50
IBでNSMenuItemにショートカットキー(例cmd+])を設定して 実行させてショートカットキーを連打すると使用メモリーがガンガン上がってくのですが、 こんなもんなんですかね? ちなみにメニューを開いて実行させても使用メモリーは増えないのですが。 10.4.11 Xcode 2.5
>> 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 :
名称未設定 :2008/08/24(日) 22:55:22 ID:CnjDKOKp0
>>608 あ、いあ…
その階層にあるというだけでは駄目で、それをxcodeprojの中に登録しないといけない。
さらにはCalendarStore.frameworkの右の所にチェック(読み込ませる)を入れる必要があるけど
そこまでやってますかな?
614 :
名称未設定 :2008/08/24(日) 23:00:26 ID:CnjDKOKp0
>>608 読み違えた…
>その階層にあるというだけでは駄目で、それをxcodeprojの中に登録しないといけない。
は無視して。
あとはチェックが入っているかどうかと、あとはもしかすると
コマンド+iで「ターゲットSDKを利用したクロス開発」で指定したSDKと、
ロードしたFrameWorkでバージョンのズレがあるとうまく行かなかったような記憶も…
615 :
608 :2008/08/24(日) 23:24:26 ID:SM8lJL4p0
私の環境ではXcodeのグループとファイルの中の、 /SimpleCalnedar/Frameworks/Other Frameworks/CalendarStore.framework の右にはチェックボックスは見あたりません(´・ω・`) 「情報を見る」の中の「ターゲット」内にプロジェクト名とチェックボックスがありますがこれのことでしょうか? でもこれにはもともとチェックが入っていました。 Xcodeに対するframeworkの追加についてもう一度調べ直してみます。 お手数かけてすみません。
616 :
HK :2008/08/25(月) 00:55:49 ID:sH5wW6Cs0
>>604 Cocoa Break! というサイトをやってる者です。
サイトのソースの部分で、ビルドの前の注意を書いてます。
「ビルドするには、いくつかの場所で NSPredicate を CalCalendarStore に変更する必要がある。
他の警告は引数 error:nil を追加する。」
Mac OS X v10.5、3.0 段階ではこれで問題なくピルドできました。
とりあえず警告ゼロってだけですけど。
説明をするために細かく動作を見ることはしてないんで…。
617 :
名称未設定 :2008/08/25(月) 01:03:48 ID:0vm6OJHX0
俺もカーボンブレイク!作ろうかな
618 :
HK :2008/08/25(月) 01:14:38 ID:sH5wW6Cs0
追記ですが、サイトを見てもらえればわかるように、 サンプルはたまにエラーが出てビルドできないものがあります。 スクリーンショットが掲載されているものは、ビルドまでは完了してます。 とはいえ、10.4 でビルドできるものは 10.4 で確認してますが…。 また、それとは別ですが、Moriarity など OS X の古いバージョンのサンプルは、 10.5 では動作しなくなっている場合もあるので、 サンプルコードを参考にする時は注意が必要です。
619 :
名称未設定 :2008/08/25(月) 09:56:26 ID:jTkDE9uv0
>>607 >if ([comps month] == 12 && [comps week] == 1){
> [comps setWeek:53];
>}
>のようなコードで回避可能ではありますが。
いや多分、必ず53週あるという認識が、ISO8601的には間違っている。
しかしNSCalendar,NSDateComponents等を調べると、ISO8601はサポートしていなさそうですね。
NSCalendarのminimumDaysInFirstWeek(デフォルトは1)で、第1週を決めるようになっているみたい。
以下確認したコード。
--
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *oneDayComps = [[NSDateComponents alloc] init];
[oneDayComps setDay:1];
NSMutableArray *days = [NSMutableArray array], *weeks = [NSMutableArray array];
for (NSInteger minimumDaysInFirstWeek = 1; minimumDaysInFirstWeek< 7; minimumDaysInFirstWeek++) {
[calendar setMinimumDaysInFirstWeek:minimumDaysInFirstWeek];
NSLog(@"minimumDaysInFirstWeek:%d",[calendar minimumDaysInFirstWeek]);
for (NSInteger year = 2000; year < 2011; year++) {
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:year]; [comps setWeek:52]; [comps setWeekday:7];
NSDate *date = [calendar dateFromComponents:comps];
for (NSInteger i = 0; i < 9; i++) {
comps = [calendar components:(NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:date];
[days addObject:[NSString stringWithFormat:@"%2d",[comps day]]];
[weeks addObject:[NSString stringWithFormat:@"%2d",[comps week]]];
date = [calendar dateByAddingComponents:oneDayComps toDate:date options:0];
}
NSLog(@"%4d",year); NSLog(@" day:%@",[days componentsJoinedByString:@","]); NSLog(@" week:%@",[weeks componentsJoinedByString:@","]);
[days removeAllObjects];
[weeks removeAllObjects];
}
}
>> HKさん サイト拝見しました。訂正の必要なサンプルにはコメントをつけてくださってるんですね。 すばらしいサイトを作ってくださってありがとうございます。 Cocoaの勉強に利用させていただきます。
621 :
名称未設定 :2008/08/25(月) 20:37:27 ID:83D/x5lc0
Moriarityは一応ビルドできて、動いた。 当方 Leo Xcode3.1
622 :
名称未設定 :2008/08/26(火) 10:32:05 ID:CiwPWnRl0
623 :
名称未設定 :2008/08/26(火) 11:39:06 ID:jgEO9m2Z0
>>619 >NSCalendarのminimumDaysInFirstWeek(デフォルトは1)で、第1週を決めるようになっているみたい。
そんな風になってるんだ。面白い。
ところで細かいことだけど、これって素のccじゃ通らないよね?
自分のとこはXcode 3.1を入れているけどデフォのccではfor内の変数宣言でエラーになります。
もしかして環境によってはObjCもC99がデフォになるのかなと思って。
for文って条件式のところで変数の宣言をしてるとこ? 拡張子をmmにしてObjective-C++にしてんじゃないの?
625 :
名称未設定 :2008/08/26(火) 16:10:29 ID:2IRoqpso0
1)I.BでNSMenuのインスタンスをMenuA、MenuBと2つ作る。 2)NSMenuのサブクラスMyMenuを作り、MenuA、MenuBのカスタムクラスに設定する。 この場合、サブクラスMyMenu内でMenuA、MenuBのどちらなのかを判定したいのですが 可能でしょうか? メニューアイテムはMenuA、MenuBともに同じ、アクションのターゲットは 別にしたいのです。(MyMenu内でターゲット先のメソッドを呼ぶ) MyMenuからみて自分のインスタンス名(MenuA or MenuB)が取得できればいけそうな気がしますが、 インスタンス名の取得方法、もしくは他のよい方法があれば教示ください。 よろしくお願いいたします。
626 :
名称未設定 :2008/08/26(火) 16:49:45 ID:kPx+BItI0
たぶん、すっごく勘違いしてる。 けど、通常は tag を設定する。
627 :
名称未設定 :2008/08/26(火) 18:26:20 ID:tnusyOvp0
説明不足ですみません。 仰せの通り通常はタグを設定して判別するのですが、 I.BでNSMenuにはタグが設定出来なかったので困っている次第です。
628 :
名称未設定 :2008/08/26(火) 18:45:23 ID:kPx+BItI0
あ、やっと大体意味が分かった。 アプローチが間違ってる。 - (void)menuNeedsUpdate:(NSMenu*)menu; - (BOOL)menu:(NSMenu*)menu updateItem:(NSMenuItem*)item atIndex:(NSInteger)index shouldCan cel:(BOOL)shouldCancel; - (BOOL)menuHasKeyEquivalent:(NSMenu*)menu forEvent:(NSEvent*)event target:(id*)target act ion:(SEL*)action; この辺かな。
629 :
名称未設定 :2008/08/26(火) 22:27:36 ID:TlM0EGE00
Xcode 3.1でDocument-based Applicationを作っています。 MyDocumentクラスのmyStringをTextViewのAttributed StringにIBでbindingしているのですが、 自作のメソッドを実行するときに、myStringにTextViewの内容を反映させるにはどのようにしたらよいのでしょうか。
630 :
名称未設定 :2008/08/26(火) 23:24:47 ID:zAbcxQXm0
myString=[TextView stringValue]ではダメ? myString<->TextViewの双方向にバインディングするNSValueTransformerのクラスを書いて バインディングの設定画面のvalueTransformerに定義するとか。
631 :
名称未設定 :2008/08/26(火) 23:46:31 ID:TlM0EGE00
>>630 なるほど、バインディングは双方向ではなく片方向ずつなんですか。
myString=[TextView stringValue];
でやることにします。ありがとうございます。
632 :
名称未設定 :2008/08/27(水) 01:08:05 ID:HG7wkgv10
>>629 myStringがNSStringならば、attributedStringにはbindできません。
NSStringをbindするならvalueとbindしなくてはいけません。
そのためには、Multiple fonts allowedをoffにする必要があります。
そうした上で、setMyString:やsetValue:forKey@"myString"を実行すればKVO(NSKeyValueObserving)が働きます。
bindingについて解説しているサイトや書籍を参照することをお勧めします。
633 :
名称未設定 :2008/08/27(水) 01:20:18 ID:HG7wkgv10
>>629 632です。ちょっと勘違いですね。
myStringにTextViewの内容を反映させるにはコントローラにcommitEditingを送信します。
634 :
名称未設定 :2008/08/27(水) 02:22:49 ID:wf34hNXG0
>>633 ありがとうございます。別途Controllerを作ってやる必要があるんですか。なるほど。
635 :
名称未設定 :2008/08/27(水) 02:40:39 ID:3tAcl1TP0
>>634 頼むからドキュメントとサンプルちゃんと見てくれ。
人に聞くのはそれからだ。
636 :
名称未設定 :2008/08/27(水) 11:45:40 ID:prT6DVto0
アプリが大きくなってきてメインのクラスの記述が非常に多くエディットしにくい状態です。 一つのクラスを複数ファイルへ分けて記述することは可能でしょうか?可能ならどのようにすれば良いでしょうか?
637 :
名称未設定 :2008/08/27(水) 11:49:21 ID:wuThmqJw0
638 :
名称未設定 :2008/08/27(水) 11:53:24 ID:prT6DVto0
ああ!なるほど カテゴリって既存クラスの拡張ってイメージありましたけど、 確かに自作のクラスでも同じですよね、ありがとうございます。
639 :
名称未設定 :2008/08/27(水) 13:13:04 ID:h/VQOtmq0
コンパイラにとって自作のクラスと既存のクラスって区別できないんじゃないかな
640 :
名称未設定 :2008/08/27(水) 19:33:03 ID:x9/18bUo0
>>636 そのメインのクラスが、どんなものなのか知らないけど、
リファクタリングしたら、複数のクラスに分かれたりはしないかい?
641 :
名称未設定 :2008/08/27(水) 19:55:05 ID:UdEkpoZd0
>>636 させる仕事の役割をきちんと分類し、それを別オブジェクトにするもよし、カテゴリで分割するも良し
カテゴリで分けた場合、
main+Private.h、main+Private.m
などとファイルをわけるといいです。
642 :
名称未設定 :2008/08/30(土) 20:49:35 ID:hzRge4tB0
objective cでクロージャが使えるようになるらしいって、本当ですか?
643 :
名称未設定 :2008/09/01(月) 00:08:41 ID:CKjm/P3D0
2年くらい前には10.5のObjectiveC 2.0で導入されるという噂がありました。 それのことじゃないでしょうか。
644 :
名称未設定 :2008/09/01(月) 20:06:07 ID:k3tEwtc60
POCで使えなかったっけ?
645 :
名称未設定 :2008/09/01(月) 23:09:28 ID:CKjm/P3D0
646 :
名称未設定 :2008/09/02(火) 18:40:20 ID:1UJh/BMk0
llvm-gccかclangが対応してくれます(きっと)。
647 :
名称未設定 :2008/09/02(火) 20:56:45 ID:VUOngefQ0
たのしいCocoaプログラミング[Leopard対応版]で Hello World表示もできなかった
648 :
名称未設定 :2008/09/02(火) 21:24:30 ID:fo5slvFb0
649 :
名称未設定 :2008/09/02(火) 22:38:58 ID:agEX2R6R0
650 :
名称未設定 :2008/09/03(水) 14:24:51 ID:102AMvOI0
>>647 どういうこと?
HMDTのサイトはよく参照するけど、本の方は出来良くないという印象。
651 :
名称未設定 :2008/09/03(水) 14:39:37 ID:iULcM77e0
>650 単なる「私は馬鹿です」宣言でしょ。 Cocoa的Hello Worldは XcodeでCocoa Applicationテンプレートからプロジェクト作って、 MainMenu.nibを開いてWindow上のテキストフィールドに 「Hello World」って入れて、保存して、 Xcodeに戻ってビルドと実行すればいいだけ。
652 :
名称未設定 :2008/09/03(水) 14:42:37 ID:t13feepc0
NSLog(@"Hello World"); これが動かないのか?
653 :
名称未設定 :2008/09/03(水) 15:02:10 ID:iULcM77e0
stderr に出力するHello Worldはあんまり見ないよね。 しかも余計な出力付くし。 それがしたいなら printf("Hello world");の方が良いと思う。
654 :
名称未設定 :2008/09/03(水) 15:33:47 ID:+g6j8XH20
Foundation的に書いてみると、 [[NSFileHandle fileHandleWithStandardOutput] writeData: [@"Hello, World\n" dataUsingEncoding: NSASCIIStringEncoding]]; ながいな。
655 :
名称未設定 :2008/09/03(水) 21:01:18 ID:/rdLXYXb0
>>650 >HMDTのサイトはよく参照するけど、本の方は出来良くないという印象。
たのしいCocoa読んでみたけど、あれはプログラミング自体が初心者な人は
かなり置いてきぼりになる内容だと思った。多分
>>647 はそういう人。
>>651 言い過ぎ。
たのココ的HelloWorldはCocoaセミナー初級編と一緒だった。
1.AppControllerクラスを作る。
2.テキストフィールドのアウトレットと、sayHelloメソッドを宣言
3.IBでインタフェース作成、接続
4.XcodeでsayHelloメソッドの実装
5.ビルドと実行
>>647 Cocoaセミナーと内容一緒だから、あわせて見ておくのを勧める。
旧バージョンだが基本は同じだし、違うところは本を参考にすればいい。
ttp://developer.apple.com/jp/documentation/japanese.html
656 :
名称未設定 :2008/09/03(水) 22:06:03 ID:cOJMtB+R0
そういえばヒレガス本第3版邦訳まだかな
657 :
名称未設定 :2008/09/03(水) 22:14:05 ID:qucRX3eD0
アプリのメインのクラスをAppControllerって名前にするのたぶん彼の流儀なんだけど 国内ですげー広まってる気がするw Appleのサンプル見るとメインのクラスはプロジェクトの名前とかだよね?
658 :
名称未設定 :2008/09/03(水) 22:21:59 ID:BhsIDDum0
>>657 おれの流儀はXXAppDelegateだぜ。XXの部分はプロジェクト毎にサフィックスを決める。
プログラムを作る時にはサフィックスのXXを決めるのに一番時間がかかる(w
659 :
名称未設定 :2008/09/03(水) 23:09:33 ID:S2My4fpG0
× suffix ○ prefix
660 :
名称未設定 :2008/09/03(水) 23:29:06 ID:q20130QRP
Core Dataなアプリだと、 プロジェクト作成時に自動的に "プロジェクト名_AppDelegate"ができるから、 それをメインのコントローラとして弄ればいいのか
661 :
名称未設定 :2008/09/04(木) 06:48:05 ID:phG/aT9q0
>>658 メインのクラスはだいたいNSApplicationのデリゲートを受けるかも知れないけど、
デリゲート使用しない時もあるよね
まぁ細かいとこだけど俺も名前決めに時間かかる、他のクラスとかでも
662 :
名称未設定 :2008/09/04(木) 10:36:29 ID:gMkAqZ6m0
>>656 漏れも、ヒレガス本は心待ちにしている。
663 :
名称未設定 :2008/09/04(木) 10:50:12 ID:pQ8weQW+0
質問です。どうにもIB上のBindingとControllerが良く分からないので、 HMDTの黒表紙を買おうかと思案中です。そこでお聞きしたいのですが、 本の内容で、よく理解できるような解説はあるのでしょうか? お持ちの方、よろしくお願いします。
664 :
663 :2008/09/04(木) 11:07:05 ID:pQ8weQW+0
思案してても仕方が無いので、やっぱ買う事にします。 日記になってしまって済みません。
665 :
名称未設定 :2008/09/04(木) 13:29:39 ID:WdpeVM9o0
>>657 NEXTSTEPのころのいろんなソースはだいたい
"プロジェクト名の略称Controller" って命名だった気がするよ
例えば UltraNature っていうプロジェクトだったら UNController とかね
>>664 2ch へのポストなど所詮みなの日記だもの
気にすることはないと思うよ
ちなみに何を読んだりどこまで自分でやって binding と controller がわからなかったのか
によってその本がためになるか変わるかも
666 :
名称未設定 :2008/09/04(木) 20:48:22 ID:pQuggfDa0
ヒレガス3rdの邦訳? 出るなら買うけど 出る予定なんてないんでしょ?
667 :
名称未設定 :2008/09/04(木) 21:08:09 ID:AE37cJ/00
>>666 >出る予定なんてないんでしょ?
ま、ないんじゃね。あれだけ図がついてりゃ訳なんて不要でわ
668 :
名称未設定 :2008/09/05(金) 09:28:01 ID:Y7BbIuNw0
まだ古い日本語版本屋に並んでるけど、さすがにもう・・・。地味に売れてたと 思うんで、いい加減新版出して欲しいものだ。英語版も買ったけど、やはり 時間がかかるわ、眠くなるわで、効率が悪い。
669 :
名称未設定 :2008/09/05(金) 15:45:38 ID:70Xyj+YO0
Xcode 3.1 LSUIElement=1の、メニューバー(ステータスバー?)アプリを作成しています。 メニューバーのアイコンのメニューからopenPanel等を開くと、openPanelがアクティブにならないのですが、自動でアクティブにするにはどのようにしたら良いのでしょうか。
670 :
名称未設定 :2008/09/05(金) 15:51:32 ID:3OZbGjxI0
-(IBAction)makeKeyAndOrderFront:(id)sender;
671 :
名称未設定 :2008/09/05(金) 15:59:01 ID:70Xyj+YO0
>>670 NSWindowをアクティブにするときはそれでいけるかもしれないですが、NSOpenPanelをアクティブにするのにはどのようにしたら…
あと、- (void)orderFrontStandardAboutPanel:(id)senderで表示したAboutパネルもアクティブになりません。
672 :
名称未設定 :2008/09/05(金) 16:10:02 ID:70Xyj+YO0
なんか邪道ですが、openPanelを開く前に NSAppleScript *AS=[[NSAppleScript alloc] initWithSource:[NSString stringWithString: @"tell application ¥"アプリ名¥"¥nactivate¥nend tell"]]; を行うことでうまくいきました。 もっとスマートな方法はないのかな…
673 :
名称未設定 :2008/09/05(金) 16:15:24 ID:70Xyj+YO0
>>672 [AS executeAndReturnError:nil];
を書き忘れ。
674 :
名称未設定 :2008/09/05(金) 16:18:16 ID:rvDtJprx0
それそのまんまのメソッドがあるわけだが……
675 :
名称未設定 :2008/09/05(金) 16:28:04 ID:70Xyj+YO0
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; でいけました…
676 :
名称未設定 :2008/09/05(金) 16:28:36 ID:3OZbGjxI0
クラス階層
677 :
名称未設定 :2008/09/06(土) 17:24:41 ID:pbA83sM10
ドラッグ&ドロップ中にコマンドキーなどが押されたら、 ドラッグ中のアイコンを変更できますかね? ドラッグ開始時の自作アイコン表示とドロップ時の キー押下判定は実装できたのですが。
678 :
名称未設定 :2008/09/07(日) 11:52:19 ID:K5MfR1iP0
>>677 うーん。自前でイベントループを作って、自前でドラッグ処理を書く以外に、方法が思いつかない。
679 :
名称未設定 :2008/09/07(日) 12:50:58 ID:YlD2TZRv0
すみません、質問です。 ファイルのダウンローダーを作成していて、保存ファイル名に自動でタイトルなどを付加しているのですが、 ファイル名に"/"が含まれている場合、ダウンロードに失敗します。 // デスクトップのパス NSString *path = [@"~/Desktop" stringByExpandingTildeInPath]; // ファイル名を付加 NSString *fileName = @"xx / xx.txt"; path = [path stringByAppendingPathComponent: fileName]; // download は NSURLDownload // "/"が含まれていると失敗する [download setDestination:path allowOverwrite:NO]; fileNameを"/" -> "-"に置換すればOKですが、なんか格好悪い、 "/" -> ":" に置換してもFinder上では"-"で表示されます。 Finder上で"/"は入力できるので(内部的には":"なのですかね) なにか良い方法はありませんでしょうか? お手数ですがよろしくお願いします。
680 :
名称未設定 :2008/09/07(日) 12:54:11 ID:WGY8NPzr0
ファイル名に/を使わないようにすればいいんじゃないか
681 :
名称未設定 :2008/09/07(日) 13:21:02 ID:6VPpG5Yl0
¥/
682 :
名称未設定 :2008/09/07(日) 20:12:21 ID:yQpTS6OD0
>>681 ありがとうございます。
NSMutableStringに入れて置換をかけてみましたが、
"バックスラッシュ+/"ではワーニングが出ました。
683 :
名称未設定 :2008/09/08(月) 09:02:43 ID:1EifQ6YV0
>>682 普通に/を:に置換するだけじゃだめなん?
684 :
名称未設定 :2008/09/08(月) 22:18:36 ID:VBoZ6EQN0
試してないしひどく適当なこと書いてるが「/」って単純にパスの区切りとして 扱われてるだけなんじゃね?デスクトップ上に「foo」ってフォルダ作っといて NSString *fileName = @"foo/bar.txt"; ってしてやっても失敗する?
685 :
名称未設定 :2008/09/09(火) 00:14:56 ID:IkrehLLo0
使おうとしているAPIで/はディレクトリの区切り記号だから "xx/hoge.txt"をダウンロードしようとすれば xxというディレクトリがないなら失敗するのは当然。 ファイル名として/を使いたければ,:がFinder上では/に見える。 ただ,古いAPIだと:が区切りになっていたので 自動的に別の文字に置き換えられる可能性もある。 一度別の名前でダウンロードしてから希望の名前に リネームをかけるというのではダメ? でもダウンロードしてくるファイル名に/が含まれる ことなんてあるの?
686 :
名称未設定 :2008/09/09(火) 10:11:47 ID:V/uZJd3h0
凄く基本的な質問です 以前からメモに// もしくは/* */ でコメントアウトを使用していたのですが #pragma mark もビルド時には完全に無視されると考えてよいでしょうか?
687 :
名称未設定 :2008/09/09(火) 17:46:39 ID:tjWw4zqq0
ソースコードからNSButtonを生成して自作ビューの上に表示させたいんだけど、つまづいてます。 NSButton *aButton; aButton = [[NSButton alloc] init]; [aButton setTitle:categoryName]; [aButton setTarget:categoryController]; [aButton setAction:@selector(loadFromCategory:)]; [aButton setBezelStyle:NSRecessedBezelStyle]; [aButton setHidden:NO]; [self addSubview:aButton]; [aButton setFrameOrigin:NSMakePoint(200, 200)]; ダメ出しお願いします。
688 :
名称未設定 :2008/09/09(火) 17:49:59 ID:eVGJsD0p0
何がどうダメになるんだい?
689 :
名称未設定 :2008/09/09(火) 17:57:24 ID:tjWw4zqq0
あー、肝心なところを書き忘れてた。。 ボタンが表示されないんですよ。
690 :
名称未設定 :2008/09/09(火) 18:06:04 ID:CHK+3i9f0
指定イニシャライザはinitWithFrame:だね。
691 :
名称未設定 :2008/09/09(火) 18:18:31 ID:tjWw4zqq0
最初からもっと詳しく書けば良かったね。NSViewのサブクラス(CategoryView)を作っていました。 それをコントロールするクラス(categoryController)内の文字列がつまった配列を読み込んで、 その数だけボタンを生成したかったんです。 @implementation CategoryView - (id)initWithFrame:(NSRect)frameRect { if(self = [super initWithFrame:frameRect]) { } return self; } - (void)drawRect:(NSRect)aRect { if(prevArray == categoryController.articleList) { return; } for(NSButton *removeButton in [self subviews]) { [removeButton removeFromSuperviewWithoutNeedingDisplay]; } for(NSString *categoryName in categoryController.articleList) { NSButton *aButton = [[NSButton alloc] init]; [aButton setTitle:categoryName]; [aButton setTarget:categoryController]; [aButton setAction:@selector(loadFromCategory:)]; [aButton setBezelStyle:NSRecessedBezelStyle]; [aButton setHidden:NO]; [self addSubview:aButton]; [aButton setFrameOrigin:NSMakePoint(200, 200)]; } prevArray = categoryController.articleList; } @end
692 :
名称未設定 :2008/09/09(火) 18:25:40 ID:y/3nMAT/0
>>691 長々コピペする前に1つ上のレスを見れば良かったね。
693 :
名称未設定 :2008/09/09(火) 19:27:16 ID:tjWw4zqq0
694 :
名称未設定 :2008/09/09(火) 22:15:47 ID:5CcqCsPV0
>>691 ・とりあえず、drawRect:内で、subViewを追加している所がダメだ。subViewは前もって追加しておかなければならない。
・ボタンの数量が変わるということは、それに合わせて自身のViewサイズも変えなきゃダメじゃないの?
・どうしても、drawRect:のタイミングでしかボタンの数量が決定しないなら、NSButtonCellを使うとよいかもしれない。
・最終的に何を作りたいのか知らないけど、ボタンを並べるだけなら、NSMatrixを使ってみたら?
695 :
名称未設定 :2008/09/10(水) 01:56:04 ID:JdO1QrgE0
タスクバーはまだですか?
696 :
名称未設定 :2008/09/10(水) 22:59:36 ID:erl+1Dgh0
IBでUILabel のフォントサイズを変更しても、なんか画面上でうまく反映されてない気がするんですが気のせいですかね。 最初に配置したとたんはちゃんと追従するのに、一度フォーカス外しちゃうと駄目なきがしますが、いまいちよく判ってないかも。
697 :
名称未設定 :2008/09/10(水) 23:48:34 ID:iCA9fuIC0
AutoSizeなんとかみたいなん入ってないですか? FitToだっけか何か
698 :
名称未設定 :2008/09/11(木) 08:31:58 ID:VW8cs/5N0
>>697 IBの話?Layout>Size to fit の事かな。
699 :
名称未設定 :2008/09/11(木) 23:15:45 ID:hstXwgpC0
たのcocoのHelloWorldでさっそくつまづいた。なんとか解決したけど。 .hファイルを編集するとあるが、どこにも「編集後に保存する」とは書いてないじゃないか。アイコンが灰色になってる意味すらわからなかったorz。
700 :
名称未設定 :2008/09/12(金) 00:15:46 ID:g6XUsCdX0
>>699 あ、それおれも一瞬つまづいた。
わかってしまえばなんてことないんだけどね。
701 :
名称未設定 :2008/09/12(金) 00:42:34 ID:giTvRlty0
ソースファイルを保存してないとそれはメモリ上にしかなくて コンパイラが参照するディスクに保存してあるソースファイルは前のものだというのは 別に Cocoa に限った話じゃなくてコンパイラを使うプログラミングなら全部共通の常識だと思うのだが
702 :
名称未設定 :2008/09/12(金) 01:00:38 ID:aLiSGFXa0
君らはパソコンで文章とか絵とか書いても保存しないのか。
703 :
名称未設定 :2008/09/12(金) 01:04:35 ID:cm2FlxP60
>>701 いや、
>>699 はビルド時のことじゃないと思うよ。ビルド時には保存しますか?って聞かれるし。
多分Interface BuilderのほうにIBOutletとかが反映されるのが保存後ってとこじゃないかな。
たのcocoは買ってないけど、俺もXcode 3.xになってちょっと戸惑った。
704 :
名称未設定 :2008/09/12(金) 07:29:43 ID:R3vW2eSc0
>703 ずばりその通りです。 「アクションとアウトレットの接続」が何度やっても接続できなかった。
705 :
名称未設定 :2008/09/12(金) 10:05:16 ID:kIdPh2bR0
Xcode 3.xはIBで変更してもビルド時に保存するか聞いてこないってこと? それはちょっと嫌だなあ。まだ2.xなもんで。
706 :
名称未設定 :2008/09/12(金) 10:26:27 ID:blJgYNL40
じゃなくて、関連付けられたXcodeのプロジェクト内のファイルが変更されたら 勝手に見に行って追加削除されたIBAction IBOutletを自動的に同期するんだよ。
707 :
名称未設定 :2008/09/12(金) 16:10:14 ID:TZxbpOjR0
勝手に保存される方が気持ち悪くない?
708 :
名称未設定 :2008/09/12(金) 19:15:18 ID:Vsc3ghHA0
Xcodeのリファクタリングで、nibのoutletとかも、リプレースしてくれるのが嬉しい。
709 :
名称未設定 :2008/09/12(金) 20:48:14 ID:Oj5mxfWI0
>>701 ということを知らない初心者向けの本の話をしてるんですが。
710 :
名称未設定 :2008/09/12(金) 22:11:37 ID:eLlq91pJ0
なるほど。 「ファイルとは何か。」 「保存すると何が起こる?」 ぐらいから始めないと何らかのクレームがつく訳か。
711 :
名称未設定 :2008/09/12(金) 22:30:14 ID:rysqu+9T0
>>710 そうじゃないだろ……。IBとXcode3.xがどういう連携を取っているかと云うのが詳しく説明されてないのが元凶で、編集した内容が保存しなくてもメモリを介して共有されると勘違いしてしまったって事だろ。
まあ、その誤解の仕方にも些か無理があるが……。
712 :
名称未設定 :2008/09/12(金) 23:18:43 ID:Oj5mxfWI0
713 :
名称未設定 :2008/09/12(金) 23:29:05 ID:cm2FlxP60
ていうか未だに2.xな人が多いのかな?この誤解されっぷりは。
714 :
名称未設定 :2008/09/12(金) 23:56:30 ID:5MYImlaK0
開発は3.0でやってるよ。3.1に上げると古いCarbonのAPIが使えなくなるから。 今のところ64bit必要ないし。
715 :
名称未設定 :2008/09/13(土) 00:22:50 ID:HlQcU5id0
>3.1に上げると古いCarbonのAPIが使えなくなるから。 それは初耳... SDK を古い奴に設定かえてもだめなの?
716 :
名称未設定 :2008/09/13(土) 00:47:17 ID:U/Et2gQU0
ライブラリに古いCarbonのAPIがないからリンク出来んという話だったと思う。
717 :
名称未設定 :2008/09/13(土) 07:33:10 ID:RcIrvjqx0
うむー初耳だらけ。 3.1でCarbonいじってる。古いAPIを使っててコンパイラからdeprecatedを連呼されるが 連呼されるだけで一応コンパイルできてる。いい加減Cocoaで書き直そうと思ってるけどそれは 置いといてw ライブラリがなかったら既存のバイナリも走らないし。
718 :
名称未設定 :2008/09/13(土) 08:00:02 ID:HlQcU5id0
XCode 3.1.1 が来てるよ。
719 :
名称未設定 :2008/09/13(土) 10:24:10 ID:LE/mlm6F0
実際AppleはいつまでCarbonを長らえさせる気なんだろうな? Snow Leopardで切ってしまうのは少々過激な気もするし(PowerPCは切られるっぽいが)。
720 :
名称未設定 :2008/09/13(土) 10:42:12 ID:AGky0g5f0
CocoaとCarbonが全然基盤の異なる環境で、CarbonはOS 9との互換性のために残してある… などと考えているならそれは間違いだと言っておく。
721 :
名称未設定 :2008/09/13(土) 10:49:37 ID:LE/mlm6F0
>>720 それは分かってる。
両者混在可能だしiTunesとかFinderとか純正でもCarbon要素が多いソフトもあることだから。
722 :
名称未設定 :2008/09/13(土) 11:27:59 ID:aVqvEgPV0
最悪、Carbon.framework及び関連Frameworkをぶっこ抜いてきて、内蔵しちゃう。
723 :
名称未設定 :2008/09/13(土) 11:39:14 ID:CsYE4bq/0
最近のCocoaはスタック見てもCarbon呼んでないお。 CarbonからCoreServieに移ったのはあるけど。
724 :
名称未設定 :2008/09/13(土) 12:06:38 ID:aVqvEgPV0
SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar); これだけのためにCarbon使ってる。 これぐらいはCocoaに付けてくれ。 DockもAuoShowするようにして。
725 :
名称未設定 :2008/09/14(日) 14:12:32 ID:095CqlGt0
NSTableColumnにNSImageViewを組み込み、 NSImageViewにローカルパスではなくURLから画像を取得する場合、 非同期で取得、表示させるにはどうするばよろしいでしょうか?
726 :
名称未設定 :2008/09/14(日) 14:31:19 ID:hXVHKg6D0
非同期で取得したいならNSURLDownloadで
727 :
名称未設定 :2008/09/14(日) 14:47:35 ID:095CqlGt0
NSURLDownloadで一旦ローカルに保存せずに 直接NSImageを作成することは出来るのですか? それらしい方法があればよいのですが。
728 :
名称未設定 :2008/09/14(日) 15:02:12 ID:/Z2RSCRo0
どの部分が分からないのか分からない 取得?非同期?表示?
729 :
名称未設定 :2008/09/14(日) 15:08:23 ID:p8KzSniT0
NSURLConnection
730 :
名称未設定 :2008/09/14(日) 15:32:55 ID:AYWcGIb70
NSURLConnectionで非同期で画像をNSDataとして取得して、 それをもとにNSImageを生成してNSImageViewに設定
731 :
名称未設定 :2008/09/14(日) 15:38:26 ID:p1p/oAlk0
現在はNSImageのfileContentOfURLでNSImageを作成しているのですが、 取得に時間がかかると固まったようになるのです。 テーブルカラムで一気に数行を表示させると、しばらく ハングアップしたような状態になるのを 避けるにはどうすればよいかと。 お手数ですがお知恵をいただければと。
732 :
名称未設定 :2008/09/14(日) 15:49:38 ID:6NIJPt3y0
733 :
名称未設定 :2008/09/14(日) 16:02:55 ID:cIfGvRb00
>>731 /Developer/Examples/PubSub/NewMusic/
のコードを見れば、
>>730 の実例がありますよ。
734 :
名称未設定 :2008/09/14(日) 16:21:15 ID:p1p/oAlk0
みなさまありがとうございます。 家に帰ってからチャレンジしてみます。
735 :
名称未設定 :2008/09/14(日) 16:56:06 ID:/Z2RSCRo0
普通にメインスレッド以外で読み込めば良いのでは?
736 :
名称未設定 :2008/09/14(日) 23:21:50 ID:MZtdcUbF0
age
737 :
名称未設定 :2008/09/15(月) 00:47:43 ID:23PGzCcT0
格闘すること4時間、ようやく非同期で画像表示ができました。 みなさま本当にありがとうございました。
738 :
名称未設定 :2008/09/15(月) 10:05:56 ID:gN/nGyHB0
>>737 >みなさま本当にありがとうございました。
老婆心だがどうやったらできたかも書いとくといいぞ。
他の人の参考になるかもしれん品
739 :
名称未設定 :2008/09/15(月) 10:43:43 ID:1fLwojEv0
相談したら解決法を書くのが礼儀かと
740 :
名称未設定 :2008/09/15(月) 12:18:29 ID:23PGzCcT0
ですね。失礼しました。
>>730 さんの指摘の通りNSURLConnectionで非同期で画像をNSDataとして取得して画像を作成しました。
以下、主要なコード部分です。
- (void)getImage:(NSString *)imageURL
{
// リクエスト作成
NSMutableURLRequest *request = [NSMutableURLRequest imageURL
urlcachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30];
[request setHTTPMethod:@"GET"];
// コネクション開始
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// データを受信したら imageData_に溜め込む
if(!imageData_) imageData_ = [[NSMutableData data] retain];
[imageData_ appendData:data];
}
-( void )connectionDidFinishLoading:(NSURLConnection*)connection
{
// 受信が完了したら画像を作成する
image_ = [[NSImage alloc] initWithData:imageData_];
}
741 :
名称未設定 :2008/09/15(月) 16:21:54 ID:yHVGCdW40
すみません、また質問です。 NSStringで参照渡しをするにはどうすればよいのでしょうか? 下記のコードだと、ログには空白で出てしまいます。 NSString *str1 = @""; NSString *str2 = @""; [self getString:str1 str2:str2]; NSLog(@"str1=%@, str2=%@", str1, str2); - (void)getString:(NSString*)str1 str2:(NSString*)str2 { str1 = @"aaa"; str2 = @"bbb"; } なんか基本的なことですみません。
742 :
名称未設定 :2008/09/15(月) 16:53:15 ID:oR3oM3f30
NSString *str1; NSString *str2; [self getString:&str1 str2:&str2]; NSLog(@"str1=%@, str2=%@",str1,str2); [str1 release]; [str2 release]; -(void)getString:(NSString**)str1 str2:(NSString**)str2{ *str1 = [@"aaa" retain]; *str2 = [@"bbb" retain]; } こんな感じか
743 :
名称未設定 :2008/09/15(月) 17:01:20 ID:mcKY8VJv0
本題からは外れるが、そのメソッド名でownershipを渡してしまうのはどうかと思う。
744 :
名称未設定 :2008/09/15(月) 17:20:08 ID:A7RLo79t0
文字列定数って解放されんの?
745 :
名称未設定 :2008/09/15(月) 17:37:27 ID:1fLwojEv0
>>743 [@"aaa" retain]するならcopyStringで
[@"aaa" autorelease]ならgetStringってこと?
そもそも返り値が複数の場合ってNSArrayとかNSDictionaryにしてやるイメージがあるけど、どうなんでしょ
746 :
名称未設定 :2008/09/15(月) 17:45:44 ID:nEj7kIm/0
747 :
名称未設定 :2008/09/15(月) 17:47:00 ID:nEj7kIm/0
$ cat main.patch *** main.m.orig 2007-06-02 18:05:48.000000000 +0900 --- main.m 2008-09-13 16:13:54.000000000 +0900 *************** *** 38,43 **** --- 38,44 ---- int COOutputSizeHeight = 0; BOOL COIsVerboseMode = NO; BOOL COIsDialogMode = NO; + BOOL COIsPagenateMode = NO; float COTimerTime = 0.0; NSArray* COFormats = nil; *************** *** 51,56 **** --- 52,58 ---- fprintf(stderr, " -f/--format <format> Specify output file format\n"); fprintf(stderr, " -h/--help Print this help\n"); fprintf(stderr, " -o/--output <file> Specify output file name\n"); + fprintf(stderr, " -p/--pagenate Output a pagenated file\n"); fprintf(stderr, " -s/--screen <width height> Specify rendering screen size\n"); fprintf(stderr, " -S/--SIZE <ratio> | <width height> Specify output image size\n"); fprintf(stderr, " -d/--dialog Use print dialog\n"); ***************
748 :
747 :2008/09/15(月) 17:58:21 ID:nEj7kIm/0
*** 245,250 **** --- 247,261 ---- continue; } + // Pagenate option + if ([tmp isEqualToString:@"-p"] || + [tmp isEqualToString:@"--pagenate"]) + { + // Set pagenate mode + COIsPagenateMode = YES; + continue; + } + // Verbose option if ([tmp isEqualToString:@"-v"] || [tmp isEqualToString:@"--verbose"]) もう一つパッチがありますが,連続投稿できないので,しばらくお待ちを
749 :
名称未設定 :2008/09/15(月) 18:01:08 ID:oR3oM3f30
750 :
747 :2008/09/15(月) 18:01:15 ID:nEj7kIm/0
$ cat COController.patch *** COController.m.orig 2007-06-02 18:11:17.000000000 +0900 --- COController.m 2008-09-15 16:05:25.000000000 +0900 *************** *** 39,44 **** --- 39,45 ---- extern int COOutputSizeHeight; extern BOOL COIsVerboseMode; extern BOOL COIsDialogMode; + extern BOOL COIsPagenateMode; extern float COTimerTime; extern NSArray* COFormats; *************** *** 290,301 **** path = [[NSFileManager defaultManager] currentDirectoryPath]; path = [path stringByAppendingPathComponent:COOutputFileName]; } ! if (![data writeToFile:path atomically:YES]) { ! // Error ! fprintf(stderr, "coral: Failed to save data\n"); ! [self _quit]; ! return; ! } // Quit application [self _quit];
751 :
747 :2008/09/15(月) 18:04:59 ID:nEj7kIm/0
--- 291,335 ---- path = [[NSFileManager defaultManager] currentDirectoryPath]; path = [path stringByAppendingPathComponent:COOutputFileName]; } ! if (COIsPagenateMode) { ! // For pagenate mode ! // fprintf(stderr, "coral: Pagenate Mode\n"); ! // Create print info ! NSPrintInfo* printInfo; ! printInfo = [[NSPrintInfo alloc] init]; ! [printInfo autorelease]; ! [printInfo setHorizontalPagination:NSFitPagination]; ! [printInfo setVerticallyCentered:NO]; ! [printInfo setVerticalPagination: NSAutoPagination]; ! [printInfo setJobDisposition:NSPrintSaveJob]; ! [[printInfo dictionary] setObject:path forKey:NSPrintSavePath]; ! ! // Load print panel ! COPrintPanelController* printPanelController; ! printPanelController = [[COPrintPanelController alloc] init]; ! [printPanelController setWebView:_webView]; ! ! // Active itself ! [NSApp activateIgnoringOtherApps:NO]; ! ! // Run print operation ! NSPrintOperation* operation; ! operation = [NSPrintOperation
752 :
名称未設定 :2008/09/15(月) 18:08:19 ID:1fLwojEv0
753 :
名称未設定 :2008/09/15(月) 18:11:07 ID:nEj7kIm/0
! printOperationWithView:[[[_webView mainFrame] frameView] documentView] printInfo:printInfo]; ! [operation setAccessoryView:[printPanelController view]]; ! [operation setShowPanels:NO]; ! [operation runOperation]; ! ! [printPanelController release]; ! } ! else { ! if (![data writeToFile:path atomically:YES]) { ! // Error ! fprintf(stderr, "coral: Failed to save data\n"); ! [self _quit]; ! return; ! } ! } // Quit application [self _quit]; 以上です。
754 :
名称未設定 :2008/09/15(月) 19:08:29 ID:yHVGCdW40
>> 741です。
>>742 - 745
>>749 ありがとうございます。おかげさまでできました。
(NSString**)にして代入は*にすればいいんですね。
NSArrayやNSDictionaryの考えましたが、面倒くさいというか、
参照渡しができるはずだと思ったもので。
メソッド名はあまり規約は考えていません。(汗)
755 :
名称未設定 :2008/09/18(木) 00:36:35 ID:P7aTv+8m0
- (void)drawRect:(NSRect)rect { [super drawRect:rect]; [[NSColor whiteColor] set]; NSFrameRect(rect); } と書くのと static NSColor *_white; + (void)initialize { _whiteColor = [[NSColor whiteColor] retain]; } - (void)drawRect:(NSRect)rect { [super drawRect:rect]; [_whiteColor set]; NSFrameRect(rect); } と書くのでは 後者の方がパフォーマンス良いのでしょうか? [NSColor hogeColor]; というのはその都度NSColorを生成していると考え方であってますか? 実際にはパフォーマンスというか、書き方としてどちらが正しいのか知りたいです。
756 :
名称未設定 :2008/09/18(木) 01:11:02 ID:M4ahfae1P
NSColorの内部で後者みたいなことがすでに行われているんじゃないかなぁ。 引数なしで呼び出せる色は代表的な色ばかりだし。 知らずに答えてるので、実際は知らない。
757 :
名称未設定 :2008/09/18(木) 01:17:09 ID:P7aTv+8m0
758 :
名称未設定 :2008/09/18(木) 02:56:51 ID:s+En6PJ+0
NSMutableArray *array=[NSMutableArray array]; while([array count]<10000) [array addObject:[NSColor whiteColor]]; とかやってみてObjectAllocとかでいちいちオブジェクトが生成されているかチェックすれば? arrayに入っているオブジェクトのポインタを比較するだけでもわかるかな?
759 :
名称未設定 :2008/09/18(木) 03:20:51 ID:moZQjecs0
InterfaceBuilderで設置したボタンを、ある変数の値によって 表示したり消したり(操作も無効に)させたいのですが どうすればよいでしょうか。 こういう場合ソースコードからボタンを作らないといけないんですかね?
760 :
名称未設定 :2008/09/18(木) 03:49:01 ID:s+En6PJ+0
ボタンのisHiddenにバインドするだけでいけるでしょ
761 :
名称未設定 :2008/09/18(木) 05:27:34 ID:moZQjecs0
762 :
名称未設定 :2008/09/18(木) 12:11:19 ID:P7aTv+8m0
>>758 作ったarrayをretainしてアクティビティモニタで確かめてみたんですが、
whiteColorやgrayColorなどはメモリ使用量が全然増えず、
colorWithDeviceRed:1 green:1 blue:1 alpha:1
などだとメモリ使用量が増えました。
ObjectAllocを理解してないのですが、試してみたところ前者はあまり反応が無いのに対して後者はAllocateされまくってるようでした。
brownColorやpurpleColorなどシステムや標準のアプリに使われてない色でテストしてみると分かりやすく
初回呼び出し時のみAllocateされてされているようでした。
どうやらこれらはNSCachedRGBColorというカテゴリらしく勝手にうまいことやってくれてるようですね。
763 :
名称未設定 :2008/09/18(木) 13:26:26 ID:Zp1Zi8dY0
>>746 俺にはいちいちこのパッチを当ててテストするパワーはないが、
とりあえずデバッガにかけてisnan()あたりでブレークするかやってみるとか?
764 :
名称未設定 :2008/09/19(金) 01:58:22 ID:I8I+Mir80
Objective-Cって拡張子cppなC++で書かれた関数って呼び出しできないの? なんか参照できないみたいなエラーでる
765 :
名称未設定 :2008/09/19(金) 02:09:25 ID:wgE41EU70
エラーの内容が曖昧だけどObj-C++なら混ぜられる。 拡張子はmm。
766 :
名称未設定 :2008/09/19(金) 10:40:19 ID:hXEJrUVN0
CからC++の関数を呼ぶ時と同じ。 extern "C"でぐぐれ。
767 :
名称未設定 :2008/09/19(金) 15:34:56 ID:guHg/OSE0
fp = fopen( "test00.bmp" , "rb" ); でファイルtest00.bmpがあるにもかかわらず 失敗するのですが、ファイル指定方法間違ってるのでしょうか?
768 :
名称未設定 :2008/09/19(金) 15:43:50 ID:Z5XmRcRR0
”何処に”有るのか分からない。
769 :
名称未設定 :2008/09/19(金) 16:03:15 ID:guHg/OSE0
読んでもだめなら書いてみるってことで ファイル書き込んだら、ユーザーのディレクトリ直下にファイルが生成されました。 そこにデータを置いたら読み込めました。 実行時カレントディレクトリがおかしかったみたいです。 わけわからん
770 :
名称未設定 :2008/09/19(金) 16:14:16 ID:XMT3wHyR0
>>769 ワーキングディレクトリにファイルがあればパスを指定しなくてもいいが、
普通はパスも含めて指定するものだ。お前の方がわけわからんよ。
771 :
名称未設定 :2008/09/19(金) 16:44:22 ID:+88FPv300
772 :
名称未設定 :2008/09/19(金) 20:26:50 ID:kkVdyAHJ0
>>769 NSBundle使うなら、それくらい適当な指示でも探してきてくれるんだが。
773 :
名称未設定 :2008/09/19(金) 20:33:14 ID:zh18Biru0
fopen を使う意味が分からん
774 :
名称未設定 :2008/09/20(土) 00:52:56 ID:QCGx6Cy40
なんかフルボッコされてる><。 >fopenを使う意味 ウィンドウズで書いてたプログラムをそのまま移植してみたんです>< Mac使用暦3日ですいません。 Mac使いこなしてから出直してきます。
775 :
名称未設定 :2008/09/20(土) 01:11:31 ID:6P09LMLz0
776 :
名称未設定 :2008/09/20(土) 01:12:40 ID:2Q6+WcPN0
Cの標準ライブラリでソフト作るんならスレ違いだと思うよ。
777 :
名称未設定 :2008/09/20(土) 02:51:56 ID:y/ouZ/EC0
778 :
名称未設定 :2008/09/20(土) 04:40:03 ID:TXb4ST/Q0
779 :
名称未設定 :2008/09/20(土) 05:19:39 ID:cXIvNawZ0
Recessed Buttonじゃない??
780 :
名称未設定 :2008/09/20(土) 05:29:36 ID:TXb4ST/Q0
>>779 ありがとうございます。Recessed Buttonありました!
あとは背景かぁ…
この背景のすこしカーブしているような感じはどうやってるんだろ。
オリジナル画像?
781 :
名称未設定 :2008/09/20(土) 07:27:15 ID:JW0iPyXCP
.appのパッケージを見ると、ボタンのふちとか画像つかってるのがわかるよ
782 :
名称未設定 :2008/09/20(土) 13:28:58 ID:hXrkeK7L0
正式に売るアプリならパッケージの中の画像パクって使ってはいけないってうちの社の方針なんだけど、(Apple製のアプリでも) やっぱ売り物に使うとまずいのかな?詳しい人いませんか?
783 :
名称未設定 :2008/09/20(土) 14:17:29 ID:rgm2k6nl0
何だって?
784 :
名称未設定 :2008/09/20(土) 14:28:35 ID:ULascG860
>>782 Appleに問い合わせろ。
俺はダメだと思うけど、判断するのはAppleだからな。
785 :
名称未設定 :2008/09/20(土) 15:56:12 ID:LLE/vX/80
NSString *mailPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:@"mail"]; if(!mailPath) return nil; NSBundle mailBundle = [NSBundle bundleWithPath:mailPath]; if(!mailBundle) return nil; NSString *imagePath = [mailBundle pathForImageResource:@"hoge"]; if(!imagePath) return nil; return [[[NSImage alloc] initByReferencingFile:imagePath] autorelease]; 盗んでないもん!
786 :
名称未設定 :2008/09/20(土) 16:12:30 ID:pqLJOpdL0
質問です。 NSDictionaryのインスタンスに登録したオブジェクトの参照カウンタは NSDictionaryのインスタンスのdealloc時にreleaseされるのでしょうか?
787 :
名称未設定 :2008/09/20(土) 16:14:08 ID:pqLJOpdL0
それともdealloc時にremoveAllObjectsを呼ぶ必要がありますか?
788 :
名称未設定 :2008/09/20(土) 16:21:10 ID:uslRtMKV0
ない
789 :
名称未設定 :2008/09/20(土) 16:27:12 ID:pqLJOpdL0
どうもありがとう! すっきりしました。 × NSDictionary ○ NSMutableDictionary
790 :
名称未設定 :2008/09/20(土) 16:36:49 ID:TXb4ST/Q0
791 :
名称未設定 :2008/09/20(土) 16:37:14 ID:hXrkeK7L0
792 :
名称未設定 :2008/09/20(土) 17:12:02 ID:RYHkLcyT0
しかしそれでは参照元が消えたら壊滅。 心を込めて1ドットずつ写せば問題なし。
793 :
名称未設定 :2008/09/20(土) 17:12:43 ID:a7bWHByb0
他のメーラー使ってる人の中には Mailを削除した人も居るんでない?
794 :
名称未設定 :2008/09/20(土) 20:59:21 ID:hXrkeK7L0
まぁMailアプリは一例だろうけど 勝手に標準アプリを消すようなクライアントはあまりいないだろう
795 :
名称未設定 :2008/09/21(日) 02:55:13 ID:U0GaFiaU0
小さな画像に著作権は無かったような
796 :
名称未設定 :2008/09/21(日) 19:06:34 ID:00WHdogq0
Appleとしても同じアイコン使ってくれた方が統一されて うれしいと思うんだけどな。 というか、商用アプリでリソースパクりは山ほどあるだろ。
797 :
名称未設定 :2008/09/21(日) 19:34:22 ID:f0YS1Y1Y0
798 :
名称未設定 :2008/09/21(日) 19:35:41 ID:9pFmn9NQ0
商売第一のヤツにオリジナリティの道を説くだけ無駄
799 :
名称未設定 :2008/09/21(日) 19:44:26 ID:1Y9VMPly0
800 :
名称未設定 :2008/09/21(日) 19:57:32 ID:nOczMaxO0
801 :
名称未設定 :2008/09/21(日) 20:33:16 ID:9pFmn9NQ0
こういうヤな会社でも売れれば勝ちだからな。 こういうヤな会社に負けないにはどうすべきか考えないとな。
802 :
名称未設定 :2008/09/21(日) 21:12:36 ID:ZjTwY0rm0
うわ、ここまでやっちゃうか。 えげつないなあ
803 :
名称未設定 :2008/09/21(日) 21:17:46 ID:eybcE3Lo0
どうせここまでやるならCocoaで開発しちゃえよ……。
804 :
名称未設定 :2008/09/21(日) 21:19:46 ID:nY6XTthc0
>>796 そういや、Appleから警告を受けたY'z Dockはリソースもパクってたな。
それがなきゃ警告はなかったかも?
805 :
名称未設定 :2008/09/21(日) 21:28:04 ID:nOczMaxO0
806 :
名称未設定 :2008/09/22(月) 00:20:34 ID:+KhZs1Nw0
iTunesみたいなUIをつくりたいんだがドキュメントのどこみればいいか分かりません。 だれか教えて下さい。 ちなみにつくりたいiTunesみたいなUIとは、 左ペインの部分です。
807 :
名称未設定 :2008/09/22(月) 00:44:33 ID:Zw418t180
808 :
名称未設定 :2008/09/22(月) 00:46:31 ID:+hiVdtXuP
809 :
名称未設定 :2008/09/22(月) 01:02:34 ID:AYeTay2Z0
810 :
名称未設定 :2008/09/22(月) 11:17:41 ID:jh2DSqbR0
みんな親切だね
811 :
名称未設定 :2008/09/22(月) 16:43:21 ID:YwUHAmLG0
>>804 ま、あれはwidnows用だしね。
Mac用で同じリソース使ってくれたら統一感出してくれてありがとう
の一言だと思うけど。
ま、あくまでも憶測w
812 :
名称未設定 :2008/09/22(月) 18:05:30 ID:AYeTay2Z0
NSURLの、 relativeStringとabsoluteStringの違いがよくわからないのですが、 具体的にどのようなときに違いが現れるのでしょうか。
813 :
名称未設定 :2008/09/22(月) 18:38:52 ID:gvOmEYnc0
+[NSURL URLWithString:relativeToURL:] -[NSURL initWithString:relativeToURL:] を使ったとき意外は一緒です。
814 :
名称未設定 :2008/09/22(月) 18:50:38 ID:AYeTay2Z0
815 :
名称未設定 :2008/09/23(火) 12:51:58 ID:DvYJX4re0
806です
>>807 ,808,809
ありがとうございます
816 :
名称未設定 :2008/09/23(火) 17:58:23 ID:KUSPWosD0
>>696 同じとこでつまずいた…orz
UILabelのフォントサイズを18以上にすると追従して大きくなるけど、そこから小さくできない。
うーむ
817 :
名称未設定 :2008/09/23(火) 19:16:28 ID:g/RzbGfr0
Dock上の特定のアイコンの座標を取得する方法ってあるんでしょうか? Stackみたいにちょうどアイコンの上にウィンドウが開くようなUIを作りたいのですが・・・。
818 :
名称未設定 :2008/09/23(火) 22:47:20 ID:7MN5oJ1o0
プロパティで @property (readWrite, retain, nonatomic) NSObject *object; とした場合 self.object = nil; は [object release]; もしくは [self.object release]; と同義でしょうか?
819 :
名称未設定 :2008/09/24(水) 00:22:02 ID:aStVeHik0
久しぶりにプログラムいじってるんですが、quartzのCGLayerRef(スクリーン 外)にCocoaのメソッド使って描画してます。 CGLayerRefからNSContextつくって、それをsetCurrentContextで設定して 描画を行い、NSViewの次のdrawRect:の段階で画面上に描画しています。 10.4ではうまくいっていたんですが、10.5にすると、このメソッド以降描画がさ れなくなります。 CurrentContextがCGLayerRefになったままなのかと疑い、以前のCurrentContext を一次退避させて、描画が終わった段階で元に戻すと正常に描画されるように なったんですが、これは正しい解決方法なんでしょうか。 どなたかアドバイスして頂ければ幸いです。
820 :
名称未設定 :2008/09/24(水) 19:26:25 ID:jwopSb5h0
Xcode 3.1です。 -(IBAction)openBrowser:(id)sender{ NSWindowController* wc=[[NSWindowController alloc] initWithWindowNibName:@"Browser"]; [wc showWindow:self]; [[wc window] makeKeyAndOrderFront:self]; } 新しく作成したウィンドウがアクティブにしたいのですが、上のソースでは表示されるもののアクティブになりませんでした。 ウィンドウをアクティブにするにはmakeKeyAndOrderFront以外にも何か必要なんでしょうか。 [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; を追加してみたりもしてみましたが効果無しでした。
821 :
名称未設定 :2008/09/24(水) 19:59:35 ID:EW93wwHW0
>>820 基本的な確認だけども。
そのNSWindowControllerは読み込んでるNibの中でFile's Ownerになっている?
そのアウトレットがちゃんと目的のWindowに繋がってる?
822 :
名称未設定 :2008/09/24(水) 21:02:40 ID:jwopSb5h0
>>821 ありがとうございます。windowをアウトレットで繋いだらうまくいきました。
823 :
名称未設定 :2008/09/24(水) 21:27:01 ID:iIaK2s1u0
824 :
名称未設定 :2008/09/24(水) 21:55:28 ID:/GxHzA8A0
>>823 んはーありがとうございます。
ちなみに上記コードでreleaseした後に
self.source = hoge; で再設定しようとすると落ちました。
retainCountが0だからってnilではないんですね。
825 :
名称未設定 :2008/09/25(木) 07:07:20 ID:lA2ZC0x+0
iPhotoを起動するときにoptionキーを押しながら起動すると ライブラリの選択が行えるわけですが、 同じように自前のアプリケーションでも起動時のキー判定を行うには どうしたらいいんでしょうか。
826 :
名称未設定 :2008/09/25(木) 07:34:41 ID:bTE/wwXK0
NSLog([[NSString alloc] initWithData:[[[NSString alloc] initWithString:@"=http%3A%2F%2F"] dataUsingEncoding:NSShiftJISStringEncoding] encoding:NSShiftJISStringEncoding]); を実行してみると、 =http0X1.D1A1091104A28P-658-0.000000-1.992821 と表示されてしまうのですが、 「%3A%2F%2F」を含むNSDataを「0X1.D1A1091104A28P-658-0.000000-1.992821」ではなく「%3A%2F%2F」にする方法は無いのでしょうか。 initWithDataだけでなく、stringWithContentsOfFile:encoding:error:を試してもだめでした。
827 :
名称未設定 :2008/09/25(木) 10:03:12 ID:pGcOup570
828 :
名称未設定 :2008/09/25(木) 10:09:07 ID:uj5o01Zl0
829 :
名称未設定 :2008/09/25(木) 11:05:14 ID:sKStzvQr0
>>828 そういう問題じゃないでしょ
>>826 NSLog(@"%@", [[NSString alloc]...);
NSLog の第一引数は format を指定するためのもの。典型的な security hole の原因だわ。
830 :
名称未設定 :2008/09/25(木) 11:13:32 ID:pGcOup570
>826 NSString *hoge = /* NSLogの中身 */; NSLog(@"%@", hoge); // 第一引数に直接指定しない。 だと、どうですか? NSLogの第一引数に直接指定してるのが問題です。 NSLogの第一引数はprintfとほぼ同じformat文字列ですので、 NSLogが%を解決しようとしてぶっ飛んでるんだと思います。 変換自体はそれでちゃんと出来ているはずです。
831 :
名称未設定 :2008/09/25(木) 13:08:06 ID:4oC2NP4f0
>>826 あと、NSShiftJISStringEncoding で決めうちするのはよくないよ。
URL は ShiftJIS のばあいもあれば、 EUC の場合もあるし、
最近は Unicode もふえてるから、ちゃんとその URL を含む頁の
コードを判定してからやりましょう。
832 :
名称未設定 :2008/09/25(木) 13:33:02 ID:q/UtwYK70
便乗ですみませんが、どうやって取得前に文字コードを判別できるのですか?
833 :
名称未設定 :2008/09/25(木) 13:58:05 ID:bTE/wwXK0
834 :
名称未設定 :2008/09/25(木) 15:46:00 ID:sKStzvQr0
>>833 日本語を含まないことがわかっているのであれば NSASCIIStringEncoding にするべきでは
>>831 URL は %xx を decode しないなら文字コードは関係ないでしょ
835 :
名称未設定 :2008/09/25(木) 16:11:06 ID:cN/guz5p0
>>819 そうだよ。
10.4で問題がなかったのはたまたまでしょうね。
836 :
名称未設定 :2008/09/26(金) 22:02:33 ID:cU/wlxV80
>>835 遅くなりましたが、レスありがとうございます。
ひとまず安心しました。
DrawRect:が呼ばれる辺りでNSContextも再設定されると思ってたので意外です。
837 :
名称未設定 :2008/09/27(土) 17:38:47 ID:PUMQQB4h0
NSViewをpdfにして(「PDFとして保存...」)プリントパネルを出さずに,保存したいと考えてます。
その際,プリントパネルでレイアウトのページ数/枚を2とか4とか設定するのと同様のことを
コードの中で設定したいのだがうまくいきません。
NSPagesAcross(横方向),NSPagesDown(縦方向)に整数をセットすればいい筈なのですが,
うまくいきません。
しかも,
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 :
名称未設定 :2008/09/27(土) 20:08:21 ID:3BeeyAhv0
>>836 drawRectで再設定されるから良いという問題ではないですよ。
思わぬ所で上書きされる可能性もあるし、
currentContextかえたら元に戻すのが作法だと思います。
839 :
名称未設定 :2008/09/28(日) 00:16:59 ID:4kM6Mp/Q0
>>837 NSPagesAcrossってNSPrintPagesAcrossのこと?
後こういう定数は「@"NSPrintPagesAcross"」じゃなくてそのまま「NSPrintPagesAcross」でいいと思う。
840 :
837 :2008/09/28(日) 12:00:57 ID:UPVPAS6R0
>>839 アドバイスサンクスです。NSPagesAcrossとNSPrintPagesAcrossとの関係はつかめません。
NSPrintPagesAcrossにかえても,NSPrintInfoをダンプ(NSLog)は「NSPagesAcross = 2;」になってます。
しかも,期待した結果を得られないし,,,
[printInfo setJobDisposition:NSPrintSaveJob];としても
runOperation中では,無視されているみたいです。
841 :
名称未設定 :2008/09/28(日) 12:39:44 ID:qIiqZsDr0
>>838 なるほど、言われてみればその通りです。
アドバイスありがとうございました。
842 :
837 :2008/09/29(月) 11:02:33 ID:El694lAQ0
NSLogで出力したとき,日本語がエスケープされる(\U5185みたいになる)のですが, エスケープされない方法か,コピペで,変換してくれるようなサイトがあったら, 教えてください。ちなみにこれはUTF8?UTF16?
843 :
名称未設定 :2008/09/29(月) 12:49:55 ID:z/XCBa2L0
>>842 >ちなみにこれはUTF8?UTF16?
いわゆるNonLossyASCII。
844 :
名称未設定 :2008/09/29(月) 16:20:22 ID:gW8PSnBP0
>>842 >>NSLogで出力したとき
問題があった時は自分で原因を狭めてしまわず、どういうことをしたらそうなったのかちゃんと詳しく書くべき
NSLogは日本語表示してくれる
ArrayとかDictionaryのdescriptionだと言ってるように変換されて表示される
君はそれを言ってるんじゃないかな?
まずは質問の仕方から勉強しようね
845 :
837 :2008/09/29(月) 16:21:31 ID:El694lAQ0
ページ設定パネルで設定された結果(プリンタとか,用紙サイズ,方向など)を チェックしたくて, NSPageLayout *pageLayout = [NSPageLayout pageLayout]; runModalResult = [pageLayout runModal]; NSLog([NSString stringWithFormat: @"%@" ,[[[NSPrintInfo sharedPrintInfo] dictionary] description]]); というのを差し込んでいるのですが, ログには全然,パネルでの変更が反映されていません。 (デフォルトの設定がつらつらと出力されるだけ) なんか勘違いしているみたいなのですが,その勘違いに気付けないので,よろしくお願いします。
846 :
名称未設定 :2008/09/29(月) 16:48:46 ID:FPqjXq0v0
だから、NSLogの第一引数に直接内容不明な文字列を指定するなっていったじゃん。 と、全然別の所に突っ込んでみた。
847 :
名称未設定 :2008/09/29(月) 17:04:44 ID:gW8PSnBP0
>>845 お前人の話し聞けよwww
そんでNSPageLayoutとかNSPrintInfoとか、
つかそもそもstringWithFormatとかdescriptionとかrunModalとか全部ドキュメント読んでこいよw
コード見てるとなんかどこじゃなくてたくさん勘違いしてるから
848 :
名称未設定 :2008/09/29(月) 18:04:53 ID:aNtcQVm00
NSLogの引数の中が全部デフォルトのものばかりかと。 変更された値を保持するオブジェクトを引数にいれないと。
849 :
名称未設定 :2008/09/30(火) 00:10:06 ID:AyM7tJ3A0
>>847 >どこじゃなくてたくさん勘違い
845はよーくドキュメントあたった方がいいぞ
850 :
名称未設定 :2008/09/30(火) 00:37:30 ID:ra4ctouo0
>>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 :
名称未設定 :2008/09/30(火) 00:58:00 ID:jXZPfbh50
>>849 お前さんもどこがおかしいのか分からないのかい?
おかしいってか意味の無いことをしてるなって感じだけど
852 :
名称未設定 :2008/09/30(火) 01:45:32 ID:ra4ctouo0
>>845 まずNSLogだが、これはstringWithFormat:と同じで第一引数にフォーマット、次から挿入する引数になる。
それを直すとこうなる。
NSLog(@"%@" ,[[[NSPrintInfo sharedPrintInfo] dictionary] description]);
次に「%@」だが、これは引数に指定したオブジェクトのdescriptionが挿入される。NSStringのdescriptionは自分自身。
それを直すとこう。まあ動作は同じなんだけど。
NSLog(@"%@" ,[[NSPrintInfo sharedPrintInfo] dictionary]);
だが俺の理解だと、sharedPrintInfoはカスタムのNSPrintInfoを指定していないNSPageLayoutや他のNSPrintOperationとは
共有されているはずだ。それの変更が反映されていないというのは腑に落ちない。
ていうかそこが本質なんだから、
>>846-849 はそっちも答えてやってくれよ。
853 :
名称未設定 :2008/09/30(火) 02:02:03 ID:ra4ctouo0
>>852 に追記。
NSLog([[NSPrintInfo sharedPrintInfo] dictionary]);
これをやってはいけない訳はつまり、descriptionが返したNSStringの中に「%@」やなんかがあったらどうなるか?ってこと。
質の悪いバグになる。
854 :
名称未設定 :2008/10/01(水) 00:24:05 ID:fZLF4RYJ0
855 :
名称未設定 :2008/10/01(水) 07:44:49 ID:Au+Xh+xi0
>>852 >ていうかそこが本質なんだから、
>>846-849 はそっちも答えてやってくれよ。
「NSLogの第一引数に生文字突っ込むな」とか分かりやすいとこばっかレスが付くのはねえ(w
>>845 Leopard以降だとNSPrintInfoからCore Printing(低レベルの印刷レイヤ)まわりにアクセスできるので、
それ経由でやればよさげ。
[operation setShowPanels:NO];
PMPrintSettings settings = [[operation printInfo] PMPrintSettings];
PMPrintSettingsSetValue(settings, kPMLayoutNUpKey, [NSNumber numberWithBool:YES], false);
PMPrintSettingsSetValue(settings, kPMLayoutRowsKey, [NSNumber numberWithInt:2], false);
PMPrintSettingsSentValue(settings, kPMLayoutColumnsKey, [NSNumber numberWithInt:2], false);
[operation runOperation];
とか(2x2の場合)。
NSPagesAcross -> kPMLayoutColumnsKey、NSPagesDown -> kPMLayoutRowsKey という
対応があるようで、これらは元のコードのようにNSPrintInfoからもセット可能なのだが、
kPMLayoutNUpKeyは直接的な対応はないようなので、Core Printingでセットしてやる。
CUIでNSPrintInfoを使うとkPMLayoutNUpKeyがセットされず、それが問題らしい。
856 :
名称未設定 :2008/10/01(水) 13:40:46 ID:2vvkNhJP0
NSStringのrangeOfString:options:を使って、文字列の部分一致検索を処理してます。 アルファベットの大文字小文字、全角と半角、ひらがなとカタカナの違いを無視して一致させたいのですが、 ひらがなとカタカナを無視するオプションが見つかりません。 大文字小文字はNSCaseInsensitiveSearch、全角半角はNSWidthInsensitiveSearchが使えました。 どなたか、このあたりをご存知ないでしょうか?
857 :
名称未設定 :2008/10/01(水) 14:50:47 ID:Jxg6CwEI0
そんな日本語特有の処理が入ってるの?
858 :
名称未設定 :2008/10/01(水) 15:40:30 ID:QJCrV6zO0
印刷するアプリ作ったことない。w >856 CoreDataの検索はひらがな、カタカナ無視してるから、 何らかの隠しオプションなりが有る可能性は有るけど。 enum CFStringCompareFlags { kCFCompareCaseInsensitive = 1, kCFCompareBackwards = 4, kCFCompareAnchored = 8, kCFCompareNonliteral = 16, kCFCompareLocalized = 32, kCFCompareNumerically = 64, kCFCompareDiacriticInsensitive = 128, kCFCompareWidthInsensitive = 256, kCFCompareForcedOrdering = 512 }; CFのがそのまま通るかも。 kCFCompareLocalized ってのがあるけど使ったことない。
859 :
名称未設定 :2008/10/01(水) 17:39:48 ID:EWXwe1rT0
>>856 全く調べてないし、その気もないけど、そんな日本人に都合の良いっていうか日本人くらいしか使わないようなAPIがあるとは思えない。
自前で文字列をどっちかに変換して検索するとかしかないんじゃない?
860 :
名称未設定 :2008/10/01(水) 18:27:50 ID:2vvkNhJP0
>>856 ありがとうございます。
CFのオプションを試します。
ダメなら、CFの検索関数も試してみます。
861 :
名称未設定 :2008/10/01(水) 21:16:10 ID:2yWM9Tj30
AppleScriptは一部ヴァージョンでひらカタ無視するらしいけど、まあCocoaには関係ないか……。
862 :
名称未設定 :2008/10/01(水) 23:57:24 ID:YpUBWQie0
一部バージョンて 最新のAppleScript2.0のことでしょ
863 :
名称未設定 :2008/10/02(木) 08:58:20 ID:ZCB6ua8+0
iPhoneの連絡先も、かなを無視して絞り込むな。 やっぱ、CFあたりにあるんじゃないのか。
864 :
名称未設定 :2008/10/02(木) 09:24:10 ID:DEyPKUgT0
865 :
名称未設定 :2008/10/02(木) 21:22:47 ID:6I84zxEw0
基本的な質問で恐縮ですが、 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; と NSMutableDictionary *dict = [[[NSMutableDictionary alloc] init] autorelease]; では、どう違うのでしょうか? 下の方が解放してくれていい感じがするのですが、 明確に使い分ける意図があれば教えて下さい。
866 :
名称未設定 :2008/10/02(木) 21:30:49 ID:/nxJVGj90
同じ
867 :
名称未設定 :2008/10/02(木) 22:10:36 ID:6I84zxEw0
そうですか、ありがとうございます。 これで迷わずにコードがかけます^^;
868 :
名称未設定 :2008/10/03(金) 08:29:27 ID:oZRcqq8c0
>>867 ドキュメントのどっかをよめばかいてあるけど、
メソッド名に init... , copy... があるやつは autorelease されてなくて、
メソッド名にそれらがないやつは autorelease されてる、
と「決まってます」。
自分でメソッド書くときもそれに従っとくと混乱がすくないです。
869 :
名称未設定 :2008/10/03(金) 11:02:40 ID:mGVGEXof0
>>868 >>423 init は出てこない。
まあ普通は alloc と init の組み合わせで使うから、関係なくないといえばそうだけど。
870 :
名称未設定 :2008/10/03(金) 16:51:46 ID:lnmhxgeU0
CABasicAnimationで画像を複数回移動するアニメーション部分をやっているのですが、 speed、durationなどの設定が同じならtoValueに設定した値までの移動距離が短くなるほど、 移動するスピードが遅くなります。(長くなると速くなる) 違った移動距離でも同じスピードで移動させたのですが、そのような設定は出来ますでしょうか? 毎回、speed、durationなどの値を入れ替えるしかないのでしょうか?
871 :
名称未設定 :2008/10/04(土) 14:48:53 ID:YvRU7BHV0
>>859 無いという確信がどこから来るのか不思議だが、見事にハズレ。APIはちゃんとある。
CFでもUnicode UtilitiesでもLocaleとoptionを正しく与えれば、ひらがなとカタカナを
同一視した比較ができる。この動作をするのはJapanese Localeの時だけだから、
System Preferences > International設定の影響を受けたくなければLocale明示が必要
872 :
名称未設定 :2008/10/05(日) 05:38:25 ID:uziPsw3m0
>>871 別に確信を持って言ってるようには感じないけど。
いい感じ通信だったかな日本語文字列検索のこと書いてたけどこのオプションを使ってるのかな?
勉強になりました。
873 :
名称未設定 :2008/10/06(月) 10:26:21 ID:JVQiKRWo0
>>871 kCFCompareLocalizedをオプションに入れて、
ロケールに日本語を入れれば良いという事ですか?
874 :
名称未設定 :2008/10/06(月) 22:13:17 ID:0Tq6ORkh0
>>873 CFStringCompareWithOptionsAndLocale()を使う場合はそう。
Leopard以前でLocale明示した比較をする場合はUnicode Utilitiesの
UCCompareText()を使う。
875 :
名称未設定 :2008/10/07(火) 01:33:37 ID:e/RkVFA40
すんません、古いOS持ってないので確認できないんだけど・・ 例えばSDK10.4でビルドしたアプリって、OS10.3で起動したなら勝手にエラー出して終わるのかな? それとも自分でチェックのコードを書かなきゃいけない?
876 :
名称未設定 :2008/10/07(火) 01:36:38 ID:QWJWi9xM0
>>875 デプロイメントターゲットも10.4にしておけば起動しない。
俺は10.3にも対応してるアプリを書いてるが、SDKは10.4でユニバーサルバイナリ、デプロイメントターゲットは10.3。
877 :
875 :2008/10/07(火) 01:40:17 ID:e/RkVFA40
878 :
名称未設定 :2008/10/07(火) 10:06:27 ID:h1HNxZeI0
879 :
名称未設定 :2008/10/08(水) 17:22:36 ID:HG8PgwVu0
CocoaでSOAP通信しようとした時に、まず何から手をつければ(何から読めば)いいんでしょうか…
880 :
名称未設定 :2008/10/08(水) 18:48:52 ID:ttuSaGVV0
881 :
名称未設定 :2008/10/08(水) 18:55:02 ID:HG8PgwVu0
ふんふん、やっぱそれが一番いいですか! ありがとうございます!!
882 :
名称未設定 :2008/10/08(水) 19:23:55 ID:4ZTxCEDH0
ローカライズ作業をしていたところ突如Xcodeが強制終了して 立ち上げ直したのですがなぜかローカライズがまったく反映されなくなってしまい 前日まで作業していた分も全てローカライズがはずれてしまいました。 Localizable.stringファイルを削除し新規に作り直したのですが、まったく反映されません。 試しに新規プロジェクトでローカライズしてみたところ、ちゃんと反映されました。 強制終了した際にプロジェクトファイルが壊れてしまったのでしょうか? どこかXcode側で設定しなおしてみる項目などはありますか?
883 :
名称未設定 :2008/10/09(木) 00:31:21 ID:mF789dp10
884 :
882 :2008/10/09(木) 05:14:32 ID:qeuBkKCx0
Xcodeが強制終了したので先入観でファイルが破壊されたのかと疑っていたのですが、 結局、事前に一度にたくさん編集していたLocalizable.stringファイル内でセミコロンが抜けていただけでした。 失礼致しました。
885 :
名称未設定 :
2008/10/10(金) 19:16:18 ID:L0qzaxQU0 Cocoa-Dev-Japan (GoogleML) が… ちょっお前、binding の前に KVC が… とにかくHMDT本か荻原本読めよ、って感じになってる ヽ(#`Д´)ノ