Cocoaはさっぱり!!! version.13

このエントリーをはてなブックマークに追加
1名称未設定
■前スレ
Cocoaはさっぱり!!! version.12
http://pc11.2ch.net/test/read.cgi/mac/1231853172/

■関連スレ
Macでプログラミング{9}
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
MacOS XをUnixとして使ってる人の為のスレ その14
http://pc11.2ch.net/test/read.cgi/mac/1216715423/
Xcode part7
http://pc11.2ch.net/test/read.cgi/mac/1218774554/
MacでJava その4
http://pc11.2ch.net/test/read.cgi/mac/1214284891/
RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/
AppleScript アップルスクリプト 質問、発表 3
http://pc11.2ch.net/test/read.cgi/mac/1223026902/
iPod touch/iPhone ネイティブアプリ製作 ver.10
http://pc11.2ch.net/test/read.cgi/mac/1238385226/
Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/
2名称未設定:2009/05/04(月) 12:26:05 ID:uDYhVLXL0
3名称未設定:2009/05/04(月) 12:33:22 ID:2C019ily0
>>1おる!
4名称未設定:2009/05/04(月) 12:44:38 ID:YtFZQwa70
[1 otsu];
5名称未設定:2009/05/04(月) 12:59:37 ID:lCsUNx0R0
>>1

or乙
6名称未設定:2009/05/04(月) 13:05:05 ID:GcKY4X1V0
[前スレ release];
7名称未設定:2009/05/04(月) 14:32:54 ID:MN0mjn8F0
>>6
まだ retain している奴がいるみたいだ
8こうか?:2009/05/04(月) 21:01:23 ID:gtujWb2n0
[前スレ autorelease];
9名称未設定:2009/05/05(火) 22:23:48 ID:8tS77hvh0
早い内に宣言しとくか
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
10名称未設定:2009/05/05(火) 22:30:54 ID:R7vlBhb00
>>8
>>9
ちょwwwプールなかったのかw
11名称未設定:2009/05/05(火) 22:45:51 ID:Eg9DsySZ0
[pool release];
12名称未設定:2009/05/05(火) 23:05:24 ID:8zalga+I0
おいこら
13名称未設定:2009/05/06(水) 00:14:41 ID:FqhT4q3T0
ええー、ガベコレじゃないの?
14名称未設定:2009/05/06(水) 01:03:43 ID:/EEUpqJG0
ビデオとかオーディオ系のアプリだとガベコレ使わんよね?
なんかパフォーマンス激落ちした記憶が
15名称未設定:2009/05/06(水) 01:49:54 ID:ky4Uli1Q0
適材適所。あんまり厳しいところはObj-Cも使わないかも。
16名称未設定:2009/05/06(水) 10:56:57 ID:W6WEme5U0
どうせ質問出るだろうから

書籍
【Objective-C】
詳解 Objective-C 2.0「荻原本」(ソフトバンククリエイティブ 、08/5)荻原剛志
Dynamic Objective-C「ダイナミック本」(BNN新社、09/3)木下誠
【Cocoa全般】
Mac OS X Cocoaプログラミング「ヒレガス本」(ピアソンエデュケーション、02/06)アーロン・ヒレガス
HappyMacintoshDevelopinTime 2nd Edition「黒本」(BNN新社、04/6)木下誠
HappyMacintoshDevlopingTime 3rd Edition「赤本」(BNN新社、06/5)木下誠
たのしいCocoaプログラミング「たのここ」(BNN新社、08/8)木下誠
【iPhone】
iPhone SDKプログラミング大全(アスキー・メディアワークス、09/1)木下誠
iPhone デベロッパーズ クックブック「エリカ本」(ソフトバンククリエイティブ 、09/2)エリカ・サドゥン
iPhoneSDKの教科書(秀和システム、09/3)赤松正行
基礎からのiPhone SDK(ソフトバンククリエイティブ 、09/4)鶴薗謙吾
17名称未設定:2009/05/06(水) 12:09:18 ID:Z1f55c9/0
CocoaではじめようMac/ iPhoneプログラミング入門(秀和システム、09/3)中野洋一
18名称未設定:2009/05/09(土) 09:15:10 ID:wZLTz+uY0
アイホン本多すぎwww
マクよりアイフォンのほうが売れてるようだ。
19名称未設定:2009/05/09(土) 13:04:14 ID:+8i9ZJol0
>>18
>アイホン本

尼見てるだけだが、しょーもない本もあるようだね
内容はともかく、ネイティブアプリ製作スレの消費もこっちより早いし
ま、参入者増えたのはいいんじゃないの
20名称未設定:2009/05/09(土) 15:40:36 ID:s+5zWOUU0
しょーもないもんで金盗るなよ...
21名称未設定:2009/05/09(土) 18:11:57 ID:Lp5s1i6t0
だって、中の人はおんなじだもん
22名称未設定:2009/05/09(土) 23:18:33 ID:wZLTz+uY0
$99払って大儲け詐欺っぽい傾向だが。
無料ならいっぱいダウンロードされるけど、有料だとさっぱりって現実。
23名称未設定:2009/05/09(土) 23:35:58 ID:HiO6fmc80
>>22
Cocoaを覚える人が増えても、iPhoneアプリを2、3本作っただけで終わりそう。
Macのアプリまで手を出さないだろうな。
24名称未設定:2009/05/09(土) 23:47:18 ID:qYG+6Skz0
>>18
マク?
25名称未設定:2009/05/10(日) 00:14:58 ID:ITfhGX7v0
>>18
アイホンでもアイフォンでもなくアイフォーンだぞ。
26名称未設定:2009/05/10(日) 11:10:40 ID:TeTkJtKx0
あいぽん
27名称未設定:2009/05/11(月) 09:41:45 ID:gCZES4s+0
質問です
nilにメッセージを投げると無視されますが、
たとえば
[mutableArray addObject:object];
で引き数objectがnilだと例外が発生しますよね
こういう場合も素直に無視してくれれば楽だと思うのですが、
レシーバがnilは無視で引き数がnilだと例外発生ということに
何か明確なメリットはあるのでしょうか?
28名称未設定:2009/05/11(月) 09:59:40 ID:VQPLhBtK0
>>27
nilを引数にすると必ず例外発生というわけじゃない。
NSMutableArrayの場合、配列の中身として nilを許可できないので例外になる。
nilじゃなくても許可できない値(スカラー値とか)の場合は例外になる。

レシーバが nilの時にメッセージを送っても nopになるのは言語仕様。
引数が nilの時にどうするかは、クラスとメソッドの指針。引数として nilを許可するメッセージはよくある。
29名称未設定:2009/05/11(月) 12:34:41 ID:gCZES4s+0
>>28
あー、なるほど
たしかに引き数nilの時の振る舞いを言語仕様として定義することはできないですね
スカラー値とnilは区別しようも無いので例外というのもわかります
(NSObjectのサブクラスじゃない場合は全部無視しても良いような気もしますが)

if(object)
[array addObject:object];

といちいちかくのが面倒だなーと思っただけなんですけどね
カテゴリでnilSafeAddObject:とか追加するかな
30名称未設定:2009/05/11(月) 21:30:17 ID:tPSgDZwP0
変な質問ですがよろしくお願いします。
NSLog((NSString *)kMDItemDisplayName);
NSLog((NSString *)kLSItemDisplayName);
とした時、NSLogの結果は
kMDItemDisplayName
LSItemDisplayName
となります。
なぜ後者はkが抜けるのでしょうか?両者が宣言されているMDItem.hとLSInfo.hを見ると
MD_EXPORT const CFStringRef kMDItemDisplayName MD_AVAIL; // CFString
extern const CFStringRef kLSItemDisplayName AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
と宣言のされ方が違いますが、これがどのように影響を与えているのか分かりません。
そもそもスレ違いかも知れませんが、、よろしければ解説お願いします。
31名称未設定:2009/05/11(月) 21:53:10 ID:Oo5tqRqh0
>>30
kMDItemDisplayNameには"kMDItemDisplayName"という文字列が入っていて
kLSItemDisplayNameには"LSItemDisplayName"が入っていた。それだけ。
32名称未設定:2009/05/11(月) 22:21:47 ID:tPSgDZwP0
>>31
中の文字列はユーザには見えない別のところで定義されているということでしょうか?
33名称未設定:2009/05/11(月) 22:28:37 ID:Oo5tqRqh0
>>32
そう。externでググれば分かる。
例えばNSString *fusa = @"hage"; ってなってたとしてNSLog(fusa); でhageが表示されるのは当たり前でしょ。
externで宣言と定義や実装を分離してるだけで、それと同じ。
34名称未設定:2009/05/11(月) 23:32:22 ID:tPSgDZwP0
>>33
Cocoaから勉強し始めたのでCはイマイチ分からないんですよね。
もうちょっとググって勉強してみます、すいません。
35名称未設定:2009/05/11(月) 23:50:48 ID:jvwak+JR0
みなさん NSLog() の第一引数に直接表示したい文字列を渡すのはやめましょう。
NSString*hoge=@"%@%@";
だったばあいに
NSLog(hoge)
とするとクラッシュする可能性大です。
36名称未設定:2009/05/12(火) 08:05:27 ID:nrYuYvsK0
>>35
NSString *hoge = [NSString stringWithFormat:@"%@%@",hoge1,hoge2];

