Cocoaはさっぱり!!! version.13at MAC
Cocoaはさっぱり!!! version.13 - 暇つぶし2ch1:名称未設定
09/05/04 12:25:25 uDYhVLXL0
■前スレ
Cocoaはさっぱり!!! version.12
スレリンク(mac板)

■関連スレ
Macでプログラミング{9}
スレリンク(mac板)
MacOS XをUnixとして使ってる人の為のスレ その14
スレリンク(mac板)
Xcode part7
スレリンク(mac板)
MacでJava その4
スレリンク(mac板)
RubyCocoa 初心者質問【Leopardバンドル記念】
スレリンク(mac板)
AppleScript アップルスクリプト 質問、発表 3
スレリンク(mac板)
iPod touch/iPhone ネイティブアプリ製作 ver.10
スレリンク(mac板)
Objective-C [ObjC part:4];
スレリンク(tech板)

2:名称未設定
09/05/04 12:26:05 uDYhVLXL0
■Web
Cocoa wiki
URLリンク(cocoawiki.aerial.st)
ADC
URLリンク(developer.apple.com)
CocoaDevCentral
URLリンク(cocoadevcentral.com)
CocoaDev
URLリンク(cocoadev.com)
Cocoa Blogs
URLリンク(cocoablogs.com)
Cocoaはやっぱり!
URLリンク(www.big.or.jp)
HMDT
URLリンク(homepage.mac.com)
OOMORI.com - Cocoaリファレンス
URLリンク(www.oomori.com)
Cocoa Study Blog
URLリンク(blog.cocoa-study.com)
Cocoa Break!
URLリンク(park15.wakwak.com)
Cocoa Bindings Examples and Hints
URLリンク(homepage.mac.com)
Cocoaで遊ぼう!!
URLリンク(homepage.mac.com)
itok's Lab
URLリンク(110k.net)
Vacuous Virtuoso
URLリンク(lipidity.com)
MOSA テクニカルドキュメント
URLリンク(www.mosa.gr.jp)

3:名称未設定
09/05/04 12:33:22 2C019ily0
>>1おる!

4:名称未設定
09/05/04 12:44:38 YtFZQwa70
[1 otsu];

5:名称未設定
09/05/04 12:59:37 lCsUNx0R0
>>1

or乙

6:名称未設定
09/05/04 13:05:05 GcKY4X1V0
[前スレ release];

7:名称未設定
09/05/04 14:32:54 MN0mjn8F0
>>6
まだ retain している奴がいるみたいだ

8:こうか?
09/05/04 21:01:23 gtujWb2n0
[前スレ autorelease];

9:名称未設定
09/05/05 22:23:48 8tS77hvh0
早い内に宣言しとくか
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

10:名称未設定
09/05/05 22:30:54 R7vlBhb00
>>8
>>9
ちょwwwプールなかったのかw

11:名称未設定
09/05/05 22:45:51 Eg9DsySZ0
[pool release];

12:名称未設定
09/05/05 23:05:24 8zalga+I0
おいこら

13:名称未設定
09/05/06 00:14:41 FqhT4q3T0
ええー、ガベコレじゃないの?

14:名称未設定
09/05/06 01:03:43 /EEUpqJG0
ビデオとかオーディオ系のアプリだとガベコレ使わんよね?
なんかパフォーマンス激落ちした記憶が

15:名称未設定
09/05/06 01:49:54 ky4Uli1Q0
適材適所。あんまり厳しいところはObj-Cも使わないかも。

16:名称未設定
09/05/06 10:56:57 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:名称未設定
09/05/06 12:09:18 Z1f55c9/0
CocoaではじめようMac/ iPhoneプログラミング入門(秀和システム、09/3)中野洋一

18:名称未設定
09/05/09 09:15:10 wZLTz+uY0
アイホン本多すぎwww
マクよりアイフォンのほうが売れてるようだ。

19:名称未設定
09/05/09 13:04:14 +8i9ZJol0
>>18
>アイホン本

尼見てるだけだが、しょーもない本もあるようだね
内容はともかく、ネイティブアプリ製作スレの消費もこっちより早いし
ま、参入者増えたのはいいんじゃないの


20:名称未設定
09/05/09 15:40:36 s+5zWOUU0
しょーもないもんで金盗るなよ...

21:名称未設定
09/05/09 18:11:57 Lp5s1i6t0
だって、中の人はおんなじだもん

22:名称未設定
09/05/09 23:18:33 wZLTz+uY0
$99払って大儲け詐欺っぽい傾向だが。
無料ならいっぱいダウンロードされるけど、有料だとさっぱりって現実。

23:名称未設定
09/05/09 23:35:58 HiO6fmc80
>>22
Cocoaを覚える人が増えても、iPhoneアプリを2、3本作っただけで終わりそう。
Macのアプリまで手を出さないだろうな。

24:名称未設定
09/05/09 23:47:18 qYG+6Skz0
>>18
マク?

25:名称未設定
09/05/10 00:14:58 ITfhGX7v0
>>18
アイホンでもアイフォンでもなくアイフォーンだぞ。

26:名称未設定
09/05/10 11:10:40 TeTkJtKx0
あいぽん

27:名称未設定
09/05/11 09:41:45 gCZES4s+0
質問です
nilにメッセージを投げると無視されますが、
たとえば
[mutableArray addObject:object];
で引き数objectがnilだと例外が発生しますよね
こういう場合も素直に無視してくれれば楽だと思うのですが、
レシーバがnilは無視で引き数がnilだと例外発生ということに
何か明確なメリットはあるのでしょうか?

28:名称未設定
09/05/11 09:59:40 VQPLhBtK0
>>27
nilを引数にすると必ず例外発生というわけじゃない。
NSMutableArrayの場合、配列の中身として nilを許可できないので例外になる。
nilじゃなくても許可できない値(スカラー値とか)の場合は例外になる。

レシーバが nilの時にメッセージを送っても nopになるのは言語仕様。
引数が nilの時にどうするかは、クラスとメソッドの指針。引数として nilを許可するメッセージはよくある。

29:名称未設定
09/05/11 12:34:41 gCZES4s+0
>>28
あー、なるほど
たしかに引き数nilの時の振る舞いを言語仕様として定義することはできないですね
スカラー値とnilは区別しようも無いので例外というのもわかります
(NSObjectのサブクラスじゃない場合は全部無視しても良いような気もしますが)

if(object)
[array addObject:object];

といちいちかくのが面倒だなーと思っただけなんですけどね
カテゴリでnilSafeAddObject:とか追加するかな

30:名称未設定
09/05/11 21:30:17 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:名称未設定
09/05/11 21:53:10 Oo5tqRqh0
>>30
kMDItemDisplayNameには"kMDItemDisplayName"という文字列が入っていて
kLSItemDisplayNameには"LSItemDisplayName"が入っていた。それだけ。

32:名称未設定
09/05/11 22:21:47 tPSgDZwP0
>>31
中の文字列はユーザには見えない別のところで定義されているということでしょうか?

33:名称未設定
09/05/11 22:28:37 Oo5tqRqh0
>>32
そう。externでググれば分かる。
例えばNSString *fusa = @"hage"; ってなってたとしてNSLog(fusa); でhageが表示されるのは当たり前でしょ。
externで宣言と定義や実装を分離してるだけで、それと同じ。

34:名称未設定
09/05/11 23:32:22 tPSgDZwP0
>>33
Cocoaから勉強し始めたのでCはイマイチ分からないんですよね。
もうちょっとググって勉強してみます、すいません。

35:名称未設定
09/05/11 23:50:48 jvwak+JR0
みなさん NSLog() の第一引数に直接表示したい文字列を渡すのはやめましょう。
NSString*hoge=@"%@%@";
だったばあいに
NSLog(hoge)
とするとクラッシュする可能性大です。


36:名称未設定
09/05/12 08:05:27 nrYuYvsK0
>>35
NSString *hoge = [NSString stringWithFormat:@"%@%@",hoge1,hoge2];

じゃなくて?