じゃなくて?
37名称未設定:2009/05/12(火) 08:46:39 ID:n1Sh7mBn0
cocoaはさっぱりヽ( ´ー`)ノ
38名称未設定:2009/05/12(火) 08:56:15 ID:cO5aAwq80
>>35
なんで?
39名称未設定:2009/05/12(火) 09:20:46 ID:5ukzhphT0
printfとかと一緒の理由だけど

%@を見つけると、引数リストの該当位置にcocoaなObjectがあるとして、-[NSObject description]を送ろうとする。
ところが引数リストが無いので、コンパイラはその辺初期化も何もしていない。
ってことで、該当位置は何が入ってるかは誰も分からない。
そこに、触ってはいけないアドレスが入ってるとEXC_BAD_ACCESSが出たりする。
40名称未設定:2009/05/12(火) 10:34:10 ID:nrYuYvsK0
>>39
それはNSLogの問題じゃなくて%@に値を与えないプログラマの問題だと思うが。
41名称未設定:2009/05/12(火) 11:04:57 ID:98lBQIN90
>>40
ユーザーの入力した文字列をログに吐こうとして
NSLog([textField stringValue]);
とすると、ユーザーが %@ と入力してるとクラッシュしかねないので、
ずぼらせずに
NSLog(@"%@",[textField stringValue]);
と書きましょうといってるだけです。
>>30 さんの場合とかは、
kMDItemDisplayName 内に何がはいってるかわからない、
%@ がはいってない保証がないのであれはマズいと。
42名称未設定:2009/05/12(火) 13:38:06 ID:nrYuYvsK0
>>41
全然そんな事言ってなかっただろ。
だいたい無意味なNSLogを残したまま配布用のビルドをすべきではない。
43名称未設定:2009/05/12(火) 22:22:27 ID:prS7MZSPP
Core Animation で透明ウインドウの上でアニメーションを動かすと
その下に再描画されているウインドウがあるとその再描画のタイミングでちらつきますね。
このちらつきを回避する方法はあるのでしょうか?
44名称未設定:2009/05/12(火) 22:31:07 ID:xB/6dHwE0
NSLog()の出力先はstderrなので、デバックかエラー出力のために使う。

NSLog(hoge);とやってクラッシュする可能性があるのは、hogeの中に運悪く'%'が含まれているときだけだ。
だから、NSLog(hoge)でクラッシュする確率は低い。

デバック中にNSLog(hoge)を書くことによってクラッシュしたなら、そのときにNSLog("%@", hoge)に書き直せばいい。
どのみちデバックが完了したらNSLog()は削除される。

エラー出力のときは、メッセージのフォーマットを考えるはずなので、たぶん大丈夫だ。
45名称未設定:2009/05/12(火) 22:56:18 ID:H+KA29wm0
リリース版でもコンソールにログ出してるアプリは沢山ある。
運悪くも何も、フォーマット文字列攻撃っていう良く知られた方法だから、対策しておくことに越したことは無い。
46名称未設定:2009/05/12(火) 23:37:28 ID:9nw2sJcT0
俺もNSLogにそのまま文字列渡すことは無いが、>>30はそもそもそれが主旨ではないから突っ込まなかった。
47名称未設定:2009/05/13(水) 00:17:21 ID:g0aeBdQN0
>>45
>リリース版でもコンソールにログ出してるアプリは沢山ある。
あるからやってもいい、という解釈はどうなんだろうか。
少なくともユーザーから受け取った文字列をログに吐く事に何も意味が無いと思うが。
48名称未設定:2009/05/13(水) 00:25:15 ID:/Ph7rNoz0
NSLogは第一引数にはdescriptionを投げてくれない。
昔これで躓いた。
49名称未設定:2009/05/13(水) 00:27:56 ID:QSUL1DG70
>>47
それが良い/悪いとか有意/無意とかじゃなくて、フォーマット文字列を解釈する関数全般に
そういう脆弱性があるんだから、常にワンステップ置く癖をつけた方が良いよ、という話。
50名称未設定:2009/05/13(水) 00:42:28 ID:yXWILcyg0
>>30です
kMDItemやkLSItemで取り出したファイル情報を、取り出し時のkeyまま自分のDictionaryに
[dictionary setObject:hage forKey:(NSString *)kMDItemDisplayName];
てな感じで突っ込んだところkLSItemの時はkeyが違うなと気付いたのです。
NSLogに関しては何にも考えず簡単な検証例として挙げてしまいました。
51名称未設定:2009/05/13(水) 00:45:30 ID:QSUL1DG70
>>30
>>35からの流れにレスしているだけなので、気にしないでください。
52名称未設定:2009/05/13(水) 00:52:55 ID:g0aeBdQN0
>>49
癖をつけた方が良いという意味なら、それこそNSLogをコメントアウトしてからビルドする癖をつけるべきだろ。
NSLogの脆弱性について異論は無いが、その主張に固執して本質を忘れてないか?
53名称未設定:2009/05/13(水) 00:59:37 ID:noGTpvEW0
初心者の俺でも論点が全く噛み合ってないことはわかる。
54名称未設定:2009/05/13(水) 01:02:42 ID:QSUL1DG70
>>52
あなたの言う本質が多分私の本質と違うんだろうね。

リリース版で余計なログを出さない、という観点で、コンパイラスイッチで
NSLogのコードを消すのは分かる。

私が言いたいことの本質は、フォーマット文字列を解釈する関数はNSLogに限らず沢山あるので、
直接文字列/オブジェクトを渡さない癖をつけた方がいいよ、ということ。
NSLogだけ対策すればいいわけじゃないんでね。
55名称未設定:2009/05/13(水) 06:38:12 ID:g0aeBdQN0
>>54
こいつアホや
56名称未設定:2009/05/13(水) 07:39:36 ID:L+53GQxw0
NSLogはもういいよ。
別スレでやってくれ。。。。
と思ったけど、このスレになっちゃうのか..orz
57名称未設定:2009/05/13(水) 08:47:21 ID:anlyPVMoi
NSLogスレ立てればおk
58名称未設定:2009/05/13(水) 09:04:51 ID:Gwxjdxt/0
  _  ∩
( ゚∀゚)彡  おっぱい!おっぱい!
 ⊂彡
59名称未設定:2009/05/13(水) 09:23:32 ID:HpoQfCTB0
>>56
一応こんなスレがある
Macでプログラミング{9}
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
60名称未設定:2009/05/13(水) 09:42:55 ID:XdvBQVpW0
クライアントがアプリを捜査中何か不具合が出たときの為に動作の履歴をログで残しといてと言うからNSLogを使って吐き出してるんだけど
>>52の意見からすると他の方法を使う方が良い?
アプリ自身の不具合によるエラーでなくてネットワークの通信エラーとかね。
61名称未設定:2009/05/13(水) 12:49:56 ID:Oz1ba0bW0
>>60
僕は >>52 の意見には同意出来なくて、リリース版でも
NSLog で情報を console に出すのはためらわないでいいと思う。
箱に入れて売るぐらいの商用ソフトならともかく、
クライアントと緊密にやりとりしてやってる場合なら
コンソールにいろいろ debug 情報を出すのは何も悪くないとおもうが。
というかそのためのコンソールでしょう。

いまも Console.app をたちあげると
アップル製のソフトがいろいろとおもろい情報を吐き出したのがみえますよ。

もちろんバグのせいで NSLog にログを吐きまくって
CPU が 100% になるぐらいしてはいけませんが...
62名称未設定:2009/05/13(水) 15:28:08 ID:9LrONd3O0
僕もそう思いますね。(1)NSLog自体は時と場合に応じて使う、(2)そして第1引数は変数にしない、という感じですかね。

>>43
Core Animation は興味があります。
どのようなちらつきになるのかテストしてみたいので簡単なサンプルなどアップすることはできませんか?
63名称未設定:2009/05/13(水) 21:14:20 ID:nVj0Hv1VP
>>62
用意してみました。この下に動画などリフレッシュするビューがくるとちらついてしまいます。
http://www1.axfc.net/uploader/Sc/so/1288.zip
password: Core Animation
どうでしょうか
64名称未設定:2009/05/14(木) 01:01:26 ID:d28Ohhqc0
確かに描画のタイミングでちらつきますね。
ためしに Terminal.app の上に持っていっても、描画があるたびにちらっとちらつきます。

で、解決策はわかりませんでした(核爆)
65名称未設定:2009/05/14(木) 05:44:36 ID:xPbVTOO6i
>>64
か、核爆…
66名称未設定:2009/05/14(木) 06:41:57 ID:8Z9WzWce0
なつかしいな。
67名称未設定:2009/05/14(木) 06:52:04 ID:d28Ohhqc0
てへてへ。それはともかくこういうのって仕様なんですかね。
Core Animation 得意な方のご意見をきいてみたすなあ
68名称未設定:2009/05/14(木) 08:50:53 ID:7sgh35wY0
単なるスペック不足
69名称未設定:2009/05/14(木) 09:23:58 ID:WqR37kki0
>>68
同意しかねる
70名称未設定:2009/05/14(木) 13:57:15 ID:1Pyn2KioP
>>64
チェックありがとうございました。やっぱりちらつくんですねえ。
うーむ。Core Animation ってそういうもんなのかなあ。

>>68
最高スペックの Late2008 の MacBook Pro でもそうなのでそれは違うでしょうね。
Mac Pro でもあとでやってみます。
71名称未設定:2009/05/14(木) 16:32:00 ID:pfNBB2ufi
>>70
これ、OpenGL周りの問題っぽいんですよね。以前
ttp://lists.apple.com/archives/quartz-dev/2008/Nov/msg00027.html
が流れて気になって調べたんだけど確かに現象が出る。QTCoreVideoの
TeaPotの上に先のプログラムを置くと下のポットの方にもフリッカーが
出るんです。解決策解らず
このlistでも結論は出てないので、WWDCあたりで突っ込みを入れるのが
正解だと思います。
72名称未設定:2009/05/14(木) 16:35:43 ID:pfNBB2ufi
QTCoreVideo>QTCoreVideo101
73名称未設定:2009/05/14(木) 16:42:05 ID:B8qxAkQF0
WDDCで突っ込みを入れて修正されるのが10.5.8か10.6かで事情が変わってくるな
過去には切り捨てられたバグも…
74名称未設定:2009/05/14(木) 16:48:55 ID:aNVF999j0
>>71
OpenGLじゃなくてQuartzの問題じゃない?
透明ウインドウにOpenGLで直に描画してもチラつかないし。
7543:2009/05/14(木) 17:03:33 ID:jO61i7Cr0
>>71
おっとこのような情報があったとは。なんという有益な情報でしょう。
ありがとうございます。WWDC 参加したかったですが今年もだめでした。
一度行ってみたいなあ。

>>73
へえ。常に新しい環境を使っていける環境の人はいいですけど、そうでない人には厳しいですねえ。

>>74
ちょっと思い出して Quartz Comporser で作ったコンポジションを透明ウインドウにのせるサンプル
があったのでひっぱりだしてきてやってみました。それは見事にちらつかずに滑らかに動いていました。

Quartzの問題なのか、Core Animation が Quartz とお話している部分の問題なのか、OpenGL 部分なのか。
その辺のdeepな内部の実装についてはさっぱりわかりませんねえ。
7643:2009/05/14(木) 17:07:17 ID:jO61i7Cr0
どなたか WWDC 09 参加される方でこの問題にご興味のある方は是非是非質問をぶつけてきていただきたいです><
77名称未設定:2009/05/14(木) 17:53:28 ID:aNVF999j0
描画が別スレッドで行われているのが原因だと思われ。
QuartzComposerのベースが同じなら、メインスレッドで描画する方法があるという事なんだろうか?
78名称未設定:2009/05/14(木) 21:25:12 ID:pfNBB2ufi
>>77
まるっきり別アプリなので同一スレッドで動く事は困難では?

各種描画は最終的にはOpenGLのパイプラインに押し込まれ(その後H/Wレンダラ
なりにわたる)処理される約束に現在の実装ではなっているはずなので、そこ
でなんとか協調するための手段があるはずなんですよね、QuartzComposerなん
かはそのへんまじめにやってる(というか、立ち位置がOpenGLに近い)っぽく
てCAはパフォーマンス優先になっているような。
パフォーマンスを多少犠牲にしても同期を取るモードがあっても良さそうなの
で、そのへんが担当者に聞けると、、、

私も残念ながらいろんなあおりを受けて今年はおやすみ。
79名称未設定:2009/05/14(木) 22:31:24 ID:aNVF999j0
>>78
何を作りたいか分からないけど、OpenGLで書いた方が早いんじゃない?
80名称未設定:2009/05/14(木) 22:58:50 ID:vR6rv+/10
>>78
CAってbeam syncって概念ないのかい?
81名称未設定:2009/05/14(木) 23:41:46 ID:kzoneQIR0
>>78

>各種描画は最終的にはOpenGLのパイプラインに押し込まれ処理される約束に現在の実装ではなっているはずなので

Quartz DebugでQuartz Extreameをoffにしても、ちらつきが収まらないので(多少ちらつく頻度が少なくなるような気はするが)、原因は別のところにあるのではないか?

82名称未設定:2009/05/15(金) 00:16:10 ID:98daYchR0
CALayerに設定されているCIFilterを外すと、ちらつかなくなるね。
あと、ウインドウにタイトルバーを付けて、ウインドウをドラッグで動かすと、背景が静止画の場合であってもちらつくねぇ。
Core Image側に問題があるのかな? どちらかというと。
83名称未設定:2009/05/15(金) 00:26:31 ID:LM6j+XPe0
Quartz Compositorじゃね?
84名称未設定:2009/05/15(金) 23:11:26 ID:Di8dS7Xy0
サンプルコードで
BOOL b = NO;
b |= [hoge hage];
というようなのを見かけました。これはどういう意味になるのでしょう?
Cocoaの教本には載ってませんでしたが、、。
85名称未設定:2009/05/15(金) 23:13:50 ID:Vreasx71P
cの論理演算子を調べてみては
86名称未設定:2009/05/15(金) 23:19:47 ID:rNZ6L9VR0
ホゲハゲ
87名称未設定:2009/05/15(金) 23:20:23 ID:Di8dS7Xy0
&& || != などは分かるのですが、、どうしても|=が出てきません。
記号だけのものを探すのって大変ですね。
88名称未設定:2009/05/15(金) 23:21:54 ID:Di8dS7Xy0
すいません、C言語 演算子でググったら一覧みたいなのが書いてあるサイトをいくつか見つけられました。
見て勉強してみます。
89名称未設定:2009/05/15(金) 23:34:04 ID:IXApvD0U0
>>84
正直そのサンプルコードは良くないとおもう
| はビット単位 OR だから、 BOOL に適用するのは良くないべ。
90名称未設定:2009/05/15(金) 23:38:16 ID:Di8dS7Xy0
マジですか、Appleのサンプルコードだからって鵜呑みにしちゃいけないんですね。
なんかショック。
91名称未設定:2009/05/15(金) 23:48:37 ID:IXApvD0U0
>>90
バグってるわけではないがバッドノウハウだと思います。
NO が 0 で、YES が 1 なのは Cocoa では決まってるので、
まあビット単位 OR | も論理 OR || も一緒ですが、
Cocoa でない C のコードでは、0 が偽、0以外の整数は全て真と
解釈されることになってるので、
論理演算とビット演算の結果が異なることもありえますので...
92名称未設定:2009/05/16(土) 07:44:18 ID:nOx+3fs60
if(Cond)ならどっちでも通じる。分かっててやる分にはいいんじゃね。
あんまり好きじゃないけど。
93名称未設定:2009/05/17(日) 00:35:50 ID:vTJjRQm+0
分かりにくかったら済みません。

TwitterPodやSnowRabbitみたいなログ表示をするには
どうすればいいでしょう?折り返しのある文字列を綺麗に表示したいのです。
NSTableViewとかNSTextFieldCellあたりを探してみたのですが
見つかりませんでしたorz
自前で作るにしても方法が思いつきません。
94名称未設定:2009/05/17(日) 00:50:38 ID:ARuKMIRg0
>>93
NSTextFieldCellのLayoutをWrapsに設定してみると、どうでしょう?
Title, Placeholder, alignment, Border, Layout
と並んでいるやつです
95名称未設定:2009/05/17(日) 00:56:53 ID:ARuKMIRg0
捕捉、もっと下の方にあるLine BreaksもWord Wrapに設定する必要ありますね。
さらに複数行を表示するので、NSTableViewの行の高さ等もちょっと調整
する必要がありそうですけれど
96名称未設定:2009/05/17(日) 15:17:22 ID:dcs8lUAz0
わざわざNSTableViewに吐く理由は?
ただのエディットビューで十分じゃないかな...
97名称未設定:2009/05/17(日) 23:42:48 ID:Fgw9CMGw0
>>96
上げられてるソフトを確認すれば分かるかと。
98名称未設定:2009/05/18(月) 00:21:17 ID:Stz5fwHx0
サードパーティのアプリなんて共通認識にあるわけないし、回答者がわざわざ探しにいけとでも?
という疑問は感じる
99名称未設定:2009/05/20(水) 04:41:57 ID:yuP2p8H10
にるぽ
100名称未設定:2009/05/20(水) 07:16:13 ID:XegvAAnYi
Cocoa100%(σ・∀・)σゲッツ!!
101名称未設定:2009/05/20(水) 08:17:42 ID:T3yMgwWc0
>>100
何かの書籍?個人ブログしかヒットしないんだけど
102名称未設定:2009/05/20(水) 09:09:14 ID:3yEx7CxS0
>>101
ゆとり乙
103名称未設定:2009/05/20(水) 09:28:53 ID:T3yMgwWc0
>>102
俺もそこそこいい歳だよおっさん
104名称未設定:2009/05/21(木) 01:12:24 ID:J06HCPEy0
CALayerについて質問です
ttp://journal.mycom.co.jp/special/2007/coreanimation/002.html
上記ページの下部にあるサンプルコードを例に挙げます。
このサンプルコードをそのままビルドすると正常に画像が表示されるのですが、
- (void)awakeFromNib
{
//...
}
- (IBAction)doAnimation:(id)sender
{
}
となっているのを
- (void)awakeFromNib
{
}
- (IBAction)doAnimation:(id)sender
{
//...
}
とごっそり移動しました。つまりCALayerの設定をawakeFromNibからIBActionでの実行に変更しました。
これをビルドして実行すると画像がちゃんと表示されません。
なぜこのようなことが起きるのかさっぱり分かりませんので教えてください。よろしくお願いします。
105名称未設定:2009/05/21(木) 02:41:54 ID:gvzv7DBV0
>>104
Viewのアウトレットは繋がってる?
ViewにsetNeedsDisplay:は送ってみた?
106名称未設定:2009/05/21(木) 03:29:48 ID:J06HCPEy0
>>105
はい、つながっています。ViewへのsetNeedsDisplay:もLayerへのsetNeedsDisplayも送ってみました。
awakeのタイミングでやると正しく表示されるんですよね。IBActionでやるとCALayerのbackgroundColorは正しくセットされるのですが、contentsに画像を設定した時におかしくなります。
Layer周りをいろいろ実験してておかしいなと思い、シンプルなソースを探してきて試してみたところ同様にうまくいかなかったのでさっぱり状態になり質問させてもらいました。
良かったら上記のサンプルコードで試してみてください。
107名称未設定:2009/05/21(木) 03:38:44 ID:gvzv7DBV0
>>106
やってみた。
awakeFromNibのままですら正常に表示されなかったw
こりゃ元のコードに問題がありそうだね。暇があったら直してみる。
108名称未設定:2009/05/21(木) 04:31:29 ID:J06HCPEy0
>>107
んー、なぜ結果が違うのでしょう。ちなみにOSは10.5.7で試しました。
夜になると思いますが、時間あればAppleのサンプルコード探して試してみてまた報告しようと思います。
109名称未設定:2009/05/21(木) 11:37:15 ID:dRp23ibU0
すいません。iPhoneアプリ開発初心者です。
なので教えてほしいのですが、
今苦戦しているのは別クラスからの画像の処理です。
+drawImageというクラスに画像名を飛ばしそこにあるImageやViewを使って
表示させたいのですが、状態としては警告が出ます。
警告文的にはaddSubviewが+addSubviewが何たら・・・
と言われます。

なので[??? addSubView];←ここに何を入れれば良いのかが判りません。
drawImageが入ってるのはGdrivControllerです。
これをMainViewとして使ってます。
110名称未設定:2009/05/21(木) 11:38:42 ID:gvzv7DBV0
>>109
はっきり言ってそのレベルじゃiPhone開発は無理。CocoaどころかCの基礎とオブジェクト指向から勉強し直してこい。
あと日本語と英語も。
111名称未設定:2009/05/21(木) 12:01:01 ID:lD5cj5l2i
最近>>109みたいなやつ沸くけどただの荒らしやないのん?
それとも俺が知らんだけでこんなのが現実に結構いるのん?
112名称未設定:2009/05/21(木) 12:06:55 ID:R3inFz3N0
>>109
Xcodeスレで回答もらってるのにシカトしてマルチするの?
113名称未設定:2009/05/21(木) 12:20:19 ID:cyO5iFqa0
>>111
>>110も煽り過ぎだと思うが、質問するレベルにもなってないのは確かだな。
2chで聞きまくるより、一冊でも入門書を読んだ方が本人のためになる。
114名称未設定:2009/05/21(木) 12:36:49 ID:dRp23ibU0
すいませんJava開発しか経験が無いもので・・・
一応ObjectiveC2.0やCocoa、クックブックは読んでるんですが・・・
115名称未設定:2009/05/21(木) 12:47:30 ID:cyO5iFqa0
>>114
Javaで開発できるならObj-Cが理解できない事は無いと思うけど…。
単に文法を理解してないという事なら、なおさら入門書を最後まで読んでからにした方が良いと思う。
116名称未設定:2009/05/21(木) 13:18:45 ID:Zr/4CmfOi
>>114
質問するならまず他人に伝わるように文章を書けるようになってくれ。

「飛ばす」「入れる」「入ってる」等の曖昧で私的な定義の言葉じゃなく、技術書等で使われている一般に通じる用語を使う。
警告が出るなら「〜なんたら」で済まさずにその警告をそのまま伝える。
用語は正しく使う。+drawImageとやらはクラスではなくクラスメソッドのことではないか?
自分で試してみたことをはっきりと伝える。日本語で伝えるのが難しいならソースコードを添える。
そもそも、あなたがやりたい事が分からない。最終的に何をしたいのか5W1Hを明確にして記述する。

これらが出来ないなら書き込んでも誰も答えられないです。
117名称未設定:2009/05/21(木) 13:24:56 ID:LZUURm740
>警告文的にはaddSubviewが+addSubviewが何たら・・・

「何たら」と書く時点でプログラマじゃないよ。
エンドユーザーの「なんかエラーが出るんですけど」と一緒。
118名称未設定:2009/05/21(木) 13:47:20 ID:A08ud0la0
>>114
> すいませんJava開発しか経験が無いもので・・・

とても他の言語で開発経験があるとは思えないぞ>>109では。
それくらい意味不明。

+drawImageの中で -addSubview使ってるってこと?
画像名を飛ばすって何?画像名を引数で渡すのか?

エスパーしてみたが、とりあえずマルチしといてシカトは良くない。
119名称未設定:2009/05/21(木) 13:59:18 ID:RrJzICdh0
兵庫県か大阪府の小学生じゃないの?
いま、臨時休校だし。
120名称未設定:2009/05/21(木) 13:59:58 ID:cyO5iFqa0
>>118
理屈じゃない!感じるんだ!!
121名称未設定:2009/05/21(木) 14:21:12 ID:A08ud0la0
>>120
              ̄ ̄ ̄ ̄-----________ \ | /  -- ̄
      ---------------------------------  。←画像名
           _______----------- ̄ ̄ ̄ ̄ ̄
                     ∧ ∧    / / |  \   イ
                    (   )  /  ./  |    \ /
                 _ /    )/   /  |     /|
                 ぅ/ /   //    /   |    / .|
                ノ  ,/   /'    /    |│ /|
 _____      ,./ /∠__|     /   .─┼─ |
(_____二二二二)  ノ (\__,/|    / ┼┐─┼─
              ^^^'  ヽ, |  |   /.  ││  .│
122名称未設定:2009/05/21(木) 14:38:24 ID:dRp23ibU0
GdrivControlerというファイルにdrawImageという
画像を表示させる処理を置いています。
画像を表示させたいときは画像の名前を[GdrivController drawImage:@"title.png"];
という風にしています。
このdrawImageの中身は
+(void)drawImage:(NSString*)name{
UIImage* img = [UIImage imageNamed:name];
UIImageView* dview = [[UIImageView alloc] initWithImage:img];
このあとの表示部分で警告やエラーになります。
入力してるのが[GdrivController.view addSubview:dview];
だと syntax error before `.` token.
[GdrivController addSubview:dview];だと
'GdrivController' may not respond to `+addSubview`というエラーになります。
}
123名称未設定:2009/05/21(木) 14:43:42 ID:nHVTUb140
>>122
× +(void)drawImage:....
○ -(void)drawImage:....

とか?
124名称未設定:2009/05/21(木) 14:52:07 ID:8ouOVGBPi
>>122
やればできるじゃないか。

まず、
>入力してるのが[GdrivController.view addSubview:dview];
>だと syntax error before `.` token.

>[GdrivController addSubview:dview];だと
>'GdrivController' may not respond to `+addSubview`というエラーになります。

これらは両方とも、インスタンスに送信すべきメッセージをクラスに送っていることが間違いです。

クラスとインスタンスの違いは分かりますか?
クラスメソッドとインスタンスメソッドの違いは分かりますか?
インスタンスの作り方は分かりますか?

たのcocoでも詳解ObjC 2.0でも、オブジェクト指向の基本を解説してる部分を読み直してください。
125名称未設定:2009/05/21(木) 14:54:10 ID:cyO5iFqa0
>>122
for (int i = 0; i<100; i++) {
NSLog(@"入門書を読んでから出直せ。");
}
126名称未設定:2009/05/21(木) 15:21:51 ID:8ouOVGBPi
>>122
あとGdrivControllerってのは何者?
もしUIViewControllerのサブクラスで、IBなりどこかでインスタンス化されてるものなら、
+drawImage:とやらをインスタンスメソッドにしたうえで
GdrivControllerのインスタンスに-drawImage:を送信するようにして、
先述のエラーの出ているところを
[self.view addSubView:dview]
とすれば多分いいんじゃないかと思うよ。
127名称未設定:2009/05/21(木) 15:23:36 ID:RrJzICdh0
クラスメソッド
Obj-C 頭に+が付いてる
Java static が付いてる。

インスタンスメソッド
Obj-C 頭に-が付いてる。
Java staticが付いてない


Javaの方は大味な説明だけど、こういうことです。
インスタンスを生成してそのインスタンスに対してしか実行できないのがインスタンスメソッドです。
128名称未設定:2009/05/21(木) 15:29:44 ID:cyO5iFqa0
まさに「Cocoaはさっぱり!!!」
129名称未設定:2009/05/21(木) 15:32:08 ID:BiCFA5Fu0
物事がさっぱりだというのはその物事をある程度勉強してみてはじめて使う言葉ですよ。
入門事項すら勉強していない人が「あれはさっぱりだ」と言うことはできません。
130名称未設定:2009/05/21(木) 15:33:00 ID:cyO5iFqa0
>>129
Cocoaは(奇麗)さっぱり(忘れた事にする)!!!
131名称未設定:2009/05/21(木) 16:08:59 ID:dRp23ibU0
GdrivControllerはMainView.xibに使用しているUIViewControllerで作ったもので、
ViewにはGdrivというクラスを使っています。
132名称未設定:2009/05/21(木) 16:33:35 ID:gvzv7DBV0
>>131
だったらGdrivControllerの、しかもクラスオブジェクトがaddSubView:というメソッドを持ってない事くらい分かるでしょ。
addSubView:はUIViewのインスタンスメソッドなんだから。
133名称未設定:2009/05/21(木) 16:52:43 ID:cyO5iFqa0
教える側が基礎を説こうとしているのに、聞く側が回答しか求めていない。
これでは何度説明しても理解できるわけないよ。
134名称未設定:2009/05/21(木) 18:27:52 ID:dRp23ibU0
GdrivControllerにUIViewで作ったGdrivのクラスを追加している場合に
[GdrivController.Gdriv addSubview:dView];とした場合もsyntaxエラーになります。
なので、
UIView* gView = [[Gdriv alloc] initWithFrame:CGRectMake(0,0,50,50)];
[gView addSubview:dView];にするとエラーは無くなりますが、シミュレーターには表示されません。
135名称未設定:2009/05/21(木) 18:57:16 ID:JiQiRyUI0
>>134
もう一度 >116 をよみかえしてくだしあ。あと、多分今のあなたの技術では
動くアプリは出来ないでしょう。Java で開発していて、クラスメソッドと
インスタンスメソッドが分からないなら、一からオブジェクト指向言語の
概念から、さらにC、Cocoa を勉強した方が良いです。多分メモリ管理も。
/* 俺もJavaからきたけど、IBのおかげでUIまわりはJavaよりも簡単だぞ。*/
136名称未設定:2009/05/21(木) 19:00:14 ID:K6oJPq9D0
        ,.-─ ─-、─-、
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ , -─        Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    > ---- r‐'´
      ヽ_         |
         ヽ _ _ 」

     ググレカス [ gugurecus ]
   (西暦一世紀前半〜没年不明)
137名称未設定:2009/05/21(木) 19:24:38 ID:KSjLlpNRi
>>134
クラス名の次にドットが来ることは無いってば。常に文法エラー。
さらにドットの左側にクラス名が来ることもあり得ない。
ドットシンタックスについては、詳解ObjC 2.0の「キー値コーディング」の章を熟読して理解できてから使ってくれ。
138名称未設定:2009/05/21(木) 19:39:58 ID:R3inFz3N0
>>134
作りたいアプリの仕様を書けよ
親切な誰かが請け負ってくれるかもしれないからさ
こんな無意味な問答を続けるよりはよっぽど建設的だぞ
139名称未設定:2009/05/21(木) 19:46:27 ID:lOzpjpIa0
>>135
JavaじゃなくてJavaScriptでした、というオチに100ペリカ
140名称未設定:2009/05/21(木) 21:02:45 ID:gvzv7DBV0
>>108
あれからちょっと試してみたんだが、そのサンプルのままだと画像が白い塗りつぶしになってしまって表示されなかった。
ところが画像ファイルを"/Library/Desktop Pictures/Tiles Blue.jpg"にすると正常に表示された。doAnimation:のほうにごっそり移しても。
俺の方の問題はつまり、画像ファイルの読み込みにあったらしい。Earthファイルもあるのだが、サイズかなにか制限でもあるんだろうか。
141名称未設定:2009/05/21(木) 21:37:12 ID:JiQiRyUI0
>>139
そうかもねぇw

>>137
>クラス名の次にドットが来ることは無いってば。常に文法エラー。
ドットシンタックスと[ ]の混在が嫌いだから知らんかった。調べてみたら、
@interfaec Hoge :NSObject @end
@implementation
static id piyo = @"piyo";
+ (id) fuge { return @"fuge"; }
@end
に対して、Hoge.fuge は仰る通り駄目。でも、[Hoge valueForKey:@"fuge"]
って有効なんだね。クラスにKVCなんてやった事無かったけど面白い。
ドットシンタックスが駄目なのは、コンパイラのみのチェックなんかな?
[Hoge valueForKey:@"piyo"] … ×
class_getClassVariable([Hoge class], "fuge") … ×
class_getClassVariable(object_getClass(objc_getClass("Hoge"))), "fuge") … ×
class_getClassVariable(object_getClass(objc_getClass("Hoge"))), "isa") … ○
やっぱり、isa しか入ってないのか。入れる方法ってあるんかな?
142名称未設定:2009/05/21(木) 22:00:16 ID:lWvBtsqMi
>>141
Hoge *hoge = [Hoge valueForKey:@"alloc"].init;
143名称未設定:2009/05/21(木) 22:09:52 ID:JiQiRyUI0
>>142
+alloc が定義されていて(当然だが)、インスタンスのidが返ってきてたら、
コンパイル成功して当然でしょ?init はインスタンスに対して送られてるのだから。
何が言いたいのか分かりません。
144名称未設定:2009/05/21(木) 23:49:55 ID:J06HCPEy0
>>140
謎が解けた!
サンプルコードのメソッドの最後に
[layer setNeedDisplay];
[layer display];
[backgroundLayer setNeedsDisplay];
[backgroundLayer display];
[_view setNeedDisplay:YES];
これらを組み合わせて入れていろいろ試してみたけど、結局のところ
[_view display];
これが正解だったみたい。
ちなみに、
@"/Library/Desktop Pictures/Nature/Earth.jpg" の画像を使用した時
[backgroundLayer setNeedsDisplay]; や[backgroundLayer display];
すると画像が白塗りで表示されないけど、
http://mac.hitobashira.org/up/src/maka0157.png

@"/Library/Desktop Pictures/Tiles Blue.jpg" の画像を使用すると
[backgroundLayer setNeedsDisplay]; では以下のような画像に
http://mac.hitobashira.org/up/src/maka0158.png

[backgroundLayer display]; だとアプリがクラッシュするという事態が起きた。
デバッガ見たらCGSConvertBGR888toRGBA8888で止まってた。
他の画像ではテストしてないので、ファイルサイズか、フォーマットか何の違いに起因するものなのか分からないけど
画像によって挙動が変わるというのはCALayerの作りが甘いってことなのか?

他のLayerクラスも触ってて思ったけど、アプリのRunLoopと違うタイミングで動いてるので
生成や、特に描画のタイミングなどはしっかり理解しないと正しい制御ができないような気がする。
長くなりましたがこんなとこ。
詳しい人いたら解説お願いしたいところです。
145名称未設定:2009/05/22(金) 00:21:34 ID:KukDsc7l0
OpenSSHって使えますかね?
146名称未設定:2009/05/22(金) 00:44:16 ID:qS/6Qjqe0
>>145
何を勘違いしているのかしらんが、
Objective-C は C のライブラリは何でも使える
147名称未設定:2009/05/22(金) 10:08:59 ID:Hk5Td5Ah0
日記はもういいよ。iPhone板にプログラミングスレ立ててそっちでやってくれ。
基礎的なことも学んでないのにつまづく度に書き込まれたんじゃたまらん。
148名称未設定:2009/05/22(金) 11:24:36 ID:WFQcCVtF0
ここはCocoaスレだぞ、なんつって
149名称未設定:2009/05/22(金) 11:26:54 ID:M58OI3GZ0
別にいいんでねぇの?
またーり推奨しとく。
150名称未設定:2009/05/22(金) 11:33:52 ID:WFQcCVtF0
>>149
>>147はiPhone開発スレの誤爆だと思われ
151名称未設定:2009/05/26(火) 17:04:46 ID:mpU7elWh0
今 Xcode で deployment (release) と development のどちらでコンパイルされているかによって
処理を振り分けることはできるでしょうか?
例えば開発ビルドのみ NSLog() してみたいという用途です。
# Xcode スレの方が適切でしょうか?
152名称未設定:2009/05/26(火) 17:22:23 ID:Q2hth1EJ0
Release用ビルド設定のPreprosessor MacrosにNDEBUGを設定して

#ifndef NDEBUG
NSLog(@"Debug Mode");
#endif

でいけるとおも。
153名称未設定:2009/05/26(火) 18:52:52 ID:lNXmn4af0
>>152
NDEBUGというマクロ名は意図的に選んでるの?
154名称未設定:2009/05/26(火) 18:59:40 ID:ANgsl3SV0
assert.h 関係ですね
155名称未設定:2009/05/26(火) 20:09:00 ID:Q2hth1EJ0
>>153

>>154さんご指摘の通りです。
自前で用意してもいいんですが、慣例的に利用されているようなので
特に理由がない限りNDEBUGマクロ使ってます。

Cocoaネタで言うと、NSAssert[1-5]()なんかは
NS_BLOCK_ASSERTIONSって独自のマクロ定義してますね。

以下補足です。
ログ程度で毎回 #ifndef NDEBUG ... #endif は面倒なので

/* MyDebug.h */
#ifndef NDEBUG
 #define MyLog(fmt, ...) NSLog(fmt, __VA_ARGS__)
#else
 #define MyLog(fmt, ...)
#endif

なんてのがよく使われてるみたいです。
ちなみに__VA_ARGS__は、C99の機能なので
ビルド設定の変更もお忘れなく。

長文失礼。
156名称未設定:2009/05/26(火) 20:13:50 ID:8gfXRQlR0
>>152
あとは
#ifndef NDEBUG
#define NSLog(...)
#endif
でNSLog()自体無効にするとか。
157151:2009/05/26(火) 21:07:20 ID:Hh/s6JXoP
>>152
>>155-156
やってみたところうまく切り分けて動作しました。
ありがとうございました。
NSLog自体を無効にするというのも面白いですね。今まで残していたものも全てユーザに見せないようにできるという楽でいい方法だと思いました。

158名称未設定:2009/05/27(水) 08:12:40 ID:5crTst2N0
>>157
重要な NSLog は残しておくのも吉だとおもう
フリーウェア書いてるが、それのおかげでバグがあったときに
ユーザーさんから log file を送ってもらって
バグが究明出来たことが何回かあるし。

Apple 製のソフトだって大量にコンソールにログをだしてるから
ぼくらも多少ログを吐いてもいいんじゃないかと。
159名称未設定:2009/05/27(水) 13:30:26 ID:rQRiXzwK0
重要な物ならいいけど、ディスクアクセスが発生するので出来るだけ避けて欲しい。

「なんかもっさりだな」って思ったら毎秒ぐらいのペースでログが出てて、連続
ディスクアクセスのパフォーマンスが落ちてたとかある。

まあ、かな漢字変換のディスクアクセスがそんな感じなんだが、、、
160151:2009/05/27(水) 20:18:45 ID:coL084HnP
なるほど確かに重要な情報は残しておきたいし、ディスクアクセスの妨げになるような出力も避けるべきですね。
勉強になりました。
161名称未設定:2009/05/27(水) 20:23:41 ID:DNUe0f2p0
Preview.app なんかがやっているのですが、
オープンしたファイルが Finder やら mv などでリネームされても
アプリがアクティブになったときにリネームをアプリが即座に知って
ファイル名表示を更新しているのです。
ファイルが別のディレクトリに移動されてからリネームしてもも同様にすぐ反映しています。

フルパスではない何かinodeのようなものか何かを保持しているのだと思うのですが、
これは Cocoa 的にはどのクラスやフレームワークを使えば実現できるのでしょうか。

また即座に通知されるのはキー値監視のようなことがファイルに対しても出来るのでしょうか。
162名称未設定:2009/05/27(水) 21:10:08 ID:AJ4glpaE0
>>161
それは確かCocoaだけでは実現できなかったと思います。
CFURLGetFSRefというCarbonの関数を使ってファイルへのエイリアスを取得し、
それをまた実パスに戻したりとかちょっと手間のかかる事をやります
163名称未設定:2009/05/27(水) 22:03:43 ID:DNUe0f2p0
>>162
ありがとうございました。
CFURLGetFSRef 周りの Carbon の関数やFSRefなどを調べてそのような処理を書いてみます。
(すみません、Cocoaではスレ違いだったのですね。)
164名称未設定:2009/05/27(水) 22:18:18 ID:AJ4glpaE0
>>163
Cocoaのメソッドだけでこなせない時にCarbonのコードを内包するのは
よくやられる手法で、まんざらスレ違いというわけでもなかったり(笑)
できればそろそろNSFileManagerあたりがサポートしてくれるとありがたいな〜と
(もしかすると既にあったりして...)
165名称未設定:2009/05/27(水) 22:28:36 ID:BSyot79b0
>>163
NDAlias等のラッパーを利用するのが、簡単でしょう。

166名称未設定:2009/05/31(日) 09:34:37 ID:LG4aWmHm0
WebViewでRealAudioのファイルを再生したいのですが
同じHTMLソースをsafariでは正常に再生できるのに
自分で作っているものではRealAudioのプラグインは表示される
ものの再生ボタン等がディスエーブルになってしまって再生できません
WebPreferencesのarePlugInsEnabledはYESを返してくるのですが
他に何か設定を変えなければならないんでしょうか?
167163:2009/06/01(月) 16:25:01 ID:I59S1qHp0
>>164
確かに狭義の Cocoa スレってわけにはいかないですね。
すっかり忘れていましたが昔 ProcessSerialNumber のためだけに Carbon フレームワークを追加したことがありました。

>>165
これはすばらしいですね。NSCoding などにも準拠していて Core Data にもすぐ使えて便利そうです。
即座にプロパティを NSAlias に変更しました。
ありがとうございました。
((BOOL)setPath: は (void)setPath: じゃなきゃ KVC (?)に対応じゃないよとランタイム(?)から NSLog が出たりしましたがそこは書き換えればすみました)
168名称未設定:2009/06/01(月) 20:36:17 ID:z40AA1IZ0
>>167
165です。
NDAliasを書き換える必要はないでしょう。
たとえば、
- (NSString *)path
{
[self willAccessValueForKey:@"path"];
return [[self alias] path];
[self didAccessValueForKey:@"path"];
}

- (void)setPath:(NSString *)newPath
{
[self willChangeValueForKey:@"path"];
[self setAlias:[NDAlias aliasWithPath:newPath]];
[self didChangeValueForKey:@"path"];
[qtmovie release];
qtmovie = nil;
imageVersion++;
}
とすれば良いのです。Pathを短時間に大量に、あるいは何度も変更しない限りperformanceに
悪影響はないと思います。

他のアプリでの変更を反映させるには、適当なNotification(NSApplicationDidBecomeActiveNotification,
NSWindowDidBecomeMainNotification etc)を受けて、path valueにアクセスすれば良いでしょう。
[object path], [objects valueForKey:@"path"]

169163:2009/06/01(月) 22:49:24 ID:mB7SOtSF0
>>168
なるほど NSManagedObject のサブクラスを作って (void)な setPath: などを実装すればいいのですね。
今は NSManagedObject の value に気楽に NDAlias を放り込んでおりました。
みなさんは逆に気楽に NSManagedObject のサブクラスを作ってらっしゃるんですね。

# というかなんで quicktime movie ってバレてるんですかwwwww

確かに Preview.app はアクティブになったときにファイル名の変更に気づいているので
その nonitifcation で処理しているんでしょうね。ありがとうございました。
170名称未設定:2009/06/01(月) 23:22:29 ID:3BCoBALr0
>>167
クラス名をNSAliasにしちゃダメでしょ
一般的には接頭語にNSは使わない方が良いだろうし、実は_NSAliasっていうプライベートクラスが既にあるし
171名称未設定:2009/06/01(月) 23:23:35 ID:ibtFloOf0
>>170
いや、NDAlias というつかいよいクラスがあるんですよ
172名称未設定:2009/06/01(月) 23:29:27 ID:3BCoBALr0
>>171
だからクラス名はNDAliasのままで、NSAliasにしちゃダメでしょってこと

と思ったけど、>>167良く見るとクラス名じゃなくてプロパティの名前かーじゃあ別にいいか
173163:2009/06/01(月) 23:35:38 ID:mB7SOtSF0
>>170
書き間違えました。手がNEXTSTEPになれきってしまっているようで^^;汗
プロパティの一つにクラス NDAlias を使ったということです。
プロパティの名前は alias です。
インスタンス名やプロパティの名前は小文字で始めるのが NeXT からの習わしですよね
174名称未設定:2009/06/01(月) 23:40:24 ID:3BCoBALr0
>>173
誤字でしたか、スマソ
175名称未設定:2009/06/02(火) 21:37:22 ID:oUUbzT8a0
>>169
168です。
managedObjectのsubclassを作らないのなら、KVC, KVO コンプライアントなアクセッサを
NDAliasのカテゴリーで追加すれば良いです。
例えば、hoge, setHogeを実装すればkeyPath @"alias.hoge"でアクセスできます。
もちろん、コンフリクトしないネーミングが重要です。

NDAliasのコードを改変するのは、下策でしょう。

># というかなんで quicktime movie ってバレてるんですかwwwww
テストプロジェクトのコードをコピペしただけです。
偶然の一致とはいえ、面白いものですね。
私は千里眼ではないので、、(笑)

バグがあったので訂正します。
- (NSString *)path{
[self willAccessValueForKey:@"path"];
NSString *value = [[self alias] path];
[self didAccessValueForKey:@"path"];

return value;
}
176163:2009/06/04(木) 11:45:21 ID:STpJekAS0
>>175
お恥ずかしい限りですが、目から鱗でした!
NDAlias 自体に手を付けずに category で追加できるのが Objective-C の真骨頂でしたね。
知識として category という概念があるというぐらいではなく、
このように使いこなしていきたいと思った次第です。

そこで早速categoryを作ってアクセサを追加してみたところ、見事に警告なく動作致しました。
ありがとうございました。

今回のこの警告でそれ以外に勉強になったことをチラシの裏に書いてみますと、
category で追加前は、alias.path を editable ではない TextField にバインディングしており、
コードでは setPath: しているところはないにも関わらず、
setPath: についての警告がバインディングから(ランタイムのとこかから?)
コンソールに出力されるということでした。
バインディングした時点で、editable に関わらず、
KVO に準拠しているかどうかが(ランタイムに?)チェックされるのですね。
177名称未設定:2009/06/04(木) 16:13:44 ID:FN7ww8Hm0
純正アプリ(例えばiTunes)のLocalizable.stringは
"137.006" = "ダウンロード中 (^1 / ^2)";
というように表記されていますが、
^1 これはどのようにコードから呼び出せばいいのでしょうか?
%@ならstringWithFormat:を使えばいいのですが。
178名称未設定:2009/06/04(木) 16:25:17 ID:STpJekAS0
NSMutableString の replaceOccurrencesOfString:withString:options:range: を使えばよいような気がします。
%@ はむしろ危険な香りがします。なんとなく。
179名称未設定:2009/06/04(木) 17:21:08 ID:X5X6UBZT0
%@の話はもうたくさん
180名称未設定:2009/06/04(木) 18:08:38 ID:FN7ww8Hm0
181名称未設定:2009/06/04(木) 18:36:00 ID:FN7ww8Hm0
>>178
コードで検証してみました。
NSMutableString *mString = [NSMutableString stringWithstring:NSLocalizedString(@"137.006", nil)];
[mString replaceOccurrencesOfString:@"^1" withString:@"hoge" options:0 range:NSMakeRange(0, [mString length])];
[mString replaceOccurrencesOfString:@"^2" withString:@"huga" options:0 range:NSMakeRange(0, [mString length])];

これでうまくいったのですが、ちょっとローカライズ文字列を取り出すのにこれは面倒ですね、、。
純正アプリもこのようにしているのでしょうか。
このようにNSMutableStringと^1を用いてローカライズ文字列を取り出す場合の利点はどういった所でしょうか?
182名称未設定:2009/06/04(木) 18:59:47 ID:CEgw24940
iTunesはCarbonアプリだよ。
その^1とかいうのも、旧Mac OS時代のテキストリソースの書式。
183名称未設定:2009/06/04(木) 19:47:39 ID:7RDrGgVy0
>>181
ParamText()っていう古いAPIの手法だよ。^nがn番目の引数に置き換わる。
当然そんな面倒臭い呼び出し方はせず、wrapper作って1 stepで呼び出してるはず。
%@方式に比べて順番が指定できるから、日本語と英語みたいに逆順表現になる場合は有効
"%@ %@"だと引数入れ替える必要あるけど、^n方式だと"^1 ^2"を"^2 ^1"にすればOK
184名称未設定:2009/06/04(木) 20:14:49 ID:CEgw24940
Formatted Stringでも順番指定は出来るでしょ。
%1$@, %2$@, ...のように。
185名称未設定:2009/06/04(木) 20:51:59 ID:oneyXL090
何と、そんな書式があったとは
186177:2009/06/04(木) 21:12:11 ID:+hNFS8n90
>>182 >>183
なるほど!謎が解けました。CarbonのAPIを利用していたとは考えつきませんでした。
ありがとうございます。
187名称未設定:2009/06/04(木) 21:24:06 ID:CEgw24940
>>184に加えて念のため書いておくと、「%@」に限った話ではない。printfの書式知ってる人には当たり前だけど。
http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html
188名称未設定:2009/06/04(木) 21:58:26 ID:AlxKaiKB0
>>176
168です。動作おめでとうございます。
サブクラスでなくカテゴリを使うとコードやIBでの変更が少なくてすみます。
私も
Using Tree Controllers With NSXML Objects
http://developer.apple.com/documentation/Cocoa/Conceptual/NSXML_Concepts/Articles/UsingTreeControllers.html
を読んだときは感動しました。

後半のtextFieldの件はconditionally sets editableがオンになっていたのではないでしょうか?

161で書かれている機能はdocument based applicationでは、かなり前から実装されています。
cocoaで、document baseではないapplicationでもこういった機能が使えるようなAPIが公開されることを
願っています。
189163:2009/06/06(土) 15:23:22 ID:8Hv1u8j90
なるほどこのような XML に関するいいドキュメントを教えて頂きありがとうございます。
Apple 自ら NS* なクラスを拡張する記事を書いてくるとは勉強になりますね。
Apple だから NS* なクラスそのものにメソッドを追加する仕様変更もできるのに
デベロッパ側でも自由にできる柔軟な言語であることを公式記事として紹介する姿勢がまたよいなあと思いました。

conditionally sets editabe はオフのままでした。
(試しに alias.path に戻して試してみました)
やはり binding した時点で KVO 準拠かどうかはランタイムか誰かがチェックするようになっているんですかねえ。

document-based application では実装されているとは知りませんでした。
(まだ document-based なのは一度も使ったことないのですあせあせ)
ならば将来は Cocoa でそういう API が公開されるかもしれませんね。
190名称未設定:2009/06/07(日) 20:51:32 ID:wcoqoclb0
>>189
188です。
release noteとか、sample code、ヘッダファイルのコメントに有用な情報があることもあります。
GuideやOverViewとかの解説記事は更新が結構遅れることがあります。

textFieldの件、実験しました。
read only bindingの場合、-set<Key>:が無くても警告が出ませんが、KVCコンプライアントでない-set<Key>:
があると警告が出るようですね。
一つ勉強になりました。
191名称未設定:2009/06/08(月) 00:33:41 ID:cWdbvugm0
オブジェクトを動的に判別する
カッコイイサンプルコードを教えてください
192名称未設定:2009/06/08(月) 01:08:36 ID:DQN4aVj/0
>>191
[obj class]
[obj isKindOfClass: ]
ぐらいつかっておけ
193名称未設定:2009/06/08(月) 01:26:55 ID:cAuoxGAE0
>>192
isMemberOfClass:もねDQNさん
194名称未設定:2009/06/08(月) 06:08:21 ID:JFdwuF9a0
>>193
クラスを判別したいとは書かれてないのになんでそうなるの?牛野郎




おれのIDは何になるか・・ドキドキだぜ!
195名称未設定:2009/06/08(月) 09:52:34 ID:hb99arLO0
>>192
DQNwww
196名称未設定:2009/06/08(月) 11:52:32 ID:DQN4aVj/0
>>195
どうも、ご愛顧いただいております DQN です
197名称未設定:2009/06/09(火) 12:00:17 ID:/N8YFhoo0
アプリケーションの起動時に、あるクラスのインスタンスをNSNotificationSenterに登録しようと思っています。

+ (void)load {
[[NSNotificationCenter defaultCenter]
addObserver:[[[self alloc] init] autorelease]
selector:@selector(hoge:)
name:@"fuga"
object:nil];
}

このようにするのは安全ですか?
+load の中で そのクラスの -init を呼んでも大丈夫なのでしょうか。
198名称未設定:2009/06/09(火) 13:17:03 ID:SaDTu/q00
http://www.mikeash.com/?page=pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html
によると、+load は早すぎ。
+initialize はそのクラスの他のメソッドを呼ぶ寸前にならないと呼ばれないので
Notification を登録するには遅いかも。

というわけで僕の技量ではわかりません(;_;)
ぼくなら諦めてメインの awakeFromNib から登録します...
なにかいい方法わかったら教えてください
199名称未設定:2009/06/09(火) 13:32:33 ID:HGRM8OPL0
NSApplicationのdelegateメソッド
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

あるクラスがいつロードされるのか
NSApplicationのdelegateがあるクラスを知ってるのか
は知らんけど、大体ここで。
200197:2009/06/09(火) 15:48:46 ID:EeY5aCI70
>>198-199
ありがとうございます。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
を使う事にします。

-awakeFromNib を使うにせよ、どこかのメソッドで一括して登録するしかなさそうですね。
上記の +load を持つクラスを継承してXXXOberver, YYYObeserver, ... を作れば、
それらを個別に登録する手間が省けるかと思ったのですが。
201名称未設定:2009/06/09(火) 15:54:10 ID:r/0i+jR00
イニシャライザではダメなの?
202名称未設定:2009/06/09(火) 16:05:22 ID:HGRM8OPL0
要望は「アプリケーションの起動時に」ですから。
203名称未設定:2009/06/09(火) 16:23:48 ID:03wOq/G50
インスタンスを登録するんだから、インスタンスの初期化時で良いんじゃない?
そもそも起動直後にインスタンスが存在してる保証があるのかも分からんし。
204名称未設定:2009/06/09(火) 16:38:54 ID:IaPDkHQu0
>>200
NSValueTransformerを登録するのに+loadを使っています。
同じ手法が適応できるかですね。
197の場合、NSNotificationCenterのsingletonが作られるのでしょうか?
一度実験してみたらよいのでは?
ただ、+loadでautoreleaseを使うのならNSAutoreleasePoolのインスタンスが必要です。
205名称未設定:2009/06/09(火) 16:58:49 ID:HGRM8OPL0
対象オブジェクトをnilにしてるってことはあるNotificationをすべて受けたいってことでしょ?
そういう場合は起動時にオブザーバーの作成とNotificationCenterへの登録を同時にしたいってのは普通の要望でしょう。
って、ことだろうなって思ったんだけど。
206197:2009/06/09(火) 17:18:37 ID:EeY5aCI70
>>201, >>203
必要なインスタンスはobserverに登録するもの1つだけなので、
初期化時に登録するというのは本末転倒な気がします。

>>204
>197の場合、NSNotificationCenterのsingletonが作られるのでしょうか?
+load が呼ばれるのは依存しているフレームワークのクラスすべての +load が呼ばれた後、とのことなので、
おそらくsingletonは正常に作られると思います。後ほど実験してみます。

>+loadでautoreleaseを使うのならNSAutoreleasePoolのインスタンスが必要です。
なるほど、 +load の時点ではプールは存在しないのですね。
登録したインスタンスはアプリケーション終了時まで削除しないので、
autoreleaseは使わない事にします。
207名称未設定:2009/06/09(火) 17:23:06 ID:03wOq/G50
やろうとしてる事のメリットが全く分からないんだけど。
なぜinitで登録するのがダメなのか教えて欲しい。
208名称未設定:2009/06/09(火) 17:25:58 ID:03wOq/G50
>>206
>必要なインスタンスはobserverに登録するもの1つだけなので、
>初期化時に登録するというのは本末転倒な気がします。

要するに複数のインスタンスは作りたいけど、Notificationに対する動作は1回にしたい、という事か。
それだと設計に問題があると思うが。
コントローラーを1つ作って、それに処理させるのが普通じゃね?
209名称未設定:2009/06/09(火) 17:52:44 ID:rt8PJHXF0
>>200
>> 上記の +load を持つクラスを継承してXXXOberver, YYYObeserver, ... を作れば、
>>それらを個別に登録する手間が省けるかと思ったのですが。
こういうのは後で見たときにオブザーバが起動時に登録されてることが隠蔽されちゃって
わからなくなるからちゃんと明示的に登録した方がいいと思うよ。
それと再利用について問題が発生しないならシングルトンクラスはなるべくサブクラス
せずに一つですませるのがいいと思う。
ぼくならいわゆるApplication Controller クラスで全部やっちゃうな。
210197:2009/06/09(火) 17:53:00 ID:EeY5aCI70
>>207-208
他の手法がダメというわけではありません。
+ (void)addObservers {
[center addObserver:[[XXXObserver alloc] init] ...];
[center addObserver:[[YYYObserver alloc] init] ...];
[center addObserver:[[ZZZObserver alloc] init] ...];
}
などのメソッドを作り一括で登録してもよいのですが、
このような***Observerクラスの実装を頻繁に追加するつもりだったので、
その度に+addObserversを書き換えたり、登録に漏れがないかチェックしたりする労を避けたかったのです。

211197:2009/06/09(火) 18:01:59 ID:EeY5aCI70
>>209
>こういうのは後で見たときにオブザーバが起動時に登録されてることが隠蔽されちゃって
>わからなくなるからちゃんと明示的に登録した方がいいと思うよ。
グループ名やファイル名、クラス名を工夫して分かりやすくしようと思っていましたが、
確かにトリッキーなことをしていると後々分からなくなりそうですね。
212名称未設定:2009/06/09(火) 18:28:39 ID:03wOq/G50
>>210
そうじゃなくてXXXObserverとかYYYObserverのinitの中でNotificationの登録をすればいいじゃん、て話。
213197:2009/06/09(火) 18:36:57 ID:/N8YFhoo0
連投失礼します。簡単に実験してみたところ、正常に動作しているようでした。
少なくとも、+ loadの中で自分自身やCocoaクラスのインスタンスを作成することは問題ないようです。

設計方針には誤りがあるようなので、再検討してみます。ご指摘ありがとうございました。
214197:2009/06/09(火) 18:48:18 ID:/N8YFhoo0
>>212
語弊があったかもしれませんが、observerとして登録するインスタンス以外に、
XXXObserverのインスタンスを作ったり参照したりすることはありません。

もしinitの中で登録するのであれば
+ (void)addObservers {
[[XXXObserver alloc] init]; // initの中でNotificationの登録
}
こんな書き方になるでしょうが、>>210と本質的な違いがあるとは思えません。
215名称未設定:2009/06/09(火) 20:24:27 ID:WjMp2AGZ0
つまり、XXXObserverみたいのがたくさんあって、追加変更されることもある
だからapplicationDidFinishLaunchingで 手動登録するとミスがでやすい
そこで、XXXObserverクラスが読み込まれたときに自分自身でオブザーバ登録するようにすれば
ファイルをプロジェクトに登録しただけでok で良くなる

ということだよね
216名称未設定:2009/06/10(水) 03:00:35 ID:oybbK05z0
おれも>>212でいいと思うんだけど
217名称未設定:2009/06/10(水) 06:15:54 ID:HWaH6z3b0
見張りたいイベントの種類ごとにオブザーバクラスを作るよりは、アプリケーション全体の
コントローラクラスに通知を処理するコードをまとめた方がいいと思う。
コードを別々のオブザーバクラス達に切り分けるとオブジェクト指向っぽく見えるかもしれないけど、
実際のところ
1) オブザーバオブジェクトの登録は通知の種類ごとに別々に書かなければならず、メソッド継承の
メリットがない。
2) オブザーバクラスはそれ自体が固有のデータなり外部の対象を表しているわけでなく、たんに特定の
処理をまとめているだけなので、別クラスにするオブジェクト指向的な必然性がない。
3) ソースファイルレベルで整理したければ別カテゴリに分けておけばいい。
4) オブザーバクラスの初期化メソッドに登録処理を入れてしまうと後で流れがわかりにくくなる。
という事情があるのであまりオブザーバクラスを作るメリットがないように思う。こういうのはもしSmalltalk
だったらブロック構文で通知処理コードを書いちゃうところじゃないかな。だからメインのコントローラクラスに
いろいろ個別の処理のためのメソッドをいろいろ作るのがそれほどダサイことだとも思わない。
218名称未設定:2009/06/10(水) 06:46:31 ID:C43i09fd0
そもそもコントローラーを正しく設計していれば
Notificationを使う必要性はあまり無いと思うけど。
219名称未設定:2009/06/14(日) 21:08:41 ID:XPyIS2i/0
情報が無くて・・・ご存知でしたら教えてください。

Cocoaプラグインは、64bit化してもアンロードサポートがないまま
なのでしょうか?
CocoaバンドルサポートはCoreFoundationバンドルサポートより
この点で致命的に使いづらいです。

CFPlugin使いづらいよ・・・
220名称未設定:2009/06/15(月) 00:38:34 ID:qX+5qPVB0
>>219
ええっと、Leopard になって NSBundle も unload できるようになったんですが。
32bit でも 64 bit でもですよ。
NSBundle Class Reference 読みましたか?
情報無いって言うまえに本家のドキュメントを読んでください。
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html#//apple_ref/occ/instm/NSBundle/unload
221名称未設定:2009/06/15(月) 05:42:32 ID:7movYKEj0
うわぁ・・・ホントですね失礼しました。

Bundle Programming Guideのほうは

You cannot currently unload the contents of an NSBundle object.
You can unload the contents of a CFBundle object using CFBundleUnloadExecutable. If your bundle may be unloaded,
you need to ensure that string constants are handled correctly
by setting an appropriate compiler flag.

って書いてあったので、未だに出来ないものだとばかり・・・
222名称未設定:2009/06/15(月) 10:12:39 ID:qX+5qPVB0
>>221
いえいえ。一般に Apple のドキュメントは、
ヘッダファイル内のコメント , Tech notes
>> Release Notes
>> 各クラスのドキュメント
>> 何とかかんとかガイド
>> 日本語訳
の順に情報が新しいので、下のほうにいくほど情報が古いことがよくあります。
223名称未設定:2009/06/15(月) 15:58:12 ID:OLaEf2q/0
質問です。Appleイベントを拾う場合に、

NSAppleEventManager *aeMgr = [NSAppleEventManager sharedAppleEventManager];
[aeMgr setEventHandler : self
andSelector : @selector(handleGetURLEvent:withReplyEvent:)
forEventClass : kInternetEventClass
andEventID : kAEGetURL];

と例があるのですが、kInternetEventClassとkAEGetURLはcarbonの定数?みたいなのですが、
これは将来使えなくなるのでしょうか?

よろしくお願いします。

224名称未設定:2009/06/15(月) 16:34:01 ID:Y372xsMm0
kInternetEventClass、kAEGetURLという名前が変わることがあっても、
実体は変わらないはずです。

無くなるのはAppleEvent自体がなくなるときだと思うよ
無くなるのだとしても十分な期間を置くでしょ
225名称未設定:2009/06/15(月) 23:37:14 ID:qX+5qPVB0
>>223
別に Carbon が全部使えなくなるわけではないです。
Leopard が出る際に公表された今後の方針は、
64bit ソフトでは Carbon の GUI まわり (HIToolBox とか) は
使えませんというだけで、GUI より下のレベルの
OS の基本にかかわってくるのは大丈夫なはずです。
というかドキュメントを読むと、64bit で使える、使えない、
と書いてるので自分で確かめられます。
226名称未設定:2009/06/16(火) 00:16:09 ID:AQ67C4GH0
AppleEventなくなったら何もできなくなるじゃん
代替のものが登場してさらにそれが十分に浸透しない限りAEはなくならない
227名称未設定:2009/06/16(火) 00:18:34 ID:NJ+CxxYH0
もしかしたら基本的な質問かもしれませんが、
10.5で追加されたクラスを使いつつ10.4に対応させるにはどうしたら良いでしょうか?
10.5上で動作している場合は10.5で追加されたクラスを使い、
10.4上の場合は別のやり方で回避する、ということをしたいのですが、
10.5SDKを使っていると10.4で動かすことはできませんよね?
メソッドならperformSelectorとかを使えばなんとかなりますが
クラスの場合はどうすれば良いでしょうか?
ビルド設定とかでなんとかなるもんなんですか?
228名称未設定:2009/06/16(火) 00:25:18 ID:AQ67C4GH0
一番手っ取り早いのはNSClassFromString
229名称未設定:2009/06/16(火) 05:57:09 ID:idbUOSgX0
10.4と10.5に分けてリリースするのが普通だと思うが
230227:2009/06/16(火) 10:01:44 ID:NJ+CxxYH0
>>229
まあ本当はそうすべきなんでしょうが、10.5の新機能をがんがん使っているというわけでもないもので
できればシームレスに統合したいと思っています。

>>228
ありがとうございます。
NSClassFromStringとNSInvocationでなんとかしました
231名称未設定:2009/06/16(火) 10:13:12 ID:g72K1aOw0
>>230
Leopard専用のフレームワークにリンクしてる時点でTigerでは起動できないんじゃない?
232名称未設定:2009/06/16(火) 10:34:18 ID:NJ+CxxYH0
>>231
>Leopard専用のフレームワークにリンクしてる時点でTigerでは起動できないんじゃない?
Cocoaに新たに追加されたものを使っているだけで
新しいフレームワークを使っているわけではないです
それだったら10.4は切ります
233名称未設定:2009/06/16(火) 11:04:43 ID:2ORR5FIV0
weak linkとかそういう次元の話?
Cocoaでどうやるのかはシラネ。
234名称未設定:2009/06/16(火) 11:12:19 ID:AQ67C4GH0
>>233
普通に/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoaにリンクしとけばいいだけっしょ
235名称未設定:2009/06/16(火) 12:02:37 ID:u5W3blRU0
>>229
そんなのが普通だなんて言う人はじめてみた
iWork 09なんか明らかにCore Animation使ってるけど10.4から対応してるよね
ダイナミックに内部で切り分けられてユーザに選ばせることすらさせなくていいのがObjective-Cじゃないの
236名称未設定:2009/06/16(火) 12:47:02 ID:g72K1aOw0
>>235
10.3と10.4を別々にリリースというのは見かけるけどね
237名称未設定:2009/06/16(火) 13:20:34 ID:1Z4L+RJ80
ちなみにiWork09みたいにフレームワークのリンクをOSによって動的にしわけるのはどうするんだろう
238名称未設定:2009/06/17(水) 00:28:42 ID:Qs4wlMQ20
239名称未設定:2009/06/17(水) 01:20:53 ID:YfGS704U0
オレはこれを良く使うけど。
floor( NSAppKitVersionNumber ) <= NSAppKitVersionNumberxx_x

http://developer.apple.com/releasenotes/Cocoa/AppKit.html
240名称未設定:2009/06/17(水) 10:38:58 ID:mPj8SVVR0
NSObjectにperformSelector:onThread:withObject:waitUntilDone:ってあるけど
main threadからsub threadに対して実行したい場合、どうやったらmain threadは
sub threadのobjectを得ることが出来るの?
241名称未設定:2009/06/17(水) 11:39:00 ID:hjtBqrkM0
それを投げるってことはNSThreadオブジェクトがあることを知っているはず。
知ってるならそれを作った人を知ってるはず。(同じ人かも)
作った人はNSThreadのオブジェクトを保持することが可能なはず。
242名称未設定:2009/06/17(水) 13:07:22 ID:mPj8SVVR0
NSThreadでは生成したスレッドのオブジェクトを返さないから投げる先が
わからんということなんだが。
243名称未設定:2009/06/17(水) 13:19:39 ID:lUCcTzPg0
メインスレッドで使っているインスタンス変数を、そのままサブスレッドでも使えますよ
スレッドセーフになるように気をつけるひつようはありますが
244名称未設定:2009/06/17(水) 15:31:09 ID:f6VhEUD60
>>242
initかinitWithTarget:selector:object:すれば
NSThreadオブジェクトもらえますが?
245名称未設定:2009/06/17(水) 17:56:11 ID:xB/8umtP0
アップルスクリプトからの、NSAppleEventDescriptor*型の返り値を変数resultに入れ、
以下のように数値として利用しています。
result = [script executeAndReturnError: &error];
resultString = [result stringValue];
[resultString intValue](〜以下略)
なんだかとてもまどろっこしいやり方に自分で思えるのですが、もっとスマートな方法はあるでしょうか?
246245:2009/06/17(水) 18:09:33 ID:xB/8umtP0
>>245
書き忘れました。resultStringはNSString* です。

[resultString initWithString:[result stringValue]];
を試してもだめだったのですが、初心者なもので上記のコードと何が違うのかがよくわかりません。
併せて説明してもらえたらうれしいです。
247名称未設定:2009/06/17(水) 18:23:15 ID:hDwFLfNR0
int val = [[result stringValue] intValue];

248名称未設定:2009/06/17(水) 18:28:13 ID:hjtBqrkM0
-[NSAppleEventDescriptor int32Value]
249245:2009/06/17(水) 19:26:57 ID:xB/8umtP0
>>247,248
ありがとう。
int val = [[result stringValue] intValue];  でうまくできました。
[NSAppleEventDescriptor int32Value]  だとwarningが出るのですが、自分で調べてみます。
250名称未設定:2009/06/17(水) 20:12:47 ID:Jk9H1Q7a0
ん?int, longなら、[result intValue], [result inttegerValue] でええがな。
NSStringリファレンスを見てみ。Getting Numeric Values って項目があるっしょ。
251名称未設定:2009/06/17(水) 20:14:32 ID:Jk9H1Q7a0
うわっ…ごめん、さっきのは無しにして下さい。勘違いしてた。
252名称未設定:2009/06/18(木) 00:52:27 ID:Nv8LVQiH0
コマンドラインツール内でCocoaを使用していて、エラー出力にNSErrorを用いています。
通常のCocoaアプリケーションをローカライズしている場合、NSErrorの
-(NSString *)localizedDescription;でローカライズされたエラー内容が得られるのですが、
これをコマンドラインツールで行うにはどうしたら良いでしょうか?
nibやLocalizable.stringと違ってコマンドラインのバイナリ自体はXcodeからローカライズできないようです。
ツールの使用はターミナル上でなくて、NSTaskでの使用を想定しています。
ご教示よろしくお願いします。
253名称未設定:2009/06/18(木) 01:39:15 ID:WIz2V6ow0
Info.plistをexecutableに組み込む話はどっかで読んだけど、Resourceも行けるのか?
254名称未設定:2009/06/18(木) 02:04:10 ID:WIz2V6ow0
やはり -sectcreate は、info.plistだけのようだ。

Putting Info.plist Files in a Flat Executable
http://developer.apple.com/iphone/library/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigFiles.html#//apple_ref/doc/uid/20002091-102276
255名称未設定:2009/06/18(木) 03:14:13 ID:h+s7ZAu10
で、CFBundleAllowMixedLocalizations キーかな?
256名称未設定:2009/06/18(木) 04:11:19 ID:Nv8LVQiH0
うーん、どうもうまくいかないので今日は諦めてまた後で試してみます。すみません。
257名称未設定:2009/06/18(木) 05:22:21 ID:U3qjTDYa0
リファレンスを見てみるとNSErrorのlocalizedDescriptionメソッドはエラーオブジェクト
作成時に渡されたuserInfoディクショナリのNSLocalizedDescriptionKeyキーに
対応する値を返すだけみたいだけど、これは言語ローカライズとはあまり関係ないんじゃない?
Xcodeで操作するローカリゼーションに対応する方は、もしコマンドラインアプリケーションで
再現したければNSBundle/CFBundleを自前でさわる必要があると思う。
258名称未設定:2009/06/21(日) 21:33:39 ID:r57JJ9oM0
Finder上でファイルやディレクトリをコピーした時の、
半透明状態で触れないっていう状態をプログラムからも作り出せますか?
259名称未設定:2009/06/21(日) 21:41:50 ID:r57JJ9oM0
補足
ファイルをコピーしたいわけではなく、半透明ロック状態を作り出せるのかという質問です。
260名称未設定:2009/06/21(日) 22:21:03 ID:dgweUrN20
>>258
Safariでさえダウンロード途中は.downloadで凌いでるからなぁ。
間違って開かれたら自プログラム側で警告する以外ないんじゃない?
261名称未設定:2009/06/21(日) 23:40:53 ID:r57JJ9oM0
>>260
.downloadはパッケージになっていて、中にダウンロード中のものを格納しているみたいですね。
パッケージだとユーザに触って欲しくない時でも開けちゃうんですけどまぁ仕方ないですかねー。
Finderのあれはハードリンクか何かでうまいことやってるのかなーと思って調べてたんですけど結局分からずじまいで、
Carbon触らないと無理な匂いがしたのでいったん諦めておきます。ありがとうございました。
262名称未設定:2009/06/22(月) 06:14:52 ID:KJHOdHBS0
処理中はユーザに触らせたくないなら"."から始まる不可視フォルダに詰めて
処理終了時にリネームあるいは移動して結果を見せれば良い。
不可視フォルダはSpotlightも無視するので、mdsが途中触って邪魔することを
防ぐ効果もある。これはSpotlight登場後の処理方法の定石
263名称未設定:2009/06/22(月) 06:35:27 ID:JSXuGMiDI
.noindexつけないとSpotlight動くだろ
264名称未設定:2009/06/22(月) 07:10:51 ID:KJHOdHBS0
>>263
Technical Q&A QA1497
FSDeleteObject fails with fBsyErr, sometimes
http://developer.apple.com/qa/qa2006/qa1497.html
265名称未設定:2009/06/22(月) 07:36:21 ID:F9qIMO/W0
ユーザに触らせたくないけど中身がどのように変化していってるかは見せたい。
という妙な事をしたかったので不可視フォルダは考えてませんでした。
Finderのフォルダコピーの挙動ならファイルサイズの変化が見える。
Safariのダウンロードパッケージ式だとファイルサイズの変化も見える上、中身のファイル構造も見せれる、でもファイルに触れちゃう。
ということでFinderの挙動を真似したかったのですが、上記にも書いた通り深そうなところを触らないといけない気がするので
結局ディレクトリを作ってロックかけて処理が終わったらロック解除みたいな感じにしました。
>>264
この情報もおもしろそうなので読ませていただきます。ありがとうございます。
266名称未設定:2009/06/22(月) 16:51:22 ID:POdpYeKu0
>>265
ファインダーはあれはファイルシステムに特殊なことをやっているのが
表示されているというよりは、ファインダー自身がコピー中だというのを
知っているので単にあのように表示しているだけなんじゃないかと
勝手に思っていますが、どうなんでしょうね?
267名称未設定:2009/06/22(月) 19:59:08 ID:9D40e7Ew0
>>265
フォルダっぽく見えるけど実はフォルダではないファイル作っとけばいいんじゃね?
自分のアプリに関連付けしとけば、開こうとしたときに警告も出せる。
268名称未設定:2009/06/23(火) 06:42:50 ID:Tqmm0C0F0
Finder.hを見れば解るが、ダウンロード進行をアイコン変化で示す様な物を
作りたい場合は、kFirstMagicBusyFiletypeからkLastMagicBusyFiletypeの
ファイルタイプを使ってアイコンを割り当てておけば良い。
これらのファイルを触ろうとするとFinderは警告を出す。
iCabはこの実装を使っているので参考になる。
269名称未設定:2009/06/23(火) 09:06:39 ID:lQB3WwPC0
>>268
おお、なるほど
270名称未設定:2009/06/23(火) 16:33:50 ID:BhDLKHlk0
新しい Interface Builder の Library は下の絞り込みサーチボックスに入力したら
絞り込み結果が Core Animation らしき動きをしますが、
こういうビューは自作するしかないのでしょうか。
例えば通常の NSTableView で行を絞り込むときにこのようなエフェクトをかけるというのは
どこから手を付けたらいいのでしょうか。
271名称未設定:2009/06/23(火) 23:03:44 ID:kA+F9T830
NSCollectionView
272名称未設定:2009/06/24(水) 01:03:21 ID:dCQzw8zo0
>>268
まだ試していませんが、非情に有益な情報ありがとうございます。
273名称未設定:2009/06/24(水) 13:18:06 ID:VQSLQrnn0
>非情に有益
......
274名称未設定:2009/06/24(水) 13:21:46 ID:TQGvf9Hx0
ああ、無情・・・
275名称未設定:2009/06/24(水) 13:48:53 ID:0enaCFFq0
まあまあ。
276名称未設定:2009/06/24(水) 16:31:20 ID:QicBPAPV0
北斗有情断迅拳!
277名称未設定:2009/06/24(水) 16:59:03 ID:EWoHgecL0
>>271
ありがとうございました。できました。
278名称未設定:2009/06/29(月) 11:43:10 ID:6XwWsecp0
NSTextView において,改行コードの場所に改行マークを表示させるにはどうすればよいでしょうか?
279名称未設定:2009/06/29(月) 17:19:18 ID:ps9LiOQA0
>>278
¥u21a9
280名称未設定:2009/06/29(月) 20:03:03 ID:kXQ6aG620
NSLayoutManger のサブクラスをつくって、そこで
- (void)drawGlyphsForGlyphRange:(NSRange)glyphRange atPoint:(NSPoint)containerOrigin
で描く。ググればサンプルコードが出てくるかも
281名称未設定:2009/06/30(火) 06:28:32 ID:QWROwNq30
>>279
改行の記号はU+23CEだお
282名称未設定:2009/06/30(火) 11:31:38 ID:00gk40Nv0
人それぞれやがな...
283名称未設定:2009/07/05(日) 14:47:25 ID:ECidSkr40
NSCollectionViewでアイコン表示の時のFinderみたいなアプリを作りたいんですが
アイコンをダブルクリックしてファイルを開かせる方法が分かりません
俺はいったいどうすればいいんですか
284名称未設定:2009/07/05(日) 14:55:39 ID:SpwZwd3J0
解説を読み漁れ
285名称未設定:2009/07/09(木) 09:40:45 ID:DXORXcdZ0
info.plistのDocument typesの仕様ってLeopardで変わった?
XcodeのSDKを10.4uベースから10.5ベースに変更したら
アプリとファイルの対応がおかしくなった。
286名称未設定:2009/07/09(木) 13:31:26 ID:RnNJ1e0N0
>>285
そんな話は聞かんな。lsregister で Launch Service データベースをリセットしてみたら?
287名称未設定:2009/07/09(木) 13:48:43 ID:DXORXcdZ0
いろいろ調べてたんだが、DocumentControllerの
- (id)makeDocumentWithContentsOfFile:ofType:をオーバーライドして、
docTypeを見てみるとdocTypeではなくてなぜかUTIが渡されてる。
Xcodeは3.1.3。

どうなってるの?
288名称未設定:2009/07/09(木) 14:29:19 ID:RnNJ1e0N0
>>287
http://developer.apple.com/ReleaseNotes/Cocoa/AppKit.html#UTIs
によると、10.5 SDK からは ofType: には UTI かこれまで通りのか
どっちかが渡ってくるようになったと書いてました。
10.4 SDK 相手にリンクしておくとこれまでどおりらしいです。
289名称未設定:2009/07/09(木) 14:37:42 ID:DXORXcdZ0
>>288
ありがとう。そういうことだったのか・・・docTypeは廃止されるのかもしれないね。
290名称未設定:2009/07/10(金) 10:28:47 ID:wX1ZoeE30
>>283はできるようになったんですが
NSCollectionviewの内容の部分でどうしても右クリックを検知できません
どうすればいいですか
291名称未設定:2009/07/10(金) 10:57:57 ID:QdLwS0VW0
あなたが何を行ったのか我々にはわかりません
-[NSResponder rightMouseDown:]
-[NSView menuForEvent:]
あたりは試しましたか?
292名称未設定:2009/07/10(金) 16:34:12 ID:XzqQhCOU0
>>291
もしよかったら単純化したサンプルコードをうpしたので見て下さい
http://pulsewidth.web.fc2.com/test/collectiontest2.zip

項目を選択して開いたりするために
NSCollectionViewのサブクラスを作ってそこでmouseDownをオーバーライドしました。
左クリックの方はうまくいったのですが
右クリックの方は項目がない部分でしか反応してくれません。

サンプルで言うと、ABCの部分は右クリックしても
コンソールにrightClickと表示されない(左クリックは表示される)という部分で悩んでいます。
何か助言をいただけるとうれしいです。
293名称未設定:2009/07/10(金) 22:26:33 ID:1I/JsT700
セルになってる部分がNSViewっぽいんだけど、(NSLog(@"%@",[self subviews]); で確認
そいつがrightMouseDown:を遮ってるのが問題なんじゃないかね。
294名称未設定:2009/07/10(金) 22:51:39 ID:z5x/LYIv0
ソース見てないけどアイコン表示してるんだったら右クリックを受けてるのは誰?NSImageViewでしょ。でなければそいつが乗ってるNSView。
295名称未設定:2009/07/11(土) 07:12:52 ID:VDOe5QOw0
>>293,294
ありがとうございます。サブビューをもう1度よく調べたらうまくいきました!

NSViewのサブビューとして同じ大きさのNSBoxを置いて
これの透明度を使って選択状態を表現してたんですがこのNSBoxが遮っていたようです。
このNSBoxのrightMouseDownをオーバーライドすることは試していたんですが反応がなくて諦めてました。
ただ今回もう1度よく調べたらNSBoxは右クリックに対して当たり判定が枠の線だけにものすごくシビアにあるらしく
中身に対しては無反応で遮ってしまうのが分かったので
NSBoxのhitTestをオーバーライドしてクリックを無視させて
NSViewのrightMouseDownをオーバーライドしたらうまくいきました!
NSCollectionViewに原因があるんじゃないかと考えていたんですが
NSBoxの右クリックと左クリックに対する反応の違いが原因だったようです。
296名称未設定:2009/07/13(月) 21:28:44 ID:isap/7EM0
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【UOT-100】24時間ワンセグ野郎 Part03【LOG-J200】 [DTV]
【Cocoa】ミラ・ココア【ジーノ後継?】 [軽自動車]
297名称未設定:2009/07/14(火) 02:41:58 ID:omGv8hdqi
ヒレガス本の3rd editionを注文したんだけど、邦訳されてる最初の版にしか載ってない内容ってありますか?
298名称未設定:2009/07/14(火) 12:31:32 ID:wQnDP7aX0
あるけどまあ気にするな。ヒレガス本ひととおり読み終わったら、
アップルのサイト + ネットの情報で何でも出来るようになります。
299名称未設定:2009/07/14(火) 12:46:40 ID:yADLXsqf0
いや、そうでもないよ
300名称未設定:2009/07/14(火) 22:54:17 ID:omGv8hdqi
Thx
とりあえず3rd edition読んでから考えます
301名称未設定:2009/07/15(水) 16:48:22 ID:inB2ofWfi
NSInteger five = 5;
NSNumber *num = [[NSNumber alloc] initWithInteger:five];
NSLog(@"num:%d", [num retainCount]);

NSNumberのretainCountが初期化直後なのに2になっているはなぜでしょう?
allocしているだけなので、1になると思うのですが。。
302名称未設定:2009/07/15(水) 16:55:14 ID:3wnfmNrX0
>>301
同じ数字のNSNumberインスタンスを大量に生成するのも無駄なので、よく使われるものは同じ数字なら共有インスタンスにするとか
いろいろしているらしい。
自分の管理下で収支が合いさえすればいい。
303名称未設定:2009/07/15(水) 17:01:43 ID:3wnfmNrX0
304名称未設定:2009/07/15(水) 17:06:29 ID:inB2ofWfi
>>302-303
有難うございます!
305名称未設定:2009/07/15(水) 21:49:02 ID:aC4Xzmmp0
考え方としてはretainCountがいくつかではなくて、自分が1増やしていたらちゃんと1減らしてやるという原則に従えばいいだけだったりする
306名称未設定:2009/07/17(金) 20:49:31 ID:P64/FHL90
大学でココアをやったけど、社会人になるとあれはなんだったんだ?っていうぐらい接点がなくなってしまった。

いつかはこんなプログラミングの存在すら忘れてしまうのだろうか?
それが悲しい。
307名称未設定:2009/07/17(金) 21:35:36 ID:vIJN1zln0
NeXTの登場以来ずーっとプログラマが増えてきてるよ
最近は特にね
これからもどんどん増えるだろうね
308名称未設定:2009/07/17(金) 21:43:34 ID:zlZXLbkbi
中高でプログラミング教えればいいのに
309名称未設定:2009/07/17(金) 22:04:17 ID:/5Tw7bT80
確かに。今時のサラリーマンは大量の情報を処理する必要があるから、
インタプリタ系の言語Ruby / Python / VBAらあたりが使えると便利だと
思う。
310名称未設定:2009/07/17(金) 22:34:07 ID:t5CHQA080
部活とかでやってるとこは有るけどねぇ
さすがに授業には組み込まないだろw
311名称未設定:2009/07/17(金) 22:46:37 ID:q/0NLhsX0
大学なら最近はJavaとか教えてるっしょ
312名称未設定:2009/07/17(金) 22:55:28 ID:50EsSyD+P
とっくに中高でプログラミングは教えてると思うけど
これってマジレスしちゃだめな流れなの?
313名称未設定:2009/07/17(金) 22:57:08 ID:P64/FHL90
中高でプログラミング教えるぐらいなら数学やったほうがマシ。
意味ねーもん。
314名称未設定:2009/07/17(金) 23:08:21 ID:/5Tw7bT80
>>312
教科書には載ってたけど習わなかったよ。
触りだけで何の役に立つのかも分からん内容だったけど。
315名称未設定:2009/07/17(金) 23:16:04 ID:Sn+Kh+7f0
数学の方が意味ないと思っているのは俺だけじゃないはず。
相変わらず立方根だ方程式だ集合だなんだが
日常生活の何処で役に立っているのか謎。
雑学番組で得意げになれるだけだろあんなもの
316名称未設定:2009/07/17(金) 23:17:57 ID:mcniDOox0
>>313
君にとっては意味が無かったようで残念だね
残念なのは頭の方かも知れないけど
317名称未設定:2009/07/17(金) 23:38:52 ID:YZ9+dese0
>>316
なんでそこまで言うかな。
普通の学生にプログラミングなんて無意味でしょ。
318名称未設定:2009/07/17(金) 23:43:53 ID:FDjDpByP0
現役工房の漏れがきましたよっと

よっぽど熱心な先生だったら情報の授業で教えるだろうけど、情報専門の先生なんて殆んど居なくて数学なり理科なりの先生が片手間で教えてるのが現状だからなぁ……
数学には未だに BASIC の書き方が載ってて、受験にも『あてはまる行番号を書きなさい』とかGOTO書かせる問題が出てる

まぁ数学の先生でBASICなんて今更教えてる酔狂なやつは居ないだろうし、まあ、こんなプログラミングなら教えても全く意味はないな
319名称未設定:2009/07/17(金) 23:44:04 ID:zlZXLbkbi
>>312
やってないよ
くだらんWordの使い方みたいなのはするけどね

>>313
そりゃ正論だけど、要はバランスだと思うのよ

>>315
まさかあなたプログラマじゃぁないよね?w
320名称未設定:2009/07/17(金) 23:49:16 ID:P64/FHL90
>>315
日常生活では確かに必要ないよ。

でもそういう話をしているわけではない。
プログラムなんて必要になったら必要なプログラムを学べばいい。
所詮道具なんだから。


321名称未設定:2009/07/18(土) 00:12:01 ID:LojOy0Ya0
>> 315
日常生活で役に立つことを学んでる訳じゃないんだから、意味ないというのはおかしい。
おまえを取り巻く世界は目に見えて触れられるものだけではないことを知った方がいい。
322名称未設定:2009/07/18(土) 00:40:34 ID:MaM78w7y0
簡単に覚えられるようなら新人教育はもっと楽だろうなあ…はぁ…
323名称未設定:2009/07/18(土) 00:51:48 ID:KdpE4OpI0
>>320,321
それそのまんま数学でも当てはまると思うがおまいらはバカか?
数学だって必要なときだけ学べばいいだろ。
今年もそろそろ、使いもしない数学のせいで補習になる連中が湧いてくるなw
324名称未設定:2009/07/18(土) 01:12:02 ID:UlPdeWJ90
数学は必要な時に学べるものじゃないよ。
一つ一つの積み重ね。
ましてや物理的な現象を数学で定義できるようになるにわね。
325名称未設定:2009/07/18(土) 01:23:54 ID:UlPdeWJ90
あともう一つ言わせてもらうなら、
プログラミングって所詮他人の土俵なんだよね。

ルールは企業が勝手に決められる。
僕はよくエクセル使ってグラフを描くけど、その際に必要なAPIはググればいくらでも出てくる。
ココアでプログラム作成していた時もそうだったけど。
326名称未設定:2009/07/18(土) 03:08:16 ID:eaXPUYTF0
>>319
情報系の授業があるところはやる場合もある。CかVB。
327名称未設定:2009/07/18(土) 07:13:44 ID:0ENtd6OP0
たいていの仕事にパソコンが必須の世の中で、プログラムの触りを学んでおくことは有意義だと思うんだが。
何かを作れるようにではなくて、どのようにして動いているかを知るということで。
エクセルやなんかでぐぐってソースを流用する際にも、それを分けも分からず使うのと、少しでも理解しているのとでは違うと思うし。
応用力っていうか、仕事のできるできないに少なからず結びついて行くと思うんだよなぁ。
プログラマにとってはソフトなんて触ってれば使えるようになるけど、世の中にワードやエクセルの本があれだけ溢れてて、
勉強しないとソフトを使えるようにならない一般職の人を見てると、Cの触りでもやってたら違ったんだろうなと思う。

あと学校での勉強に関して、学生みんなにとってまったく無駄でないことだけを勉強させれるかってそれは無理だし違うよね。
まだ可能性のたくさんある人達にいろんなものに触れさせておくのは大事。中高より専門性の高い大学ですらそう思う。
それに将来直接的に仕事で使うことしか学ばなかったらor学べなかったら視野が狭くなるのでは?そもそも望んだ職につけるかも分からないし選択の幅を広げておくのは学校としては当然のことでしょう。
一見専門外の科目で無駄に思える基礎教養、一般教養も学生の視野と将来性を考えるとやらせておいた方がいい、と社会人になってから気付くと思います。
後半かなり個人的な感想です。朝から長文スマソ。
328名称未設定:2009/07/18(土) 07:23:45 ID:0ENtd6OP0
あれ、、俺後半誰に向かって話してるんだろう。
329名称未設定:2009/07/18(土) 08:55:13 ID:WDKPyi4E0
>> 323
おめでたいな。
必要なときに学ぶんじゃあ、たりないから教育課程に組み込まれてるんだろうが。
お前は行列計算が必要になったら、中一の内容からやるんか?
330名称未設定:2009/07/18(土) 13:05:54 ID:IRO7PrC/0
学校の勉強は必要だから、と云うのと、選択肢を提示するというのの二つの面があるんだからそれでいいじゃまいか

数学嫌いなら学校出てから何もやらなきゃいいだけの話しだし、プログラミングが無駄なら他人が作ったソフトを勝手に使ってればいいだけ

数学にせよプログラミングにせよ、論理的な考え方を身に付けると云う点では良いものだと思うけどな……まぁそれでも論理力を身に付けられなかった人たちがわんさか居るみたいだが……
331名称未設定:2009/07/18(土) 14:37:29 ID:Ev3gT3rj0
スレが伸びてると思ったらコレか。
Cocoaの話しようZE
332名称未設定:2009/07/18(土) 14:47:41 ID:KdpE4OpI0
>>329
それで十分。
プログラミングだって1年やそこらでまともなプログラムが組めると思うなよ。
333名称未設定:2009/07/18(土) 20:35:50 ID:NF5M8AGP0
数少ない機会をみすみす見逃す奴らの多いスレですね。
知識は必要になってから学んでいたんではもう遅いんだよ。
ある機会にそのとき必要な知識を既に持っていなければその機会を活かせるときはそれで終わりなんだよ。
334名称未設定:2009/07/18(土) 20:45:51 ID:c/cbzblK0
まあ若い頃の方が吸収早いしね。記憶するのに何の苦労もない。
いったん吸収して必要ないなら忘れればいい。
335名称未設定:2009/07/18(土) 20:46:25 ID:AYKMnLOo0
どうしてこうプログラムやってる奴はアタマがカタいんだろうね。
どのレスも一理あるがそれだけじゃない場合っていうのがあるのに。
336名称未設定:2009/07/18(土) 20:49:38 ID:c/cbzblK0
>>335
さあ自分の言葉を自分自身に適用する作業に戻るんだ
337名称未設定:2009/07/19(日) 13:16:00 ID:6nQyz7kFO
>>336
つまり、

1 どのレスも一理あるが例外もある
2 >>335もそのレスの一つである
3 従って >>335 は一理あるが例外もある
4 『どのレスも一理あるが例外もある』も一理あるが例外もある
5 ゆえに『一理ないか又は例外がない』レスが存在する

ということか。なるほど。つまり335は一理ないか又は例外がないかのどちらかなんだな。
338名称未設定:2009/07/19(日) 15:53:26 ID:LZopbPnM0
煽られたからってくだらん話で引っ張んなよ
339名称未設定:2009/07/19(日) 15:57:57 ID:OgS132xy0
↑おまえもな
俺もな
↓おまえもな
340名称未設定:2009/07/19(日) 17:00:05 ID:LZopbPnM0
しつけえwしかも負け惜しみのような予防線
341名称未設定:2009/07/19(日) 18:11:20 ID:SsIx0Lsk0
ココアどこ?わたしはだれ?
342名称未設定:2009/07/19(日) 19:21:19 ID:eX6hUb+V0
たわしは台所だよ
343名称未設定:2009/07/19(日) 22:10:43 ID:1QVelrpL0
>>254
これいいな
パッケージしてないコマンドラインやdylibにもバージョン情報が付けられる
344名称未設定:2009/07/19(日) 22:30:57 ID:FA2oZFnq0
>しつけえwしかも負け惜しみのような予防線
しつこいのはお前だけです
345名称未設定:2009/07/19(日) 23:06:55 ID:aY4HNjmP0
>>344
お前もだよ。これ以上くだらんことでスレ伸ばすな。
せっかく違う話題が出てきたのに。
346名称未設定:2009/07/19(日) 23:18:44 ID:FA2oZFnq0
>>344
そっくりそのままお前に返すよ 蒸し返すなボケ。
347名称未設定:2009/07/19(日) 23:24:07 ID:eX6hUb+V0
不毛な争いをさけるために質問投下〜


NSCollectionView をつかってあるカスタムヴューをタイル表示したいと考えてます。
これはは白と黒の二つの状態を持っていて、クリックすると切り替える事が出来る様な代物です。
これをタイル表示するだけならIBで CollectionView の設定をこちゃこちゃ弄ればできましたが、プログラムの側でこのヴューの状態を変更するにはどうすればいいんでしょうか?

それとも状態を管理するオブジェクトとヴューの実装は分けるべきなのでしょうか?その場合、CoreDataを使わないとヴューとオブジェクトの情報は共有出来ないんでしょうか?
348名称未設定:2009/07/19(日) 23:38:14 ID:aY4HNjmP0
>>346
自己レスw 恥ずかしくて今日はもう出てこれないなw

>>347
NSViewの上に色付きのNSBoxを置いて、NSCollectionViewItemのrepresentedObjectにバインドすれば
タイルそれぞれの色をプログラムから変更できるよ。
良くあるサンプルだとItemのisSelectableとNSBoxのisTransparentをバインドして選択時に色を変えるってことをやってるけどそれと同じ要領です。
349名称未設定:2009/07/19(日) 23:47:39 ID:FA2oZFnq0
>>348
そうだなあ お前のことだよね
350名称未設定:2009/07/19(日) 23:51:24 ID:jnlIFE530
全ては348の自演ってことでw
351名称未設定:2009/07/19(日) 23:55:41 ID:aY4HNjmP0
>>349
え、自分のことだろ?
お前らプログラムの話ししないなら来なくていいよ
352名称未設定:2009/07/19(日) 23:57:37 ID:JKkBJTkW0
>>349
お前もプログラム以外のレスばっかだな まあクズだからどうでもいいが
353名称未設定:2009/07/20(月) 00:00:39 ID:eIylQz5Y0
だよな>>349はクズだよな
354名称未設定:2009/07/21(火) 23:35:22 ID:dSt7wfty0
Cocoaについて質問します。
計算だけ行うファイルが作成したいのですが、色々なインスタンスで共有したい場合、
以下の2種類の方法が浮かびました。

1.計算用にインスタンスを作成して使用したいインスタンスと接続する。
2.新規に計算用ファイルを作成する。

1の方法でできる気がするんですが、何かスマート(正規)じゃない気がして、
2の場合、ファイル作成後の方法アクセス方法がわかりません。

すごく初歩的な質問ですがどうかよろしくお願いします。
355名称未設定:2009/07/21(火) 23:41:08 ID:oBOOhOhO0
日本語でおk
356名称未設定:2009/07/21(火) 23:56:28 ID:+fLTn0Dr0
>>355
なんだそのID
人のことをなめてるのか
357名称未設定:2009/07/22(水) 00:05:22 ID:9iTeurL90
>>354
とても初歩的な質問とは言えないな。
少なくとも俺には何て答えてあげれば良いか分からない。
358名称未設定:2009/07/22(水) 00:38:33 ID:Q+qrNsC00
>>355
初めましてオブーホホさん
359名称未設定:2009/07/22(水) 01:18:27 ID:J+1HLFVf0
>>356
初めましてフリチン踊ろさん
360名称未設定:2009/07/22(水) 01:20:26 ID:Q+qrNsC00
オーじゃなくてゼロだぞ
361名称未設定:2009/07/22(水) 01:51:59 ID:FbmXO7Oe0
>>354
エスパーしてみよう

複数のプログラムで共有するサブプログラムを作成したいのですが、次の二つの方法が浮かびました。
1 同じソースをそれぞれのプログラムに、includeしてbuildする。
2 ライブラリを作成してリンクする。

1の方法でできる気がするんですが、何かスマート(正規)じゃない気がして、
2の場合、ライブラリ作成方法も、リンク方法もさっぱりわかりません。

ではないかと。
返答は俺の手にあまるのでヨロ
362名称未設定:2009/07/22(水) 02:30:58 ID:fs7x4U5o0
インスタンスとあるから
複数のクラスで同じロジックを使いたいってことじゃないかとエスパー。
1.委譲パターン
2.両方にinclude
なんかな。
内容によるけど、自分ならクラス構成を見直すかCの関数にする。

てゆうかファイルってなによ?ソースコード?
363名称未設定:2009/07/22(水) 12:07:13 ID:O0ZC9csxi
「計算だけ行なうファイル」なんだから、ファイルマネージャで
計算式が書かれたファイルを作成してそこで計算したいんだよ。
で、計算が終わったらゴミ箱に自動で捨てられないかと。
364354:2009/07/22(水) 15:21:19 ID:0rZU13D20
質問の内容が不明瞭すぎでした。ごめんなさい。

内容としては>>362さんのESPでほぼあっており、同プログラム内の複数の
クラスから計算用ファイル内(ソースコード)のメソッドを使用したい場合、
どうするのが一般的なのかな?と思って質問させて頂きました。

まだプログラミング自体を初めて間もなく、Inteface Builderからの
ファイル作成しか行ったことが無いため、基本からじっくり覚える必要が
ありそうです...お騒がせして申し訳ありませんでした。
365名称未設定:2009/07/22(水) 16:30:03 ID:gDixRqya0
>>364
初学者なら、やさしいC(評判がいい)とオブジェクト指向を本で勉強すれば良いよ。
Obj-C本でオブジェクト指向を丁寧に解説しているのは知る限り無いから、Javaなり
C++なりで。他言語でも概念さえ理解すれば良いので、プログラム組めなくても良い。
>16 に書籍リストがあるから参考に。俺は、やさしいJava(やさしいCと同じ著者)で
何となくつかんだ。計算用ファイル?の使い方は、C(import、関数呼び出し)なのか、
Obj-Cなのか(import、インスタンス化してメソッド呼び出し)で違うし。
まずは基本と用語を押さえなされ。
366名称未設定:2009/07/22(水) 16:34:19 ID:zBKu16TLi
特にインスタンス化する必要がなければ、カテゴリーを使う手もあるよ。
手続き型プログラミングで言う共通関数見たいな感じ。
367名称未設定:2009/07/22(水) 16:36:29 ID:vkUc5ogW0
ちょっとした文字列処理のメソッドはNSStringのカテゴリにするね
368名称未設定:2009/07/22(水) 16:44:43 ID:wGN9NjDE0
純粋に計算機能だけなら C の関数で良いんじゃない
369名称未設定:2009/07/23(木) 08:06:54 ID:8j1ZYujX0
NSButtonが押されたときの挙動をオプションキーが押されているときだけ通常と違うものにしようとしていて
動作の振り分けは[[NSApp currentEvent] modifierFlags]で出来るようになったのですが、キーの状態に応じて
ボタンのタイトルも変えることはできるでしょうか?

キーダウンイベントを見てオプションキーの状態に応じてタイトルを変えればいいのかと思ったのですが、この
イベントの捕まえ方がよく分かりません。
370名称未設定:2009/07/23(木) 08:24:55 ID:8j1ZYujX0
自己解決しました。- (void)flagsChanged:(NSEvent *)theEvent を使えばいいんですね。

CocoaのAPIって名前がかなり個性的な気がする...
371名称未設定:2009/07/23(木) 13:40:30 ID:jFn9LmdF0
NeXTから続く由緒正しい命名だよ
372名称未設定:2009/07/23(木) 13:59:54 ID:cf1GDGQm0
メソッド名が途中で区切れるから大分違うよね
まあ慣れるとこれがあるからこれもあるだろうなって大体見当がつくけど
373名称未設定:2009/07/23(木) 20:51:52 ID:agfiAmzl0
NSOpenPanelでコンピュータフォルダを選択する(表示しているディレクトリをそこにする)方法はないでしょうか?
374名称未設定:2009/07/23(木) 21:16:36 ID:YFVvJYY7i
引数で指定できるはず。
375名称未設定:2009/07/23(木) 21:22:30 ID:m3avjdT60
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel runModalForDirectory:NSOpenStepRootDirectory() file:nil];
でおk
通常@"/"でもいいかも知れないけど。
ちなみにどういうことをしたいんでしょう?自分にはこれが必要な場面が思いつかないので完全に興味で聞いてますw
376名称未設定:2009/07/23(木) 23:38:14 ID:36jctsky0
試してみましたが、NSOpenStepRootDirectory(@"/"と同じ)では起動ディスクの選択になります。
表示させたいのは起動ディスクの1つ上、command+shift+Cで移動するところです。
仮想的なディレクトリなんでやっぱ無理ですかね。

ちなみに@"/.."でも起動ディスク。nilだと書類フォルダでした。
何をしてるかと言うと、NSOpenPanelを利用してごく簡単なファイルブラウザを作ってます。
377名称未設定:2009/07/24(金) 00:40:49 ID:+ULXtVNo0
NSOpenPanelでコンピュータのところ選択してdirectory読んでみてもnilしか返ってこないね。
なんか特殊なパスでもあればいいんだけど。
378名称未設定:2009/07/24(金) 04:29:16 ID:2Dhu7bro0
>>376
現在のボリュームのRootを取りたいのだと勘違いしてました。
ということで調べたけど分からなかったのでクソ強引な方法で無理矢理やってみました。

NSOpenPanel *openPanel = [NSOpenPanel openPanel];
NSEvent *event = [NSEvent keyEventWithType:NSKeyDown
location:NSZeroPoint
modifierFlags:NSShiftKeyMask | NSCommandKeyMask
timestamp:0
windowNumber:[openPanel windowNumber]
context:[NSGraphicsContext currentContext]
characters:@"c"
charactersIgnoringModifiers:@"C"
isARepeat:NO
keyCode:8];
[openPanel performSelectorOnMainThread:@selector(performKeyEquivalent:) withObject:event waitUntilDone:NO];
[openPanel runModal];

Panelのサブクラスを作ればディレクトリの移動のタイミングはもう少しきちんとできると思います。
というか正攻法はないもんですかね。もしくはプライベートメソッドのメソッド名を調べた方が賢明かも知れません。
379名称未設定:2009/07/24(金) 19:12:52 ID:ndhArHaA0
コンピュータのパスは、/Volumes
380名称未設定:2009/07/24(金) 20:32:17 ID:oPQBlj+w0
/Volumesは別物
381名称未設定:2009/07/24(金) 22:42:48 ID:2Dhu7bro0
>>379
それは単にボリューム
質問に上がってたのはFinderのサイドバーのデバイス>コンピュータ
382名称未設定:2009/07/25(土) 20:27:13 ID:GHiQoSyC0
NSOpenGLViewにテキストイメージを描画したいのですが、
描画した領域が真っ黒になってうまくいきません。

以下ソースですが、
NSImageにテキストを描画してNSBitmapImageRep*を経由して
データをglDrawPixels()に渡しています。

ソースはいろいろなHPを参考にしました。
詳しい方、よろしければご指南のほど、お願いいたします。
(その1)
NSTextStorage* textStorage;
NSTextContainer* textContainer;
NSLayoutManager* layoutManager;

textStorage = [[NSTextStorage alloc] initWithString:@"Hello"];
NSSize viewSize = [self bounds].size;
textContainer = [[NSTextContainer alloc] initWithContainerSize:viewSize];
layoutManager = [[NSLayoutManager alloc] init];
[textStorage addLayoutManager:layoutManager];
[layoutManager addTextContainer:textContainer];

NSRange range = [layoutManager glyphRangeForTextContainer:textContainer];
NSPoint point = NSMakePoint(0.0, 0.0);
383名称未設定:2009/07/25(土) 20:27:59 ID:GHiQoSyC0
 (その2) 

  NSImage* image;
NSSize size;
size.width = 50;
size.height= 30;
image = [[NSImage alloc] initWithSize:size];
[image lockFocus];
[layoutManager drawGlyphsForGlyphRange:range atPoint:point];
[image unlockFocus];

NSBitmapImageRep* rep;
rep = [[NSBitmapImageRep alloc ] initWithData:[image TIFFRepresentation]];
glDrawPixels( 50, 30, GL_RGBA, GL_UNSIGNED_BYTE, [rep bitmapData] );

[image release];
[rep release];

[textContainer release];
[layoutManager release];

384名称未設定:2009/07/25(土) 22:32:42 ID:r65MHccJ0
>>382
順番としてまずglDrawPixelsだけ試してちゃんと出来たんですよね?

だとすると[rep bitmapData]の中身が適切にできてないんでしょう。
多分合ってると思いますが、ピクセルフォーマットも気になります。

知ってるかもだけど、レイアウトとか関係なければNSStringの-drawInRectとかの方が楽だよ。
385名称未設定:2009/07/26(日) 19:02:28 ID:TYBX3STi0
>>384
レスありがとうございます。
(亀レス申し訳ありません。)


>多分合ってると思いますが、ピクセルフォーマットも気になります。
glDrawPixelsに指定しているフォーマットでしょうか?
GL_RGBA, GL_UNSIGNED_BYTEについては、GL_RGBとかいろいろと
変えてみてますが、(当然と申しますか)うまくいきません。

>だとすると[rep bitmapData]の中身が適切にできてないんでしょう。
 repインスタンスを使ってPNGファイルにデータを保存したところ、
 「Hello」と保存されましたが。。。
(repインスタンスの内部データがおかしいのであれば、
 PNG形式の保存結果も変になりそうな悪寒)

とはいえ、ご指摘のように[rep bitmapData]でデータの中身がおかしい
のか、ピクセルフォーマットの指定がおかしいのかもう少し調べてみます。
 ・・・[rep bitmapData]で返るデータをダンプしてみないといけないかな。
(と殊勝な台詞を吐きつつ神降臨祈願w)


>知ってるかもだけど、レイアウトとか関係なければNSStringの-drawInRectとかの方が楽だよ。
文字データをピクセルデータにできればテクスチャとしてポリゴンに貼付けられるだろうという
目論みがありまして。。。
386名称未設定:2009/07/27(月) 14:03:57 ID:wX3dlGND0
>>385
複数行にわたる文字列を幅を変えつつかきたいとかいうのでなければ
NSLayoutManager という非常に高機能なのは使わなくても出来ますよ。
単に
[image lockFocus];
[@"Hello" drawInRect: NSMakeRect( ) ];
[image unlockFocus];
で十分です。
387382:2009/07/27(月) 19:56:41 ID:R7rh2VS40
>>386
 ナルホド。NSLayoutManagerの役割をよくわからずに使ってました。
 丁寧なご説明ありがとうございます。
 そもそも、
 >>384の”知ってるかもだけど、レイアウトとか関係なければ
 NSStringの-drawInRectとかの方が楽だよ。”
 に対して、>>385での私の返答は変ですね。(何を勘違いしていたのだろうか・・・)
388384:2009/07/28(火) 00:51:17 ID:MxymMuHb0
>>385
ちょっと試してみました。

>glDrawPixelsに指定しているフォーマットでしょうか?
どちらがではなく、まず[rep bitmapData]のフォーマットを調べて、それをglDrawPixelsに設定するのが手順でしょう。
とりあえず[rep samplesPerPixel]が3ならRGB、4ならRGBAで問題ないようです。

後はlockFocusの所を次のように変更して大丈夫そうです。
[image lockFocus];
[[NSColor whiteColor] set];
NSRect theRect = {0,0, size:size};
NSRectFill(theRect);
[[NSColor blackColor] set];
[layoutManager drawGlyphsForGlyphRange:range atPoint:point];
[image unlockFocus];
389384:2009/07/28(火) 01:06:26 ID:MxymMuHb0
>>385
あ、私もちょっと勘違い。

>>385,386のコードでも問題ないです。
repがalpha込みのイメージだったので、黒背景の上に描写しても見えなかったんだと思います。
390384:2009/07/28(火) 01:10:36 ID:MxymMuHb0
訂正。

最初の>>382-383のコードでも問題ないです。
repがalpha込みのイメージだったので、黒背景の上に描写しても見えなかったんだと思います。
391382:2009/07/28(火) 21:25:42 ID:0XCRQfhW0
>>387-390
  ありがとうございます!!
392147:2009/08/02(日) 13:01:43 ID:YoJVpRhf0
ことえりや ATOK で入力中 (変換前) や変換中の文字色や背景色を変更する Cocoa の
クラス or メソッドはないのでしょうか。
IM ことえり 文字色 入力中 などでググってみたのですが、適切なエントリを
見つけられなくて... ご存じの方がいらっしゃいましたら、ご教示下さい。
393名称未設定:2009/08/02(日) 15:36:40 ID:xJPaeZkv0
あるとすればimkitかな?自信なし。
394名称未設定:2009/08/03(月) 21:14:41 ID:O5tmi7FS0
>>392
フィールドエディター(NSTextView)をカスタマイズすればOK
395名称未設定:2009/08/04(火) 15:18:51 ID:Bgqz1Pdz0
1ビット深度モノクロBMPを作りたいのですが、

NSBitmapImageRep* rep = [[[NSBitmapImageRep alloc] initWithBitmapDataPlanes: nil
 pixelsWide: width pixelsHigh: height bitsPerSample: 1 samplesPerPixel: 1 hasAlpha: NO isPlanar: NO
 colorSpaceName: NSCalibratedWhiteColorSpace bytesPerRow: 0 bitsPerPixel: 0] autorelease];

として作った bitmapは
 [rep TIFFRepresentation]
なら NSDataを取得&保存可能なんですが、
 [rep representationUsingType: NSBMPFileType properties: nil];
だとエラー↓が出ます。

<Error>: CGImageDestinationAddImage image could not be converted to destination format.
<Error>: CGImageDestinationFinalize image destination does not have enough images
CGImageDestinationFinalize failed for output type 'com.microsoft.bmp'

NSBMPFileType型で NSDataが欲しいんですが、何か足りないんでしょうか?
396名称未設定:2009/08/04(火) 16:20:49 ID:oBGTsy0qi
マイクロソフトのフォーマットだからアクチベーションと
セキュリティアップデートが必要なんじゃね?
397名称未設定:2009/08/04(火) 17:45:45 ID:Bgqz1Pdz0
>>396
どうもです。
そ、それは Cocoaデフォじゃできないって意味でしょうか...?
アクティベーションとセキュリティアップデートってのは何をすれば良いんでしょうか。
398名称未設定:2009/08/04(火) 17:54:49 ID:sKwsL4/I0
釣られてる釣られてるw

もしかしたら俺が(ryという説もあるが
399名称未設定:2009/08/04(火) 18:13:51 ID:LBGJ0uRr0
400名称未設定:2009/08/04(火) 18:49:38 ID:OEUtE+Zz0
そもそもBMPにそんなバリエーションが無かったような。
401名称未設定:2009/08/04(火) 18:50:34 ID:Bgqz1Pdz0
>>398
ちょw ハマってる人間にそれは酷というもの。。冗談通じる状態じゃないですorz
真に受けちゃってすいませんね

>>399
ありがとう。
GWorldか自分で一から作るか、か。サクっとはいかないようですね。。
402名称未設定:2009/08/05(水) 23:52:41 ID:JKB/ih1/0
たとえば、.bmpファイルをNSImageに読み込んで、そのNSImageRepからNSDataを取り出したら、どうなりますか?
403名称未設定:2009/08/07(金) 16:01:39 ID:tRv9KwYi0
1bit bmpを NSImageに読みこんだ時点で 8bitになるね

>>399にある通り、bmp生成コードの制限ですな
404名称未設定:2009/08/07(金) 20:10:30 ID:qrVkAWDF0
CFStringRef theString = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, (CFStringRef)[@"file://" stringByAppendingString: [opanel filename]], CFSTR(""));
CFURLRef downloadURL = CFURLCreateWithString(kCFAllocatorDefault, theString, NULL );
CFReadStreamRef readStream = CFReadStreamCreateWithFile(kCFAllocatorDefault, downloadURL);
CFReadStreamOpen(readStream);

NSOpenPanel で開いたローカルファイルを CFReadStreamOpen したいのですが、
フォルダかファイル名に2バイト文字が入ると
CFReadStreamOpen した時点で EXC_BAD_ACCESS になります。
何かヒントをいただけませんでしょうか。
405名称未設定:2009/08/07(金) 20:27:20 ID:cLVHr6eV0
>>404
ファイルパスからURLを作るときはCFURLCreateWithFileSystemPathのような専用の関数かメソッドを使う。
406404:2009/08/07(金) 22:52:25 ID:Rq3pRtI/0
>>405
おかげさまで解決しました、ありがとうございました!
407名称未設定:2009/08/09(日) 13:54:08 ID:pqjX0Hn30
あるアプリから別のアプリにメッセージを送りたいんだが、
調べた感じだとNSWorkspaceの通知センターに送ればいいということなんだが、うまくいかない。
やりかた間違ってるのか、もしくは別の方法あるかな?


受け取り側
NSNotificationCenter *notCenter = [[NSWorkspace sharedWorkspace] notificationCenter];
[ notCenter addObserver : self
selector : @selector(receive:)
name : @"myAppAddMessage"
object : nil ];

送信側
NSNotificationCenter *notCenter = [[NSWorkspace sharedWorkspace] notificationCenter];
[ notCenter postNotificationName : @"myAppAddMessage"
object : self ];
408名称未設定:2009/08/09(日) 14:10:12 ID:UvdtatgO0
>>407
NSWorkspaceのNotificationCenterはNSWorkspaceからのNotificationを受け取るためのもの
(スリープから復帰したとかそんなの)で、他のアプリケーションのNotificationを受け取るのは
NSDistributedNotificationCenterじゃなかったかな。使ったことないけど。
あとNSDistributedNotificationCenterでは通知オブジェクトにはNSString以外使えない。
409407:2009/08/09(日) 15:09:06 ID:pqjX0Hn30
>>408
試してみたらできました
ありがとうございます
せっかくなので修正コードを

受信側
NSDistributedNotificationCenter *notCenter = [ NSDistributedNotificationCenter defaultCenter ];
[ notCenter addObserver : self
selector : @selector(receive:)
name : @"myAppAddMessage"
object : nil ];

送信側
NSDistributedNotificationCenter *notCenter = [ NSDistributedNotificationCenter defaultCenter ];
[ notCenter postNotificationName : @"myAppAddMessage"
object : @"test message" ];
410名称未設定:2009/08/10(月) 02:43:09 ID:no51mhYR0
>>407-409
偶然、同じようなことを調べてて助かったよ。さんくす。
411名称未設定:2009/08/11(火) 15:08:43 ID:+aKHmRkj0
CIImageって実体はGPUのメモリ上にあるんでしょうか。
412名称未設定:2009/08/11(火) 16:20:51 ID:vdnvvxv+0
実体って何?
413名称未設定:2009/08/11(火) 16:37:01 ID:t19uQ7CVi
冷却ファンの後ろのほうにあるんじゃね?
414名称未設定:2009/08/11(火) 20:29:30 ID:/ur2/1WL0
>>411
OpenGLのテクスチャを扱うプロクシオブジェクトと言えばいいのかな。

CGはQuartzでメインメモリ上にデータもオブジェクトもある。
CIはOpenGLでデータはGPUメモリ上、メインメモリにOpenGLの
構造体とプロクシオブジェクトがある。

CGContextがメインメモリ上のバッファを描画領域としてあつかう
構造情報のオブジェクトで
CIContextがOpenGLのテクスチャに対応する描画領域のry)で。

[CIContext contextWithCGContext...]ってやると、CIImageをCGContextに
書き戻すための情報を持ったCIContextを作る。みたいな。

あと、Quartz Extremeは、CIとは別に、OpenGLテクスチャをQuartzの
世界で扱えるようにした拡張機能みたいだがその辺は良くわからん。
415411:2009/08/12(水) 09:10:24 ID:8EQF5ahZ0
>>414
ありがとうございました。
CoreVideoとCIImageのドキュメントを読んでいたんですが、
その辺のところがいまいちよくわかった物ですから・・・。助かりました。
416名称未設定:2009/08/12(水) 13:01:34 ID:0rxFCG6Y0
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【Cocoa】ミラ・ココア【ジーノ後継?】 [軽自動車]
【UOT-100】24時間ワンセグ野郎 Part03【LOG-J200】 [DTV]
417名称未設定:2009/08/18(火) 09:49:25 ID:HNFALhI+0
omniframeworksってどこからDLするんだろう
418名称未設定:2009/08/18(火) 10:03:21 ID:Uk5wTA+e0
http://github.com/omnigroup/omnigroup/tree/master/

ていうかグーグル使えよ。
419名称未設定:2009/08/18(火) 10:13:42 ID:HNFALhI+0
いや、そこから先のリンク踏んでもなかなか繋がらないんです。
あとソースがばらばらにおいてあるみたいだし、ディスクイメージでおいてないのかなと思って。
420名称未設定:2009/08/18(火) 10:22:52 ID:7VnT6c2U0
下のREADME.txtに親切丁寧に説明が書いてあるじゃねーかw
git持ってなきゃ上のdownloadからDLすればいいだけ
421名称未設定:2009/08/18(火) 10:29:51 ID:HNFALhI+0
んーgit使ってみます。Downloadsは(0)になってるみたいだし。
もうちょっと自力でなんとかしてみます。どうもでした。
422名称未設定:2009/08/18(火) 10:37:26 ID:7VnT6c2U0
「↓download」と書いたボタンが!!
423名称未設定:2009/08/18(火) 10:50:26 ID:6CFB0bwp0
>>422
おまいの優しさに全国の俺が泣いた
424名称未設定:2009/08/18(火) 15:42:24 ID:ppfEbrznP
今正規表現使おうと思うんだったらRegexKitのほうがよかないか?
425名称未設定:2009/08/18(火) 15:54:51 ID:Uk5wTA+e0
突然誰と会話してるんだ?
426名称未設定:2009/08/18(火) 16:03:02 ID:ppfEbrznP
>>425
つか今時omniを使うのなんて正規表現くらいじゃないのか?
427名称未設定:2009/08/18(火) 16:09:43 ID:EnJWVKSY0
ハロー! おむ兄(にぃ)だよ!
428名称未設定:2009/08/18(火) 16:11:09 ID:Uk5wTA+e0
そんな個人的な思い込みを仮定されて話を始められても困るな。
Omni Framework の GUI まわりもいろいろ使い道があると思うが。


まあでも何が起こってるのかわかったから安心しました。どうも。
429名称未設定:2009/08/19(水) 07:34:28 ID:YG6FVPkw0
Omniの正規表現はlibcのregex(3)だからむしろ使いにくい部類だと思うけどなあ。
430名称未設定:2009/08/19(水) 07:46:47 ID:YG6FVPkw0
記憶違い。自前の実装だった。
431名称未設定:2009/08/19(水) 12:48:55 ID:fuGwztFRi
つーか、なんで正規表現サポートしないんだ?
今どきの言語だとありえないでしょ。
432名称未設定:2009/08/19(水) 12:53:51 ID:OEzk8AJL0
>>431
言語がサポートするものではないだろ
433名称未設定:2009/08/19(水) 13:11:26 ID:gTZtW1QA0
OS標準でフレームワークを用意してほしい
434名称未設定:2009/08/19(水) 14:05:46 ID:6iTd1e4G0
つ NSPredicate
435名称未設定:2009/08/19(水) 14:30:58 ID:aBOmCaIg0
1. WebKit 付属の JavaScript 経由で触る
2. regex.h をつかう
3. ICU regex ライブラリにリンクしてつかう
4. Perl, Python 等を呼び出す
等 OS 標準で regex が使えないわけではないです

まあいい加減 NSString に標準のメソッドを追加してくれと思うが。

NSPredicate はマッチしかできなかったんでは。
436名称未設定:2009/08/19(水) 15:21:56 ID:x/YzYrjdi
標準じゃないと、配布する時に面倒だし。
437名称未設定:2009/08/19(水) 15:34:02 ID:t1FuhkY40
.DLLとか.OCXと一緒にしてる悪寒
438名称未設定:2009/08/19(水) 15:42:53 ID:4yqXsv5J0
基本的にアプリケーションバンドルに内包しちゃうよね
自分しか使わないのは ~/Library/Frameworks/ にいれちゃうけど
439名称未設定:2009/08/19(水) 15:45:07 ID:3XLeyTEli
フレームワークをdllとかに例えてる時点でいまいちな悪寒
440名称未設定:2009/08/19(水) 21:48:47 ID:kr/BAt1ii
>>435
matches以外にもcontainsとかlikeとかあるよ
441名称未設定:2009/08/19(水) 22:11:11 ID:1dFKi5XT0
frameworkとdllの違いをCocoa的に語るとどうなるのかな
442名称未設定:2009/08/22(土) 17:59:57 ID:GML0g0OM0
軽自動車のスレじゃないのか・・・
443名称未設定:2009/08/22(土) 18:01:35 ID:fZKoRrWN0
>>442
>>416の結果に荷担しているのはおまえか!
444名称未設定:2009/08/22(土) 18:33:44 ID:I1H2DNZ40
デザインの良さをアピールしてるけど、あれをカッコいいと思う奴は眼科に行った方が良いと思う。
445名称未設定:2009/08/22(土) 18:40:56 ID:rSxq6hLB0
どこの誤爆だろう...
もしかして車関係スレかw
446名称未設定:2009/08/22(土) 18:56:30 ID:I1H2DNZ40
>>445
すまん、ミラ・ココアの話。
447名称未設定:2009/08/25(火) 14:02:40 ID:I1ZO+cX3P
ミラココアはチンクチェントとラパンのパクリだし

ヌル文字が途中に入ってるNSStringのドキュメントからヌル文字を除去したいんだけど
どうするのが一番楽かな
448名称未設定:2009/08/25(火) 16:41:48 ID:xK/BoT+h0
>>447
これでどう?
stringByReplacingOccurrencesOfString:@"\0" withString:@""
449名称未設定:2009/08/26(水) 10:13:50 ID:DKZUcChhP
>>448
ありがとう。でもうまくいかんかった。
もうちょっと自分でがんばってみるよ。
450名称未設定:2009/08/26(水) 11:46:32 ID:5Mw01DFg0
>>449
448をそのまま入力/コピペしたってことはないよな?
バックスラッシュが全角だからそらうまくいかんよ。
451名称未設定:2009/08/26(水) 13:59:36 ID:DKZUcChhP
>>450
うん。それはやってるんだけど、なんか文字列がいろいろ特殊みたいで。
スキルがないだけかもしれないけど。
452名称未設定:2009/08/26(水) 20:12:56 ID:5Mw01DFg0
どっからそんな文字列を拾ってきたんだ?
ヌル文字が混ざるとか滅多にないはずだからすごい気になる。
453名称未設定:2009/08/26(水) 20:14:36 ID:TEy/gmIa0
正規化したら消えてなくなるとかないかな
454名称未設定:2009/08/27(木) 01:22:38 ID:Qeoje6Iv0
PDFからコピペしたらヌル文字入ってたことあったね。
455名称未設定:2009/08/27(木) 02:52:59 ID:NJnbkQsA0
thousandのwebviewからコピペして書き込みしようとしたら書き込めないことがあったけど
ヌル文字が入ってたのかな
456名称未設定:2009/08/27(木) 09:33:59 ID:vGlaq08O0
コピペで入ってくるのはヌル文字じゃなくて
'REPLACEMENT CHARACTER' だと思う
457名称未設定:2009/08/27(木) 17:55:29 ID:NJnbkQsA0
なるほど。
458名称未設定:2009/08/28(金) 09:14:14 ID:i7dli06C0
とある掲示板のDATファイルが、
バイナリで読むと00で、ブラウザで読むとカンマに変換されるのがあったよ。
そういうのかな。
459名称未設定:2009/08/28(金) 16:58:12 ID:DfKNgteGP
あー
NSOutlineViewの使い方がぜんぜんわからんのですが、
良い本ないですか。
460名称未設定:2009/08/28(金) 17:00:18 ID:mLs2EjSJi
比較的シンプルでわかりやすいサンプルなら探せばあるかと。
461名称未設定:2009/08/28(金) 17:59:38 ID:fKPLPAC+0
HMDTでデータソースとバインディング両方の使い方が載ってた。本は別だった気がするけど
462名称未設定:2009/08/29(土) 00:49:32 ID:is9di1Fp0
Cocoaアプリから環境設定の壁紙を
変更したいのですが、どうやればいいのでしょうか?
463名称未設定:2009/08/29(土) 04:26:36 ID:g3bcjHMB0
Cocoaでペイント系のソフトを作りたいんだが、
マウスでドラッグした軌跡を描くだけの場合、
カーソルが動くたびにCGContextAddLintToPointで点を追加して描画するのでおk?
ドロー系ならともかく、直に描画したいんだが。。。
(これじゃあブラシは実現できそうにない;)
参考文献で良いからだれか教えて。
464名称未設定:2009/08/29(土) 06:22:45 ID:yyMBQF0r0
ビットマップ配列取り出して指定座標に直接輝度値書き込んじゃう方法だとどうだろう
465名称未設定:2009/08/30(日) 01:15:39 ID:l9pHU/hj0
>>464
ありがとう。
やはりQuartzに基づいてるから仕方ないですよね。。
466名称未設定:2009/08/30(日) 22:45:35 ID:A6nkLJf40
>>462
ディスプレイ一枚ならアップルスクリプト呼べばできた。
複数だと一枚しか変わらない。
検索キーワードはdesktop picture、api、cocoa、macとか適当に組み合わせて。
このコードでできたけど、アップルスクリプトはコピペなんで意味はよくわかりません。
- (IBAction)button:(id)sender {
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
if ( NSOKButton == [openPanel runModal] ) {
NSString *filename = [openPanel filename];
NSLog(filename);

NSString *s1 = @"tell application \"System Events\" \n";
NSString *s2 = @"set picture of current desktop to ";
NSString *s3 = @"end tell \n";
NSString *setScript = [NSString stringWithFormat:@"%@%@\"%@\"\n%@",
s1, s2, filename, s3];
NSLog(setScript);

NSAppleEventDescriptor *ret;
NSDictionary *errorInfo;
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:setScript];
ret = [script executeAndReturnError:&errorInfo];
[script release];
}
}
467名称未設定:2009/08/31(月) 19:23:13 ID:/QD97ceJ0
>>466
できました!

でも10.5では正常に動くけど10.4では何故かエラー。。。orz
アップルスクリプトスレで聞いてみます。

ありがとうございました!
468名称未設定:2009/08/31(月) 20:22:24 ID:nEnYgci80
はじめてレポートしたバグが10.6で直ってた。なんかうれしい。で、質問です。
なんかAppleからbug reportのreviewをしとけってメールが来たんですが、具体的には
何をすれば良いの? "State" はOpenになってて、赤字になってます。"Resolved"ボタン
を押せば良いのかなぁ?
469名称未設定:2009/08/31(月) 23:25:00 ID:XFmTc96I0
Cocoaでショートファイル名を使う方法は無いでしょうか。
ずっと調べているのですがいまだに分りません・・・orz
470名称未設定:2009/08/31(月) 23:46:24 ID:ZAwBgW8r0
ショートファイル名?
471名称未設定:2009/08/31(月) 23:49:57 ID:T7yUvDFU0
MS-DOSの機能?
Macには関係なさそうだけど
472名称未設定:2009/09/01(火) 00:26:07 ID:twMpNsBm0
>>470
>>471
DOSの、ファイル名8+文字拡張子3文字のやつです。
Winでhogehogehoge.txt → hogeho~1.txt などに変換されるやつです。
Macで同じようにロング名からショート名を取る方法がないか調べていました・・・
473名称未設定:2009/09/01(火) 00:48:13 ID:c7pqEyz20
そもそも存在しないし必要もないだろう
474名称未設定:2009/09/01(火) 00:59:33 ID:w0f9R1iW0
>>468
Append New InformationのところでResolvedにチェックを入れて、
さんきゅーwたすかったぜw
って書き込むんだ。

そんだけでOK。赤字が無くなる。そのうちClosedにしてくれるから。
475名称未設定:2009/09/01(火) 03:27:38 ID:YC65Kq3r0
>>472
よく知らないけどググったらどうやらNTFSとかファイルシステムに関連したことっぽいので
Macじゃそこにアクセスするのは難しい気がする。
476名称未設定:2009/09/01(火) 08:35:09 ID:twMpNsBm0
>>473
>>475
Tiger以前?のAPIでショート名取れるのがあったらしい。
そのAPIが無くなってしまったような記事は見つけました・・・ダメじゃん。
とにかくありがとうございます。もう少し調べてみます。
477名称未設定:2009/09/01(火) 09:03:48 ID:MCd6XrID0
>>474
ありがとう、やってみます。
478名称未設定:2009/09/01(火) 09:52:28 ID:jaTGs2svP
10.6はヘルプビューワのバグが未だに残ってる・・・
479名称未設定:2009/09/01(火) 14:43:46 ID:HAxYnH8a0
CoreDataの詳しい解説がある参考書とかないでしょうか
480名称未設定:2009/09/01(火) 14:48:44 ID:+wKrADzA0
HMDT 3rd Editionがそんな本じゃなかったっけ?
読んでないけど
481名称未設定:2009/09/01(火) 15:13:30 ID:+aNSgP7o0
ADCのリファレンスサイトが変更されて日本語のリソースの場所が
わからなくなっちまったな。
482名称未設定:2009/09/01(火) 15:19:56 ID:JrKCuccJ0
>>476
FSSpecのAPIは別に無くなっていないから、32bitアプリであれば使えるけど利用目的が解らん。
ASCII以外のUnicodeファイル名が付いてるとゴミみたいな物しか返らんよ。
483名称未設定:2009/09/01(火) 22:15:44 ID:BmmHhDer0
>>478
2chじゃなくてAppleにレポートしないといつまでたっても直らない
484名称未設定:2009/09/02(水) 00:20:15 ID:C33GQzz/0
core animation 勉強用の本って何かあります?
485名称未設定:2009/09/02(水) 08:57:26 ID:JjFieKlV0
>>484
洋書ならある
486名称未設定:2009/09/02(水) 09:00:09 ID:OSfHOQiG0
Core DataもCore AnimationもAppleのドキュメント読んで頑張りましょう
日本語のドキュメントどっかにいっちゃったけど、、
487名称未設定:2009/09/02(水) 10:01:35 ID:IbNYQ07V0
488名称未設定:2009/09/02(水) 14:02:34 ID:IRfJryn10
489名称未設定:2009/09/02(水) 14:11:50 ID:lrA7MIwpi
クラス宣言(?)などをforループなどの中に書く場合と、
外に書く場合では、違いはあるのでしょうか?
なんか、中に書くと遅くなるような気がしますが。
------------------------------------
// 外に出す
int i;
NSString *string;
for(i = 0; i < 100; i++){
  string = [NSString stringWithFormat@"%d", i];
  NSLog(@"string=%@", string);
}
------------------------------------
// 中に出す
int i;
for(i = 0; i < 100; i++){
  NSString *string = [NSString stringWithFormat@"%d", i];
  NSLog(@"string=%@", string);
}
490名称未設定:2009/09/02(水) 14:14:23 ID:QAAdyXe90
外に出すとか中に出すとか卑猥だな
491名称未設定:2009/09/02(水) 14:17:51 ID:qDOcgEUM0
>>489
スコープが異なるだけ。
上の例ではループの外でもstringにアクセスできる。
下ではそれはできないが、もう一つ別のループを作ったときその中でも別のstringを宣言して使うことができる。
492名称未設定:2009/09/02(水) 14:18:21 ID:3VwBRM/g0
>>489
(その例なら)同じ
493名称未設定:2009/09/02(水) 14:29:03 ID:hdiNZ+Jk0
外に出すなら中には入れるものじゃないのか?
494名称未設定:2009/09/02(水) 14:38:58 ID:ZuAfN0da0
>>489
>なんか、中に書くと遅くなるような気がしますが。
自分で確かめたのか?
ループを10万回くらいまわして時間を測定してみろよ
495名称未設定:2009/09/02(水) 14:45:59 ID:JjFieKlV0
>>493
だな
496名称未設定:2009/09/02(水) 14:50:58 ID:iyvmb6Iw0
お外で入れて中に出す
497名称未設定:2009/09/02(水) 16:05:36 ID:yWS8LvO80
初期化する場所は同じだから速度なんて大して変わらん気がするけど
498名称未設定:2009/09/02(水) 17:05:37 ID:b2E1tVXei
>>491-492
ありがとうございます。納得しました。
>>494
家に帰ったらやってみます。
499名称未設定:2009/09/02(水) 20:39:00 ID:C33GQzz/0
>> 485
ありがとうございます。amazon で発売している洋書が英語では無いというブログ記事を読みまして、それしか見つからなかったもので

>> 486
ドキュメント読んでやるしかないんですね。
アップルのドキュメントって実際の使い方がわかりづらい気がするんですよね。簡単なサンプルでもあればいいんですが。
ありがとうございました。
500名称未設定:2009/09/02(水) 22:06:30 ID:OSfHOQiG0
>>487, 488
ありがとう
http://developer.apple.com/jp/documentation/
をブックマークしておきます
501名称未設定:2009/09/03(木) 08:30:07 ID:GPxL2tL0i
Cocoaだけなら64bit対応は本当に簡単だね。
でも64bit環境で提供されないapiを
一つでも使ってると、64bitビルドを
あきらめざるを得ない。

OSServive.hのPower.hが動かない
理由がみつからない...
502名称未設定:2009/09/03(木) 11:02:41 ID:bS1J3Mll0
64bitに出来ない理由のほとんどはアセンブラで書いたとか
ソースが無いとか。
マジレスするとドライバじゃないかな。
503名称未設定:2009/09/03(木) 12:21:47 ID:F3YFZ0NA0
>>501
>OSServices.hのPower.h
なにがやりたいの?
http://openradar.appspot.com/6267445
とかによると、問答無用でプロトタイプを提供してリンクすると
実際は動くらしい... 10.5 では。10.6 はわかりません
504名称未設定:2009/09/03(木) 12:59:54 ID:bzeH0bWk0
マルチコア時代の新機軸! Snow LeopardのGCD
http://ascii.jp/elem/000/000/455/455786/
505名称未設定:2009/09/03(木) 13:51:47 ID:tONACXJb0
これ、便利だなぁ。

GUIの処理をメインスレッド、別スレッドで実処理、をGCDで。
http://ascii.jp/elem/000/000/456/456425/img.html
506名称未設定:2009/09/03(木) 14:00:18 ID:KGjVr0wL0
>>505
こんな簡単な仕組みなのかー
こりゃ、便利だ
507名称未設定:2009/09/03(木) 14:05:59 ID:ArWl3qJsi
もはやロックなんてのは過去のものになるのか
おそろしい世の中になったもんだ
508名称未設定:2009/09/03(木) 14:15:12 ID:e7qUQwvx0
>>505
アクションの実行は終わったが計算は実行中のときに
このオブジェクトを解放するとどうなるんだ?
509名称未設定:2009/09/03(木) 14:18:47 ID:KGjVr0wL0
>>508
YOU、やっちゃいなよ
510名称未設定:2009/09/03(木) 14:32:10 ID:urvyXrnLi
クラッシュしました><
511名称未設定:2009/09/03(木) 20:19:27 ID:/sayhrcQ0
>>503
なるほど。10.5.SDKの時点でこういう症状なのか。

やりたいのは単にこれです。
>ttp://developer.apple.com/jp/qa/qa2004/qa1160.html

この記述だと64bit環境では推奨されないみたいだけど、
Deprecatedとはどこにも書いてないんだよね。
512名称未設定:2009/09/03(木) 20:56:25 ID:8C5XWpa+0
OSX 10.5でIOPMAssertionCreate()が追加されてる。
http://lists.apple.com/archives/carbon-dev/2009/Aug/msg00144.html
UpdateSystemActivity()も無くなってないから継続して使える。
ターゲットとするシステムや自分の使い勝手で好きな方を使えば良い。
513名称未設定:2009/09/03(木) 21:33:56 ID:F3YFZ0NA0
>>508
ブロック内で参照されている obj-c の変数は
self も含めて retain が一回されて、
ブロックを抜けると release されるようになってる。
http://www.mikeash.com/?page=pyblog/friday-qa-2008-12-26.html

Mike Ash さんの Q&A は他のも読むと勉強になりますよ
514名称未設定:2009/09/03(木) 21:41:03 ID:5ExuzGc10
>>511
Power Manager のドキュメント自体が現在 Legacy のところにあるから
基本的には今後あまり期待しない方がいい気が。

http://lists.apple.com/archives/ata-scsi-dev/2002/Oct/msg00010.html
によると IOHIDPostEvent で定期的に NULL イベントをポストするのでもよさそう。
つーか UpdateSystemActivity 自体がそんな感じかな?
515名称未設定:2009/09/03(木) 22:11:29 ID:eg7MAb330
>>513
なるほどー
516名称未設定:2009/09/04(金) 03:37:46 ID:28ceow2U0
GCDやべえな。久々にワクワクする。
517名称未設定:2009/09/04(金) 08:16:59 ID:HckesgC50
>>516
Snow Leopard、開発者にとっては興味深い新機能が色々盛り込まれている。
普通のユーザにアピールする点が少ないのとは対照的に。
面白いリリースだよね。
518名称未設定:2009/09/04(金) 09:32:26 ID:TCsMsumO0
だからこそ格安にしてすばやく普及度を上げて
開発者が恩恵にあずかれるようにしてくれてるんだよね。

普及度が低いままだったらなかなか開発者はその機能を自分のプロジェクトに取り入れないもんね
519名称未設定:2009/09/04(金) 09:52:55 ID:hveV45/80
PPCを切ってくれたのが大きい。テストの手間が2倍になるから。
520名称未設定:2009/09/04(金) 11:00:52 ID:W7suuuEH0
ずっと前からPPCでテストをしてない俺が来ましたよ
521名称未設定:2009/09/04(金) 11:10:44 ID:5BjWoHev0
(PPCにPantherしか入ってなくて)すまんな
522名称未設定:2009/09/04(金) 11:23:25 ID:VmZV6jsI0
10.3.9のSDKはSnow LeopardのXcode 3.2に入れられるの?
523名称未設定:2009/09/04(金) 11:24:30 ID:5BjWoHev0
3.1からアップデートしたら消えた
524名称未設定:2009/09/04(金) 12:18:14 ID:jrsnNwSz0
PPC Tigerってユーザは多いと思うんだ。
俺とか俺とか俺とか

しかし10.6の魅力的な機能はCocoaがわからん人間にはありがたみはないのかしら。
まあどうせPPC TigerでREALbasic5.2な俺には
Macを新調してもありがたみはないだろう...
その前にREALbasic5は10.6で動くのかしら( ´・ω・)
525名称未設定:2009/09/04(金) 12:46:04 ID:W7suuuEH0
>>524
Cocoaスレでぼやいても仕方ないだろw
526名称未設定:2009/09/04(金) 19:55:00 ID:28ceow2U0
REALbasicがCocoaベースになるならそんなにスレ違いでもない。
527名称未設定:2009/09/04(金) 20:09:00 ID:w7be9nsR0
REALbasic 三年以上前にライセンス買って放置したまんまなんだけど、Cocoa 対応まだなのか
528名称未設定:2009/09/05(土) 00:25:12 ID:TX+fAwg00
Mac OS 10.5 / Xcode 3.1

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
をオーバーライドして、NSTableView用に独自のNSCellを作っているのですが、
TableViewの親のNSScrollViewを、WindowのResizeに合わせてAutoResizeするようにNibで設定した状態で、Windowをリサイズすると、
drawInteriorWithFrameで帰ってくるcellFrameの、size.heightの値が、テーブルのrowHeightは変更していないにも関わらず変化してしまいます。
それにも関わらず、cellFrame.originは変化しないので、cellFrame全体に描画しようとすると、セルの中身一部が重なってしまいます。
セルの正確なNSRectを取得する方法は何かあるのでしょうか。

また、Tableのrowの数は3と決めて作っているのですが、
試しにWindowのデリゲートで
- (NSSize)windowWillResize:(NSWindow *)window toSize:(NSSize)proposedFrameSize {
[tableView setRowHeight:proposedFrameSize.height / 3];
[tableView reloadData];
return proposedFrameSize;
}
という風に、rowHeightがWindowのリサイズに応じて変更するようにしてみたところ、
Windowをリサイズするたびに、セルの縦幅が延びてしまう現象にはまってしまいました。
これを回避する方法もしご存知の方いましたらよろしくお願いします。
529名称未設定:2009/09/05(土) 14:33:17 ID:hqWAS12H0
10.6で以下のコードがクラッシュするというレポートを受け取りました。
10.5で動いて10.6で動かない原因が分からないのですが、これは戻り値が
boolで無くなったから、と考えればよいのでしょうか?

NSDictionary *errorInfo=nil;
NSAppleScript *script = [[[NSAppleScript alloc] initWithSource:theNewScriptSource] autorelease];
NSAppleEventDescriptor *aeDesc = [script executeAndReturnError:&errorInfo];
if(errorInfo) { ... }
return [NSNumber numberWithBool:[aeDesc booleanValue]];

//
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 com.apple.AE 0x90ef1837 parseBoolean(void const*, unsigned long, unsigned char*) + 44
1 com.apple.AE 0x90ef3dc7 aeCoercePtrToBoolean(unsigned long, void const*, unsigned long, unsigned long, AEDesc*) + 420
2 com.apple.AE 0x90ef380d doStandardCoercion(unsigned long, unsigned long, void const*, long, AEDesc*) + 5815
3 com.apple.AE 0x90ef53df aeCoercePtrInternal(unsigned long, void const*, long, unsigned long, AEDesc*, unsigned char) + 369
4 com.apple.AE 0x90ef50a5 aeCoerceDescInternal(AEDesc const*, unsigned long, AEDesc*, unsigned char) + 557
5 com.apple.AE 0x90ef526b AECoerceDesc + 27
6 com.apple.Foundation 0x96c8ce76 -[NSAppleEventDescriptor(NSPrivate) _copyValueOfDescriptorType:toBuffer:ofLength:] + 53
7 com.apple.Foundation 0x96c8bbdb -[NSAppleEventDescriptor booleanValue] + 57
530名称未設定:2009/09/05(土) 14:58:58 ID:PXxLc7lr0
10.6でNSAppleEventDescriptor見たけど
- (Boolean)booleanValue;
だったよ。
531名称未設定:2009/09/05(土) 15:27:09 ID:P7gcViHU0
>529
環境がないならとりあえずはreturn前にdescType取って振り分けるしかないんじゃない?
aeDescをそのまま NSLog(@"%@", aeDesc)で出力しちゃってそれを晒して貰うとか。
それでもクラッシュするなら別の何かなんでしょう
532名称未設定:2009/09/05(土) 16:01:24 ID:q1iQ5FoWi
>>574
グランドセントラルディスパッチはCの拡張だから、Carbonでも使えるはず。
533名称未設定:2009/09/06(日) 00:18:06 ID:3FcRYKza0
>>529
直接的に関係があるかどうか分からないけど、
10.6だと起動していないプロセスに対してスクリプトを実行しようとすると反応しなくなった
具体的には
tell application "hoge"
quit
end tell
をexecuteAndReturnErrorするとhogeというアプリが起動していない場合は無限ループに落ちたように反応しなくなる
(クラッシュはしない)
関連性は分からないけど、参考まで
534名称未設定:2009/09/06(日) 10:02:52 ID:LROfmgwui
>>528
該当部分のコードを見せたほうがいいよ。
535名称未設定:2009/09/06(日) 10:05:02 ID:LROfmgwui
ああ、ごめん。>>528の最初の質問のほうね。
536名称未設定:2009/09/06(日) 13:01:29 ID:7bQG5aNg0
>>534
こんな感じになっています。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

[super drawInteriorWithFrame:cellFrame inView:controlView];
NSView* rootView = [delegate cell:self viewForIndexPath:[self representedObject] frame:cellFrame];
NSBox* aBox = [[NSBox alloc] initWithFrame:[rootView bounds]];
[aBox setTitlePosition:NSNoTitle];
[rootView addSubview:aBox];
[aBox release];

NSView* content = [(id <MyTestObject>)[self objectValue] viewWithFrame:[aBox bounds]];
[aBox setContentView:content];

NSButton* moveButton = [[NSButton alloc] initWithFrame:NSRectFromCGRect(CGRectMake(10, 10, 50, 50))];

switch (type) {
case MyTestCellTypeNormal:;
[moveButton setTitle:@"Open"];
break;
case MyTestCellTypeCenter:;
[moveButton setTitle:@"Close"];
break;
}

[rootView addSubview:moveButton];
[moveButton release];
537名称未設定:2009/09/06(日) 13:03:25 ID:7bQG5aNg0
if ([rootView superview] != controlView) {
[controlView addSubview:rootView];
}
}

ビューは使い回してやらないと次々作られてしまうので、デリゲートで管理
- (NSView *)cell:(MyTestCell *)cell viewForIndexPath:(NSIndexPath *)indexPath frame:(NSRect)aRect {
NSView* aView = [[cellViews objectAtIndex:[indexPath indexAtPosition:0]] objectAtIndex:[indexPath indexAtPosition:1]];
while ([[aView subviews] count]) {
[[[aView subviews] objectAtIndex:0] removeFromSuperview];
}

//何故これでだめかが知りたい
[aView setFrame:aRect];
[aView setFrameSize:aRect.size];

//暫定回避コード(これだとうまくいく)
[aView setFrameOrigin:NSPointFromCGPoint(CGPointMake(aRect.origin.x, [tableView rowHeight] * [indexPath indexAtPosition:1]))];
[aView setFrameSize:NSSizeFromCGSize(CGSizeMake(aRect.size.width, [tableView rowHeight]))];
return aView;
}
538名称未設定:2009/09/06(日) 13:06:12 ID:7bQG5aNg0
indexPathは、セルの位置を示しています。
tableView:willDisplayCell:forTableColumn:row:にて設定。

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
NSInteger columnIndex = [aTableView indexOfColumn:aTableColumn];
NSUInteger indexes[2] = {columnIndex, rowIndex};
NSIndexPath* indexPath = [NSIndexPath indexPathWithIndexes:indexes length:2];
[cell setRepresentedObject:indexPath];
[cell setDelegate:self];
}


長くなってすみません…
539名称未設定:2009/09/06(日) 14:23:54 ID:kXCljUOr0
>>537
原因かどうかはわかりませんが、setFrame:を使っているのならsetFrameSize:は不要でしょう。

昔、私が自作のpredicate editorを作った時に参考にしたサイトがあります。
このサンプルを参照してはどうでしょう。
Subviews in TableView Rows
http://www.stepwise.com/Articles/Technical/2003-12-20.01.html

SubviewTableViewCell.m
- (void) drawWithFrame:(NSRect) cellFrame inView:(NSView *) controlView
{
[super drawWithFrame: cellFrame inView: controlView];

[[self view] setFrame: cellFrame];

if ([[self view] superview] != controlView)
{
[controlView addSubview: [self view]];
}
}
540名称未設定:2009/09/06(日) 15:23:55 ID:pM/TUX3t0
誰かNSIndexPath使ったサンプルコードください。
リファンレンス見てもようわからん。
541名称未設定:2009/09/06(日) 16:04:53 ID:XW3TP1rD0
NSIndexPath Class Reference に4つも載ってるけど…
Sample code AbstractTree, AnimatedTableView, ComplexBrowser, SourceView
542名称未設定:2009/09/06(日) 17:31:41 ID:t0rwuHEA0
自分は
http://www.google.com/codesearch
で調べることがある
543名称未設定:2009/09/06(日) 18:29:53 ID:7bQG5aNg0
>>539
ありがとうございます。サンプルを参考にしてもう一度やってみます。

最初、setFrame:だけでやっていたのですが、
setFrame:だけだと、クリックイベントが取れないようでした。
(Viewの作成時、NSZeroRectで作成していたのが悪いのかもしれません。)
544名称未設定:2009/09/06(日) 19:12:34 ID:7bQG5aNg0
原因がわかりました。
- (CGFloat)tableView:(NSTableView *)aTableView heightOfRow:(NSInteger)row {
return [tableView frame].size.height / 3;
}

これで、セルの高さを動的に変えようとしていたのですが、
それがNSTableViewの想定外だったようです。
545539:2009/09/06(日) 20:06:37 ID:kXCljUOr0
>>544

drawメッセージを受け取るたびに、objectのalloc, deallocを繰り返す非効率きわまりないコードは改めた方が良いと思う。
546名称未設定:2009/09/07(月) 20:38:04 ID:7oMbm0fl0
Snow LeopardでCGLコンテキスト(CGLContextObj)からCoreImageContextを生成する
CIContext クラスのメソッド+(CIContext *)contextWithCGLContext:pixelFormat:options:
が廃止対象となっているようです。
これに関連して、代替の方法が分かりません。
どなたかご存知の方はおられるでしょうか。
サンプルのサイトでも教えていただけると有り難いです。
547名称未設定:2009/09/07(月) 20:44:55 ID:4UdDkYaO0
CIContext.h 見てみたら
548名称未設定:2009/09/07(月) 21:26:51 ID:ytq8xUbs0
pixelFormatを指定しないといけない理由は?
549名称未設定:2009/09/08(火) 13:12:53 ID:MwtzP/We0
NSStepperをNSTextFieldに繋いでいるのですが、
ステッパーを押した時のアクションが自クラスにも欲しいんです。

NSTextFieldのデリゲートを繋いだけどダメでした。
なにかいい方法ありますか?
550名称未設定:2009/09/08(火) 13:21:42 ID:XUKz+RHN0
もっと具体的に
551名称未設定:2009/09/08(火) 14:27:53 ID:1qJCyXHzi
NSStepperのサブクラスを書いて自分をアクションのターゲットにする。
アクションを受けたら好きな処理を行って、
次にNSTextFieldのアクションに飛ばす。
552546:2009/09/08(火) 23:37:31 ID:fPWqu9q90
>>547 >>548
レスありがとうございます。

良く似た+contextWithCGContext:options:というメソッドが
あったのですが、引数がCGContextRefで、
+contextWithCGLContext:pixelFormat:options:の引数
CGLContextObjと異なるため、NSOpenGLViewから
どのように渡せば良いのか分からなかったのです。

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


 
553名称未設定:2009/09/09(水) 01:48:39 ID:kV9PY9Sc0
+contextWithCGLContext:pixelFormat:colorSpace:options:
554449:2009/09/09(水) 10:20:29 ID:I5xhjurc0
>>551 サンクス。
NSControlのサブクラスなんて書いたこと無かったから手間取ったけど
ttp://www.stripe-net.jp/cocoa/documents/chapter2/chapter2-5.html
ここ参考にしてやっと出来た。以下抜粋。

@implementation MyStepper

-(void)awakeFromNib
{
  saveTarget = [self target];
  saveAction = [self action];//NSTextFieldへのアクション保存
  [self setTarget:self];
  [self setAction:@selector(myAction:)];
}
- (void)myAction:(id)sender
{
  [self sendAction:saveAction to:saveTarget];//NSTextFieldへのアクション

[controller layoutChange:self];//自クラスへのアクション
}
@end





555449:2009/09/09(水) 10:21:23 ID:I5xhjurc0
>>554 オレ>>549だった。
556名称未設定:2009/09/09(水) 15:39:01 ID:no4hgF4O0
NSOutlineView を Finder のようなソースリスト風にする
方法はわかるのですが、「デバイス」「共有」などのカテゴリを
Finder と同じように表示する方法はあるでしょうか。

よろしくお願いします。
557名称未設定:2009/09/09(水) 15:47:13 ID:DjpAhTzz0
558名称未設定:2009/09/09(水) 19:32:01 ID:tHwcHajvi
>>556
結構理解してないと実装できないよ
頑張って
559552:2009/09/09(水) 21:12:58 ID:wcXPcyNH0
>>553
神降臨!

てか、よくヘッダファイルを見るとご指摘のメソッドがあった。orz
リファレンスが古いのかまだ、ご指摘のメソッドがのってなひ。
新しい引数のcolorSpaceが何なのか分かりませんが、もう少し
頑張ってみます。
ありがとうございました。
560556:2009/09/09(水) 22:39:44 ID:no4hgF4O0
>>557
ありがとうございました!

>>558
そうですね、確かにコードを読んでも理解しにくいです。
561名称未設定:2009/09/10(木) 00:16:43 ID:hD/e9v6L0
NSTableViewやNSOutlineViewってもっと簡単に扱えるようにしてほしいね
ドラッグ&ドロップも考えると大変。
562名称未設定:2009/09/10(木) 08:14:37 ID:eBLF0sSQ0
それだけ色々な使い方の幅を持たせるという事でもあるんでしょうけど
NSTableViewの基本セットみたいなのをどこかに保存して、それを
コピペして使うのもいいかも知れないですね。

NSToolBarも前は割と大変でしたし。
563名称未設定:2009/09/10(木) 09:30:36 ID:grHDfIRX0
NSTableViewとかはバインディングでかなり楽になった
564名称未設定:2009/09/12(土) 11:15:15 ID:Cq62kGEVi
気が付いたらCarbonスレ落ちてるね
無念
565かぼーん:2009/09/12(土) 17:34:08 ID:IPYfo0k5i
 
566名称未設定:2009/09/12(土) 18:17:39 ID:72LFA8AZ0
565にワロタ
567名称未設定:2009/09/12(土) 19:37:41 ID:PeI1VxnC0
>>564
個人が作るソフトで今更Carbonで作る必要性は無い。
568名称未設定:2009/09/12(土) 20:39:50 ID:72LFA8AZ0
Cocoaはそんなに簡単なもんじゃねえよ
569名称未設定:2009/09/12(土) 23:15:50 ID:12VDftD/0
ちょっと混み入ったことやろうとするとCocoaでできないことは意外と多い
570名称未設定:2009/09/13(日) 00:58:28 ID:XAeZmI3O0
Obj-CがCocoa、CがCarbonでいいのかな?
Cの関数の、どこからどこまでがCarbonかわからない。
571名称未設定:2009/09/13(日) 01:22:40 ID:PA4iQ/LD0
>>569
大抵のはCarbonからCoreFundationに移ってるけどね。

>>570
CocoaのAPIがObj-C, CarbonのAPIがC。
572名称未設定:2009/09/13(日) 03:33:05 ID:rmU+a6wa0
CF系やCoreGraphics使うとなるとどうしてもCarbon
573名称未設定:2009/09/13(日) 04:30:24 ID:wWtSxV8j0
CoreFoundationとかCoreServicesなんかはFrameworks下に独立してあるから、
そっちだけで済む実装ならCarbon.frameworkにはリンクさせない方が後々対応しやすい、のかも
まあ、どのframework内でも徐々にDEPRECATEDになってくのはあるんだろうけど。
574名称未設定:2009/09/13(日) 05:26:25 ID:DfUoB/wS0
なにがCarbonなのかは人によって解釈が違うけど
Core FoundationやCore GraphicsなんかはCarbonに含めないのが通例
575名称未設定:2009/09/13(日) 07:07:45 ID:p5DhwDU1i
Carbon使ってると二酸化炭素排出量増えるし
576名称未設定:2009/09/13(日) 09:04:06 ID:cfEcH4oQ0
CocoaAPI化されていないC"呼び出し規約"の一部のAPIを「通例」としてCarbonから除外すれば、すぐにAPIのCocoa化完了。
577名称未設定:2009/09/15(火) 10:54:41 ID:v9LtrQw+i
NSなんてらって遅いよね、楽だけど
578名称未設定:2009/09/15(火) 12:09:34 ID:A7nh5zxB0
速度が必要ならCで書く。CFなんてらを使う。
579名称未設定:2009/09/15(火) 12:48:02 ID:uL4mx4Q30
glなんてらの勉強中だぉ
580名称未設定:2009/09/15(火) 14:22:19 ID:v9LtrQw+i
うわ、素でなんたらを打ち間違えた
CF早いよね。大量のデータを扱う時にNSと速度比較すると顕著。
581名称未設定:2009/09/15(火) 14:33:01 ID:1kINJ79s0
NSなんてらってメッセージを文字列としてやり取りしてるから遅いんだっけ
582名称未設定:2009/09/15(火) 14:50:20 ID:3axQdtBt0
それは原因じゃ無い。dyldが実行開始時にセレクタ名を一意化するので、文字列としての比較はされなくて単にポインタの比較だけです。
583名称未設定:2009/09/18(金) 20:59:15 ID:bRxAiOKd0
ドロワーに Finderからファイルをドラッグ&ドロップさせたいんですが、
NSViewのサブクラスを作ってDrawer Content Viewという名前のNSViewをInterface Builderでそのサブクラスにしたんだけど、変なエラーが出ます。
ドロワーはInterface BuilderでNSDrawerとかNSViewとかセットになってるのを使ってます。
ドロワーにドラッグ&ドロップはどうやったらよいのか…。
エラーはこんなやつです。普通のウインドウにドラッグ&ドロップまではできました。

The 'contentView' outlet of 'Drawer' is connected to 'Drawer Content View' but 作ったサブクラス is not a kind of 'NSView'as specified by the outlet type.
584名称未設定:2009/09/18(金) 21:11:58 ID:Crxw53ow0
ふと思ったのですが、ユーザーの入力した文字列(簡単なプログラム、スクリプト)を実行させるにはどうしたら良いでしょう。
例えばNSAppleScriptならNSStringでinitできます。NSTaskならpathとargumentsをNSStringから生成できます。
ではC言語やObjective-Cの処理などはどのようにしたら実現可能でしょう?
要するに
- (void)method {
/*ユーザー入力文字*/
}

という形で呼び出し、実行ということです。
考えてみたところ、
NSScriptCommand等を用いて文字列を対応する動作に変換。(この場合特定の文字列に対するメソッドを自ら定義しておく?)
文字列からScript Suite Fileを作成、実行。
文字列からコードをコンパイルして実行。(これだと文法エラーも表示できるはず)


ふと思っただけなのでこれが正解というのがなくても良いです。いろいろな意見が出ればおもしろいかなと。
585名称未設定:2009/09/18(金) 21:23:59 ID:BYCSfqm90
>>584
CコンパイラやCインタプリタのソース読んどけ。
586名称未設定:2009/09/18(金) 21:29:43 ID:x2mIZ4Zb0
そういえば昔AAAってあったよね
WebObjectsだったかObjCだったかのインタプリタ
587名称未設定:2009/09/18(金) 21:52:10 ID:Crxw53ow0
インタプリタという単語すら知りませんでした。お恥ずかしい。
単語すら聞いたことないレベルの者が実装するのはなかなか難しそうですね。
588名称未設定:2009/09/18(金) 23:35:33 ID:Vyd0Tga90
というより、Cが理解できる者がそういうことをしたいときってあるだろうか。
あったとしても自作しちゃうかプラグインで実装しちゃうでしょ。
だからNSBundleだかその辺でプラグインに対応できるようにしちゃった方が
手っ取り早いんじゃないかね。
589名称未設定:2009/09/18(金) 23:51:23 ID:Crxw53ow0
Cは分からないのですorz
Cocoaから勉強し始めたひよっ子です故
590名称未設定:2009/09/19(土) 00:04:57 ID:9XNqv0BL0
Cを知らずにObjectiveCだと…
591名称未設定:2009/09/19(土) 00:43:50 ID:El4SX/Tv0
>>583

・I.Bで接続しているアウトレットのクラスがNSViewの種類じゃない。
・自作したサブクラスのinterfaceがNSViewの種類じゃない。(.hファイルを確認)

こんな感じのエラーですかね?
592名称未設定:2009/09/19(土) 01:50:20 ID:ZajrDbTJ0
>>589
簡単なCのコードを受け取ってターミナル.appみたいなの
が作りたいのかな?
だとしたら俺588も勘違いだ。

だったら
lex(だっけか)とyaccあたりでパーサを作って実行部分作って
てな感じで自作かな。

でもObjective-Cやる前にCのポインタくらいまでは学んだ方が...
それともJavaとかRubyとかでやってるのかな?
593名称未設定:2009/09/19(土) 16:00:11 ID:JPhtjDPg0
火狐3.5でMac OS X Reference Libraryのページって見られない?

ttp://developer.apple.com/mac/library/navigation/index.html
594名称未設定:2009/09/19(土) 17:46:55 ID:sqzTJkcL0
OSX10.5.8 Firefox3.5.3で問題無し
595名称未設定:2009/09/19(土) 18:22:42 ID:a/LFhx8M0
>>593
見られるぞ。NoScriptでも組み込んでJavaScriptを禁止にしてるんじゃ
ないのか?
596583:2009/09/20(日) 01:44:26 ID:p0leYRLq0
>>591
ありがとうございます。
どちらもクリアしていたのですが、そもそもInterface Builderへの登録?がされていなかったようです。
xibを開いてInterface Builderの方にサブクラスの.hファイルを登録(ドラッグ&ドロップ)したらエラーが出なくなりました。
なんか基本的なことでお手を煩わせて申し訳ないです…。
597593:2009/09/20(日) 18:17:59 ID:ZwCz6A/q0
>>594 >>595
レスありがとう
今日、Mac OS X Reference Libraryのページを開いたら、ちゃんと表示された
見られなかった時もNoScriptでスクリプト動作許可は出してたんだが・・・
なんだか、狐につままれた気分だ
598名称未設定:2009/09/20(日) 19:17:07 ID:vJvy8bSK0
誰馬
599名称未設定:2009/09/20(日) 19:48:43 ID:aI2clOih0
>>592
ぱっと考えてできたらおもしろいかなと思ったのは簡単な描画命令をユーザに入力させることですね。
NSRect rect = NSMakeRect(0.0, 0.0, 320, 240);
[[NSColor redColor] set];
NSRectFill(rect);

rect.origin.x += 30;
rect.origin.y += 50;
[[NSColor blueColor] set];
[NSBezierPath strokeRect:rect];

なんかをユーザ任意でリアルタイムに近い形でできたらおもしろそうだなーと。
600名称未設定:2009/09/20(日) 19:54:33 ID:8XxIL6D40
そういうことをしたいならsqueakがオヌヌメ。なにもObjective-Cでやる必要はないさね。
601名称未設定:2009/09/20(日) 20:08:02 ID:aI2clOih0
>>600
ググってきました。
うーん、自分がそういう仕組み(ユーザ任意の入力文字を実行)を使って何かしたいってことではなくて、
自分でそういうのを作れたらなぁってことなんですよね。
描画以外にも通信とかいろいろ楽しいことできそうですし。
602名称未設定:2009/09/20(日) 20:17:30 ID:BNlzzGER0
>>599
まんまRubyCocoaじゃね
http://www.youtube.com/watch?v=FeSq6xorrQ0
このビデオだと分かりにくいけど、探せばもっとあると思う
603600:2009/09/20(日) 21:10:25 ID:8XxIL6D40
>>601
Squeak自体半分OSみたいなもんだからパフォーマンス気にしなけりゃほぼ何でもできるでしょ。
気合いがあればEtoysみたいなのを自分で作ることもできるだろうし。
604名称未設定:2009/09/22(火) 11:07:19 ID:1SOtfvtX0
>>582
こんな話も↓

やっぱり、Snow Leopardは速かった!!
http://yebo-blog.blogspot.com/2009/09/snow-leopard.html
Greg Parker氏が自身のブログで、Snow Leopardでは、
Objective-C のダイナミックリンカ(dyld)が変更され、
アプリケーション毎にメモリが1/2になり、ローンチ時間が半分になったとのことだ。
dyldの共有キャッシュの最適化と、Objective-Cセレクタをユニークにすることで
高速化しているそうだ。これが速くなったと感じる理由の一つなのだろう。
605名称未設定:2009/09/22(火) 13:57:56 ID:6ahkBiRo0
>>604
メモリが1/2って??? 今まではハチャメチャにメモリ消費してたってかw
あと「ローンチ時間が半分」てのもなあ...
技術はわからない、英語はちゃんと読めない... トホホ。
606名称未設定:2009/09/22(火) 18:17:20 ID:JbxIvMzh0
それ意味違うしw

> to cut launch time in half
起動時間が半分になり
> and cut about 1/2 MB of memory per application
アプリごとにおよそ0.5MBのメモリを節約している
> you get the same version of the shared libraries almost
> every time you run, and so does every other process on the system.
システム上のプロセスはだいたい同じバージョンの共有ライブラリを使ってる

> The system takes advantage of this by building the dyld shared cache.
システム全体でdyldの共有キャッシュを構築することで効率化をはかっている

> The shared cache contains a copy of many system libraries, with most
> of dyld's linking and loading work done in advance
共有キャッシュは、システムライブラリのコピーを保持しており、あらかじめ
主立ったdyldのリンクと読み込みを済ませておく

> Every process can then share that shared cache, saving memory and launch time.'
他のプロセスは共有キャッシュを使うことで、メモリと起動時間を短縮できる
607名称未設定:2009/09/22(火) 18:37:30 ID:JbxIvMzh0
リンク先のObjC selector uniquingはこんな感じ?かなり意訳だけど。

Leopardでの共有キャッシュはCのコードには役立つが、ObjCの起動オーバーヘッドには
寄与しない。起動時にもっとも大きいのはObjCのセレクタの判別コストだ。アプリや共有
ライブラリは、固有のメソッドへのセレクタポインタを持っているが、ObjCランタイムは
セレクタ名に対応するポインタの対応リストの作成を行わないといけない。ハッシュテー
ブルの作成、およびstrcmpによる高コストな比較、さらにはcopy-on-writeによるメモリ
の浪費が問題だ。

一般にはセレクタは数万にも及ぶ。Leopardでは、組み込みの33000エントリにも及ぶセレ
クタテーブルが組み込まれていた。メモリコストの削減を図ったわけだが、Cocoaフレーム
ワークへの新規クラスとメソッドの追加によってさらにふくれあがるだけだった。OSのアッ
プグレードのたびに、必要なメモリと起動時間が増えていくことになる。

解決策はこうだ。dyldの共有キャッシュの段階で、セレクタの分類を済ませてしまうのだ。
セレクタテーブルを共有キャッシュに取り込んで、共有ライブラリのコピーを作ってセレクタ
参照を置き換えてしまう。こうすれば単一のセレクタテーブルをプロセス間で共有できるので
メモリが節約出来るし、アプリケーションの起動時にセレクタテーブルを再構築していた時間
も節約出来る。ランタイムは、アプリケーション個別に手を加える作業だけで起動が完了して
しまう。
単純にキャッシュすればと思うだろうが、セレクタはcのシンボルとして実装するにはとんでも
なく動的すぎる。だから共有キャッシュの生成ツールは、ObjCのメタデータの読み書きの情報
も取り込む必要があるんだ。
608名称未設定:2009/09/22(火) 19:01:22 ID:G27Rr3Gj0
3ヶ月ほど前からCocoaの勉強をはじめて、自作のMIDIプレーヤーを作ろうとしているのですが、
参考になりそうな詳細なサイトはない物でしょうか。

あまりに情報が少なすぎて、にっちもさっちもいきません。

よろしくおねがいします。
609名称未設定:2009/09/22(火) 19:08:43 ID:zTzY2pBqi
>>608
どんな情報が欲しいの?
答え?
610名称未設定:2009/09/22(火) 21:33:52 ID:3Obd2ryg0
>>608
こんなに情報だらけなのに、情報が少なすぎてって
単なる勉強不足だよ。
611名称未設定:2009/09/22(火) 21:47:43 ID:o21y/fRZ0
Associated Objectの使いどころがわからない
612名称未設定:2009/09/22(火) 21:56:50 ID:oGQmyp+w0
>>608
プレーヤーならQTKitでいいんじゃね?
613名称未設定:2009/09/22(火) 22:26:44 ID:hQ/gjAxui
MIDI制御のサンプルなんてなかなかないかもね。
Xcodeのサンプルにもないかな?

いばらの道を切り開き、パイオニアとして頑張れ。
614名称未設定:2009/09/22(火) 23:39:00 ID:2yanNjzk0
そもそもMIDI周りはCocoaじゃないがね
615名称未設定:2009/09/23(水) 01:38:30 ID:TW9NRXR30
Cocoaで別ウインドウを開いて画像を表示させようとしているのですが、うまくいきません。

方法は、

MainMenu.xibのメニューの「開く」を選択したら呼ばれる関数
openFileMenuで、別のnibファイルと結びついている
ImageContorollerクラス(の実体?)を下記の様に生成します。

[[ImageContoroller alloc] init];

これにより実行される、ImageContorollerクラスのinitで

[NSBundle loadNibNamed:@"ImageWindow" owner:self];

として、nibファイルを読み込みます。
その後、このnibファイルのウィンドウに張り付いている
NSImageクラスのオブジェクトnsImageに画像を読み込み、
nibファイルのウィンドウに貼り付けてあるNSImageViewクラスのviewに、

[view setImage:nsImage];

とやっていますが、NSImageViewに画像が表示されません。

別のnibファイルを使う事にこだわりはありませんが、
ともかく別ウィンドウに画像を表示したいです。

どなたか、方法をご存じの方おられましたら、教えてください。m(_ _)m



616608:2009/09/23(水) 01:40:15 ID:0dHaZwFY0
>>そもそもMIDI周りはCocoaじゃないがね

そうなんですか?

いくつかのソースファイルを参考にしてみましたが、
いまひとつSMFの開き方というか、取り扱いがわかりません。
617608:2009/09/23(水) 01:43:16 ID:0dHaZwFY0
あ、音源はQTとかじゃなくてデベロッパツールのAU Labを使いたいと思っていて、
それはなんとかなりそうなんですがね。。
618615:2009/09/23(水) 01:54:04 ID:TW9NRXR30
すみません、解決しました。
ImageContorollerクラスのawakeFromNibでNSImageViewに画像を読み込んでいたのですが、
別メソッドを用意して、

[[ImageContoroller alloc] init];

の後に表示用のメソッドを呼び出すようにしたら、画像が出ました。
お騒がせしました。
619名称未設定:2009/09/23(水) 14:03:50 ID:UjFf8KLI0
620名称未設定:2009/09/23(水) 17:14:25 ID:heONAupV0
>>608
ttp://www.stripe-net.jp/cocoa/products/midiwind2/index.html
↑MIDIプレイヤー(ソースコード付き)
621608:2009/09/23(水) 21:15:12 ID:0dHaZwFY0
>>619 >>620

おおおぉぉ。。!ありがとうございます!がんばります!
622名称未設定:2009/09/23(水) 21:39:32 ID:yimH9MYzi
気を付けてパクれよ
623名称未設定:2009/09/24(木) 02:37:08 ID:06BJHoVD0
こららの資料、URLにも辿り着けないなんて探してないとしか思えない。
そしてパクる気まんまんに見える。
624名称未設定:2009/09/24(木) 02:37:54 ID:06BJHoVD0
こらら→これら
625名称未設定:2009/09/24(木) 08:47:33 ID:SdJseRuji
まあ、探して無いだろうな
「Cocoa MIDI ソース」と直球で検索すれば簡単に>>620に辿り着くわけだし
626名称未設定:2009/09/25(金) 18:36:54 ID:3sUt6o+20
Cocoa でも Applescript でもよいのですが,
 システム環境設定→ユニバーサルアクセス→聴覚→「画面を点滅」ボタン
を押したときと同じ,画面点滅をさせる方法はありませんでしょうか?
627名称未設定:2009/09/25(金) 18:47:00 ID:E+TfLw/l0
超デッカイ透明で真っ白なウインドウを開く。
透明度を下げる。
透明度を上げる。
ウインドウを閉じる。

で、ごまかしてみよう!
CoreAnimationが使えるかもね!
628名称未設定:2009/09/25(金) 18:56:21 ID:gaErqQiii
NSTableViewっぽいのに、データがないときは「NO DATA」とか
NSViewっぽく出るのは、いちいち切り替えてるんですかね。
629名称未設定:2009/09/25(金) 19:36:41 ID:R6mR6SSli
もっと具体的に
630名称未設定:2009/09/25(金) 19:56:41 ID:Vb7mVcRZi
iTunes9で新規プレイリストを作成すると、メインフレームにはチュートリアル画面が出ますが、
曲をプレイリストにドロップすると、とたんにテープルピューに変わります。
631名称未設定:2009/09/25(金) 20:04:37 ID:O0JH17u70
>>630
で?
632名称未設定:2009/09/25(金) 20:04:51 ID:TXEuZpgq0
そうですか。で、テープルピューってなに?
633名称未設定:2009/09/25(金) 20:19:59 ID:R6mR6SSli
>>630
いちいち切り替えずに実装できて、その方法がより効率的ならそうしたらいい
634名称未設定:2009/09/25(金) 21:23:34 ID:fL4VRKyPi
気持ちは分かるが、もう少し広い心を持とうぜ。
別にCocoaがけなされた訳でも、おまえのやり方が否定された訳でもないんだからさ。
635名称未設定:2009/09/25(金) 21:44:06 ID:tL2C+UyA0
きっとiPhoneで点と丸が見分けつかないぐらい目が悪いんだろうな。お年を召した方かな。
636名称未設定:2009/09/25(金) 22:11:34 ID:oFXsLDyAi
ありがとうございます。
やっぱりNSTabViewで切り替えてる感じですかね?
それか、NSSplitViewのsubviewを直接入れ替えてる?
637名称未設定:2009/09/25(金) 22:16:05 ID:KCTQr30l0
自分が好きなようにやればいいよ
638名称未設定:2009/09/25(金) 22:25:38 ID:Ty2JPKbw0
>>626
Technical Note TN2102 は参考にならない?
ttp://developer.apple.com/jp/technotes/tn2102.html
639名称未設定:2009/09/25(金) 23:53:01 ID:SVJjbUP+0
>>626
CoreGraphicsのAPIを使えば、ディスプレイ全体のガンマ補正やカラー補正ができるよ。
640名称未設定:2009/09/27(日) 16:50:47 ID:QFQWD1/b0
NSTextFieldとNSViewがあるウィンドウでNSViewにフォーカスがあるときに
キーボードが押されたら自動的にNSTextFieldにフォーカスを移して文字を入力したくて
NSWindowControllerのサブクラスの keyDownでキーに応じてmakeFirstResponderを
呼ぶことでフォーカスは変わるようになりました。

これだけだとkeyDownに送られてきた最初の1文字が落ちてしまうので、続けてsendEvent
でkeyDownに送られてきたNSEventをそのまま送ったところ文字も正しく入力できました

しかしキーボードスクリプトがUSになっているときは正常に動くのですがインプットメソッド
がオンになっていると最初の1文字も欠落し、アクセスエラーも発生して落ちてしまいます。

インプットメソッドがオンの状態でフォーカスを移したりキーボードイベントを送るために
は他に何かするべきことがあるのでしょうか?
641名称未設定:2009/09/27(日) 16:57:43 ID:cSxysO5zi
質問に対する回答じゃないんだけど、NSViewがフォーカスされる必要性は?
642名称未設定:2009/09/27(日) 17:04:54 ID:QFQWD1/b0
>>641
NSViewのところがWebKitになっているのでクリックすると
フォーカスが自動で行ってしまっています
643名称未設定:2009/09/27(日) 23:24:29 ID:GASetJZi0
>>642
それは自動でフォーカスが飛ぶという仕様が間違ってるんじゃない?
644名称未設定:2009/09/27(日) 23:52:13 ID:oq4jXm6oi
Viewにフォーカスが当たったらすぐにtextfieldに飛ばすとか。
645名称未設定:2009/09/28(月) 22:57:55 ID:93DalxlJ0
>>640
そのアクセスエラーの内容は?
646名称未設定:2009/09/30(水) 06:07:13 ID:scA/DBrg0
どうでもいいけど WebPreferences.h にShiiraの名前があってワロタ
647名称未設定:2009/09/30(水) 08:47:28 ID:1JBlF5P70
Shiiraは結構いろんなところで見る。Exceptions.plistにもデフォルトではいってる。なぜかIEも。
http://www.intego.com/jp/pix/ism_anti_malware4png.jpg
648名称未設定:2009/09/30(水) 21:52:58 ID:G6R8F85w0
>>647
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Resources/Exceptions.plist
のファイル?
うちだとEntourage, explorer, firefox, OmniWeb5, opera, mozilla, navigatior, thubderbirdしか入ってなかった。
OSは10.5.8。参考までに。
649名称未設定:2009/09/30(水) 22:12:19 ID:1JBlF5P70
>>648
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Exceptions.plist
10.6のアンチマルウェアの監視対象リスト
650名称未設定:2009/09/30(水) 22:53:47 ID:ylIC1dPri
文字列のtrue/falseをBOOL型のYES/NOに変換したいのですが、
どうするのが一番簡単でしょうか?

NSString *string= @"true";
BOOL flag;
if([string isEqualToString:@"true"]){
  flag = YES;
}else
  flag = NO;
}

うーん
651名称未設定:2009/09/30(水) 23:13:11 ID:T5EC4NMt0
>>650
BOOL flag = ([string isEqualToString:@"true"]) ? YES: NO;
こっちのほうが綺麗じゃね?
652名称未設定:2009/09/30(水) 23:13:33 ID:BXSB4LfT0
>>650
それだったら

NSString *string = @"true";
BOOL flag = [string isEqualToString:@"true"];

にはなるな
653名称未設定:2009/10/01(木) 01:33:34 ID:AlezkQY60
何だ、貴様らNSString -(BOOL)boolValue も知らんのか。校庭をうさぎ跳びで10周してこい!
654名称未設定:2009/10/01(木) 09:11:36 ID:iI5Hxjti0
>>653
おー、いつのまにそんなものが
655名称未設定:2009/10/01(木) 10:47:06 ID:Wjjmaewwi
いつの間に?何を言ってるんだ?
656名称未設定:2009/10/01(木) 10:55:37 ID:OKv0guiL0
10.5からだな。
657名称未設定:2009/10/01(木) 13:53:48 ID:djap/B8S0
おいらはまだ阪神です。
658名称未設定:2009/10/01(木) 14:22:17 ID:ZkUTMN5s0
作者がなぜか2chで宣伝してないのでかわりにやってみる。

雪豹完全対応の動画編集ソフト。
Elis Colors
http://d.hatena.ne.jp/yanagia/20090930/1254290804

紹介動画
http://www.nicovideo.jp/watch/sm8381334

Mac歴3ヶ月でここまで作ったらしい。
ベテランのあんたらで鍛えてあげてほしい。
659名称未設定:2009/10/01(木) 17:39:41 ID:wvJCYC+M0
マルチだから作者のところに
抗議メールが殺到するな
660名称未設定:2009/10/01(木) 17:51:18 ID:TdU2m46/0
はてなの方は別になんとも思わないんだけど、この書き込みは上目遣いのいやらしさを感じる
作者に対する嫌がらせか?
661名称未設定:2009/10/01(木) 21:34:36 ID:pA2rj7+n0
GCで質問です。

フレームワークで10.5SDK、デプロイメントターゲット10.4にしてるんですが
-fobjc-gcにしてGC互換にしようと思っています。非GC環境や10.4環境でも使え
るようにするには、finalyzeやNSAutoreleasePool -drainは使えないですよね?

となると、deallocに書いておいていいのはローカル参照へreleaseを投げる処理
だけに縛られると思うのですが、この認識であっていますでしょうか。
662名称未設定:2009/10/02(金) 11:57:32 ID:H5dDqqu+0
NSOutlineViewのセルの中に複数のテキストフィールドやボタンを配置させたいんですが、
これってたぶんNSCellかNSTextCellのカスタムクラスを作って実装するのかなと想像はしているのですが、
参考になるようなサンプルコードがあったら紹介いただけないでしょうか。
663名称未設定:2009/10/02(金) 13:52:48 ID:B9uwRWbC0
>>650
NSArray* array = [NSArray arrayWithObject:@"true"]; // 同義語があれば入れておきましょう
BOOL flag = [array containsObject:@"true"];
ですな
664名称未設定:2009/10/02(金) 14:14:14 ID:EOM/AYxq0
>>663
そういうのはNSSetでやろうぜ…
まあ数が少ないから変わんないだろうけどさ
665名称未設定:2009/10/02(金) 14:19:46 ID:FJEUNtov0
>>662
NSCell, NSTextFieldCellのClass Reference に挙げられているサンプルコードはチェックしましたか?
666名称未設定:2009/10/02(金) 16:25:43 ID:H5dDqqu+0
>>665
いろいろ見てはみたんですが、いまいちよくわからないです。
もうちょっと読み込んでみます。
667名称未設定:2009/10/02(金) 16:39:44 ID:R5Ny2kq00
NSCell自身は描画領域を持っていない。
NSControllerなどから、このNSViewのこの領域におまえ自身を描画しろ。
って言われるのでその通りにすればいいだけ。

マウストラッキングも似たようなもの。
668名称未設定:2009/10/02(金) 18:05:06 ID:UZHAwhofi
hdmtにアイコンとファイル名を出すサンプルがあったはず。
669名称未設定:2009/10/02(金) 22:09:02 ID:qf8S/0bY0
hmdtじゃなくて?
670名称未設定:2009/10/02(金) 22:31:21 ID:xH03jlOW0
>> 667
誤) NSController
正) NSControl
671665:2009/10/02(金) 23:21:10 ID:QRmMbn4P0
>>666
概略を書くと、

cellFrameから各パーツの領域を算出する。
その値を使ってdraw(Interior)WithFrame: inView:をimplementする。
その他、必要に応じてhitTestForEvent: inRect:(NSRect)cellFrame ofView:
trackMouse: inRect: ofView: untilMouseUp: 等をimplementする。

その際に、直接操作しても良いし、或はsuperclassや、sub cellを作って、
それらに上記のメソッドをおまかせしても良い。

DragNDropOutlineViewやImageBackgroundのImageAndTextCellがtitleとimage
を表示するシンプルな例なので、これをまず理解しましょう。
ただcompositeToPoint: operation:はdeprecatedなのでdrawInRect: fromRect: operation: fraction: respectFlipped:hints:
を使うべきでしょう。

ボタンを配置するのは結構難度が高いので、NSCollectionViewで代用できるようなUIなら、
NSCollectionViewを使用するのが簡単だと思います。



672名称未設定:2009/10/02(金) 23:58:48 ID:MhL2pCG+0
673名称未設定:2009/10/03(土) 02:03:39 ID:7FbeVNEf0
Safariのプラグインから、Safariのメニュー状態(具体的には任意のメニュー項目のEnable,Disable)を制御したいのですが、どのように実装すればよいでしょうか?
ちなみにSIMBLも使わないで、自前のSafariプラグインで実装したいのです。
ご教示のほど、よろしくおねがいします
674名称未設定:2009/10/03(土) 02:35:27 ID:r3WeyKWR0
Safariプラグインなんてのはない
675名称未設定:2009/10/03(土) 04:21:00 ID:dib8AaXA0
インターネットプラグイン、もしくはネットスケーププラグインのことじゃ
676名称未設定:2009/10/03(土) 07:46:14 ID:92GnNvghi
>>673
マルチすんなよ
677名称未設定:2009/10/03(土) 10:07:20 ID:FEY8JAxC0
>>673
うわほんとだ。マルチだ。
678名称未設定:2009/10/03(土) 10:14:17 ID:5VowQ29G0
元スレの164に教えてもらえ
679名称未設定:2009/10/03(土) 15:22:29 ID:7FbeVNEf0
>>673
です。
マルチではありません。ほかのスレでは教えてもらえなかったので
このスレでご教示いただければと思っております。
本当に困っているのでよろしくおねがいします。
680名称未設定:2009/10/03(土) 15:31:25 ID:IVdbeOsr0
>>673
そもそもそれって、不可能なんじゃないのか
681名称未設定:2009/10/03(土) 15:35:43 ID:0cMslhpM0
まず、Safariのプラグインが何を指すのか分からない。
682名称未設定:2009/10/03(土) 15:40:22 ID:r3WeyKWR0
>>679
Safariにはプラグイン機構はありません。
どうしても作りたいなら、mach_inject やOSAXを使ったハックでSafariに侵入するか
WebKitプラグインやNPAPIスタイルのプラグインを作って対処してください。

これでいい?
683名称未設定:2009/10/03(土) 15:59:42 ID:IyHk4Di60
>>679
他スレにも書いてるし結局マルチじゃん。
Safariにプラグインはないよ。SIMBLが何をしてるのかも理解できないのにプラグイン作りたいとか言っちゃってるわけ?
てことで諦めなよ。
684名称未設定:2009/10/03(土) 18:13:44 ID:7FbeVNEf0
>>679
です。

Safari用のプラグインは開発可能ですし、実際、開発しています。
http://lists.apple.com/archives/cocoa-dev/2005/Sep/msg00322.html

動作しているSafariのMenuRefがGetMenuHandleで取得できればなんとか
なりそうなのですが、方法があれば教えてください。

685名称未設定:2009/10/03(土) 18:15:39 ID:r3WeyKWR0
>>684
だからそれはSafariプラグインじゃないと何度言えば
686名称未設定:2009/10/03(土) 18:18:07 ID:0cMslhpM0
最近のSafariはインターネットプラグインはサンドボックス内で実行してた気がするが。
687名称未設定:2009/10/03(土) 19:20:35 ID:54nPAKhx0
>>679

って書くと679へのレスに見えるじゃん
名前欄に679って書けよ。

688名称未設定:2009/10/03(土) 19:26:06 ID:LFqIJ+5j0
てっきり自分にレスしてる可哀想な子だと思ってたw
689名称未設定:2009/10/03(土) 20:28:39 ID:dib8AaXA0
インターネットプラグインが特定のWebKit系アプリのUIにアクセスしちゃっていいものなのか
690名称未設定:2009/10/03(土) 20:32:32 ID:5DR2IlA/0
SIMBLとInternetPluginの違いを分かってない奴がいるようだ
691名称未設定:2009/10/03(土) 21:33:34 ID:qCFx/s9S0
しかも人の話しを聞かないときたもんだ
692名称未設定:2009/10/03(土) 23:50:13 ID:TngSNP+D0
顔真っ赤にして逃げたか
693名称未設定:2009/10/04(日) 02:55:37 ID:rW7NUpk00 BE:1994113049-2BP(0)
>>684
>動作しているSafariのMenuRefがGetMenuHandleで取得できればなんとか
>なりそうなのですが、方法があれば教えてください。
カーボンは止めたほうが良いな。
Snow Leopard で 64 bit サファリのときどうするの?
694名称未設定:2009/10/04(日) 10:04:34 ID:aRMjbqe70
Objective-Cで配列の確保ってできるんでしょうか?
あるクラスAがあって宣言で、Cのように
A *arr;

arr = (A*)malloc(sizeof(A) * 10);
ってするとエラーになります。
なにか方法ってありますでしょうか?
695名称未設定:2009/10/04(日) 10:08:17 ID:ElXP2jEs0
>>694
何を入れる配列?
オブジェクトならNSArrayを使え
696名称未設定:2009/10/04(日) 10:11:45 ID:aRMjbqe70
>>695
オブジェクトですが配列を使いたいのです。
方法ってないのでしょうか?
697名称未設定:2009/10/04(日) 10:27:38 ID:IKFf/3kg0
A **arr
arr = (A **)malloc(sizeof(A *) * 10);

Objective-Cのオブジェクトは常にポインタで表現
698名称未設定:2009/10/04(日) 10:49:05 ID:rW7NUpk00
>>696
>オブジェクトですが配列を使いたいのです。
なんで?理由に興味がある
699名称未設定:2009/10/04(日) 11:06:43 ID:aRMjbqe70
>>697
ありがとうございます。
ちょっといろいろ勘違いしてたみたいでした。
ご指摘の方法でうまくいきました。
700名称未設定:2009/10/04(日) 11:07:26 ID:aRMjbqe70
>>698
性能的な問題でオーバーヘッドを極力減らしたいためです。
701名称未設定:2009/10/04(日) 11:16:00 ID:M9tZD7ZY0
*が2個以上付くと嫌になってくる
702名称未設定:2009/10/04(日) 11:17:19 ID:rW7NUpk00
>>700
なるほど。余計なおせっかいかもしれませんが、
ほんとにその変更でスピードがあがってるかどうか、
Shark とか Instruments でチェックしてみましょうね。
ここが遅いんじゃないかと思い込みで最適化してもしかたがないですから。
703名称未設定:2009/10/04(日) 11:20:19 ID:IKFf/3kg0
いや実際NSArrayは遅いよ
704名称未設定:2009/10/04(日) 11:23:01 ID:aRMjbqe70
>>702
アドバイスありがとうございます。
NSArrayを使ったものはすでに作ってあるので、
配列に置き換えたものと比較してみます。

705名称未設定:2009/10/04(日) 12:13:37 ID:4j4rBv5g0
>>704
1000万ぐらい配列をループで回して速度の測定結果教えてよ
いや、1万ぐらいから増やしてくのがいいかな
706名称未設定:2009/10/04(日) 12:25:51 ID:rW7NUpk00
>>705
そういうデータはネットにいろいろ議論がころがってます。
http://ridiculousfish.com/blog/archives/2005/12/23/array/
が昔非常に勉強になりました。ただ、四年まえのデータなので、
NSArray の実装も変わってるでしょうしパソコンのスピードも違いますから
鵜呑みにはできませんが。

ただ、実際問題としては、作ってるプログラムが
実際処理するであろうデータ量に対して適切な方法を選択することだと思います。

僕は pdf を管理するソフトを CoreData でつくってますが、
4万エントリーぐらいで立ち上げ時の読み込みが
10秒ぐらい掛かるのに四苦八苦してます。
iTunes 風のインターフェースで、立ち上げ時に全データのうち
TableView で選択されたカラムでソートしないといけないので
全部読み込まざるを得ず(?)対応策が思いつかず困ってます。

いちど読み込まれてしまえばあとは使ってて問題ないのですが、
なんかいい方法はありませんかね。
707名称未設定:2009/10/04(日) 12:27:20 ID:4j4rBv5g0
>>706
ありがと、読んでみる
708名称未設定:2009/10/04(日) 14:14:17 ID:b4BOfE1ki
CoreDataやめればいいのに
709名称未設定:2009/10/04(日) 15:39:45 ID:lMXu4RKg0
>>706
ソートするために全部読み込まなければならないっていうこと?
ソートならCoreDataでできると思うけど?
710名称未設定:2009/10/04(日) 16:23:20 ID:rW7NUpk00
Fetch request に sortDescriptors を指定して、
fetch limit を指定してやればいいのは判っているつもりですが、NSArrayController をつかって NSTableView に managedObjectContext を
バインドしているもので、
立ち上げ時に nib が読み込まれた段階で全部読み込まれてしまうのです...

もすこし正確に言うと、まず playlist という entity があって、
pdfs という to-many relation をもっています。
pdf という entity は PDF のメタデータを記録していて、
PDF 自体は BLOB なので、ファイルシステムにおいてあって、
CoreData ストアには path (というか alias)自体しか登録してません。

さて、playlist 用の NSOutlineView に
NSArrayController(あ)経由で moc がバインドしてあって、
さらに本体の NSTableView に NSArrayController (い)
の selection.pdfs を指定してます。問題は、ソートは
TableColumn のコラム情報から生成されて NSArrayController (い) の
sort descriptors に指定されているのですが、
こうすると NSArrayController が
selection.pdfs を全部読み込んでから sort descriptor を適用してしまうようです。

もっと賢い NSArrayController のサブクラスをつくればいいのかもしれませんが
なんか根本的にまちがってるのかもしれません。

5000件ぐらいまでは目立った問題はなかったんですが、
自作ソフトを半年つかっていると件数が増えてきて問題が目に見えてきました...
711名称未設定:2009/10/04(日) 16:59:43 ID:GvmL05Ye0
Bindingを使わなければいいんじゃないの
712名称未設定:2009/10/04(日) 17:33:09 ID:IbJBkXkz0
>>686
> 最近のSafariはインターネットプラグインはサンドボックス内で実行してた気がするが。
Netscape styleだけ別プロセスでね。。WebKitPluginは同じプロセス(だから64bit化が必要)。
713名称未設定:2009/10/04(日) 17:35:57 ID:IbJBkXkz0
>>710
CoreDataで出来るかどうか知らないけど、
今は表示後、非同期に追加してるソフトが多いね。
SpotlightとかFinderとか。
714名称未設定:2009/10/04(日) 17:56:42 ID:h1G8hB7A0
>>710
関係するか分からないけど、周辺なことで経験したのを一つ。
(以下のこと、どういう理屈が働いているのか理解はしていない)

CoreDataをNSSQLiteStoreTypeで格納していて、
データ数が徐々に増えて50000~なデータを扱い始めた頃に
検索が鈍くなってきて弱ったことがあった。
で、格納されてる.sqlをsqlite3でvacuumしたら
速度的な問題は気にならなくなった。
だから、アプリケーション読み込み時に
取りあえずvacuumするように変えて運用してる。

あと、個人的体感的に上記ぐらいの規模になったら
NSBinaryStoreTypeよかNSSQLiteStoreTypeの方が
ちゃきちゃき動いてるように感じる。
715名称未設定:2009/10/04(日) 18:25:55 ID:Z+efFcFW0
>>710
NSSQLiteStoreTypeの前提で考えます。
(NSXMLStoreType, NSBinaryStoreType は立ち上げ時に全部メモリにロードされるので。)

自分も似たような自作ソフトを作っていますが、立ち上げを遅延無く行う為には、
playlistを無選択の状態で、立ち上げることです。
その場合to-many relationshipのpdfsはfalut状態のままで、playlistのみfetchされます。

あとpdfのattributesでソートに直接関係しないものは、すべてrelationshipのentityを作ってそれに移動させるとか。
別threadやblockでfetchするのはcontextがthread safeでないので、面倒と思います。
昔、BackgroundFetchingを参考に別threadでfetchを試みましたが、うまく使いこなせませんでした。
716名称未設定:2009/10/04(日) 21:07:07 ID:rW7NUpk00
>>711
なるほど。そうですね、playlist から tableview につかうところのロジックを
binding つかわなければ細かく制御できると思います。
>>714, 715
どうもです。もう昔から SQLite にしてあります。
binary store はかなり遅いと思います。

>playlistを無選択の状態で、立ち上げることです。
なるほど、それは盲点でした。その間に background で fetch でもさせますかね。
幸いこちらはネット上のデータベースからデータをとってくるあたりで
別 thread から moc を弄るコードは沢山かきましたのでなんとかやってみます。
たしかに面倒で、別スレッドの moc で弄ったデータをメインスレッドの moc に
反映させるのはコツがわかるまでエラーがでまくりでした。

立ち上げ時のデバッグでもうひとつ困るのは、一度起動して10s くらいかけて
データベースを読み込んでしまうと、いったんソフトを終了しても
メモリ上のキャッシュにファイルが残っているのか、それ以降は
起動の際に時間がほとんど掛からないんですよね。こうなると
(使うのには便利なのですが)状況が変わってしまって
デバッグがしづらくてこまります。
メモリ上のファイルキャッシュをむりやり解除する方法とかありませんか?
717名称未設定:2009/10/04(日) 21:39:25 ID:sFtkVcJk0
AliasやSymlinkファイルをD&Dで渡されたときの処理って、どう書いてますか?

D&DでNSViewに渡されるのはファイルパスなので、とりあえず思いついたのは普通の
ファイルか、Symlinkか、Aliasかをチェックして分岐というやり方なんですが、なんか
間違ったことをやっているような気もします。
A. 普通のファイルの場合
 1. PathからNSURLを作る
B. Symlinkの場合
 1. PathからNSURLを作る
 2. NSURL -URLByResolvingSymlinksInPath
C. Aliasの場合
 1. FSNewAliasFromPathでAliasを得る
 2. FSResolvAliasでターゲットのFSRefを得る
 3. FSRefMakePathでパスを得る
 4. NSURL +fileURLWithPathでNSURLを得る

10.6だとAliasManagerでなくて、こちらでしょうか。
 1. PathからNSURLを得る
 2. NSURL +bookmarkDataWithContentsOfURL:error:でNSDataなbookmarkを作る
 3. bookmarkからNSURL +URLByResolvingBookmarkData:...でResolveされたNSURLを得る
どう見てもbookmarkって単なるAliasManagerのラッパですね。Symlinkも統一して扱えないのかな。
718715:2009/10/04(日) 23:01:57 ID:Z+efFcFW0
>>716
>その間に background で fetch でもさせますかね。
過去にそれをしました。
別threadでobjectIDをfetchして、main thread で、そのobjectIDからfetchするようにしました。
ところが、思ったよりメリットが無かったのでした。
instrumentで計測した結果が思わしくなかったので、断念しました。
実装が不十分な為でしょうか?

BackgroundFetchingがsnow leopardで消えてしまったので、新たなサンプルが上がるのを期待しているところです。
719名称未設定:2009/10/05(月) 00:02:49 ID:lMXu4RKg0
>>716
原因は、NSArrayControllerがデータベースから全レコードを読み込んでしまうところにあるようなので、NSArrayControllerのサブクラスでも作って、一度に全レコードを読まないように対策するのが良いと思います。
720716:2009/10/05(月) 01:38:07 ID:GeP+fcfj0
>>718
助言の通り、playlist を選択しないで立ち上げることにすると、
まず起動時に Dock でアイコンがはねている段階での
spinning beachball は出なくなりました。NIB 内で NSTreeController に
"avoids empty selection" をしてあったのが失敗でした。
didFinishLaunching の一番おしまいで selection を追加しました。

あと、バックグラウンドでのフェッチも追加してみました。
メインスレッドがNIB の読み込み等頑張っている際に裏で出来るように
main 関数で NSApplication に入る前から別スレッドではじめることにしました。
メインスレッドは CoreData がどうせ binding から呼ばれるので、
objectID も渡しようがありませんが、ファイルがメモリに
一度読まれてしまうためか、メインスレッドからの全レコード読み込みも
速くなってます。>>716 で書いた、二度目以降起動の挙動とも一貫してますね。

このふたつで 10s ぐらいかかっていたのが 5s ぐらいになりました。

>>719
おっしゃるとおりでしょうね...
721名称未設定:2009/10/05(月) 10:36:51 ID:r7gqZFCz0
>>677-671

レスがおくれてすみません。
参考になりました。早速やってみます!ありがとうございました。
722名称未設定:2009/10/05(月) 16:10:24 ID:+/MD7hPJ0
ClassDumpとかして見つけたCocoaの非公開APIをシェアウェアとかに使って公開した場合
Appleからクレームが来たりすることってあるんでしょうか?
あるいはそういうのってライセンス上は違反行為になるんでしょうか?
723名称未設定:2009/10/05(月) 17:07:58 ID:uHDrok/i0
>>722
何も無いが、OSのバージョンアップで動かなくなる事は良くある。
724名称未設定:2009/10/05(月) 20:16:05 ID:Rb81akhL0
>>722
全然大丈夫だけど、メジャーアップデートで涙目になったりはする。
725名称未設定:2009/10/06(火) 00:11:32 ID:sO184Ne/0
>>717
中身がそのまま使いたいだけだよね。
NSURL *aURL = [NSURL fileURLWithPath:「ファイルのパス」];
FSRef fsRef;
Boolean targetIsFolder, wasAliased;
CFURLGetFSRef(aURL, &fsRef);
FSResolveAliasFile(&fsRef, true, &targetIsFolder, &wasAliased);
aURL = CFURLCreateFromFSRef(kCFAllocatorDefault, &fsRef);

NSString *aString = [NSString stringWithContentsOfURL:aURL];
とかやっちゃえばいんじゃない?実体はResolveしてもfsRefそのまま残るし
SymbolicLinkも解決してくれちゃうし。
それがaliasだったりしたら何か別のことがやりたいと言うのならまたいろい
ろあるだろうけど。
726名称未設定:2009/10/06(火) 00:19:47 ID:sO184Ne/0
あ、エンコードして伊那市のstringWithContentsOfURLはdeprecatedだった、、、
まあ本筋には関係ないからいいか。
727名称未設定:2009/10/06(火) 00:30:04 ID:Ns6tt4Sb0
>>726
伊那市?
728名称未設定:2009/10/06(火) 00:49:50 ID:rhg+dOn10
指定なし、かと
729名称未設定:2009/10/06(火) 07:51:25 ID:icBNuGxT0
>>725
>FSResolveAliasFile
あ、FSResolveAliasになってました。orz。

取り出したNSURLをScripting Bridgeにぶちこむために、解決されたNSURLが必要
なのです。AliasファイルのNSURLを渡したら動かなかった(QuickTime Player 7)
730名称未設定:2009/10/06(火) 10:59:39 ID:b9Yks0pt0
質問です、10.6 SDK で自前の NSZone を作り、+ allocWithZone: でインスタンス化
したのですが、-zone で返ってくるのが NSDefaultMallocZone() にしかなりません。
+allocWithZone: の中では、NSAllocateObject() を呼んで自前のzoneを渡しています。
ちょっと古いですが、
ttp://www.mulle-kybernetik.com/artikel/Optimization/opti-2.html
の一番下にあるコードを実行しても独立した zone には確保されず・・・
NSZone ってGC導入でRetainCountででも、機能してないってことですかね?
731名称未設定:2009/10/06(火) 18:10:55 ID:FS21kYcL0
CGImageCreateでオフスクリーンとして作成したCGImageRefを
NSViewのサブクラスのdrawRectでビューに表示したい場合、どのようにすればよいでしょうか?
コードを書いていただけると助かります。またはサンプルがあるURLを教えてください。
732名称未設定:2009/10/06(火) 18:17:51 ID:49dxZUDJ0
733名称未設定:2009/10/06(火) 18:22:31 ID:HMsZN5eJ0
10.5 以上なら

NSBitmapImageRep *rep = [[[NSBitmapImageRep alloc] initWithCGImage:imageRef] autorelease];
CGImageRelease(imageRef);
でおk
734名称未設定:2009/10/06(火) 20:42:45 ID:9JaVMdIt0
>>730
ガベコレ有効にしてNSCreateZoneを呼ぶと
*** NSCreateZone: creating a zone while running GC is ignored
って、言われるけどこれだけでは不服なの?
735名称未設定:2009/10/06(火) 23:06:26 ID:/818Tbkgi
Garbage Collection Programming Guideに
+allocWithZone:
The zone argument is ignored.
って書いてあるね。
736名称未設定:2009/10/07(水) 04:10:44 ID:/D7tJVKR0
Cocoa歴2ヶ月、電卓ぐらいはすぐ作れる、ぐらいのレベルの者です。
今までやった参考書はHMDT黒本のみです。

こういう段階で、次に何を勉強すればステップアップできるでしょうか。
とりあえずアプリを作ろうとしてみても、知識が少なく俯瞰して見れない
ため、つまづいたときにどうすれば良いかも分かりません。

アドバイスがありましたらよろしくお願いします。
737名称未設定:2009/10/07(水) 06:08:57 ID:cBbg7tr+0
>>736
まずは言語を気にせず、どんなソフトを作ろうと思っているのか
しっかりとした仕様書をつくることだな
738名称未設定:2009/10/07(水) 09:40:00 ID:/dxPqdBo0
>>730, 735
あぁ、うまく伝わらない文章ですみません。GC使用時に NSZone が使えないのは知って
います。今回のはRetainCount方式のメモリ管理で、自前のゾーンを指定してalloc
しているのに、できたインスタンスはdefaultゾーン上に確保されている、という状況。
NSZone *myZone = NSCreateZone(NSPageSize(), NSPageSize(), YES);
NSString *str = [[NSString allocWithZone:myZone] initWithUTF8String:"str"];
printf("myZone: %p¥n", myZone); //myZone: 0x100047000
printf("defZone: %p¥n", NSDefaultMallocZone()); //defZone: 0x10000e000
printf("strZone: %p¥n", [hoge zone]); //strZone: 0x10000e000
となり、hogeがデフォルトゾーン上に確保されています。
739名称未設定:2009/10/07(水) 09:46:52 ID:QoiSNj1P0
>>736
HMDTは入門書としてはどうかと思うが、入門書が終わったのなら、後は作って
みたいプログラムをガンガン作って数をこなしていくことだ。習うより慣れろ
(by パソコンサンデー)。

AppleのApplication KitとFoundationのAPIリファレンス見ながらプログラム
すれば大抵のものは作れるはず。
740名称未設定:2009/10/07(水) 09:55:38 ID:/dxPqdBo0
アンカミスった、すみません。738は >735, 736 です。
741名称未設定:2009/10/07(水) 10:29:08 ID:mtL8obdO0
>>738
NSStringがゾーン指定を無視しているのでは?
NSObjectを継承しただけのクラスなら、指定したゾーンに作成されたよ

英語苦手なんだけど、ものによってはゾーン無視するって書いてあるように見える。
Note: Although the allocWithZone: method lets you specify a zone in which to allocate the object, the provided zone is only a suggestion.
The object’s implementation may ignore the zone if it chooses to.
742名称未設定:2009/10/07(水) 11:14:13 ID:/dxPqdBo0
>>741
ありがとうございます。NSObjectで自前のゾーンに確保されました。
ちゃんと書いてありますね…把握していませんでした(汗)。感謝です m(_ _)m
743名称未設定:2009/10/07(水) 11:17:17 ID:WzdmqMt90
そもそもinitで返ってきたインスタンスがallocで確保したインスタンスと同じとは限らない
744名称未設定:2009/10/07(水) 11:37:48 ID:/dxPqdBo0
>>743
ご指摘ありがとうございます。実はクラスクラスタを作る過程で、PlaceHolderObjを
シングルトンで作り、ConcreteObj の +allocWithZone: 内でNSAllocateObject(self, 0,
myZone) を呼んでいました。これで返ってくるインスタンスのゾーンが指定と違って
いたので、気になりまして。指定が無視されることがあると知らなかったもので…
745名称未設定:2009/10/08(木) 18:21:06 ID:4zwVFa2v0
>>736,739
レスありがとうございました。精進します。
746名称未設定:2009/10/09(金) 09:57:42 ID:AdwKY8t00
メモリ管理についてですが、

・alloc したオブジェクトは自分で release か autorelease しなければならない
・それ以外の方法で生成した場合は最初から autorelease されている

という理解でいいんでしょうか。
また、NSError** を引数に取るメソッドのサンプルを見ても
生成された NSError に対して release などをしている例が見つからなかったのですが、
これも生成された時点で autorelease されているのでしょうか?
747名称未設定:2009/10/09(金) 10:26:24 ID:vd2qs2SW0
>>746
・alloc+init(あるいはnew)したオブジェクト、copy、mutableCopyしたオブジェクト、retainしたオブジェクトはretainCountが+1。
・自分で+1したオブジェクトは自分で-1、すなわちrelease、あるいはautoreleaseする。
・ファクトリメソッドで得たオブジェクトは基本的にalloc+init+autoreleaseされている。
748名称未設定:2009/10/09(金) 10:29:24 ID:vd2qs2SW0
749名称未設定:2009/10/09(金) 10:59:49 ID:oR1R+CLW0
1、alloc,copy, mutableCopy, retain したらreleaseする。
2、他は気にしない。

retainCountが云々は放置でいいよ。

retainしたからといってretainCountが+1されるわけではないです。
NSLog("%u",[[[[[NSNumber numberWithInt:1] retain] retain] retain] retainCount]);

retainCountに固執しすぎて壊れてた人がどこかのスレにいたし。
retainCountは忘れた方がいい。
750名称未設定:2009/10/09(金) 11:07:54 ID:vd2qs2SW0
>>749
今のretainCountというより、やった増減を意識しないと駄目。「回数」であることを理解するには、retainしたらrelease、じゃ駄目。

あとそのコードで言うとNSNumberのインスタンスはじゃあreleaseしなくていいか?っていうと違うでしょ。
たまたまいくつかの数値についてインスタンスを共有する実装になっているだけ。
751746:2009/10/09(金) 11:11:12 ID:AdwKY8t00
ありがとうございます、よく分かりました。
リンク先の「オブジェクトの所有権」のあたりも読みましたが、
参照カウントの増減よりも、オブジェクトの所有権がどうなっているかを
意識しないといけないんですね。
752名称未設定:2009/10/09(金) 11:23:14 ID:9UXcVq/D0
どっちかって言うと、こっちじゃないか?

Cocoaメモリ管理プログラミングガイド
https://developer.apple.com/jp/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt
753名称未設定:2009/10/09(金) 11:42:18 ID:5PTyAr380
メモリリークを解消する魔法の呪文

「5分おきにアプリを再起動してください」
754名称未設定:2009/10/09(金) 12:01:30 ID:oR1R+CLW0
>>750
そういう意味じゃなくて中にはretain/releaseをretainCountを増減させるメソッド、
retainCountは絶対的存在って思っちゃう人がいるの。
で、retainCountばかり気にしてretain/releaseの本質としての保持/開放を理解しない。
さらに酷いと、例みたいなライトウエイトなオブジェクトで発狂しだす。

だから、いきなりretainCountを持ち出すのは良くないと思う。

>>753
それならいっそ「5分おきに再起動するアプリ」にすればユーザーの手を煩わせることもないねw
755名称未設定:2009/10/09(金) 12:12:27 ID:RIes6/9Ii
autorelease野郎な俺は、起動するとすぐスワップが1GBに!
756名称未設定:2009/10/10(土) 18:46:12 ID:NXWWcOea0
なんかゾーンにこだわっている人がいるみたいだけど、
いまどきそんなもん使ったって性能の向上にはそうそうならないよ。
実際中の人だってもうほとんど使ってないんだし。
757名称未設定:2009/10/11(日) 07:51:20 ID:8pvLzu4z0
えーマジ ゾーンを使ってるの!?
キモーイ
ゾーンで性能が向上するのはMC68040までだよねー
キャハハ ハハハハ
758名称未設定:2009/10/11(日) 13:56:42 ID:z41TiSh80
どかーん!
(⌒⌒⌒)
 ||

/ ̄ ̄ ̄ ̄ ̄\   もうおこったゾーン
| ・ U      |
| |ι        |つ
U||  ̄ ̄ ||
   ̄      ̄
759名称未設定:2009/10/11(日) 16:29:40 ID:wV6CRLpt0
このスレに……おっさんが混じってる。
>>758お前やろ!?
760名称未設定:2009/10/11(日) 16:37:16 ID:jPtit2/ci
Cocoaプログラマの平均年齢は43歳
761名称未設定:2009/10/11(日) 18:19:03 ID:z41TiSh80
ごめん俺24歳
762名称未設定:2009/10/11(日) 18:22:05 ID:IjErj05f0
>>761
ぃょぅ同い年!
ここ数年プログラミングなんてしてないけど
763名称未設定:2009/10/11(日) 18:56:31 ID:ULw26k7J0
俺22歳
ここ数ヶ月、このスレ流し読みしてるだけだけど
764名称未設定:2009/10/11(日) 19:06:28 ID:wV6CRLpt0
仕事でやってなくてプログラマと言えるのか
765名称未設定:2009/10/11(日) 19:21:36 ID:LQWU97Vc0
>>757
プログラミングのスレでそういうアホなボケをかまされてもなあ。
766名称未設定:2009/10/11(日) 20:00:49 ID:yrhWdVEO0
Code WarriorでMacOS Xアプリを作っている漢いますか?
PowerPlantとか便利だったなあ・・・
767名称未設定:2009/10/11(日) 21:53:50 ID:8auAoDFk0
>>766
PowerPlant ならオープンソースになってるので、
XCode つかえば universal binary もできまっせ。
http://sourceforge.net/projects/open-powerplant/

まあ、PowerPlant のソースを移植すると言うのでなければ、
Cocoa のクラス群は同等以上に強力だと思いますがね。
基本の考え方はちょっとちがうけど。
768名称未設定:2009/10/12(月) 05:02:31 ID:bOyd3a3w0
AppleのSketch-112サンプル
http://developer.apple.com/mac/library/samplecode/Sketch-112/index.html#/
/apple_ref/doc/uid/DTS10003720
で、ルーラーを表示している処理の部分を教えてください。
コードを追っても見あたらなくて困っています。
769名称未設定:2009/10/12(月) 07:41:07 ID:/ZsOTB8u0
SKTRulerView.m にあります。あと NSRulerView を参照。
というか、XCode にはプロジェクト内検索がついてるので、
そこで ruler を全体で大文字小文字無視して検索すると
すぐにみつかるはずです。がんばってね!
770名称未設定:2009/10/12(月) 07:46:43 ID:/ZsOTB8u0
失礼、SKTGraphicView.m でした
771名称未設定:2009/10/12(月) 14:45:02 ID:bOyd3a3w0
>>770
SKTGraphicView.mで行っているだろうという想像はついています。
しかし、定規を描画したり数値を描画している部分が見あたりません。
また、drawRect:を完全にコメントアウトしても、なぜかルーラーが
表示されます。
いったいどこでルーラーの表示を行っているのでしょうか。
772715:2009/10/12(月) 15:14:58 ID:k/+c54960
>>771
>しかし、定規を描画したり数値を描画している部分が見あたりません。
enclosingScrollView
773名称未設定:2009/10/12(月) 15:20:07 ID:1qHZkhui0
TweetieというTwitterクライアントがあります。
http://www.atebits.com/tweetie-mac/
このつぶやきが並んでいたりその左に並んでいるアイコンの列のビューはとても美しく
スクロールもできたりいろいろこって作ってあるように見えます。

このような独自のビューを作るにはCocoaではどこまでさかのぼって独自の実装していけばいいのでしょうか。
NSViewまでさかのぼるのではないよい常套手段的な方法があるのでしょうか。
例えば実はこれはNSTableViewやそのcellをいじればできる、ということはさすがにないでしょうか。
何かこのクラスのここをいじる、などというアドバイスをいただければうれしいです。
774名称未設定:2009/10/12(月) 16:48:28 ID:bOyd3a3w0
>>772
NSRulerViewがルーラーの表示を自動的に行うのでしょうか?
ルーラー表示の設定は、toggleRulerの中で行っているだけでしょうか?
また、ルーラーが表示される際に、NSScrollViewの左上座標が右下に
ずれることになりますが、その処理はどこで行っているのでしょうか?
775名称未設定:2009/10/12(月) 16:49:56 ID:LsOHnyzh0
>>773
カスタムセル
776名称未設定:2009/10/12(月) 21:02:18 ID:/ZsOTB8u0
>>774
2ch で聞く前に、ADC で検索して調べましょうね。
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Rulers/Rulers.html
777名称未設定:2009/10/12(月) 21:07:28 ID:qBqKj6Dr0
ヒント:ゆとり、英語
778名称未設定:2009/10/12(月) 21:45:21 ID:5M9o4iTa0
>>773
NSCellをNSMatrixで並べて、それをNSScrollViewに入れれば、それっぽい感じになると思う。
779名称未設定:2009/10/12(月) 22:05:15 ID:tP7KF0UV0
なんでもかんでもゆとりで片づくってすげえ時代だなwwwwww
780名称未設定:2009/10/13(火) 02:24:43 ID:3KZFgPQx0
>>779
どの時代でもそうだよ。
新人類とか今時の若いものはとか、、、
781名称未設定:2009/10/13(火) 08:15:18 ID:EQ/aC8bY0
>>775
>>778
アドバイスありがとうございました。この方向でクラスを作っていろいろ実験してみたいと思います。

Tweetieのようなこったインタフェイスだけではなく、
例えばSafariのダウンロードウインドウのスクロールビューもきっと同じ方法で作られているんでしょうね。
782名称未設定:2009/10/13(火) 08:16:32 ID:O6gJMc+70
NSCollectionViewという手も
783名称未設定:2009/10/15(木) 21:39:16 ID:0cxf5Vi90
Mac OS X Cocoaプログラミング 第3版   11月発売(予定)
http://www.pej-hed.jp/washo/2854.html
784名称未設定:2009/10/15(木) 22:13:03 ID:3S43n1li0
お、ヒレガス本第3版出るんだね。
785名称未設定:2009/10/15(木) 22:31:36 ID:G5Tf7psz0
NSNumber* n = [NSNumber numberWithInt:5];
detachNewThreadSelector:@selector(proc:) toTarget:self withObject:num


で、NSNumberをスレッドに渡しています。
この際、呼び出し源ではNSNumberをすぐに破棄し、スレッド側はしばらく使います。
NSNumberをもらった側のスレッドは、retainしておく必要はあるのでしょうか?
786名称未設定:2009/10/15(木) 22:59:19 ID:6apmvHpx0
>>785
うん
787名称未設定:2009/10/15(木) 23:55:07 ID:xXVncT+n0
>>783
やっと出るんだ。遅過ぎたくらいだよ。
788名称未設定:2009/10/16(金) 10:08:38 ID:OifTD6Aa0
もらった側で retain するんじゃだめなんだろうか。
789名称未設定:2009/10/16(金) 10:53:17 ID:4urzZutJ0
セルの話がちらほら出てるけど、よくわからないなあ。
iPhoneアプリのBB2Cでスレッドのレス一覧を表示したときのような、
一つのセルの中に二つセルが入っていて片方は日付けとハンドル名を表示するヘッダ、
片方は本文表示のためのviewみたいになってるのはどうやんだろう。
iPhoneOSのUITableCellはUIViewのサブクラスになっていてそれでIBで編集できるみたいなんだけど、
MacOSのNSTextFieldCellはViewが無いからなのかmatrixも使えないし、IBで直接いじれないし。
790名称未設定:2009/10/16(金) 12:47:37 ID:rrYsF6kIi
NSTextFieldCellのサブクラスでタイトルや本文それぞれのorigin、rectを
計算して描画してるのでは?
私のアプリのNSTableColumnではそうしてます。
791名称未設定:2009/10/16(金) 13:27:56 ID:4urzZutJ0
>>790
でもあれって直接ヘッダのセルを選択できるんだぜ。
その実装でできるのかな。
792名称未設定:2009/10/16(金) 13:48:10 ID:P1JAys4x0
>>791
出来る
793名称未設定:2009/10/16(金) 15:40:48 ID:5MS1745Yi
>>791
あれってBB2Cのこと?
ヘッダーが選択出来るって、範囲選択出来るってこと?
(今、BB2Cだけどそんなこと出来ない)
794名称未設定:2009/10/16(金) 16:56:02 ID:97t39q5j0
>>785
不要
スレッドが呼び出し元が終わる前に始まるなんて保証されてないし
NSApplicationのdetachDrawingThread:toTarget:withObject:が保持する
…はず
795名称未設定:2009/10/16(金) 17:01:14 ID:eDgfPjCr0
>The objects aTarget and anArgument are retained during the
> execution of the detached thread, then released.
796名称未設定:2009/10/16(金) 17:29:25 ID:VRvCxzpm0
>>794-795
ありがとう。
スレッド呼び出し前後で[num retainCount]をしてみても、
タイミングによってカウントが増えていなかったり2つ増えたりしていて、

前:2
後:4

のパターンや

前:4
後:4

のパターンがあったので、どうしても理解が出来ませんでした
797名称未設定:2009/10/16(金) 17:32:10 ID:5ApMo7nw0
>>796
>>749-750あたりを読んでみ
798名称未設定:2009/10/16(金) 21:31:48 ID:dVI7aAhH0
>>556

自己レスですが、NSOutlineView のグレーのグループ表示
(Finder でいう「デバイス」や「場所」の表示)にするには、

isGroupItem:(id)item

を使えば良いんですね。
799名称未設定:2009/10/16(金) 23:26:36 ID:7PiILeNP0
独自クラスにdelegate用のインスタンス変数を

 id delegate;

と宣言して、その独自クラスのメソッド内で

 [delegate hoge];

とメッセージ送信の記述をしてビルドすると

waring: no '-hoge' method found
(Messages without a matching method signature will be assumed to return 'id' and accept '...' as argments.)

というwaringが出てしまいます。このwaringを出力させないようにするにはどうすればいいでしょうか?
800名称未設定:2009/10/16(金) 23:36:24 ID:J59vdOA00
フレームワークでも良くやってるように、

@interface NSObject (HogeDelegate)
- (void)hoge;
@end

って書いておく。

あと、-[NSObject respondsToSelector:]で確認してから呼ぶようにするのが良いです。
801名称未設定:2009/10/16(金) 23:38:50 ID:yMjTd1/p0
最近は非形式プロトコルはあんま使わない傾向にある
802名称未設定:2009/10/16(金) 23:41:44 ID:J59vdOA00
>>801
代案を教えてください
803名称未設定:2009/10/16(金) 23:43:18 ID:2EVRLXMbi
プロトコル使え

id <HogeDelegate> delegate;
804名称未設定:2009/10/16(金) 23:48:28 ID:J59vdOA00
それが最近の傾向なの?
805名称未設定:2009/10/16(金) 23:52:19 ID:2EVRLXMbi
Obj-C 2.0でコンパイラにちゃんとチェックしてもらいたければ
806名称未設定:2009/10/16(金) 23:58:06 ID:yMjTd1/p0
>>802
>>803の通り形式プロトコルを使うのが主流。
もちろん場合によってはoptionalにして。
807名称未設定:2009/10/17(土) 00:12:11 ID:h0NsC1i00
>>805
ObjC 2.0のドキュメント見てきた。
@optional @required てのが出来てたのか。
ObjC 2.0 いいな。tiger切り捨てるか。
808名称未設定:2009/10/17(土) 01:17:41 ID:5G4C3uGe0
>>807
ぷろぱてーもイイよー
809799:2009/10/17(土) 05:51:07 ID:1Bpw4WlM0
なるほど、プロトコルですか!ありがとうございます!
早起きして良かったです。(´^ω^)
810名称未設定:2009/10/17(土) 10:36:26 ID:wot/p3b40
performSelector: で逃げてるけど、これはよろしくない?
811名称未設定:2009/10/17(土) 10:41:07 ID:O3gCne/A0
プロトコル使ってても@optionalであればperformSelector:は積極的に使用すべき
812名称未設定:2009/10/17(土) 10:42:14 ID:BphIDbC2i
お前がいいならいいんじゃね
813名称未設定:2009/10/17(土) 14:41:17 ID:d6mlO6Ze0
NSArray に addObject: を performSelector: しても YES が返るってあるらしいけど。
814名称未設定:2009/10/17(土) 14:58:03 ID:QkD25R9g0
@optional なら performSelector: じゃなくて respondsToSelector: で先に調べないとダメでしょ?
実装してないとnot implement的な例外投げれるはず。

あとperformSelector: の返値の型はidです。
815810:2009/10/17(土) 15:35:01 ID:vl3BH3Ab0
respondsToSelector:で確認するのは(話しの流れからも)当然の前提として
performSelector:はコンパイルのwaringを防ぐ目的でプロトコルを宣言する代わりに使ってるけどそれはどうでしょう?
という意図でした。ざっと読んでレスしたからレス相手の分からん独り言になってしまってましたね;
816名称未設定:2009/10/17(土) 23:34:32 ID:O3gCne/A0
ごめん、performSelector:をrespondsToSelector:と空目してた
817名称未設定:2009/10/18(日) 12:02:53 ID:OVrFteq20
初心者です。いろいろやってわからなかったので質問したいのですが、

今iPhoneで文章のアニメーションをしたいと思っています。
具体的には、ドックにマウスオーバーした時のような吹き出しを拡大表示→移動をしたいです。

iPhoneでCATextLayerって使えないんでしょうか?
QuartzCore.framework を import してみても コンパイルエラーとなってしまいます。
Core Animation Programming Guideを見ても特にそのような記述は見つからなかったんですが。
818名称未設定:2009/10/18(日) 13:22:28 ID:t6PRj51d0
>>787
入門Cocoaの改定をせずに、節操なくiPhoneの本を出す
テクノロジックアートよりは仕事をしている。

819名称未設定:2009/10/18(日) 15:00:07 ID:L4PY5Epa0
>>817
記述が無いって事は、つまり使えないという事だ。
820名称未設定:2009/10/18(日) 20:33:55 ID:kG/BPdO60
NSRulerViewによるルーラー表示では、デフォルトのままでは
縦軸の座標0が左下にきてしまいます。基点を左上にしたり、
任意の座標を(0,0)の基点にしたり、表示倍率を考慮して
ルーラーの間隔を調整するには、どういうメソッドを使えばよいのでしょうか。
教えてください
821名称未設定:2009/10/18(日) 22:53:38 ID:kG/BPdO60
ルーラーの倍率、間隔を変える方法は、
[NSRulerView registerUnitWithName〜
で解決しました。
あとは、ビュー上の任意の座標を(0,0)基点にしたいのです。
例えば、マイナス値からはじまり、途中で0から増える
ルーラーを作りたいのです。
方法を教えてください。
822名称未設定:2009/10/18(日) 23:10:04 ID:kG/BPdO60
>>820&821です
サンプルでは垂直ルーラーの基点が左上から0が始まっているのに
自作の物では、左下から0が始まってしまいます。
その変更方法も加えて教えてください
よろしくおねがいします
823名称未設定:2009/10/19(月) 00:10:51 ID:M+AjsOXI0
>>820-822
NSRulerView使ったことないから推測で物を言うけど、カスタムビューのisFlipped。
あとNSRulerViewのsetOriginOffset:。
ていうかリファレンス読んでこいよ。
http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSRulerView_Class/Reference/Reference.html#//apple_ref/doc/uid/20000376
824名称未設定:2009/10/19(月) 00:19:35 ID:otzxejAT0
これだからゆとりは。
825名称未設定:2009/10/19(月) 01:28:55 ID:4D6AQVKDi
ていうか、頭に思った瞬間にレス書き込んでるなw
826名称未設定:2009/10/19(月) 22:18:39 ID:0p45g/LQ0
CGAffineTransformRotateで回転させる際に、回転の中心点を指定する方法を
教えてください。drawImageで画像を描画する転送先Rectの中心を回転の中心に
させたいのです。
現在
CGAffineTransform trans;
trans = CGAffineTransformMake(1,0,0,-1,0,画像の縦幅)
trans = CGAffineTransformRotate(trans,M_PI*角度/180.0);
CGContextConcatCTM(imageContextRef,trans);
という風にしていますが、回転の中心軸が画面より左下になっているようです。
827名称未設定:2009/10/20(火) 10:49:17 ID:WmCKWCMM0
http://developer.apple.com/jp/iphone/library/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/chapter_3_section_12.html

リンク先の、
「リスト 2-11 AVAudioPlayerオブジェクトの設定」の、

AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil];

[fileURL release];
self.player = newPlayer;
[newPlayer release];

このコードで、
newPlayerをリリースしてるけど、
リリースしちゃったら、self.playerでも参照できなくなるんじゃないの?
ぬるぽになると思うんだけど。
828827:2009/10/20(火) 10:59:43 ID:WmCKWCMM0
setterでretainしてるからいいのか!
829名称未設定:2009/10/20(火) 11:00:02 ID:eByEMEC10
ちゃんとよんでないけど、セッタの中で retain してるんだろ。
830名称未設定:2009/10/20(火) 11:04:32 ID:9d5+yMBoi
ドット構文がsetValue:forKeyになる。
だから、retainされる。
で、呼出元が保持している必要が
無くなるので、release出来る。
831名称未設定:2009/10/20(火) 12:33:35 ID:B/s36URI0
@property () でそこらへんの設定は任意だろ。
832827:2009/10/20(火) 13:06:29 ID:WmCKWCMM0
>>829
>>830
>>831

さんくすこ
たぶんプロパティ内でretainしてる前提のコードだった

プロパティ内でretainされる可能性があるっていうのが、
いまいち体になじまないわ

C言語と同じように全てのメモリ管理を
プログラマに一任する形のほうがわかりやすいと思うけど、
そのうち慣れてくのかな
833名称未設定:2009/10/20(火) 13:30:21 ID:tgtAvRjt0
>>830
> ドット構文がsetValue:forKeyになる。
なりません
834名称未設定:2009/10/20(火) 13:43:54 ID:B/s36URI0
普通にsetHoge:()だよな。
835名称未設定:2009/10/20(火) 14:51:18 ID:WmCKWCMM0
みんなセッターゲッターをプロパティとしてちゃんと定義してるの?
全部privateのインスタンス変数に入れて、
setValueとか、getValueっていうメソッド作って終わりにしてる。

セッターはsetとかのプレフィックスを書かないのが通例みたいだけど、
それも書いてるなあ。
836名称未設定:2009/10/20(火) 14:56:05 ID:MZ4M56vi0
郷に入っては郷に従えってな
Cocoaフレームワークの例を見てそれと同じようにしてるよ
クラス設計もメソッド名もプロパティもデリゲートも
837名称未設定:2009/10/20(火) 15:05:53 ID:WmCKWCMM0
やっぱり郷に従う方がいいかー。
慣れたらサンプルソースも読みやすくなるし。

iPhone開発が
しかし、ここまで癖のある言語、フレームワークだとは思ってなかった。
MFCに比べたら全然ハードル低いとは思うけど。
838名称未設定:2009/10/20(火) 15:11:10 ID:B/s36URI0
>>837
どうせ色々ミスってるだろうから素直に@synthesize使っとけ。

>>832
> たぶんプロパティ内でretainしてる前提のコードだった

たぶんて何だよ。
839名称未設定:2009/10/20(火) 15:44:58 ID:PBHQvZSm0
>>835
setは書くのが普通
getは書かないのが普通
840名称未設定:2009/10/20(火) 16:02:41 ID:wDEnNN6ki
setUnko(NSUnko*)unko;
(NSUnko*)unko;

こうですか><
841名称未設定:2009/10/20(火) 16:10:58 ID:3piaTqLz0
高校生チックなネーミングだな
842名称未設定:2009/10/20(火) 16:17:59 ID:PBHQvZSm0
>>840
大体いいけど自分のクラスにNSを付けるのはあまりいい考えじゃないな
Appleが今後NSUnkoを定義したら大変だ
843名称未設定:2009/10/20(火) 16:20:28 ID:PBHQvZSm0
- (void)setUnko:(Unko*)unko;
- (Unko*)unko;
844名称未設定:2009/10/20(火) 16:26:34 ID:lZrdFUzhi
>>841
STUDIO-蔵の人に失礼じゃないかねw
845名称未設定:2009/10/20(火) 16:38:53 ID:WmCKWCMM0
init系のメソッドは、
- (id) initXXX;

で、id型を返すのが通例みたいだけど、
ちゃんとそのクラスの型を返してあげた方がよくない?

- (Test *) initTest;

みたいな感じで。
なんでもかんでもid型で返すメリットがわからない。
846名称未設定:2009/10/20(火) 16:39:52 ID:WmCKWCMM0
>>838
素直に@synthesize使うようにするよ
847名称未設定:2009/10/20(火) 16:43:31 ID:+2oNd3KW0
>>845
subclassでoverridedするときに、typeが指定されてると困ります。
848名称未設定:2009/10/20(火) 17:29:59 ID:XhUNjT0D0
>>837
セッタは setXXX, ゲッタは XXX にしとかないと、
KVO / KVC がきかなくなるので慣習に従っておいたほうがいいです。

KVO / KVC は使い方がわかると断然ソースコードの書く量が減りますよ。
849名称未設定:2009/10/20(火) 18:13:52 ID:eByEMEC10
>>845
typedef id *Test; な状態だから、何でもかんでも id でやり取りしてるんよ、中では。
ttp://journal.mycom.co.jp/column/objc/index.html

>>847
やってみな、オブジェクトならなーんも困る事無いから。コンパイラエラーも出んよ。
850名称未設定:2009/10/20(火) 19:27:19 ID:tgtAvRjt0
>>849
warningが出ます。
851名称未設定:2009/10/20(火) 19:56:14 ID:eByEMEC10
>>851
warningはでますね、でもそういう意味で言った訳じゃないんですが(笑)
NSNumber *num = [NSString stringWithUTF8String:"hoge"]; でも warnig は
出ますが、*NSString として動きますから。言語仕様上、何にも困る事は無いです。
分かってるくせに〜
852名称未設定:2009/10/20(火) 20:04:36 ID:MZ4M56vi0
>>851
動くならいいってんなら全部id型でやるのもいいってことになるだろ…
静的型チェックをなんのためにやってんだよ
853名称未設定:2009/10/20(火) 20:34:36 ID:eByEMEC10
だからー「言語仕様上」は問題ないと言っているだけで…マ側が注意さえしていれば、
全て id でやっても問題ないでしょ?全てidでやれる事でObj-Cの動的側面が達成されて
いるのだし。クラスの型チェックなんて、Obj-C ではお飾りですがな。エライ人には(ry
± (Class)class もオーバーライドできるし、object_setClass() もあるのだから。
静的型チェックの意義はもちろんあるが、そういう意味で言っているのではありません。
書き方が悪かったかも知れませぬが、誤解なきようお願いします。
854名称未設定:2009/10/20(火) 20:37:22 ID:MZ4M56vi0
話の発端が>>845だからあんたの言ってることは全部的外れなんだよ。
855名称未設定:2009/10/20(火) 20:52:07 ID:eByEMEC10
>584の「なんでもかんでもid型で返すメリットがわからない。」に対するレスですよ。
なかでは id でやりとりしている。何でもかんでもid型で返すメリットは、
動的特性に繋がっていますよね。静的型チェックの話はあなたが持ち出したのであって…
まぁこの話は終わりにしましょう。
856名称未設定:2009/10/20(火) 20:57:32 ID:3piaTqLz0
cocoaはさっぱりだが849までと815以降の態度の変わりっぷりに惚れた
857名称未設定:2009/10/20(火) 21:19:14 ID:VCn3RMpr0
>>845
そーすると、サブクラスでinitを実装することが「必須」になっちゃうんじゃないか
858名称未設定:2009/10/20(火) 21:33:13 ID:0Al2NicU0
>>845の例でいうと、サブクラスでTest *を返すイニシャライザを使ってid型の変数に代入し、
そうやってできたサブクラスのインスタンスのプロパティにドット構文でアクセスするとコンパイルエラー。
859名称未設定:2009/10/20(火) 22:13:08 ID:RmidTmJb0
>>845
サブクラスを定義したときに、
Sub *sub = [[Sub alloc] initXXX];
これを実現するためだと思うが。
なので>>855 やはり型チェックの話では。

initXXXが親クラスを返すのだとしたら、Sub*に暗黙のダウンキャストができない。
他の静的型付けOO言語だと、言語要素としてコンストラクタを入れることで解決してる。

Obj-Cではもっと動的なことが可能で、
Class clsObj = ...;
Sub *sub = [[clsObj alloc] initXXX];
このような書き方もできる、はず。

idで返すのは柔軟性を維持しつつ型エラーを起こさずにするため。
initの結果だけidを具体的な型にキャストするような書き方にすれば、
型がidの場所を限定できる。
860名称未設定:2009/10/20(火) 22:34:23 ID:XJUgiA2N0
>>856
849までと851以降の間違いだろ
861名称未設定:2009/10/20(火) 23:11:04 ID:Qe55qiAa0
>>853
Objective-Cは、静的型付け言語でもあるので、クラスの型チェックは飾りではないですよ。
ただ、大半のケースでid型で宣言しても、Hoge*で宣言しても、同じ動作になるというだけ。
まれに、型の書き方によって、異なる動作をすることがあります。
862名称未設定:2009/10/20(火) 23:29:07 ID:0s07ODk70
>>861
異なる動作って@catchディレクティブだけでしょ
基本的に動的型付けだよ
863名称未設定:2009/10/20(火) 23:45:04 ID:BiEtE8Ue0
コンストラクタを用意したらいいのになあ。

objective-cも、
cocoaもまだまだ発展途上っていう感じなんかね。

動的にすることを重視してるけど、
動的だから助かることより、
動的な仕様のために苦労することが多い気がする。

xcodeがもっと親切にコード解析した結果を
教えてくれるようになったら、
だいぶ難易度は下がるかもしれないけど。

新卒にcocoaの開発を教育するのは
至難の技だと思う。
864名称未設定:2009/10/20(火) 23:55:45 ID:sze7n92s0
>>844
ww
865名称未設定:2009/10/21(水) 00:10:15 ID:hJXwNV0t0
>>862
Objective-Cは動的にメソッドを呼び出しますが、メソッドを呼び出すためのコードは、コンパイラが静的に生成します。
そして、メソッドを呼び出すには、objc_msgSend、objc_msgSend_stret、objc_send_fpretの3種類があります。
コンパイラがメソッド呼び出しコードを選択するとき、ソースに書かれたクラス型の情報がヒントを与えます。
866名称未設定:2009/10/21(水) 00:11:00 ID:srxwFOza0
>>863
Objective-CもCocoaもNeXTのときにほとんど完成していた気がするけど
(もっともそのときはCocoaではなくてAppKitという名前だったけどね)
867名称未設定:2009/10/21(水) 00:41:02 ID:hNbsX/Wl0
○○○.mのような@implementationファイルのメソッド内で、
動的に自身のファイル名を取得する方法ってないでしょうか?
868名称未設定:2009/10/21(水) 00:53:29 ID:njN9Gmno0
>>863
>動的だから助かることより、
>動的な仕様のために苦労することが多い気がする。
それは頭が静的オブジェクト指向言語のままだからだと思います
静的な言語で標準的な書き方を、
むりやり動的な言語にそのまま翻訳するとうまくいかないです
動的な言語は動的な言語なりの使い方があります

郷に入れば郷に従えといいますが、はじめは気持ち悪いけど
もうちょっと Obj-C やってれば
C++ みたいな静的言語に戻れなくなる... というのがこちらの実感でした。
869名称未設定:2009/10/21(水) 00:54:09 ID:3DG/uNjv0
>>863
C++から入ると苦労すると思うよ
全く違う思想だからね
870名称未設定:2009/10/21(水) 00:56:24 ID:5taKVHkN0
動だの静だのどうでもいいだろ。
俺はオッパイが見たいんだ。
871名称未設定:2009/10/21(水) 01:03:31 ID:s+hQkRZr0
>>867
どういうことがしたいのか試しに行ってみ?他の楽な解決法があると思うから。
872名称未設定:2009/10/21(水) 01:09:25 ID:hJXwNV0t0
>>867
C言語の__FILE__マクロを使え
873名称未設定:2009/10/21(水) 04:53:40 ID:b0KFuoRt0
10.6持ってないんだけど、
Cocoa化したFinderはSIMBL経由でのハックとかできてるの?
874名称未設定:2009/10/21(水) 05:00:57 ID:FzTJxGi50
SIMBL snowでぐぐったらすぐ出てきたがな
875名称未設定:2009/10/21(水) 05:15:02 ID:sKtBGSZwi
>>863
動的で苦労する点て何?
876名称未設定:2009/10/21(水) 09:01:44 ID:aG23YSpyi
>>875
構文解析が難しくなるから
一見して分かるコードのミスも
エラー吐いてくれない。

実行時にクラッシュしても
特定するのが難しいところかな。
877名称未設定:2009/10/21(水) 09:38:36 ID:SOY7mnZMP
>>876
横からエスパーだが、それは構文解析ではなくて静的解析とか意味解析とかだ。
878名称未設定:2009/10/21(水) 11:32:58 ID:KrgaRbcN0
cocoaはいいけど、objective-cは駄目だ。
すばらしい言語だとはとてもじゃないけど思えない。
879名称未設定:2009/10/21(水) 12:08:21 ID:MW6yg4dM0
俺の経験した限りすばらしい言語なんてどこにも存在しなかったぜ
880名称未設定:2009/10/21(水) 15:08:44 ID:5taKVHkN0
>>878
じゃあ使わなければいいじゃん。
「使ってください」なんて頼まれてないでしょ?
881名称未設定:2009/10/21(水) 15:36:57 ID:yUJIsqzl0
>>880
cocoa使いたいんだから仕方なかろう
882名称未設定:2009/10/21(水) 15:43:38 ID:wqzO6CXS0
RubyからもPythonからもAppleScriptからも使えるんじゃなかったっけ?
883名称未設定:2009/10/21(水) 15:52:34 ID:5taKVHkN0
>>881
Cocoaも使わなきゃいい
884名称未設定:2009/10/21(水) 16:19:52 ID:ao1iomxD0
>>826
転送先Rectの中心座標を(x,y)として。
CGAffineTransform trans = CGAffineTransformMakeTranslation(x,y);
trans = CGAffineTransformRotate(...);
trans = CGAffineTransformTranslate(trans, -x, -y);
CGContextConcatCTM(...);
でどうでしょうか?
885867:2009/10/21(水) 16:54:18 ID:hNbsX/Wl0
>>871-872
ありがとうございます。__FILE__で解決しました。
デバッグ用にNSLogでファイル名を出力するのが用途でした。
こんな感じで解決しました。

NSLog(@"%@",[[NSString stringWithCString:__FILE__ encoding:NSASCIIStringEncoding] lastPathComponent]);
886名称未設定:2009/10/21(水) 16:58:32 ID:Iy/lJuYr0
そういうときって %s に __FILE__ 入れたらいいんじゃないの?
887名称未設定:2009/10/21(水) 17:25:05 ID:wcoWbmkF0
>>848
get〜は無用だけど、getをつけてもKVCでは通るようになっている。
どういう順番だったかは憶えてないが。
888名称未設定:2009/10/21(水) 19:03:14 ID:hNbsX/Wl0
>>886
ファイル名だけ出力したかったんです。
889名称未設定:2009/10/21(水) 20:06:53 ID:4xRKsTVZi
そういえば昔このスレで、NSLogに返り値として文字列が期待されるものを直接放り込んではいけない。文字列であっても
NSLog(@"%@", hoge);
って書けって言ってた人がいたけど、10.6だと前者をしようとするとエラーでるようになったね。
余談
890名称未設定:2009/10/21(水) 20:15:45 ID:Xey4FQxO0
>>861, 865
>コンパイラがメソッド呼び出しコードを選択するとき、
>ソースに書かれたクラス型の情報がヒントを与えます。
その情報ってのが id の中身でしょ。typedef struct objc_object {Class isa;} *id;
Objc2はopaqueで分からないけど(どなたか実体の場所知りませんか?)、Objc1では
Class構造体の中のmethodListsから探すのであって、コンパイラレベルではなく、
ランタイム上で起きている事ですよね。ソース上の型は影響しませんよ?

>クラスの型チェックは飾りではないですよ。
KVO なんてランタイムがかってに子クラスを作って、生成済みインスタンスをかってに
子クラスに変更、子クラス内でclassメソッドをoverrideしてるんだから、型チェックを
騙している状態です。object_getClass()で比較しても、永続的に同じクラスかどうかは
保証されていないですし。「静的言語と比べれば」飾りみたいなものだと思いますが。
あくまで「比べれば」ですので、よろしく。
891名称未設定:2009/10/21(水) 21:31:10 ID:noNwwwg70
>>884

ありがとうございます。>>826です。

いい線までいき、座標移動に対して画像位置が一致するようになりましたが

表示画像が左右反転してしまっています。

どうすればよいでしょうか。よろしくお願いします。

892名称未設定:2009/10/21(水) 21:56:09 ID:ARH6glDU0
あまりに典型的なので釣りかと思った
893名称未設定:2009/10/21(水) 22:14:22 ID:v0ZBzfFOi
Obj-Cが嫌っていうのはほとんど構文なんだろうなーと思う。
Lispの括弧キモい論争を考えると、
iPhoneの新規参入デベロッパーがあの構文を受け入れる事が信じ難い。
もはやマクロじゃないんだから構文をC++とかJavaっぽくすればいいのに。
894名称未設定:2009/10/21(水) 22:21:47 ID:5taKVHkN0
>>893
すればいいのに程度の事は、しない方が良い。
895名称未設定:2009/10/21(水) 22:29:38 ID:b0KFuoRt0
()とか.とかが並んでるCっぽいコード見たくない
896名称未設定:2009/10/21(水) 22:50:50 ID:hJXwNV0t0
>>890
>その情報ってのが id の中身でしょ。typedef struct objc_object {Class isa;} *id;
>Objc2はopaqueで分からないけど(どなたか実体の場所知りませんか?)、Objc1では
>Class構造体の中のmethodListsから探すのであって、コンパイラレベルではなく、
>ランタイム上で起きている事ですよね。ソース上の型は影響しませんよ?

それって、ランタイムの話ですよね?
そうじゃなくて、コンパイル時の話をしています。
「コンパイラがメソッド呼び出しコードを選択するとき」という言葉が誤解を与えたのかもしれませんが、
これは、コンパイラが、”メソッドを呼び出すためのコード”を選択するとき、という意味であって、
コンパイラが、”呼び出すメソッド”を選択するとき、という意味ではありません。
具体的なところは、コンパイラが出力した、マシン語コードを読んでください。

>KVO なんてランタイムがかってに子クラスを作って、生成済みインスタンスをかってに
>子クラスに変更、子クラス内でclassメソッドをoverrideしてるんだから、型チェックを
>騙している状態です。object_getClass()で比較しても、永続的に同じクラスかどうかは
>保証されていないですし。「静的言語と比べれば」飾りみたいなものだと思いますが。
>あくまで「比べれば」ですので、よろしく。

これも、ランタイムの話ですよね?
そうじゃなくて、コンパイル時の型チェックの話をしています。
897893:2009/10/21(水) 23:19:31 ID:jwBlRbMw0
>>894,895
最近のOOP言語は動的含めほとんど.によるメソッドチェインがつかえる。
なるべく共通の構文だと取っ付きやすいし、[]重ねるより書きやすい。
現にプロパティはそうなってるし。

>>890
ていうかなんでランタイムの中身を気にしないといけないんだろう。
ランタイム関数はで実装であって、
特定のランタイム前提で議論しなきゃならんのはよくないことだと思う。
Appleの実装=Obj-Cの定義ってことなのかもしれんけど。
898名称未設定:2009/10/21(水) 23:27:41 ID:njN9Gmno0
[obj method:arg ] も obj.method(arg) も見た目が違うだけなんだが
なんでみんなそんなに違いにこだわる/違いが気になるのか全くわからん
899名称未設定:2009/10/21(水) 23:34:59 ID:SSve8YT90
プロパティ構文で.使うようになったからメソッド全般で.使うようにもなる可能性はないでもないかな
まあこの程度の差異に順応できない奴は無能には違いないが
900名称未設定:2009/10/21(水) 23:35:33 ID:WEyEUHhS0
>>898
べつに俺はこだわってはないけど、
ドットシンタックスだとメッセージっぽい感じがしない
901名称未設定:2009/10/21(水) 23:38:04 ID:jwBlRbMw0
>>898
[[[obj method:arg] method:arg] method: args]と
obj.method(arg).method(arg).method(arg)では
書きやすさと心理的抵抗([[[の部分)が違うと思う。
902名称未設定:2009/10/21(水) 23:50:27 ID:5taKVHkN0
言語に文句言う奴は無能でFA
903名称未設定:2009/10/21(水) 23:52:46 ID:Tm3ykjGg0
>>898
タイプするのが面倒。
区切りは、ドット一個で表現可能じゃん?
それをわざわざ括弧でくくるなんて面倒。

プロパティも実際は関数呼び出ししてるだけなんだから、
メンバ関数もドットで呼び出ししてもいいのに。

ああ!

括弧でくくるのがイヤなら、
メンバ関数全部をプロパティとして定義すればいいのか!!
904名称未設定:2009/10/21(水) 23:57:02 ID:5taKVHkN0
>>903
お前生きてるのも面倒だろ?
905名称未設定:2009/10/21(水) 23:57:22 ID:Tm3ykjGg0
>>902
君はずっと機械語やったら?
文句ないでしょ。

みんなが文句いうから、
不便に感じるから
言語は発達するんじゃん。
906名称未設定:2009/10/22(木) 00:02:31 ID:gZ+n8nj8P
「他と違うから」というだけの文句は、言語の発達を阻害するけどな。
907名称未設定:2009/10/22(木) 00:05:27 ID:jd4Xmjq2i
>>903
天才だけど、
引数が固定されちゃうねえ。。
908名称未設定:2009/10/22(木) 00:07:33 ID:+biYRWox0
>>905
本当に頭悪いな。
CocoaではObjective-Cで開発するという前提があるのに、なぜ機械語を使うという話が出てくるんだ?
意味の無い文句を書く暇はあるくせに、[]をタイプするのが面倒とか意味わからんわ。
909名称未設定:2009/10/22(木) 00:08:52 ID:jd4Xmjq2i
hspが最強の言語ってことにしよう。
言語の話はスレ違いだし。
910名称未設定:2009/10/22(木) 00:09:50 ID:S921ixz00
そんなお前らのために10.6だと [ を入力する手間がはぶけたわけだ
911名称未設定:2009/10/22(木) 00:17:13 ID:n6TPY/180
Objective-Cのメソッド呼び出しの文法が、[]で括るという妙な感じになってるのは、C言語にマクロで文法拡張したからだと思います。
つまり、C言語の文法を上書きできなかったのです。
C言語での.(ドット)は、構造体へのアクセスなので。
912名称未設定:2009/10/22(木) 00:18:26 ID:mcY7gEwr0
cocoaっていう名前がダサい。
チョコワにしろ。
そしたら文句減る。
913名称未設定:2009/10/22(木) 00:20:34 ID:qlfXGITq0
>>912
それはJavaに言えw
914名称未設定:2009/10/22(木) 00:34:00 ID:mcY7gEwr0
C言語ってすごい名前たったんだな。
男らし過ぎるだろ。
915名称未設定:2009/10/22(木) 00:38:37 ID:cuaJ4qqp0
そういう意味ではB言語はもっと評価されても良い
916名称未設定:2009/10/22(木) 01:01:54 ID:Xh7EeTea0
むしろSmalltalkこそもっと(ry
917名称未設定:2009/10/22(木) 01:08:30 ID:SFztmTRL0
>>914 普通にComputer Languageじゃないの?
918名称未設定:2009/10/22(木) 01:10:42 ID:Xh7EeTea0
BCPL→B→Cという変遷があってだな
919名称未設定:2009/10/22(木) 01:18:54 ID:SsIx0Lsk0
Cなんて…Bもまだしたことないです><
920名称未設定:2009/10/22(木) 02:22:10 ID:UjPtWyQ+0
>>918だけじゃわかりにくいだろうから
BCPL→B言語→C言語→P言語→L言語
             └→D言語←ABCで来たと勘違い><
921884:2009/10/22(木) 04:30:19 ID:P95s51910
>>891
実際に動かしてないので間違ってるかもしれませんが。
まず前回の最初の部分の
CGAffineTransform trans = CGAffineTransformMakeTranslation(x,y);

CGAffineTransform trans = CGContextGetCTM(imageContextRef);
trans = CGAffineTransformTranslate(trans, x, y);
の方が良いかもしれません。

そして画像の左右反転に対しては、
trans = CGAffineTransformRotate(...);
の後に
trans = CGAffineTransformScale(trans, -1, 1);
を追加してどうでしょう?
922名称未設定:2009/10/22(木) 09:24:06 ID:bIgtkdby0
>>869
なるほど、そういう意味でしたか。「コンパイラがメソッド呼び…」を誤解していました。
923名称未設定:2009/10/23(金) 01:52:22 ID:RMJt4ZvT0
924885:2009/10/27(火) 00:49:28 ID:joX9Jbqa0
>>885
> NSLog(@"%@",[[NSString stringWithCString:__FILE__ encoding:NSASCIIStringEncoding] lastPathComponent]);
最近気付いたんだけど、この書き方だとたまにエラーになる
925名称未設定:2009/10/27(火) 10:16:54 ID:Yp41N66j0
TableView等で個々のセルのRow Hightを表示するものの大きさにしたがって変えたいんですけど
良いサンプルコードはありませんか?
926名称未設定:2009/10/27(火) 11:00:42 ID:SUrOqQvAi
サンプルもなにも、-tableView:heightForRowAtIndexPath:だったかを実装するだけだろ?
927名称未設定:2009/10/27(火) 11:35:46 ID:Yp41N66j0
>>926
それはUITableViewDelegateですよね
NSTableViewDelegateだとtableView:heightOfRow:なのかな・・・
参考になりました。お手数掛けました
928名称未設定:2009/10/27(火) 12:00:28 ID:SUrOqQvAi
おうふ
iPhoneスレ見てると思ってた
飛び降りてくるorz
929名称未設定:2009/10/27(火) 15:54:13 ID:BD9mlX8Y0
>>928
あるあるw
930名称未設定:2009/10/27(火) 23:33:04 ID:/qlsRlAk0
Finder のツールバーのアクションボタンみたいに、普通に押すとポップアップが出て、
短く押すとトグルするボタンが欲しい場合は自分で実装する必要があありますか?

NSButton のサブクラスを作って、クリックされたらポップアップを表示して、
mouseUp したらボタンが押されていた時間によってトグルするかどうかを決定して、
トグルする場合は resignFirstResponder が呼び出されたらポップアップを消去する
感じであってますか?
931名称未設定:2009/10/28(水) 20:24:25 ID:ZiWh/65O0
質問なのですが、NSTableView や NSOutlineView のセルに
NSView を入れるには、どうしたら良いでしょうか。
よろしくお願いします。
932名称未設定:2009/10/28(水) 22:07:50 ID:YiI84ACP0
>>930
そこまで考えがまとまっているなら、実際に試してみたほうが早いと思うよ。

>>931
それはできません。
933930:2009/10/28(水) 23:42:53 ID:XrqhBAYL0
スマソ。>>930 は NSPopUpButton を使って実現出来ました。
934名称未設定:2009/10/29(木) 00:04:39 ID:p4P0CFs70
>>931
TableViewにProgressIndicatorを表示する方法があるから
応用できないかな

ttp://hmdt.jp/archives/2004_04.html
ttp://homepage.mac.com/t_yamane/prog/SpinProgressIndicatorInTblView/page.html
935名称未設定:2009/10/29(木) 00:31:55 ID:Q/w9C3ec0
てしつ
936名称未設定:2009/10/29(木) 00:46:15 ID:f5T/t4js0
>>932,934

レスありがとうございます。
やっぱり NSView を埋め込むのは現実的ではないみたいですね。

ProgressIndicator を埋め込むコードを参考に見てみます。
ありがとうございました。
937名称未設定:2009/11/01(日) 23:41:48 ID:t8euugpHP
>>783がアマゾンで2009/11/9発売で予約できるようになってる
938名称未設定:2009/11/03(火) 07:32:49 ID:8bw3G7u00
配布されているアプリケーションで、
アプリケーションとアプリケーションフォルダへのエイリアスが格納されていて、
背景画像が付いている圧縮ファイルでをよくみますが、
あのように表示オプションを維持したままフォルダを.zipや.dmgに圧縮するにはどうしたらよいのでしょうか。
OS標準の圧縮機能やディスクユーティリティでのディスクイメージ作成では維持されませんでした。
CleanArchiverというフリーソフトも試してみましたが、同じく維持されませんでした。
近々公開を考えているアプリケーションの配布に先立って、ファイルを準備しようと思ったところで
表示オプションが維持できないことに気づき困っています。どなたかお力を貸していただけないでしょうか。
939名称未設定:2009/11/03(火) 08:04:38 ID:JJRyT2EX0
コードはantで書いてあるがちゃんと説明されているので後は自分で何とかなるだろう。
http://www.rkuntz.org/pmwiki.php?n=Code.AntDiskImage
940名称未設定:2009/11/03(火) 08:13:57 ID:+uFr8U2O0
941名称未設定:2009/11/03(火) 08:37:33 ID:8bw3G7u00
>>939, 940
ありがとうございます!
これから見てみます。
942名称未設定:2009/11/03(火) 14:06:37 ID:oNwTDBAH0
読み書き可能なディスクイメージから変換すればいいのだよ
943名称未設定:2009/11/04(水) 01:07:06 ID:bf50Y7OJ0
Document Based アプリケーションで Nib 無しで Window を作る場合は
自分で Window Controller も作らないといけないのか。ドキュメントが
分かりづらいな…
944名称未設定:2009/11/06(金) 07:25:17 ID:T+rLDM/P0
>>943
NSDocument のドキュメントで windowNibName が引用されてる箇所を読めばわかる
ような気がするけどなあ。例えば

Typically an NSDocument subclass overrides windowNibName or
makeWindowControllers, but not both.

とある。
945名称未設定:2009/11/07(土) 01:43:23 ID:WTQSkY6A0
>>944
自分の調べた限りでは makeWindowControllers 等はあっても無くても良くて、
ただ適当な箇所で NSWindowController の initWithWindow: と NSDocument の
addWindowController: を呼べば良いだけなんだ。そしてそれは Typically じゃなく
むしろ Mandatory と言っても良いくらい。なぜならそうしないと自分で作った
NSDocument のサブクラスのインスタンスが NSDocumentController の
currentDocument になれないから(多分ね)。

でも、そういう事は一切書かれていないんだよね…。これがオープンソースなら
ソースコードをさらえば直ぐ分かる事なんだけど、それから比べたら果てしなく
面倒だと思うぜ。まぁ調査用の DTrace のスクリプトでも書けば良いのかもね。
946名称未設定:2009/11/07(土) 10:43:16 ID:74iW0YEP0
947名称未設定:2009/11/07(土) 11:34:26 ID:+g6kRVmC0
>>946
そこを見ても NSWindowController を自分で用意する必要性は書いてないよね。
NSDocumentController が showWindow: を送らなくとも、普通に自分で
NSWindow の makeKeyAndOrderFront: を呼べば key ウィンドウにはなれるし、
肝心の事(ドキュメント管理との絡み)が書いてないんだよね…。

もし貴方がそこに疑問を感じないなら気にしなくてオケ。
948名称未設定:2009/11/07(土) 15:24:19 ID:74iW0YEP0
>>947
NSWindowControllerは便利だけれど、必須ではありません。
MyDocumentのインスタンス変数として、windowを作成、管理することもできます。

xibファイルを使う場合でもwindowControllerを介さずにNSBundleやNSNibを使って
直接ロード、管理しても良いです。

documentControllerから送られてくるメッセージを適切に処理すれば良いのです。
949名称未設定:2009/11/07(土) 16:51:35 ID:+g6kRVmC0
>>948
NSWindowController を使わないと NSDocumentController の currentDocument に
なれなくないですか?

Document Based アプリケーションにするなら [[NSDocumentController
sharedDocumentController] currentDocument] が適切なドキュメントを返して欲しい
ですよね。代わりに [[[NSApp mainWindow] windowController] document] を使って
ドキュメントを手繰っても良いですけど、やっぱり NSWindowController が必要です。

何か別のやり方があるのかな?
950名称未設定:2009/11/07(土) 19:09:42 ID:Ys9uGngR0
>>949
>何か別のやり方があるのかな?

素直に、nibファイルを使えばいいのでは?

そもそもドキュメントベースなアプリで、なぜwindowを自前で作らなければならないのですか?
nibファイルというCocoaフレームワークが提供するサービスを無視した実装をしたのだから、フレームワークの支援を受けられずにコーディングの手間が掛かってしまうのは、しかたがないでしょう。

ちなみに、[NSDocumentController currentDocument]の実装は、たぶん
- (id)currentDocument {
return [[[NSApp mainWindow] windowController] document];
}
だと思うので、うまくNSDocumentControllerを騙せば何とかなるのでは?
たとえば、MyDocumentで、
window = [[NSWindow alloc] init...];
[window setWindowController: self];
とやって、
- (id)document {
return self;
}
を実装してみるとか。
951名称未設定:2009/11/07(土) 19:31:33 ID:+g6kRVmC0
何だか話がズレてきたからこの辺で終わりにしよう。
そもそも、手間を減らしたいとか、騙して何とかしたいという話じゃないからね。
952名称未設定:2009/11/07(土) 20:40:08 ID:og+XN/eF0
>>951
948です。
理解してもらっているようですが、別にxib file, windowControllerが不要であると主張しているわけではありません。
手間はかかるけど、無しでもコーディングできるといっているだけです。
昔のTextEditや荻原本のサンプルのようにコードがかなり増えます。
ちなみにcurrentDocumentはdelegateを使って[[NSApp mainWindow] delegate]で代用します。

話は変わって、Mac OS X Cocoa プログラミング 第3版が届きました。
残念なことにdeprecateされたNSCalendarDateや、新しく追加されたNSPaseteboardのAPIへの
言及はありませんでした。snow leopardに対応していると銘打っていたので、もしかしたらと期待したのですが。
脚注とかでふれて欲しかった。
953名称未設定:2009/11/07(土) 21:00:13 ID:+g6kRVmC0
>>952
なるほど、delegate を使うのは思い付きませんでした。
情報どうもありがとうございます。
954名称未設定:2009/11/08(日) 00:13:44 ID:AOBYwIZ30
NSCollectionView ってバイディング前提のビュー?
バインディング無しじゃ使えないんでしょうか。
955名称未設定:2009/11/08(日) 11:55:20 ID:DwnUsOEj0
CollectionViewItem から、representedObject に接続して内容を得るのに バインディングした方が楽。
956名称未設定:2009/11/08(日) 12:34:32 ID:ljpiIkUr0
プログラムとか興味ないのですが、ここが一番詳しそうなので質問させてください。
↓のリンク先の内容についてですが、Snow LeopardのCore Animationでは、
具体的にどのようなこと(表現?)が可能になっているのでしょうか?

Core Animation Release Notes
http://developer.apple.com/mac/library/releasenotes/GraphicsImaging/CoreAnimation_RN/index.html
957名称未設定:2009/11/08(日) 13:43:52 ID:D0/UY3D50
>>956
「興味無い」とか言う奴に誰が答えるんだよw
958名称未設定:2009/11/08(日) 14:45:47 ID:LF+h2O0g0
>>956
ばーかばーか
959名称未設定:2009/11/08(日) 15:13:35 ID:ljpiIkUr0
聞き方が悪かったのかな?
要するにエンドユーザー的な立場で、
今回の追加部分で可能になること(表現?)は何か?
ということを知りたいと思ったのですが。
960名称未設定:2009/11/08(日) 18:11:51 ID:eEltJnv60
>>659
開発者にはちょっと便利になる。
エンドユーザーには何も可能にならない。開発者がアプリケーションを作らなければ何も。
961名称未設定:2009/11/08(日) 18:48:54 ID:IV25VCBo0
新クラスとしてエミッタとグラデーションと拡大縮小みたいなの他
既存クラスの拡張

CAなんていじったことないからちっとも分からんけど
そこ読む限り。
962名称未設定:2009/11/09(月) 00:52:40 ID:CINvb13e0
気がついたらヒレガス本の発売が始まってた。
963名称未設定:2009/11/09(月) 11:03:09 ID:UojbosR50
今日からな。発注済み。
964名称未設定:2009/11/09(月) 17:41:09 ID:QcNjesMqP
6日に楽天ブックスで買って昨日届いた
965名称未設定:2009/11/09(月) 22:46:51 ID:CINvb13e0
今読んでるけど、チャプターがページ開いた奥に記されてるのが困る。
966名称未設定:2009/11/09(月) 23:06:12 ID:H/Mjaj1+O
原書はあんなにかっこいいデザインなのに日本版はどうして
967名称未設定:2009/11/10(火) 15:33:47 ID:JH6K56ar0
Obj-C 2.0で追加された言語仕様を勉強&試用中です。
@propertyについて質問させて下さい。(以下、64bitのみ、ガーベッジコレクタ環境の前提です)
以下のように、readonlyなメンバmyStringを持ちたいのですが、クラス内でも初期化することができません。

//----------------------------------------MyObject.h
@interface MyObject : NSObject
@property(readonly) NSString* myString;
@end
//----------------------------------------MyObject.m
#import "MyObject.h"
@implementation MyObject
@synthesize myString;
- (id)initWithString:(NSString*)str
{
  self = [super init];
  if( self != nil )
  {
    self.myString = str; //ここがコンパイルエラーになる
  }
  return self;
}
@end
968967続き:2009/11/10(火) 15:35:18 ID:JH6K56ar0
自分で考えた対処方法としては以下の3つなのですがどれもあまり良い方法とは思えません。
どうするのがベストなのか、皆さんのご意見下さい。

[1] readwrite,assign にする(でもしたくないなー)

[2] @interfaceに
{
@package
  NSString* myString;
}
を書いて、init〜内で self->myString でアクセスする。
(本来書かなくていいメンバ宣言を書きたくないなー ->でアクセスするのも何か嫌だし)

[3] MyObject.mに
@interface MyObject (Private)
@property(readwrite,assign) NSString* myString;
@end
を書く。
(うーんこれが一番マシ?でも再宣言するのもなー)
969名称未設定:2009/11/10(火) 15:39:30 ID:JFky9bdt0
>>967
readonlyなんだから当たり前だろ
っていうかmyStringインスタンス変数にないじゃん

2.0の前に1.0勉強し直してこい
970名称未設定:2009/11/10(火) 15:44:11 ID:jVmOBu0k0
これは酷い
971名称未設定:2009/11/10(火) 15:54:38 ID:/rvnyQpD0
親クラスでrw、子クラスでsetterをエラーさせるだけでいいのでは?
setterに
[self doesNotRecognizeSelector:_cmd];
って書くやつ。
972名称未設定:2009/11/10(火) 15:56:32 ID:JFky9bdt0
>>968
ああそうか、64bitランタイムだからインスタンス変数の宣言は要らないじゃんってことか。
でも宣言しても何の問題もないから、俺がやるんなら普通にこうするけど。なんでこの選択肢がないわけ?

//----------------------------------------MyObject.h
@interface MyObject : NSObject {
  NSString *myString;
}
@property(readonly) NSString* myString;
@end
//----------------------------------------MyObject.m
#import "MyObject.h"
@implementation MyObject
@synthesize myString;
- (id)initWithString:(NSString*)str
{
  self = [super init];
  if( self != nil )
  {
    myString = str; //GCオンならこれでいいよな
  }
  return self;
}
@end
973名称未設定:2009/11/10(火) 16:48:12 ID:gCSX3uxs0
>>967の意図はFBIのためにivar宣言をあえて省きたいってことかな?>>972のコードで
  NSString *myString;
を抜かすこともできるよね。
974名称未設定:2009/11/10(火) 17:23:51 ID:Gq2SM78m0

64bitランタイムだからインスタンス変数の宣言がいらんってどゆこと??
975967,968:2009/11/10(火) 17:44:21 ID:JH6K56ar0
>>972の方法はコンパイルエラーだったように思いましたが、再度試してみたらできました。すいません。
>>973 いや、書かないと
error: 'myString' was not declared in this scope
とコンパイルエラーになりますよ・・・と思ったのですが、

>>972のコードから NSString *myString; をコメントアウトした場合、
・OS 10.5.8/Xcode 3.1.4ではコンパイラGCC 4.0/GCC 4.2/LLVM GCC 4.2のいずれでも上記のエラー。
・OS 10.6.1/Xcode 3.2.1ではコンパイラGCC 4.0では上記のエラー。GCC 4.2/LLVM GCC 4.2ではOK。
という結果でした。(GCC 4.0のバグ?)
ちなみにコードを書いたプロジェクトは、GC必要/x86_64のみ/SDK 10.5/ターゲット10.5 です。

というわけでOS 10.6環境で開発することにします。皆様ありがとうございました。
書かなくていいはずのメンバの宣言を書きたくなかった程度の事だったのですが、勉強になりました。
976名称未設定:2009/11/10(火) 18:18:29 ID:lJ/hPUpN0
>>975
おーい、ドットシンタックスはメソッドに置き換えられる、って事を忘れてるだろ。
@property (readonly) NSString *myString + @synthesyze myString で
作ってくれるのはゲッタのみで、セッタは無い。にもかかわらず、init… 内で、
self.myString = str; を呼び、 [self setMyString:str]; に読み替えをやっているので、
おこられるんだよ。 myString = str; にすれば怒られないはず。

あと、GCC4.0 はGC オプションはあっても Obj-C2.0 の GC には対応してないんじゃ?
複合的なエラーを単一の原因と思っているから混乱しているように見えるなぁ。
977名称未設定:2009/11/10(火) 18:33:45 ID:lJ/hPUpN0
意図が伝わり難かったかも。>976 はインスタンス変数宣言の有無そのものは問題ではない、
という意味な。
978名称未設定:2009/11/10(火) 18:58:30 ID:C4ehbeyU0
宣言できるものは宣言するのが一番じゃないか?
979名称未設定:2009/11/10(火) 20:57:59 ID:NkYQ0vjO0
>>975
modern runtimeでインスタンス変数をsynthesizeした場合、accessorを介してのアクセスしかできません。
980名称未設定:2009/11/15(日) 00:47:40 ID:WiKkIg+60
NSOutlineViewの左端にある三角形のインジケーターって色変える方法と
グリッド線の長さ調節とかってどなたかわかりませんか
981名称未設定:2009/11/15(日) 00:51:28 ID:nOoAMgZu0
NSTableView で row ごとに高さを変える方法はないでしょうか?
リファレンスを見ましたが setRowHight では row ごとの指定ができません。

具体的には、NSTextFieldCell で文字列の折り返しを行い、それに合わせて
行の高さを調整したいのです。
よろしくお願いします。
982名称未設定:2009/11/15(日) 01:03:54 ID:WiKkIg+60
>>981
http://osdir.com/ml/cocoa-dev/2009-07/msg00376.html

同じ事をNSOutlineViewで悩んだけど、rowごとの指定ならここの一連のスレッドを参考に作ったらうまくいきました。
折り返しの時の高さ計算は
CGFloat height = [cell cellSizeForBounds:
NSMakeRect(0.0, 0.0, [column width],
1000.0)].height+10.0;
この中でやるんだと思います。
983名称未設定:2009/11/15(日) 01:07:06 ID:nOoAMgZu0
>>982
素早く的確な回答、ありがとうございます!
早速ご指摘のURLを参考にやってみます。
984名称未設定:2009/11/15(日) 10:47:44 ID:wlCzXFdR0
後続スレ
Cocoaはさっぱり!!! version.14
http://pc11.2ch.net/test/read.cgi/mac/1258249232/
985名称未設定:2009/11/15(日) 21:30:47 ID:YTAFzzoP0
NSUme
986981:2009/11/15(日) 21:57:28 ID:1yIJ4ExW0
解決しましたが、今後役に立つ人もいそうなのでメモ

NSTableView と NSOutlineView で行ごとに高さを変える方法

NSTableView の場合は
- (CGFloat)tableView:(NSTableView *)tv heightOfRow:(NSInteger)row


NSOutlineView の場合は
- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item

いずれもデリゲートメソッド。
987名称未設定:2009/11/16(月) 00:01:05 ID:wlCzXFdR0
988名称未設定:2009/11/16(月) 00:01:42 ID:WiKkIg+60
>>986

それ、メソッドのオーバーライドだけでできました?
自分のところでは結局カスタムセルをcopyWithZone:NULLでコピーしてから、
高さをそいつに計算させてから破棄、
表示はカスタムセル内のdrawInteriorWithFrame:〜内で改めて行うみたいな手間かけてやっとできたよ。
989名称未設定:2009/11/16(月) 00:45:54 ID:1CDGVn6l0
[[NSNotificationCenter defaultCenter] postNotification: ThreadWillTerminateNotification object: self];
990名称未設定:2009/11/16(月) 00:57:04 ID:Gt3OWBC30
宇目
991981:2009/11/16(月) 01:08:20 ID:GyEChZGO0
>>988
はい、オーバーライドしただけです。

ところが...
さっきできたと思ったんですが、表示後にテーブルビューをリサイズして、
行の折り返しが変化すると表示がおかしくなります。
何も変化を与えない状態ではうまくいってるのですが・・・

ご指摘の方法でやってみると改善するかもしれないので、やってみます。


992名称未設定:2009/11/16(月) 01:08:51 ID:5xzVwq/f0
while(![thread isAtEnd]) {
[self ume];
}
といいつつ手動umeなんすけどね
993名称未設定:2009/11/16(月) 01:14:58 ID:lq+Vm/xL0
>>991
俺も選択によってrow の高さを変更させようとしたけど、どうやら
- (CGFloat)tableView:(NSTableView *)tv heightOfRow:(NSInteger)row
を変更するだけでは、初期の高さの変更は出来てもそれからの動的な変更は出来ないっぽいんだよね。
994991:2009/11/16(月) 01:15:43 ID:GyEChZGO0
>>993
なるほど、困りましたねorz

どうしましょう...
995名称未設定:2009/11/16(月) 01:39:21 ID:Gt3OWBC30
流れよく読んでない適当な返答だけど、リサイズされるたびにreloadDataかnoteNumberOfRowsか何か呼べば
tableView:heightOfRow: が呼ばれるんじゃないの?効率悪いやり方かも知れんとは思うけど
996名称未設定:2009/11/16(月) 01:42:08 ID:Gt3OWBC30
と思ったらnoteHeightOfRowsWithIndexesChangedってのがあんじゃん
997名称未設定:2009/11/16(月) 01:52:11 ID:lq+Vm/xL0
>>996
それ使ったらなんか妙なエラーが出るんだよね。
998991:2009/11/16(月) 02:34:57 ID:GyEChZGO0
今はサーバー落ちてるけど、ここ参考になりそう

http://www.cocoabuilder.com/archive/message/cocoa/2009/4/23/235216
999991:2009/11/16(月) 02:38:04 ID:GyEChZGO0
http://www.mail-archive.com/[email protected]/msg34240.html

Part13はなかなか参考になった情報が多かった。みんなありがとう!

どうぞ↓
1000名称未設定:2009/11/16(月) 03:03:37 ID:k2OkWyp00
永遠なれ・・・ジグラット!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。