37:名称未設定
09/05/12 08:46:39 n1Sh7mBn0
cocoaはさっぱりヽ( ´ー`)ノ

38:名称未設定
09/05/12 08:56:15 cO5aAwq80
>>35
なんで?

39:名称未設定
09/05/12 09:20:46 5ukzhphT0
printfとかと一緒の理由だけど

%@を見つけると、引数リストの該当位置にcocoaなObjectがあるとして、-[NSObject description]を送ろうとする。
ところが引数リストが無いので、コンパイラはその辺初期化も何もしていない。
ってことで、該当位置は何が入ってるかは誰も分からない。
そこに、触ってはいけないアドレスが入ってるとEXC_BAD_ACCESSが出たりする。


40:名称未設定
09/05/12 10:34:10 nrYuYvsK0
>>39
それはNSLogの問題じゃなくて%@に値を与えないプログラマの問題だと思うが。

41:名称未設定
09/05/12 11:04:57 98lBQIN90
>>40
ユーザーの入力した文字列をログに吐こうとして
NSLog([textField stringValue]);
とすると、ユーザーが %@ と入力してるとクラッシュしかねないので、
ずぼらせずに
NSLog(@"%@",[textField stringValue]);
と書きましょうといってるだけです。
>>30 さんの場合とかは、
kMDItemDisplayName 内に何がはいってるかわからない、
%@ がはいってない保証がないのであれはマズいと。

42:名称未設定
09/05/12 13:38:06 nrYuYvsK0
>>41
全然そんな事言ってなかっただろ。
だいたい無意味なNSLogを残したまま配布用のビルドをすべきではない。

43:名称未設定
09/05/12 22:22:27 prS7MZSPP
Core Animation で透明ウインドウの上でアニメーションを動かすと
その下に再描画されているウインドウがあるとその再描画のタイミングでちらつきますね。
このちらつきを回避する方法はあるのでしょうか?

44:名称未設定
09/05/12 22:31:07 xB/6dHwE0
NSLog()の出力先はstderrなので、デバックかエラー出力のために使う。

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

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

エラー出力のときは、メッセージのフォーマットを考えるはずなので、たぶん大丈夫だ。

45:名称未設定
09/05/12 22:56:18 H+KA29wm0
リリース版でもコンソールにログ出してるアプリは沢山ある。
運悪くも何も、フォーマット文字列攻撃っていう良く知られた方法だから、対策しておくことに越したことは無い。

46:名称未設定
09/05/12 23:37:28 9nw2sJcT0
俺もNSLogにそのまま文字列渡すことは無いが、>>30はそもそもそれが主旨ではないから突っ込まなかった。

47:名称未設定
09/05/13 00:17:21 g0aeBdQN0
>>45
>リリース版でもコンソールにログ出してるアプリは沢山ある。
あるからやってもいい、という解釈はどうなんだろうか。
少なくともユーザーから受け取った文字列をログに吐く事に何も意味が無いと思うが。

48:名称未設定
09/05/13 00:25:15 /Ph7rNoz0
NSLogは第一引数にはdescriptionを投げてくれない。
昔これで躓いた。

49:名称未設定
09/05/13 00:27:56 QSUL1DG70
>>47
それが良い/悪いとか有意/無意とかじゃなくて、フォーマット文字列を解釈する関数全般に
そういう脆弱性があるんだから、常にワンステップ置く癖をつけた方が良いよ、という話。

50:名称未設定
09/05/13 00:42:28 yXWILcyg0
>>30です
kMDItemやkLSItemで取り出したファイル情報を、取り出し時のkeyまま自分のDictionaryに
[dictionary setObject:hage forKey:(NSString *)kMDItemDisplayName];
てな感じで突っ込んだところkLSItemの時はkeyが違うなと気付いたのです。
NSLogに関しては何にも考えず簡単な検証例として挙げてしまいました。

51:名称未設定
09/05/13 00:45:30 QSUL1DG70
>>30
>>35からの流れにレスしているだけなので、気にしないでください。

52:名称未設定
09/05/13 00:52:55 g0aeBdQN0
>>49
癖をつけた方が良いという意味なら、それこそNSLogをコメントアウトしてからビルドする癖をつけるべきだろ。
NSLogの脆弱性について異論は無いが、その主張に固執して本質を忘れてないか?

53:名称未設定
09/05/13 00:59:37 noGTpvEW0
初心者の俺でも論点が全く噛み合ってないことはわかる。

54:名称未設定
09/05/13 01:02:42 QSUL1DG70
>>52
あなたの言う本質が多分私の本質と違うんだろうね。

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

私が言いたいことの本質は、フォーマット文字列を解釈する関数はNSLogに限らず沢山あるので、
直接文字列/オブジェクトを渡さない癖をつけた方がいいよ、ということ。
NSLogだけ対策すればいいわけじゃないんでね。

55:名称未設定
09/05/13 06:38:12 g0aeBdQN0
>>54
こいつアホや

56:名称未設定
09/05/13 07:39:36 L+53GQxw0
NSLogはもういいよ。
別スレでやってくれ。。。。
と思ったけど、このスレになっちゃうのか..orz

57:名称未設定
09/05/13 08:47:21 anlyPVMoi
NSLogスレ立てればおk

58:名称未設定
09/05/13 09:04:51 Gwxjdxt/0
  _  ∩
( ゚∀゚)彡  おっぱい!おっぱい!
 ⊂彡


59:名称未設定
09/05/13 09:23:32 HpoQfCTB0
>>56
一応こんなスレがある
Macでプログラミング{9}
スレリンク(mac板)

60:名称未設定
09/05/13 09:42:55 XdvBQVpW0
クライアントがアプリを捜査中何か不具合が出たときの為に動作の履歴をログで残しといてと言うからNSLogを使って吐き出してるんだけど
>>52の意見からすると他の方法を使う方が良い?
アプリ自身の不具合によるエラーでなくてネットワークの通信エラーとかね。

61:名称未設定
09/05/13 12:49:56 Oz1ba0bW0
>>60
僕は >>52 の意見には同意出来なくて、リリース版でも
NSLog で情報を console に出すのはためらわないでいいと思う。
箱に入れて売るぐらいの商用ソフトならともかく、
クライアントと緊密にやりとりしてやってる場合なら
コンソールにいろいろ debug 情報を出すのは何も悪くないとおもうが。
というかそのためのコンソールでしょう。

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

もちろんバグのせいで NSLog にログを吐きまくって
CPU が 100% になるぐらいしてはいけませんが...

62:名称未設定
09/05/13 15:28:08 9LrONd3O0
僕もそう思いますね。(1)NSLog自体は時と場合に応じて使う、(2)そして第1引数は変数にしない、という感じですかね。

>>43
Core Animation は興味があります。
どのようなちらつきになるのかテストしてみたいので簡単なサンプルなどアップすることはできませんか?

63:名称未設定
09/05/13 21:14:20 nVj0Hv1VP
>>62
用意してみました。この下に動画などリフレッシュするビューがくるとちらついてしまいます。
URLリンク(www1.axfc.net)
password: Core Animation
どうでしょうか

64:名称未設定
09/05/14 01:01:26 d28Ohhqc0
確かに描画のタイミングでちらつきますね。
ためしに Terminal.app の上に持っていっても、描画があるたびにちらっとちらつきます。

で、解決策はわかりませんでした(核爆)

65:名称未設定
09/05/14 05:44:36 xPbVTOO6i
>>64
か、核爆…

66:名称未設定
09/05/14 06:41:57 8Z9WzWce0
なつかしいな。

67:名称未設定
09/05/14 06:52:04 d28Ohhqc0
てへてへ。それはともかくこういうのって仕様なんですかね。
Core Animation 得意な方のご意見をきいてみたすなあ

68:名称未設定
09/05/14 08:50:53 7sgh35wY0
単なるスペック不足

69:名称未設定
09/05/14 09:23:58 WqR37kki0
>>68
同意しかねる

70:名称未設定
09/05/14 13:57:15 1Pyn2KioP
>>64
チェックありがとうございました。やっぱりちらつくんですねえ。
うーむ。Core Animation ってそういうもんなのかなあ。

>>68
最高スペックの Late2008 の MacBook Pro でもそうなのでそれは違うでしょうね。
Mac Pro でもあとでやってみます。

71:名称未設定
09/05/14 16:32:00 pfNBB2ufi
>>70
これ、OpenGL周りの問題っぽいんですよね。以前
URLリンク(lists.apple.com)
が流れて気になって調べたんだけど確かに現象が出る。QTCoreVideoの
TeaPotの上に先のプログラムを置くと下のポットの方にもフリッカーが
出るんです。解決策解らず
このlistでも結論は出てないので、WWDCあたりで突っ込みを入れるのが
正解だと思います。

72:名称未設定
09/05/14 16:35:43 pfNBB2ufi
QTCoreVideo>QTCoreVideo101

73:名称未設定
09/05/14 16:42:05 B8qxAkQF0
WDDCで突っ込みを入れて修正されるのが10.5.8か10.6かで事情が変わってくるな
過去には切り捨てられたバグも…

74:名称未設定
09/05/14 16:48:55 aNVF999j0
>>71
OpenGLじゃなくてQuartzの問題じゃない?
透明ウインドウにOpenGLで直に描画してもチラつかないし。

75:43
09/05/14 17:03:33 jO61i7Cr0
>>71
おっとこのような情報があったとは。なんという有益な情報でしょう。
ありがとうございます。WWDC 参加したかったですが今年もだめでした。
一度行ってみたいなあ。

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

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

Quartzの問題なのか、Core Animation が Quartz とお話している部分の問題なのか、OpenGL 部分なのか。
その辺のdeepな内部の実装についてはさっぱりわかりませんねえ。

76:43
09/05/14 17:07:17 jO61i7Cr0
どなたか WWDC 09 参加される方でこの問題にご興味のある方は是非是非質問をぶつけてきていただきたいです><

77:名称未設定
09/05/14 17:53:28 aNVF999j0
描画が別スレッドで行われているのが原因だと思われ。
QuartzComposerのベースが同じなら、メインスレッドで描画する方法があるという事なんだろうか?

78:名称未設定
09/05/14 21:25:12 pfNBB2ufi
>>77
まるっきり別アプリなので同一スレッドで動く事は困難では?

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

私も残念ながらいろんなあおりを受けて今年はおやすみ。


79:名称未設定
09/05/14 22:31:24 aNVF999j0
>>78
何を作りたいか分からないけど、OpenGLで書いた方が早いんじゃない?

80:名称未設定
09/05/14 22:58:50 vR6rv+/10
>>78
CAってbeam syncって概念ないのかい?

81:名称未設定
09/05/14 23:41:46 kzoneQIR0
>>78

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

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



82:名称未設定
09/05/15 00:16:10 98daYchR0
CALayerに設定されているCIFilterを外すと、ちらつかなくなるね。
あと、ウインドウにタイトルバーを付けて、ウインドウをドラッグで動かすと、背景が静止画の場合であってもちらつくねぇ。
Core Image側に問題があるのかな? どちらかというと。

83:名称未設定
09/05/15 00:26:31 LM6j+XPe0
Quartz Compositorじゃね?

84:名称未設定
09/05/15 23:11:26 Di8dS7Xy0
サンプルコードで
BOOL b = NO;
b |= [hoge hage];
というようなのを見かけました。これはどういう意味になるのでしょう?
Cocoaの教本には載ってませんでしたが、、。

85:名称未設定
09/05/15 23:13:50 Vreasx71P
cの論理演算子を調べてみては

86:名称未設定
09/05/15 23:19:47 rNZ6L9VR0
ホゲハゲ

87:名称未設定
09/05/15 23:20:23 Di8dS7Xy0
&& || != などは分かるのですが、、どうしても|=が出てきません。
記号だけのものを探すのって大変ですね。

88:名称未設定
09/05/15 23:21:54 Di8dS7Xy0
すいません、C言語 演算子でググったら一覧みたいなのが書いてあるサイトをいくつか見つけられました。
見て勉強してみます。

89:名称未設定
09/05/15 23:34:04 IXApvD0U0
>>84
正直そのサンプルコードは良くないとおもう
| はビット単位 OR だから、 BOOL に適用するのは良くないべ。

90:名称未設定
09/05/15 23:38:16 Di8dS7Xy0
マジですか、Appleのサンプルコードだからって鵜呑みにしちゃいけないんですね。
なんかショック。

91:名称未設定
09/05/15 23:48:37 IXApvD0U0
>>90
バグってるわけではないがバッドノウハウだと思います。
NO が 0 で、YES が 1 なのは Cocoa では決まってるので、
まあビット単位 OR | も論理 OR || も一緒ですが、
Cocoa でない C のコードでは、0 が偽、0以外の整数は全て真と
解釈されることになってるので、
論理演算とビット演算の結果が異なることもありえますので...

92:名称未設定
09/05/16 07:44:18 nOx+3fs60
if(Cond)ならどっちでも通じる。分かっててやる分にはいいんじゃね。
あんまり好きじゃないけど。

93:名称未設定
09/05/17 00:35:50 vTJjRQm+0
分かりにくかったら済みません。

TwitterPodやSnowRabbitみたいなログ表示をするには
どうすればいいでしょう?折り返しのある文字列を綺麗に表示したいのです。
NSTableViewとかNSTextFieldCellあたりを探してみたのですが
見つかりませんでしたorz
自前で作るにしても方法が思いつきません。

94:名称未設定
09/05/17 00:50:38 ARuKMIRg0
>>93
NSTextFieldCellのLayoutをWrapsに設定してみると、どうでしょう?
Title, Placeholder, alignment, Border, Layout
と並んでいるやつです

95:名称未設定
09/05/17 00:56:53 ARuKMIRg0
捕捉、もっと下の方にあるLine BreaksもWord Wrapに設定する必要ありますね。
さらに複数行を表示するので、NSTableViewの行の高さ等もちょっと調整
する必要がありそうですけれど

96:名称未設定
09/05/17 15:17:22 dcs8lUAz0
わざわざNSTableViewに吐く理由は?
ただのエディットビューで十分じゃないかな...

97:名称未設定
09/05/17 23:42:48 Fgw9CMGw0
>>96
上げられてるソフトを確認すれば分かるかと。

98:名称未設定
09/05/18 00:21:17 Stz5fwHx0
サードパーティのアプリなんて共通認識にあるわけないし、回答者がわざわざ探しにいけとでも?
という疑問は感じる

99:名称未設定
09/05/20 04:41:57 yuP2p8H10
にるぽ

100:名称未設定
09/05/20 07:16:13 XegvAAnYi
Cocoa100%(σ・∀・)σゲッツ!!

101:名称未設定
09/05/20 08:17:42 T3yMgwWc0
>>100
何かの書籍?個人ブログしかヒットしないんだけど

102:名称未設定
09/05/20 09:09:14 3yEx7CxS0
>>101
ゆとり乙

103:名称未設定
09/05/20 09:28:53 T3yMgwWc0
>>102
俺もそこそこいい歳だよおっさん

104:名称未設定
09/05/21 01:12:24 J06HCPEy0
CALayerについて質問です
URLリンク(journal.mycom.co.jp)
上記ページの下部にあるサンプルコードを例に挙げます。
このサンプルコードをそのままビルドすると正常に画像が表示されるのですが、
- (void)awakeFromNib
{
//...
}
- (IBAction)doAnimation:(id)sender
{
}
となっているのを
- (void)awakeFromNib
{
}
- (IBAction)doAnimation:(id)sender
{
//...
}
とごっそり移動しました。つまりCALayerの設定をawakeFromNibからIBActionでの実行に変更しました。
これをビルドして実行すると画像がちゃんと表示されません。
なぜこのようなことが起きるのかさっぱり分かりませんので教えてください。よろしくお願いします。

105:名称未設定
09/05/21 02:41:54 gvzv7DBV0
>>104
Viewのアウトレットは繋がってる?
ViewにsetNeedsDisplay:は送ってみた?

106:名称未設定
09/05/21 03:29:48 J06HCPEy0
>>105
はい、つながっています。ViewへのsetNeedsDisplay:もLayerへのsetNeedsDisplayも送ってみました。
awakeのタイミングでやると正しく表示されるんですよね。IBActionでやるとCALayerのbackgroundColorは正しくセットされるのですが、contentsに画像を設定した時におかしくなります。
Layer周りをいろいろ実験してておかしいなと思い、シンプルなソースを探してきて試してみたところ同様にうまくいかなかったのでさっぱり状態になり質問させてもらいました。
良かったら上記のサンプルコードで試してみてください。

107:名称未設定
09/05/21 03:38:44 gvzv7DBV0
>>106
やってみた。
awakeFromNibのままですら正常に表示されなかったw
こりゃ元のコードに問題がありそうだね。暇があったら直してみる。

108:名称未設定
09/05/21 04:31:29 J06HCPEy0
>>107
んー、なぜ結果が違うのでしょう。ちなみにOSは10.5.7で試しました。
夜になると思いますが、時間あればAppleのサンプルコード探して試してみてまた報告しようと思います。

109:名称未設定
09/05/21 11:37:15 dRp23ibU0
すいません。iPhoneアプリ開発初心者です。
なので教えてほしいのですが、
今苦戦しているのは別クラスからの画像の処理です。
+drawImageというクラスに画像名を飛ばしそこにあるImageやViewを使って
表示させたいのですが、状態としては警告が出ます。
警告文的にはaddSubviewが+addSubviewが何たら・・・
と言われます。

なので[??? addSubView];←ここに何を入れれば良いのかが判りません。
drawImageが入ってるのはGdrivControllerです。
これをMainViewとして使ってます。

110:名称未設定
09/05/21 11:38:42 gvzv7DBV0
>>109
はっきり言ってそのレベルじゃiPhone開発は無理。CocoaどころかCの基礎とオブジェクト指向から勉強し直してこい。
あと日本語と英語も。

111:名称未設定
09/05/21 12:01:01 lD5cj5l2i
最近>>109みたいなやつ沸くけどただの荒らしやないのん?
それとも俺が知らんだけでこんなのが現実に結構いるのん?

112:名称未設定
09/05/21 12:06:55 R3inFz3N0
>>109
Xcodeスレで回答もらってるのにシカトしてマルチするの?

113:名称未設定
09/05/21 12:20:19 cyO5iFqa0
>>111
>>110も煽り過ぎだと思うが、質問するレベルにもなってないのは確かだな。
2chで聞きまくるより、一冊でも入門書を読んだ方が本人のためになる。

114:名称未設定
09/05/21 12:36:49 dRp23ibU0
すいませんJava開発しか経験が無いもので・・・
一応ObjectiveC2.0やCocoa、クックブックは読んでるんですが・・・

115:名称未設定
09/05/21 12:47:30 cyO5iFqa0
>>114
Javaで開発できるならObj-Cが理解できない事は無いと思うけど…。
単に文法を理解してないという事なら、なおさら入門書を最後まで読んでからにした方が良いと思う。

116:名称未設定
09/05/21 13:18:45 Zr/4CmfOi
>>114
質問するならまず他人に伝わるように文章を書けるようになってくれ。

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

これらが出来ないなら書き込んでも誰も答えられないです。

117:名称未設定
09/05/21 13:24:56 LZUURm740
>警告文的にはaddSubviewが+addSubviewが何たら・・・

「何たら」と書く時点でプログラマじゃないよ。
エンドユーザーの「なんかエラーが出るんですけど」と一緒。


118:名称未設定
09/05/21 13:47:20 A08ud0la0
>>114
> すいませんJava開発しか経験が無いもので・・・

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

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

エスパーしてみたが、とりあえずマルチしといてシカトは良くない。

119:名称未設定
09/05/21 13:59:18 RrJzICdh0
兵庫県か大阪府の小学生じゃないの?
いま、臨時休校だし。

120:名称未設定
09/05/21 13:59:58 cyO5iFqa0
>>118
理屈じゃない!感じるんだ!!

121:名称未設定
09/05/21 14:21:12 A08ud0la0
>>120
              ̄ ̄ ̄ ̄-----________ \ | /  -- ̄
      ---------------------------------  。←画像名
           _______----------- ̄ ̄ ̄ ̄ ̄
                     ∧ ∧    / / |  \   イ
                    (   )  /  ./  |    \ /
                 _ /    )/   /  |     /|
                 ぅ/ /   //    /   |    / .|
                ノ  ,/   /'    /    |│ /|
 _____      ,./ /∠__|     /   .─┼─ |
(_____二二二二)  ノ (\__,/|    / ┼┐─┼─
              ^^^'  ヽ, |  |   /.  ││  .│


122:名称未設定
09/05/21 14:38:24 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:名称未設定
09/05/21 14:43:42 nHVTUb140
>>122
× +(void)drawImage:....
○ -(void)drawImage:....

とか?

124:名称未設定
09/05/21 14:52:07 8ouOVGBPi
>>122
やればできるじゃないか。

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

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

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

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

たのcocoでも詳解ObjC 2.0でも、オブジェクト指向の基本を解説してる部分を読み直してください。

125:名称未設定
09/05/21 14:54:10 cyO5iFqa0
>>122
for (int i = 0; i<100; i++) {
NSLog(@"入門書を読んでから出直せ。");
}

126:名称未設定
09/05/21 15:21:51 8ouOVGBPi
>>122
あとGdrivControllerってのは何者?
もしUIViewControllerのサブクラスで、IBなりどこかでインスタンス化されてるものなら、
+drawImage:とやらをインスタンスメソッドにしたうえで
GdrivControllerのインスタンスに-drawImage:を送信するようにして、
先述のエラーの出ているところを
[self.view addSubView:dview]
とすれば多分いいんじゃないかと思うよ。

127:名称未設定
09/05/21 15:23:36 RrJzICdh0
クラスメソッド
Obj-C 頭に+が付いてる
Java static が付いてる。

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


Javaの方は大味な説明だけど、こういうことです。
インスタンスを生成してそのインスタンスに対してしか実行できないのがインスタンスメソッドです。


128:名称未設定
09/05/21 15:29:44 cyO5iFqa0
まさに「Cocoaはさっぱり!!!」

129:名称未設定
09/05/21 15:32:08 BiCFA5Fu0
物事がさっぱりだというのはその物事をある程度勉強してみてはじめて使う言葉ですよ。
入門事項すら勉強していない人が「あれはさっぱりだ」と言うことはできません。

130:名称未設定
09/05/21 15:33:00 cyO5iFqa0
>>129
Cocoaは(奇麗)さっぱり(忘れた事にする)!!!

131:名称未設定
09/05/21 16:08:59 dRp23ibU0
GdrivControllerはMainView.xibに使用しているUIViewControllerで作ったもので、
ViewにはGdrivというクラスを使っています。

132:名称未設定
09/05/21 16:33:35 gvzv7DBV0
>>131
だったらGdrivControllerの、しかもクラスオブジェクトがaddSubView:というメソッドを持ってない事くらい分かるでしょ。
addSubView:はUIViewのインスタンスメソッドなんだから。

133:名称未設定
09/05/21 16:52:43 cyO5iFqa0
教える側が基礎を説こうとしているのに、聞く側が回答しか求めていない。
これでは何度説明しても理解できるわけないよ。

134:名称未設定
09/05/21 18:27:52 dRp23ibU0
GdrivControllerにUIViewで作ったGdrivのクラスを追加している場合に
[GdrivController.Gdriv addSubview:dView];とした場合もsyntaxエラーになります。
なので、
UIView* gView = [[Gdriv alloc] initWithFrame:CGRectMake(0,0,50,50)];
[gView addSubview:dView];にするとエラーは無くなりますが、シミュレーターには表示されません。


135:名称未設定
09/05/21 18:57:16 JiQiRyUI0
>>134
もう一度 >116 をよみかえしてくだしあ。あと、多分今のあなたの技術では
動くアプリは出来ないでしょう。Java で開発していて、クラスメソッドと
インスタンスメソッドが分からないなら、一からオブジェクト指向言語の
概念から、さらにC、Cocoa を勉強した方が良いです。多分メモリ管理も。
/* 俺もJavaからきたけど、IBのおかげでUIまわりはJavaよりも簡単だぞ。*/

136:名称未設定
09/05/21 19:00:14 K6oJPq9D0
        ,.-─ ─-、─-、
      , イ)ィ -─ ─- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ , -─        Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    > ---- r‐'´
      ヽ_         |
         ヽ _ _ 」

     ググレカス [ gugurecus ]
   (西暦一世紀前半~没年不明)


137:名称未設定
09/05/21 19:24:38 KSjLlpNRi
>>134
クラス名の次にドットが来ることは無いってば。常に文法エラー。
さらにドットの左側にクラス名が来ることもあり得ない。
ドットシンタックスについては、詳解ObjC 2.0の「キー値コーディング」の章を熟読して理解できてから使ってくれ。

138:名称未設定
09/05/21 19:39:58 R3inFz3N0
>>134
作りたいアプリの仕様を書けよ
親切な誰かが請け負ってくれるかもしれないからさ
こんな無意味な問答を続けるよりはよっぽど建設的だぞ

139:名称未設定
09/05/21 19:46:27 lOzpjpIa0
>>135
JavaじゃなくてJavaScriptでした、というオチに100ペリカ

140:名称未設定
09/05/21 21:02:45 gvzv7DBV0
>>108
あれからちょっと試してみたんだが、そのサンプルのままだと画像が白い塗りつぶしになってしまって表示されなかった。
ところが画像ファイルを"/Library/Desktop Pictures/Tiles Blue.jpg"にすると正常に表示された。doAnimation:のほうにごっそり移しても。
俺の方の問題はつまり、画像ファイルの読み込みにあったらしい。Earthファイルもあるのだが、サイズかなにか制限でもあるんだろうか。

141:名称未設定
09/05/21 21:37:12 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:名称未設定
09/05/21 22:00:16 lWvBtsqMi
>>141
Hoge *hoge = [Hoge valueForKey:@"alloc"].init;

143:名称未設定
09/05/21 22:09:52 JiQiRyUI0
>>142
+alloc が定義されていて(当然だが)、インスタンスのidが返ってきてたら、
コンパイル成功して当然でしょ?init はインスタンスに対して送られてるのだから。
何が言いたいのか分かりません。

144:名称未設定
09/05/21 23:49:55 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];
すると画像が白塗りで表示されないけど、
URLリンク(mac.hitobashira.org)

@"/Library/Desktop Pictures/Tiles Blue.jpg" の画像を使用すると
[backgroundLayer setNeedsDisplay]; では以下のような画像に
URLリンク(mac.hitobashira.org)

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

他のLayerクラスも触ってて思ったけど、アプリのRunLoopと違うタイミングで動いてるので
生成や、特に描画のタイミングなどはしっかり理解しないと正しい制御ができないような気がする。
長くなりましたがこんなとこ。
詳しい人いたら解説お願いしたいところです。

145:名称未設定
09/05/22 00:21:34 KukDsc7l0
OpenSSHって使えますかね?


146:名称未設定
09/05/22 00:44:16 qS/6Qjqe0
>>145
何を勘違いしているのかしらんが、
Objective-C は C のライブラリは何でも使える

147:名称未設定
09/05/22 10:08:59 Hk5Td5Ah0
日記はもういいよ。iPhone板にプログラミングスレ立ててそっちでやってくれ。
基礎的なことも学んでないのにつまづく度に書き込まれたんじゃたまらん。

148:名称未設定
09/05/22 11:24:36 WFQcCVtF0
ここはCocoaスレだぞ、なんつって

149:名称未設定
09/05/22 11:26:54 M58OI3GZ0
別にいいんでねぇの?
またーり推奨しとく。

150:名称未設定
09/05/22 11:33:52 WFQcCVtF0
>>149
>>147はiPhone開発スレの誤爆だと思われ

151:名称未設定
09/05/26 17:04:46 mpU7elWh0
今 Xcode で deployment (release) と development のどちらでコンパイルされているかによって
処理を振り分けることはできるでしょうか?
例えば開発ビルドのみ NSLog() してみたいという用途です。
# Xcode スレの方が適切でしょうか?

152:名称未設定
09/05/26 17:22:23 Q2hth1EJ0
Release用ビルド設定のPreprosessor MacrosにNDEBUGを設定して

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

でいけるとおも。

153:名称未設定
09/05/26 18:52:52 lNXmn4af0
>>152
NDEBUGというマクロ名は意図的に選んでるの?

154:名称未設定
09/05/26 18:59:40 ANgsl3SV0
assert.h 関係ですね

155:名称未設定
09/05/26 20:09:00 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:名称未設定
09/05/26 20:13:50 8gfXRQlR0
>>152
あとは
#ifndef NDEBUG
#define NSLog(...)
#endif
でNSLog()自体無効にするとか。


157:151
09/05/26 21:07:20 Hh/s6JXoP
>>152
>>155-156
やってみたところうまく切り分けて動作しました。
ありがとうございました。
NSLog自体を無効にするというのも面白いですね。今まで残していたものも全てユーザに見せないようにできるという楽でいい方法だと思いました。



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

Apple 製のソフトだって大量にコンソールにログをだしてるから
ぼくらも多少ログを吐いてもいいんじゃないかと。

159:名称未設定
09/05/27 13:30:26 rQRiXzwK0
重要な物ならいいけど、ディスクアクセスが発生するので出来るだけ避けて欲しい。

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

まあ、かな漢字変換のディスクアクセスがそんな感じなんだが、、、


160:151
09/05/27 20:18:45 coL084HnP
なるほど確かに重要な情報は残しておきたいし、ディスクアクセスの妨げになるような出力も避けるべきですね。
勉強になりました。

161:名称未設定
09/05/27 20:23:41 DNUe0f2p0
Preview.app なんかがやっているのですが、
オープンしたファイルが Finder やら mv などでリネームされても
アプリがアクティブになったときにリネームをアプリが即座に知って
ファイル名表示を更新しているのです。
ファイルが別のディレクトリに移動されてからリネームしてもも同様にすぐ反映しています。

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

また即座に通知されるのはキー値監視のようなことがファイルに対しても出来るのでしょうか。


162:名称未設定
09/05/27 21:10:08 AJ4glpaE0
>>161
それは確かCocoaだけでは実現できなかったと思います。
CFURLGetFSRefというCarbonの関数を使ってファイルへのエイリアスを取得し、
それをまた実パスに戻したりとかちょっと手間のかかる事をやります

163:名称未設定
09/05/27 22:03:43 DNUe0f2p0
>>162
ありがとうございました。
CFURLGetFSRef 周りの Carbon の関数やFSRefなどを調べてそのような処理を書いてみます。
(すみません、Cocoaではスレ違いだったのですね。)


164:名称未設定
09/05/27 22:18:18 AJ4glpaE0
>>163
Cocoaのメソッドだけでこなせない時にCarbonのコードを内包するのは
よくやられる手法で、まんざらスレ違いというわけでもなかったり(笑)
できればそろそろNSFileManagerあたりがサポートしてくれるとありがたいな~と
(もしかすると既にあったりして...)

165:名称未設定
09/05/27 22:28:36 BSyot79b0
>>163
NDAlias等のラッパーを利用するのが、簡単でしょう。



166:名称未設定
09/05/31 09:34:37 LG4aWmHm0
WebViewでRealAudioのファイルを再生したいのですが
同じHTMLソースをsafariでは正常に再生できるのに
自分で作っているものではRealAudioのプラグインは表示される
ものの再生ボタン等がディスエーブルになってしまって再生できません
WebPreferencesのarePlugInsEnabledはYESを返してくるのですが
他に何か設定を変えなければならないんでしょうか?

167:163
09/06/01 16:25:01 I59S1qHp0
>>164
確かに狭義の Cocoa スレってわけにはいかないですね。
すっかり忘れていましたが昔 ProcessSerialNumber のためだけに Carbon フレームワークを追加したことがありました。

>>165
これはすばらしいですね。NSCoding などにも準拠していて Core Data にもすぐ使えて便利そうです。
即座にプロパティを NSAlias に変更しました。
ありがとうございました。
((BOOL)setPath: は (void)setPath: じゃなきゃ KVC (?)に対応じゃないよとランタイム(?)から NSLog が出たりしましたがそこは書き換えればすみました)

168:名称未設定
09/06/01 20:36:17 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"]



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

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

確かに Preview.app はアクティブになったときにファイル名の変更に気づいているので
その nonitifcation で処理しているんでしょうね。ありがとうございました。

170:名称未設定
09/06/01 23:22:29 3BCoBALr0
>>167
クラス名をNSAliasにしちゃダメでしょ
一般的には接頭語にNSは使わない方が良いだろうし、実は_NSAliasっていうプライベートクラスが既にあるし

171:名称未設定
09/06/01 23:23:35 ibtFloOf0
>>170
いや、NDAlias というつかいよいクラスがあるんですよ

172:名称未設定
09/06/01 23:29:27 3BCoBALr0
>>171
だからクラス名はNDAliasのままで、NSAliasにしちゃダメでしょってこと

と思ったけど、>>167良く見るとクラス名じゃなくてプロパティの名前かーじゃあ別にいいか

173:163
09/06/01 23:35:38 mB7SOtSF0
>>170
書き間違えました。手がNEXTSTEPになれきってしまっているようで^^;汗
プロパティの一つにクラス NDAlias を使ったということです。
プロパティの名前は alias です。
インスタンス名やプロパティの名前は小文字で始めるのが NeXT からの習わしですよね

174:名称未設定
09/06/01 23:40:24 3BCoBALr0
>>173
誤字でしたか、スマソ

175:名称未設定
09/06/02 21:37:22 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;
}


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

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

今回のこの警告でそれ以外に勉強になったことをチラシの裏に書いてみますと、
category で追加前は、alias.path を editable ではない TextField にバインディングしており、
コードでは setPath: しているところはないにも関わらず、
setPath: についての警告がバインディングから(ランタイムのとこかから?)
コンソールに出力されるということでした。
バインディングした時点で、editable に関わらず、
KVO に準拠しているかどうかが(ランタイムに?)チェックされるのですね。

177:名称未設定
09/06/04 16:13:44 FN7ww8Hm0
純正アプリ(例えばiTunes)のLocalizable.stringは
"137.006" = "ダウンロード中 (^1 / ^2)";
というように表記されていますが、
^1 これはどのようにコードから呼び出せばいいのでしょうか?
%@ならstringWithFormat:を使えばいいのですが。

178:名称未設定
09/06/04 16:25:17 STpJekAS0
NSMutableString の replaceOccurrencesOfString:withString:options:range: を使えばよいような気がします。
%@ はむしろ危険な香りがします。なんとなく。

179:名称未設定
09/06/04 17:21:08 X5X6UBZT0
%@の話はもうたくさん

180:名称未設定
09/06/04 18:08:38 FN7ww8Hm0
>>178


181:名称未設定
09/06/04 18:36:00 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:名称未設定
09/06/04 18:59:47 CEgw24940
iTunesはCarbonアプリだよ。
その^1とかいうのも、旧Mac OS時代のテキストリソースの書式。

183:名称未設定
09/06/04 19:47:39 7RDrGgVy0
>>181
ParamText()っていう古いAPIの手法だよ。^nがn番目の引数に置き換わる。
当然そんな面倒臭い呼び出し方はせず、wrapper作って1 stepで呼び出してるはず。
%@方式に比べて順番が指定できるから、日本語と英語みたいに逆順表現になる場合は有効
"%@ %@"だと引数入れ替える必要あるけど、^n方式だと"^1 ^2"を"^2 ^1"にすればOK

184:名称未設定
09/06/04 20:14:49 CEgw24940
Formatted Stringでも順番指定は出来るでしょ。
%1$@, %2$@, ...のように。

185:名称未設定
09/06/04 20:51:59 oneyXL090
何と、そんな書式があったとは

186:177
09/06/04 21:12:11 +hNFS8n90
>>182 >>183
なるほど!謎が解けました。CarbonのAPIを利用していたとは考えつきませんでした。
ありがとうございます。

187:名称未設定
09/06/04 21:24:06 CEgw24940
>>184に加えて念のため書いておくと、「%@」に限った話ではない。printfの書式知ってる人には当たり前だけど。
URLリンク(developer.apple.com)

188:名称未設定
09/06/04 21:58:26 AlxKaiKB0
>>176
168です。動作おめでとうございます。
サブクラスでなくカテゴリを使うとコードやIBでの変更が少なくてすみます。
私も
Using Tree Controllers With NSXML Objects
URLリンク(developer.apple.com)
を読んだときは感動しました。

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

161で書かれている機能はdocument based applicationでは、かなり前から実装されています。
cocoaで、document baseではないapplicationでもこういった機能が使えるようなAPIが公開されることを
願っています。


189:163
09/06/06 15:23:22 8Hv1u8j90
なるほどこのような XML に関するいいドキュメントを教えて頂きありがとうございます。
Apple 自ら NS* なクラスを拡張する記事を書いてくるとは勉強になりますね。
Apple だから NS* なクラスそのものにメソッドを追加する仕様変更もできるのに
デベロッパ側でも自由にできる柔軟な言語であることを公式記事として紹介する姿勢がまたよいなあと思いました。

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

document-based application では実装されているとは知りませんでした。
(まだ document-based なのは一度も使ったことないのですあせあせ)
ならば将来は Cocoa でそういう API が公開されるかもしれませんね。


190:名称未設定
09/06/07 20:51:32 wcoqoclb0
>>189
188です。
release noteとか、sample code、ヘッダファイルのコメントに有用な情報があることもあります。
GuideやOverViewとかの解説記事は更新が結構遅れることがあります。

textFieldの件、実験しました。
read only bindingの場合、-set<Key>:が無くても警告が出ませんが、KVCコンプライアントでない-set<Key>:
があると警告が出るようですね。
一つ勉強になりました。


191:名称未設定
09/06/08 00:33:41 cWdbvugm0
オブジェクトを動的に判別する
カッコイイサンプルコードを教えてください

192:名称未設定
09/06/08 01:08:36 DQN4aVj/0
>>191
[obj class]
[obj isKindOfClass: ]
ぐらいつかっておけ

193:名称未設定
09/06/08 01:26:55 cAuoxGAE0
>>192
isMemberOfClass:もねDQNさん

194:名称未設定
09/06/08 06:08:21 JFdwuF9a0
>>193
クラスを判別したいとは書かれてないのになんでそうなるの?牛野郎




おれのIDは何になるか・・ドキドキだぜ!

195:名称未設定
09/06/08 09:52:34 hb99arLO0
>>192
DQNwww

196:名称未設定
09/06/08 11:52:32 DQN4aVj/0
>>195
どうも、ご愛顧いただいております DQN です

197:名称未設定
09/06/09 12:00:17 /N8YFhoo0
アプリケーションの起動時に、あるクラスのインスタンスをNSNotificationSenterに登録しようと思っています。

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

このようにするのは安全ですか?
+load の中で そのクラスの -init を呼んでも大丈夫なのでしょうか。

198:名称未設定
09/06/09 13:17:03 SaDTu/q00
URLリンク(www.mikeash.com)
によると、+load は早すぎ。
+initialize はそのクラスの他のメソッドを呼ぶ寸前にならないと呼ばれないので
Notification を登録するには遅いかも。

というわけで僕の技量ではわかりません(;_;)
ぼくなら諦めてメインの awakeFromNib から登録します...
なにかいい方法わかったら教えてください

199:名称未設定
09/06/09 13:32:33 HGRM8OPL0
NSApplicationのdelegateメソッド
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

あるクラスがいつロードされるのか
NSApplicationのdelegateがあるクラスを知ってるのか
は知らんけど、大体ここで。

200:197
09/06/09 15:48:46 EeY5aCI70
>>198-199
ありがとうございます。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
を使う事にします。

-awakeFromNib を使うにせよ、どこかのメソッドで一括して登録するしかなさそうですね。
上記の +load を持つクラスを継承してXXXOberver, YYYObeserver, ... を作れば、
それらを個別に登録する手間が省けるかと思ったのですが。

201:名称未設定
09/06/09 15:54:10 r/0i+jR00
イニシャライザではダメなの?

202:名称未設定
09/06/09 16:05:22 HGRM8OPL0
要望は「アプリケーションの起動時に」ですから。

203:名称未設定
09/06/09 16:23:48 03wOq/G50
インスタンスを登録するんだから、インスタンスの初期化時で良いんじゃない?
そもそも起動直後にインスタンスが存在してる保証があるのかも分からんし。

204:名称未設定
09/06/09 16:38:54 IaPDkHQu0
>>200
NSValueTransformerを登録するのに+loadを使っています。
同じ手法が適応できるかですね。
197の場合、NSNotificationCenterのsingletonが作られるのでしょうか?
一度実験してみたらよいのでは?
ただ、+loadでautoreleaseを使うのならNSAutoreleasePoolのインスタンスが必要です。


205:名称未設定
09/06/09 16:58:49 HGRM8OPL0
対象オブジェクトをnilにしてるってことはあるNotificationをすべて受けたいってことでしょ?
そういう場合は起動時にオブザーバーの作成とNotificationCenterへの登録を同時にしたいってのは普通の要望でしょう。
って、ことだろうなって思ったんだけど。

206:197
09/06/09 17:18:37 EeY5aCI70
>>201, >>203
必要なインスタンスはobserverに登録するもの1つだけなので、
初期化時に登録するというのは本末転倒な気がします。

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

>+loadでautoreleaseを使うのならNSAutoreleasePoolのインスタンスが必要です。
なるほど、 +load の時点ではプールは存在しないのですね。
登録したインスタンスはアプリケーション終了時まで削除しないので、
autoreleaseは使わない事にします。

207:名称未設定
09/06/09 17:23:06 03wOq/G50
やろうとしてる事のメリットが全く分からないんだけど。
なぜinitで登録するのがダメなのか教えて欲しい。

208:名称未設定
09/06/09 17:25:58 03wOq/G50
>>206
>必要なインスタンスはobserverに登録するもの1つだけなので、
>初期化時に登録するというのは本末転倒な気がします。

要するに複数のインスタンスは作りたいけど、Notificationに対する動作は1回にしたい、という事か。
それだと設計に問題があると思うが。
コントローラーを1つ作って、それに処理させるのが普通じゃね?

209:名称未設定
09/06/09 17:52:44 rt8PJHXF0
>>200
>> 上記の +load を持つクラスを継承してXXXOberver, YYYObeserver, ... を作れば、
>>それらを個別に登録する手間が省けるかと思ったのですが。
こういうのは後で見たときにオブザーバが起動時に登録されてることが隠蔽されちゃって
わからなくなるからちゃんと明示的に登録した方がいいと思うよ。
それと再利用について問題が発生しないならシングルトンクラスはなるべくサブクラス
せずに一つですませるのがいいと思う。
ぼくならいわゆるApplication Controller クラスで全部やっちゃうな。

210:197
09/06/09 17:53:00 EeY5aCI70
>>207-208
他の手法がダメというわけではありません。
+ (void)addObservers {
[center addObserver:[[XXXObserver alloc] init] ...];
[center addObserver:[[YYYObserver alloc] init] ...];
[center addObserver:[[ZZZObserver alloc] init] ...];
}
などのメソッドを作り一括で登録してもよいのですが、
このような***Observerクラスの実装を頻繁に追加するつもりだったので、
その度に+addObserversを書き換えたり、登録に漏れがないかチェックしたりする労を避けたかったのです。



211:197
09/06/09 18:01:59 EeY5aCI70
>>209
>こういうのは後で見たときにオブザーバが起動時に登録されてることが隠蔽されちゃって
>わからなくなるからちゃんと明示的に登録した方がいいと思うよ。
グループ名やファイル名、クラス名を工夫して分かりやすくしようと思っていましたが、
確かにトリッキーなことをしていると後々分からなくなりそうですね。

212:名称未設定
09/06/09 18:28:39 03wOq/G50
>>210
そうじゃなくてXXXObserverとかYYYObserverのinitの中でNotificationの登録をすればいいじゃん、て話。

213:197
09/06/09 18:36:57 /N8YFhoo0
連投失礼します。簡単に実験してみたところ、正常に動作しているようでした。
少なくとも、+ loadの中で自分自身やCocoaクラスのインスタンスを作成することは問題ないようです。

設計方針には誤りがあるようなので、再検討してみます。ご指摘ありがとうございました。

214:197
09/06/09 18:48:18 /N8YFhoo0
>>212
語弊があったかもしれませんが、observerとして登録するインスタンス以外に、
XXXObserverのインスタンスを作ったり参照したりすることはありません。

もしinitの中で登録するのであれば
+ (void)addObservers {
[[XXXObserver alloc] init]; // initの中でNotificationの登録
}
こんな書き方になるでしょうが、>>210と本質的な違いがあるとは思えません。

215:名称未設定
09/06/09 20:24:27 WjMp2AGZ0
つまり、XXXObserverみたいのがたくさんあって、追加変更されることもある
だからapplicationDidFinishLaunchingで 手動登録するとミスがでやすい
そこで、XXXObserverクラスが読み込まれたときに自分自身でオブザーバ登録するようにすれば
ファイルをプロジェクトに登録しただけでok で良くなる

ということだよね

216:名称未設定
09/06/10 03:00:35 oybbK05z0
おれも>>212でいいと思うんだけど

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

218:名称未設定
09/06/10 06:46:31 C43i09fd0
そもそもコントローラーを正しく設計していれば
Notificationを使う必要性はあまり無いと思うけど。

219:名称未設定
09/06/14 21:08:41 XPyIS2i/0
情報が無くて・・・ご存知でしたら教えてください。

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

CFPlugin使いづらいよ・・・

220:名称未設定
09/06/15 00:38:34 qX+5qPVB0
>>219
ええっと、Leopard になって NSBundle も unload できるようになったんですが。
32bit でも 64 bit でもですよ。
NSBundle Class Reference 読みましたか?
情報無いって言うまえに本家のドキュメントを読んでください。
URLリンク(developer.apple.com)

221:名称未設定
09/06/15 05:42:32 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:名称未設定
09/06/15 10:12:39 qX+5qPVB0
>>221
いえいえ。一般に Apple のドキュメントは、
ヘッダファイル内のコメント , Tech notes
>> Release Notes
>> 各クラスのドキュメント
>> 何とかかんとかガイド
>> 日本語訳
の順に情報が新しいので、下のほうにいくほど情報が古いことがよくあります。

223:名称未設定
09/06/15 15:58:12 OLaEf2q/0
質問です。Appleイベントを拾う場合に、

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

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

よろしくお願いします。



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

無くなるのはAppleEvent自体がなくなるときだと思うよ
無くなるのだとしても十分な期間を置くでしょ

225:名称未設定
09/06/15 23:37:14 qX+5qPVB0
>>223
別に Carbon が全部使えなくなるわけではないです。
Leopard が出る際に公表された今後の方針は、
64bit ソフトでは Carbon の GUI まわり (HIToolBox とか) は
使えませんというだけで、GUI より下のレベルの
OS の基本にかかわってくるのは大丈夫なはずです。
というかドキュメントを読むと、64bit で使える、使えない、
と書いてるので自分で確かめられます。

226:名称未設定
09/06/16 00:16:09 AQ67C4GH0
AppleEventなくなったら何もできなくなるじゃん
代替のものが登場してさらにそれが十分に浸透しない限りAEはなくならない

227:名称未設定
09/06/16 00:18:34 NJ+CxxYH0
もしかしたら基本的な質問かもしれませんが、
10.5で追加されたクラスを使いつつ10.4に対応させるにはどうしたら良いでしょうか?
10.5上で動作している場合は10.5で追加されたクラスを使い、
10.4上の場合は別のやり方で回避する、ということをしたいのですが、
10.5SDKを使っていると10.4で動かすことはできませんよね?
メソッドならperformSelectorとかを使えばなんとかなりますが
クラスの場合はどうすれば良いでしょうか?
ビルド設定とかでなんとかなるもんなんですか?

228:名称未設定
09/06/16 00:25:18 AQ67C4GH0
一番手っ取り早いのはNSClassFromString

229:名称未設定
09/06/16 05:57:09 idbUOSgX0
10.4と10.5に分けてリリースするのが普通だと思うが

230:227
09/06/16 10:01:44 NJ+CxxYH0
>>229
まあ本当はそうすべきなんでしょうが、10.5の新機能をがんがん使っているというわけでもないもので
できればシームレスに統合したいと思っています。

>>228
ありがとうございます。
NSClassFromStringとNSInvocationでなんとかしました

231:名称未設定
09/06/16 10:13:12 g72K1aOw0
>>230
Leopard専用のフレームワークにリンクしてる時点でTigerでは起動できないんじゃない?

232:名称未設定
09/06/16 10:34:18 NJ+CxxYH0
>>231
>Leopard専用のフレームワークにリンクしてる時点でTigerでは起動できないんじゃない?
Cocoaに新たに追加されたものを使っているだけで
新しいフレームワークを使っているわけではないです
それだったら10.4は切ります

233:名称未設定
09/06/16 11:04:43 2ORR5FIV0
weak linkとかそういう次元の話?
Cocoaでどうやるのかはシラネ。

234:名称未設定
09/06/16 11:12:19 AQ67C4GH0
>>233
普通に/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoaにリンクしとけばいいだけっしょ

235:名称未設定
09/06/16 12:02:37 u5W3blRU0
>>229
そんなのが普通だなんて言う人はじめてみた
iWork 09なんか明らかにCore Animation使ってるけど10.4から対応してるよね
ダイナミックに内部で切り分けられてユーザに選ばせることすらさせなくていいのがObjective-Cじゃないの

236:名称未設定
09/06/16 12:47:02 g72K1aOw0
>>235
10.3と10.4を別々にリリースというのは見かけるけどね

237:名称未設定
09/06/16 13:20:34 1Z4L+RJ80
ちなみにiWork09みたいにフレームワークのリンクをOSによって動的にしわけるのはどうするんだろう

238:名称未設定
09/06/17 00:28:42 Qs4wlMQ20
URLリンク(developer.apple.com)
かな?情報がちと古いが...
URLリンク(developer.apple.com)
これとか?

239:名称未設定
09/06/17 01:20:53 YfGS704U0
オレはこれを良く使うけど。
floor( NSAppKitVersionNumber ) <= NSAppKitVersionNumberxx_x

URLリンク(developer.apple.com)

240:名称未設定
09/06/17 10:38:58 mPj8SVVR0
NSObjectにperformSelector:onThread:withObject:waitUntilDone:ってあるけど
main threadからsub threadに対して実行したい場合、どうやったらmain threadは
sub threadのobjectを得ることが出来るの?

241:名称未設定
09/06/17 11:39:00 hjtBqrkM0
それを投げるってことはNSThreadオブジェクトがあることを知っているはず。
知ってるならそれを作った人を知ってるはず。(同じ人かも)
作った人はNSThreadのオブジェクトを保持することが可能なはず。


242:名称未設定
09/06/17 13:07:22 mPj8SVVR0
NSThreadでは生成したスレッドのオブジェクトを返さないから投げる先が
わからんということなんだが。

243:名称未設定
09/06/17 13:19:39 lUCcTzPg0
メインスレッドで使っているインスタンス変数を、そのままサブスレッドでも使えますよ
スレッドセーフになるように気をつけるひつようはありますが

244:名称未設定
09/06/17 15:31:09 f6VhEUD60
>>242
initかinitWithTarget:selector:object:すれば
NSThreadオブジェクトもらえますが?

245:名称未設定
09/06/17 17:56:11 xB/8umtP0
アップルスクリプトからの、NSAppleEventDescriptor*型の返り値を変数resultに入れ、
以下のように数値として利用しています。
result = [script executeAndReturnError: &error];
resultString = [result stringValue];
[resultString intValue](~以下略)
なんだかとてもまどろっこしいやり方に自分で思えるのですが、もっとスマートな方法はあるでしょうか?


246:245
09/06/17 18:09:33 xB/8umtP0
>>245
書き忘れました。resultStringはNSString* です。

[resultString initWithString:[result stringValue]];
を試してもだめだったのですが、初心者なもので上記のコードと何が違うのかがよくわかりません。
併せて説明してもらえたらうれしいです。

247:名称未設定
09/06/17 18:23:15 hDwFLfNR0
int val = [[result stringValue] intValue];



248:名称未設定
09/06/17 18:28:13 hjtBqrkM0
-[NSAppleEventDescriptor int32Value]

249:245
09/06/17 19:26:57 xB/8umtP0
>>247,248
ありがとう。
int val = [[result stringValue] intValue];  でうまくできました。
[NSAppleEventDescriptor int32Value]  だとwarningが出るのですが、自分で調べてみます。

250:名称未設定
09/06/17 20:12:47 Jk9H1Q7a0
ん?int, longなら、[result intValue], [result inttegerValue] でええがな。
NSStringリファレンスを見てみ。Getting Numeric Values って項目があるっしょ。

251:名称未設定
09/06/17 20:14:32 Jk9H1Q7a0
うわっ…ごめん、さっきのは無しにして下さい。勘違いしてた。

252:名称未設定
09/06/18 00:52:27 Nv8LVQiH0
コマンドラインツール内でCocoaを使用していて、エラー出力にNSErrorを用いています。
通常のCocoaアプリケーションをローカライズしている場合、NSErrorの
-(NSString *)localizedDescription;でローカライズされたエラー内容が得られるのですが、
これをコマンドラインツールで行うにはどうしたら良いでしょうか?
nibやLocalizable.stringと違ってコマンドラインのバイナリ自体はXcodeからローカライズできないようです。
ツールの使用はターミナル上でなくて、NSTaskでの使用を想定しています。
ご教示よろしくお願いします。

253:名称未設定
09/06/18 01:39:15 WIz2V6ow0
Info.plistをexecutableに組み込む話はどっかで読んだけど、Resourceも行けるのか?

254:名称未設定
09/06/18 02:04:10 WIz2V6ow0
やはり -sectcreate は、info.plistだけのようだ。

Putting Info.plist Files in a Flat Executable
URLリンク(developer.apple.com)


255:名称未設定
09/06/18 03:14:13 h+s7ZAu10
で、CFBundleAllowMixedLocalizations キーかな?

256:名称未設定
09/06/18 04:11:19 Nv8LVQiH0
うーん、どうもうまくいかないので今日は諦めてまた後で試してみます。すみません。

257:名称未設定
09/06/18 05:22:21 U3qjTDYa0
リファレンスを見てみるとNSErrorのlocalizedDescriptionメソッドはエラーオブジェクト
作成時に渡されたuserInfoディクショナリのNSLocalizedDescriptionKeyキーに
対応する値を返すだけみたいだけど、これは言語ローカライズとはあまり関係ないんじゃない?
Xcodeで操作するローカリゼーションに対応する方は、もしコマンドラインアプリケーションで
再現したければNSBundle/CFBundleを自前でさわる必要があると思う。

258:名称未設定
09/06/21 21:33:39 r57JJ9oM0
Finder上でファイルやディレクトリをコピーした時の、
半透明状態で触れないっていう状態をプログラムからも作り出せますか?

259:名称未設定
09/06/21 21:41:50 r57JJ9oM0
補足
ファイルをコピーしたいわけではなく、半透明ロック状態を作り出せるのかという質問です。

260:名称未設定
09/06/21 22:21:03 dgweUrN20
>>258
Safariでさえダウンロード途中は.downloadで凌いでるからなぁ。
間違って開かれたら自プログラム側で警告する以外ないんじゃない?

261:名称未設定
09/06/21 23:40:53 r57JJ9oM0
>>260
.downloadはパッケージになっていて、中にダウンロード中のものを格納しているみたいですね。
パッケージだとユーザに触って欲しくない時でも開けちゃうんですけどまぁ仕方ないですかねー。
Finderのあれはハードリンクか何かでうまいことやってるのかなーと思って調べてたんですけど結局分からずじまいで、
Carbon触らないと無理な匂いがしたのでいったん諦めておきます。ありがとうございました。

262:名称未設定
09/06/22 06:14:52 KJHOdHBS0
処理中はユーザに触らせたくないなら"."から始まる不可視フォルダに詰めて
処理終了時にリネームあるいは移動して結果を見せれば良い。
不可視フォルダはSpotlightも無視するので、mdsが途中触って邪魔することを
防ぐ効果もある。これはSpotlight登場後の処理方法の定石

263:名称未設定
09/06/22 06:35:27 JSXuGMiDI
.noindexつけないとSpotlight動くだろ

264:名称未設定
09/06/22 07:10:51 KJHOdHBS0
>>263
Technical Q&A QA1497
FSDeleteObject fails with fBsyErr, sometimes
URLリンク(developer.apple.com)

265:名称未設定
09/06/22 07:36:21 F9qIMO/W0
ユーザに触らせたくないけど中身がどのように変化していってるかは見せたい。
という妙な事をしたかったので不可視フォルダは考えてませんでした。
Finderのフォルダコピーの挙動ならファイルサイズの変化が見える。
Safariのダウンロードパッケージ式だとファイルサイズの変化も見える上、中身のファイル構造も見せれる、でもファイルに触れちゃう。
ということでFinderの挙動を真似したかったのですが、上記にも書いた通り深そうなところを触らないといけない気がするので
結局ディレクトリを作ってロックかけて処理が終わったらロック解除みたいな感じにしました。
>>264
この情報もおもしろそうなので読ませていただきます。ありがとうございます。

266:名称未設定
09/06/22 16:51:22 POdpYeKu0
>>265
ファインダーはあれはファイルシステムに特殊なことをやっているのが
表示されているというよりは、ファインダー自身がコピー中だというのを
知っているので単にあのように表示しているだけなんじゃないかと
勝手に思っていますが、どうなんでしょうね?


267:名称未設定
09/06/22 19:59:08 9D40e7Ew0
>>265
フォルダっぽく見えるけど実はフォルダではないファイル作っとけばいいんじゃね?
自分のアプリに関連付けしとけば、開こうとしたときに警告も出せる。

268:名称未設定
09/06/23 06:42:50 Tqmm0C0F0
Finder.hを見れば解るが、ダウンロード進行をアイコン変化で示す様な物を
作りたい場合は、kFirstMagicBusyFiletypeからkLastMagicBusyFiletypeの
ファイルタイプを使ってアイコンを割り当てておけば良い。
これらのファイルを触ろうとするとFinderは警告を出す。
iCabはこの実装を使っているので参考になる。

269:名称未設定
09/06/23 09:06:39 lQB3WwPC0
>>268
おお、なるほど

270:名称未設定
09/06/23 16:33:50 BhDLKHlk0
新しい Interface Builder の Library は下の絞り込みサーチボックスに入力したら
絞り込み結果が Core Animation らしき動きをしますが、
こういうビューは自作するしかないのでしょうか。
例えば通常の NSTableView で行を絞り込むときにこのようなエフェクトをかけるというのは
どこから手を付けたらいいのでしょうか。

271:名称未設定
09/06/23 23:03:44 kA+F9T830
NSCollectionView

272:名称未設定
09/06/24 01:03:21 dCQzw8zo0
>>268
まだ試していませんが、非情に有益な情報ありがとうございます。

273:名称未設定
09/06/24 13:18:06 VQSLQrnn0
>非情に有益
......

274:名称未設定
09/06/24 13:21:46 TQGvf9Hx0
ああ、無情・・・

275:名称未設定
09/06/24 13:48:53 0enaCFFq0
まあまあ。

276:名称未設定
09/06/24 16:31:20 QicBPAPV0
北斗有情断迅拳!

277:名称未設定
09/06/24 16:59:03 EWoHgecL0
>>271
ありがとうございました。できました。

278:名称未設定
09/06/29 11:43:10 6XwWsecp0
NSTextView において,改行コードの場所に改行マークを表示させるにはどうすればよいでしょうか?

279:名称未設定
09/06/29 17:19:18 ps9LiOQA0
>>278
¥u21a9

280:名称未設定
09/06/29 20:03:03 kXQ6aG620
NSLayoutManger のサブクラスをつくって、そこで
- (void)drawGlyphsForGlyphRange:(NSRange)glyphRange atPoint:(NSPoint)containerOrigin
で描く。ググればサンプルコードが出てくるかも


281:名称未設定
09/06/30 06:28:32 QWROwNq30
>>279
改行の記号はU+23CEだお

282:名称未設定
09/06/30 11:31:38 00gk40Nv0
人それぞれやがな...

283:名称未設定
09/07/05 14:47:25 ECidSkr40
NSCollectionViewでアイコン表示の時のFinderみたいなアプリを作りたいんですが
アイコンをダブルクリックしてファイルを開かせる方法が分かりません
俺はいったいどうすればいいんですか

284:名称未設定
09/07/05 14:55:39 SpwZwd3J0
解説を読み漁れ

285:名称未設定
09/07/09 09:40:45 DXORXcdZ0
info.plistのDocument typesの仕様ってLeopardで変わった?
XcodeのSDKを10.4uベースから10.5ベースに変更したら
アプリとファイルの対応がおかしくなった。

286:名称未設定
09/07/09 13:31:26 RnNJ1e0N0
>>285
そんな話は聞かんな。lsregister で Launch Service データベースをリセットしてみたら?

287:名称未設定
09/07/09 13:48:43 DXORXcdZ0
いろいろ調べてたんだが、DocumentControllerの
- (id)makeDocumentWithContentsOfFile:ofType:をオーバーライドして、
docTypeを見てみるとdocTypeではなくてなぜかUTIが渡されてる。
Xcodeは3.1.3。

どうなってるの?

288:名称未設定
09/07/09 14:29:19 RnNJ1e0N0
>>287
URLリンク(developer.apple.com)
によると、10.5 SDK からは ofType: には UTI かこれまで通りのか
どっちかが渡ってくるようになったと書いてました。
10.4 SDK 相手にリンクしておくとこれまでどおりらしいです。

289:名称未設定
09/07/09 14:37:42 DXORXcdZ0
>>288
ありがとう。そういうことだったのか・・・docTypeは廃止されるのかもしれないね。

290:名称未設定
09/07/10 10:28:47 wX1ZoeE30
>>283はできるようになったんですが
NSCollectionviewの内容の部分でどうしても右クリックを検知できません
どうすればいいですか

291:名称未設定
09/07/10 10:57:57 QdLwS0VW0
あなたが何を行ったのか我々にはわかりません
-[NSResponder rightMouseDown:]
-[NSView menuForEvent:]
あたりは試しましたか?

292:名称未設定
09/07/10 16:34:12 XzqQhCOU0
>>291
もしよかったら単純化したサンプルコードをうpしたので見て下さい
URLリンク(pulsewidth.web.fc2.com)

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

サンプルで言うと、ABCの部分は右クリックしても
コンソールにrightClickと表示されない(左クリックは表示される)という部分で悩んでいます。
何か助言をいただけるとうれしいです。

293:名称未設定
09/07/10 22:26:33 1I/JsT700
セルになってる部分がNSViewっぽいんだけど、(NSLog(@"%@",[self subviews]); で確認
そいつがrightMouseDown:を遮ってるのが問題なんじゃないかね。

294:名称未設定
09/07/10 22:51:39 z5x/LYIv0
ソース見てないけどアイコン表示してるんだったら右クリックを受けてるのは誰?NSImageViewでしょ。でなければそいつが乗ってるNSView。

295:名称未設定
09/07/11 07:12:52 VDOe5QOw0
>>293,294
ありがとうございます。サブビューをもう1度よく調べたらうまくいきました!

NSViewのサブビューとして同じ大きさのNSBoxを置いて
これの透明度を使って選択状態を表現してたんですがこのNSBoxが遮っていたようです。
このNSBoxのrightMouseDownをオーバーライドすることは試していたんですが反応がなくて諦めてました。
ただ今回もう1度よく調べたらNSBoxは右クリックに対して当たり判定が枠の線だけにものすごくシビアにあるらしく
中身に対しては無反応で遮ってしまうのが分かったので
NSBoxのhitTestをオーバーライドしてクリックを無視させて
NSViewのrightMouseDownをオーバーライドしたらうまくいきました!
NSCollectionViewに原因があるんじゃないかと考えていたんですが
NSBoxの右クリックと左クリックに対する反応の違いが原因だったようです。

296:名称未設定
09/07/13 21:28:44 isap/7EM0
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【UOT-100】24時間ワンセグ野郎 Part03【LOG-J200】 [DTV]
【Cocoa】ミラ・ココア【ジーノ後継?】 [軽自動車]

297:名称未設定
09/07/14 02:41:58 omGv8hdqi
ヒレガス本の3rd editionを注文したんだけど、邦訳されてる最初の版にしか載ってない内容ってありますか?

298:名称未設定
09/07/14 12:31:32 wQnDP7aX0
あるけどまあ気にするな。ヒレガス本ひととおり読み終わったら、
アップルのサイト + ネットの情報で何でも出来るようになります。

299:名称未設定
09/07/14 12:46:40 yADLXsqf0
いや、そうでもないよ

300:名称未設定
09/07/14 22:54:17 omGv8hdqi
Thx
とりあえず3rd edition読んでから考えます

301:名称未設定
09/07/15 16:48:22 inB2ofWfi
NSInteger five = 5;
NSNumber *num = [[NSNumber alloc] initWithInteger:five];
NSLog(@"num:%d", [num retainCount]);

NSNumberのretainCountが初期化直後なのに2になっているはなぜでしょう?
allocしているだけなので、1になると思うのですが。。

302:名称未設定
09/07/15 16:55:14 3wnfmNrX0
>>301
同じ数字のNSNumberインスタンスを大量に生成するのも無駄なので、よく使われるものは同じ数字なら共有インスタンスにするとか
いろいろしているらしい。
自分の管理下で収支が合いさえすればいい。

303:名称未設定
09/07/15 17:01:43 3wnfmNrX0
参考
URLリンク(journal.mycom.co.jp)

304:名称未設定
09/07/15 17:06:29 inB2ofWfi
>>302-303
有難うございます!

305:名称未設定
09/07/15 21:49:02 aC4Xzmmp0
考え方としてはretainCountがいくつかではなくて、自分が1増やしていたらちゃんと1減らしてやるという原則に従えばいいだけだったりする

306:名称未設定
09/07/17 20:49:31 P64/FHL90
大学でココアをやったけど、社会人になるとあれはなんだったんだ?っていうぐらい接点がなくなってしまった。

いつかはこんなプログラミングの存在すら忘れてしまうのだろうか?
それが悲しい。


307:名称未設定
09/07/17 21:35:36 vIJN1zln0
NeXTの登場以来ずーっとプログラマが増えてきてるよ
最近は特にね
これからもどんどん増えるだろうね

308:名称未設定
09/07/17 21:43:34 zlZXLbkbi
中高でプログラミング教えればいいのに

309:名称未設定
09/07/17 22:04:17 /5Tw7bT80
確かに。今時のサラリーマンは大量の情報を処理する必要があるから、
インタプリタ系の言語Ruby / Python / VBAらあたりが使えると便利だと
思う。

310:名称未設定
09/07/17 22:34:07 t5CHQA080
部活とかでやってるとこは有るけどねぇ
さすがに授業には組み込まないだろw

311:名称未設定
09/07/17 22:46:37 q/0NLhsX0
大学なら最近はJavaとか教えてるっしょ

312:名称未設定
09/07/17 22:55:28 50EsSyD+P
とっくに中高でプログラミングは教えてると思うけど
これってマジレスしちゃだめな流れなの?

313:名称未設定
09/07/17 22:57:08 P64/FHL90
中高でプログラミング教えるぐらいなら数学やったほうがマシ。
意味ねーもん。

314:名称未設定
09/07/17 23:08:21 /5Tw7bT80
>>312
教科書には載ってたけど習わなかったよ。
触りだけで何の役に立つのかも分からん内容だったけど。

315:名称未設定
09/07/17 23:16:04 Sn+Kh+7f0
数学の方が意味ないと思っているのは俺だけじゃないはず。
相変わらず立方根だ方程式だ集合だなんだが
日常生活の何処で役に立っているのか謎。
雑学番組で得意げになれるだけだろあんなもの

316:名称未設定
09/07/17 23:17:57 mcniDOox0
>>313
君にとっては意味が無かったようで残念だね
残念なのは頭の方かも知れないけど

317:名称未設定
09/07/17 23:38:52 YZ9+dese0
>>316
なんでそこまで言うかな。
普通の学生にプログラミングなんて無意味でしょ。

318:名称未設定
09/07/17 23:43:53 FDjDpByP0
現役工房の漏れがきましたよっと

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

まぁ数学の先生でBASICなんて今更教えてる酔狂なやつは居ないだろうし、まあ、こんなプログラミングなら教えても全く意味はないな

319:名称未設定
09/07/17 23:44:04 zlZXLbkbi
>>312
やってないよ
くだらんWordの使い方みたいなのはするけどね

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

>>315
まさかあなたプログラマじゃぁないよね?w

320:名称未設定
09/07/17 23:49:16 P64/FHL90
>>315
日常生活では確かに必要ないよ。

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




321:名称未設定
09/07/18 00:12:01 LojOy0Ya0
>> 315
日常生活で役に立つことを学んでる訳じゃないんだから、意味ないというのはおかしい。
おまえを取り巻く世界は目に見えて触れられるものだけではないことを知った方がいい。


322:名称未設定
09/07/18 00:40:34 MaM78w7y0
簡単に覚えられるようなら新人教育はもっと楽だろうなあ…はぁ…

323:名称未設定
09/07/18 00:51:48 KdpE4OpI0
>>320,321
それそのまんま数学でも当てはまると思うがおまいらはバカか?
数学だって必要なときだけ学べばいいだろ。
今年もそろそろ、使いもしない数学のせいで補習になる連中が湧いてくるなw

324:名称未設定
09/07/18 01:12:02 UlPdeWJ90
数学は必要な時に学べるものじゃないよ。
一つ一つの積み重ね。
ましてや物理的な現象を数学で定義できるようになるにわね。

325:名称未設定
09/07/18 01:23:54 UlPdeWJ90
あともう一つ言わせてもらうなら、
プログラミングって所詮他人の土俵なんだよね。

ルールは企業が勝手に決められる。
僕はよくエクセル使ってグラフを描くけど、その際に必要なAPIはググればいくらでも出てくる。
ココアでプログラム作成していた時もそうだったけど。

326:名称未設定
09/07/18 03:08:16 eaXPUYTF0
>>319
情報系の授業があるところはやる場合もある。CかVB。


327:名称未設定
09/07/18 07:13:44 0ENtd6OP0
たいていの仕事にパソコンが必須の世の中で、プログラムの触りを学んでおくことは有意義だと思うんだが。
何かを作れるようにではなくて、どのようにして動いているかを知るということで。
エクセルやなんかでぐぐってソースを流用する際にも、それを分けも分からず使うのと、少しでも理解しているのとでは違うと思うし。
応用力っていうか、仕事のできるできないに少なからず結びついて行くと思うんだよなぁ。
プログラマにとってはソフトなんて触ってれば使えるようになるけど、世の中にワードやエクセルの本があれだけ溢れてて、
勉強しないとソフトを使えるようにならない一般職の人を見てると、Cの触りでもやってたら違ったんだろうなと思う。

あと学校での勉強に関して、学生みんなにとってまったく無駄でないことだけを勉強させれるかってそれは無理だし違うよね。
まだ可能性のたくさんある人達にいろんなものに触れさせておくのは大事。中高より専門性の高い大学ですらそう思う。
それに将来直接的に仕事で使うことしか学ばなかったらor学べなかったら視野が狭くなるのでは?そもそも望んだ職につけるかも分からないし選択の幅を広げておくのは学校としては当然のことでしょう。
一見専門外の科目で無駄に思える基礎教養、一般教養も学生の視野と将来性を考えるとやらせておいた方がいい、と社会人になってから気付くと思います。
後半かなり個人的な感想です。朝から長文スマソ。

328:名称未設定
09/07/18 07:23:45 0ENtd6OP0
あれ、、俺後半誰に向かって話してるんだろう。

329:名称未設定
09/07/18 08:55:13 WDKPyi4E0
>> 323
おめでたいな。
必要なときに学ぶんじゃあ、たりないから教育課程に組み込まれてるんだろうが。
お前は行列計算が必要になったら、中一の内容からやるんか?

330:名称未設定
09/07/18 13:05:54 IRO7PrC/0
学校の勉強は必要だから、と云うのと、選択肢を提示するというのの二つの面があるんだからそれでいいじゃまいか

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

数学にせよプログラミングにせよ、論理的な考え方を身に付けると云う点では良いものだと思うけどな……まぁそれでも論理力を身に付けられなかった人たちがわんさか居るみたいだが……

331:名称未設定
09/07/18 14:37:29 Ev3gT3rj0
スレが伸びてると思ったらコレか。
Cocoaの話しようZE

332:名称未設定
09/07/18 14:47:41 KdpE4OpI0
>>329
それで十分。
プログラミングだって1年やそこらでまともなプログラムが組めると思うなよ。

333:名称未設定
09/07/18 20:35:50 NF5M8AGP0
数少ない機会をみすみす見逃す奴らの多いスレですね。
知識は必要になってから学んでいたんではもう遅いんだよ。
ある機会にそのとき必要な知識を既に持っていなければその機会を活かせるときはそれで終わりなんだよ。

334:名称未設定
09/07/18 20:45:51 c/cbzblK0
まあ若い頃の方が吸収早いしね。記憶するのに何の苦労もない。
いったん吸収して必要ないなら忘れればいい。

335:名称未設定
09/07/18 20:46:25 AYKMnLOo0
どうしてこうプログラムやってる奴はアタマがカタいんだろうね。
どのレスも一理あるがそれだけじゃない場合っていうのがあるのに。

336:名称未設定
09/07/18 20:49:38 c/cbzblK0
>>335
さあ自分の言葉を自分自身に適用する作業に戻るんだ

337:名称未設定
09/07/19 13:16:00 6nQyz7kFO
>>336
つまり、

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

ということか。なるほど。つまり335は一理ないか又は例外がないかのどちらかなんだな。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch