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


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

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



1 名前:名称未設定 mailto:sage [2008/10/26(日) 03:42:50 ID:Ato5tySs0]
前スレ
Cocoaはさっぱり!!! version.X(10)
pc11.2ch.net/test/read.cgi/mac/1211290055/

Cocoaはさっぱり!!! version.9
pc11.2ch.net/test/read.cgi/mac/1201106820/
Cocoaはさっぱり!!! version.8
pc11.2ch.net/test/read.cgi/mac/1179498292/
Cocoaはさっぱり!!! version.7
pc11.2ch.net/test/read.cgi/mac/1161486802/
Cocoaはさっぱり!!! version.6
pc11.2ch.net/test/read.cgi/mac/1146391229/
Cocoaはさっぱり!!! version.5
pc11.2ch.net/test/read.cgi/mac/1124986925/
Cocoaはさっぱり!!! version.4
pc11.2ch.net/test/read.cgi/mac/1091927026/
Cocoaはさっぱり!!! Version.3
pc5.2ch.net/test/read.cgi/mac/1063295248/
Cocoaはさっぱり!version:2
pc11.2ch.net/test/read.cgi/mac/1036923528/
Cocoaはさっぱり!
pc11.2ch.net/test/read.cgi/mac/1007632025/

2 名前:名称未設定 mailto:sage [2008/10/26(日) 03:43:22 ID:Ato5tySs0]
関連スレ
Macでプログラミング{9}
pc11.2ch.net/test/read.cgi/mac/1216824430/
MacOS XをUnixとして使ってる人の為のスレ その14
pc11.2ch.net/test/read.cgi/mac/1216715423/
Xcode part7
pc11.2ch.net/test/read.cgi/mac/1218774554/
MacでJava その4
pc11.2ch.net/test/read.cgi/mac/1214284891/
RubyCocoa 初心者質問【Leopardバンドル記念】
pc11.2ch.net/test/read.cgi/mac/1193373811/
AppleScript アップルスクリプト 質問、発表 3
pc11.2ch.net/test/read.cgi/mac/1223026902/
Cocoaリファレンス日本語化計画
pc11.2ch.net/test/read.cgi/mac/1207312910/

3 名前:名称未設定 mailto:sage [2008/10/26(日) 19:27:40 ID:Ob0KlCLP0]
>>1

あと、こんなの見つけた。
cocoawiki.aerial.st/index.php?FrontPage

まだ情報少ないみたいだけど、メモ代わりに使わせてもらおっと


4 名前:名称未設定 mailto:sage [2008/10/27(月) 17:43:20 ID:9uBJK4c00]
いちもつ

5 名前:名称未設定 mailto:sage [2008/10/28(火) 00:59:41 ID:YdtXB3i50]
テンプレに英語系 Cocoa 役立ちサイトを追加:
本家ドキュメント
developer.apple.com/referencelibrary/Cocoa/
わかりやすいチュートリアル
cocoadevcentral.com/
Cocoa に関する Wiki
cocoadev.com/
Cocoa blog 一覧
cocoablogs.com/

だれか日本語の Cocoa サイトをまとめて。

6 名前:名称未設定 mailto:sage [2008/10/28(火) 01:32:23 ID:UXhSYK7I0]
>>5

>>3のwikiにある中から、代表的なもので

Cocoaはやっぱり!
www.big.or.jp/~crane/cocoa/

HMDT
homepage.mac.com/mkino2/

OOMORI.com - Cocoaリファレンス
www.oomori.com/cocoafw/

こんなとこ?

あと、Cocoa Bindingの例探してて見つかった、

Cocoaで遊ぼう!!
homepage.mac.com/t_yamane/prog/index.html

ほかにもオヌヌメあったら、ヨロシコ

7 名前:名称未設定 mailto:sage [2008/10/28(火) 01:41:19 ID:Fus9Bxnw0]
Cocoa Break!
park15.wakwak.com/~concordia/cocoa_break/index.html

Cocoa Bindings Examples and Hints
homepage.mac.com/mmalc/CocoaExamples/controllers.html

8 名前:名称未設定 [2008/10/28(火) 10:47:25 ID:e40mOyml0]
とりあえず良さげな知っている所を挙げてみる
Omni Developer
www.omnigroup.com/developer/

Mac♪Mac♪Mac♪
www.macmacmac.mydns.jp/modules/tinyd0/

Repeating Motif Wonderland
www15.plala.or.jp/NovemberKou/index.html

みるくCocoa
www.stripe-net.jp/cocoa/

9 名前:名称未設定 mailto:sage [2008/10/28(火) 12:34:15 ID:/p+sPRRh0]
全然書き込みないけど

Carbonはさっぱり!!!
pc11.2ch.net/test/read.cgi/mac/1217108500/

10 名前:名称未設定 mailto:sage [2008/10/28(火) 18:29:50 ID:e40mOyml0]
あ、これ忘れてあげないで。
Objective-C [ObjC part:3];
pc11.2ch.net/test/read.cgi/tech/1186543111/

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

【Cocoa】Macプログラマのスレ【Objective-C】
pc11.2ch.net/test/read.cgi/prog/1214208397/



11 名前:名称未設定 mailto:sage [2008/10/28(火) 18:47:24 ID:/p+sPRRh0]
OmniGraffleやOffice 2004(たぶん2008も)のUtility Windowのように、
ドラッグにより、Window同士がある程度近づくと、ドラッグがある程度離れるまで、
ぴったりくっついた状態をキープする動きを実装したいのです。

Windowの位置が近くかどうかは、WindowサブクラスのmouseDragged:内で、位置を取得して割り出せました。
で、Windowがくっついた位置をキープしたいのですが、この方法が分かりませんでした。

mouseDragged:内で、[NSWindow setFrameOrigin:]などで位置を強制的に固定しようとしても、
mouseUp:になるまで効きませんでした。どうすればいいのでしょう?

12 名前:名称未設定 mailto:sage [2008/10/28(火) 21:40:46 ID:iCg2NlHu0]
>>11
www.literatureandlatte.com/freestuff/index.html
にある、KBPalettePanelExampleがそれっぽい挙動実装してるよ。

13 名前:11 mailto:sage [2008/10/29(水) 19:46:15 ID:lZE7N+XQ0]
>>12
まさにこれですね。じっくり見てみます。
とりあえずありがとうございます。

14 名前:名称未設定 mailto:sage [2008/10/29(水) 22:02:38 ID:cQqhv9zc0]
MallocDebugについて質問
MallocDebugで起動し、PopupButtonからLeaksを選択するとリークしているものが表示されると思っている。
次の手順で作ったアプリでリークが検出されるんだけど、本当にリークしているのか
MallocDebugが誤動作しているのかどっちなんでしょうか。

Xcode3.1 OS10.5.5 MallocDebug1.7.1(89.0)
Cocoa Applicationのテンプレートで新規作成
クラス作成
@interface MYObject : NSObject {
IBOutlet NSTextField *textField;
}
-(IBAction)button:(id)sender;
@end

@implementation MYObject
-(IBAction)button:(id)sender
{
[textField setStringValue:@"string"];
}
@end

WindowにNSTextFieldとNSButtonを配置し、アウトレットとアクションをセットし完成。

手順:
テキストフィールドに入力したり、消したり、ボタンを押したりしてから
MallocDebugでリークをチェックするとリークしているように見える。
(272 0x1>こんな感じになってます。272は操作を繰り返すと増えていきます。)
書いてて気にしないのが良いように思えてきた。

15 名前:名称未設定 mailto:sage [2008/10/30(木) 16:30:52 ID:01X0n4GO0]
オブジェクトのディープコピーをするにはどうしたらいいですか?

16 名前:名称未設定 mailto:sage [2008/10/30(木) 23:25:40 ID:sjApbA2/0]
自分でメソッドかけば仕舞いだと思いますが。
めんどくさければ、
NSKeyedArchiver で NSData にかためて、
NSKeyedUnArchiver で NSData にとかせばディープコピーになるんでは?

17 名前:名称未設定 mailto:sage [2008/10/31(金) 00:07:46 ID:WY8mn5mD0]
俺いつもそうやってるw

18 名前:名称未設定 mailto:sage [2008/10/31(金) 00:22:36 ID:Ijy6iEQp0]
>>15
ここ読むといいかもしれない。
journal.mycom.co.jp/column/objc/058/index.html

19 名前:名称未設定 mailto:sage [2008/10/31(金) 10:11:29 ID:nFHujBCu0]
>>14
まあ自分では対処しようがないんだから気にすることは無いんじゃない?
あと@"string"をインスタンス変数に入れて
初期化が一回だけになるようにしたらどうだろう?
たしか文字定数は初期化一回だけのはずではあるけど

20 名前:名称未設定 [2008/10/31(金) 22:16:59 ID:9ab+JRCT0]
Xcode 3.1/Mac OS 10.5.5 (intel)
MacBookとか、iMacとかのモデル名を取得する方法ってあるでしょうか。



21 名前:名称未設定 [2008/10/31(金) 22:30:21 ID:3evJZ2XL0]
>>20
ハードウエアの情報については、開発ツールのIORegistryExplorerで目的のものがあるか探してくれ

22 名前:名称未設定 mailto:sage [2008/10/31(金) 22:34:21 ID:cB2Q2v1H0]
ADCの日本語ドキュメントを見ながら初Cocoaに触れてますが、チュートリアルでいきなりつまずきました。
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/06Controller/chapter_6_section_6.html
ここで
> ConverterController.hファイルを選択して「開く」をクリックします。
とありますが、これをやっても何もおきません。図5-3のようにもならなければエラーも出ません。
何が原因でしょうか???

23 名前:名称未設定 mailto:sage [2008/10/31(金) 22:42:52 ID:23e1rSMO0]
なにもおきなくて正解です。単にその操作は、
.h に書かれている内容を IB に教えてあげるだけです。
図 5.3 のようにするには、ステップ 3 をしないといけないです。
ライブラリから青い立方体のをドラッグ&ドロップして、
クラス名を NSObject から ConverterController にしてやらないといけないです。

24 名前:22 mailto:sage [2008/10/31(金) 22:53:59 ID:cB2Q2v1H0]
>>23
おお!なるほど!できました!
それにしても紛らわしい書き方ですね…。

25 名前:名称未設定 mailto:sage [2008/10/31(金) 23:04:11 ID:23e1rSMO0]
Apple のかわりにあやまっておきます。ごめんなさい。
あと、普通は 2. のステップ (.h を開く もしくは IB にドロップ) は
IB が自動的に XCode に登録されてる .h を全部監視しているので
しなくてもいいんですが、ときどき IB が混乱して
新しい .h を読まなかったりするので、やり方は覚えておいたほうがいいでしょう。

まあ頑張ってね :) 仕組みがわかれば IB は快適です。

26 名前:名称未設定 mailto:sage [2008/11/01(土) 01:11:52 ID:n4dRfqKu0]
>>21
ありがとうございます。見つかりました。
Macにもレジストリってあったんですか…。


27 名前:名称未設定 mailto:sage [2008/11/01(土) 01:17:48 ID:nRvsaBqW0]
てめー、Mr. Registry.appさんにケンカうってんのか

28 名前:名称未設定 mailto:sage [2008/11/01(土) 03:04:31 ID:ABXtPrBS0]
RegistryはMicrosoftの登録商標ですか

29 名前:名称未設定 mailto:sage [2008/11/01(土) 04:53:05 ID:lyFOviiP0]
iPhoneで何か作るか〜と昔買ったヒレガス本を引っ張り出してきて
まーとりあえず、cocoaでOSX用乱数発生アプリを手本通りに組んで
追々思い出しながら手慣らしを〜・・・

インターフェースビルダにツールバーが無ぇ!(笑
”システムフォント”はどこだ?(笑
NSObjectのサブクラスを・・・ってClassメニューはどこ行った!?(今日はここまでw

Xcode3(というかインターフェースビルダーというか)が変わってて
昔の本の記述が役に立たねぇ orz

30 名前:名称未設定 mailto:sage [2008/11/01(土) 12:13:33 ID:azplz7rR0]
つうかCocoaの「たのココ」とかチュートリアルとか、
に何となく簡単そうに見える本から入っていく初心者って、
IBでGUI作ったりチュートリアルのコピペあたりで終わって
つまづいて進歩しないか、飽きていくのがほとんど。

ちゃんとC言語、オブジェクト指向、Objective-C、と基礎から
積み上げて行かないと、いくらやっても表面なでてるだけで、
まともに書けるようにならないよ。



31 名前:名称未設定 mailto:sage [2008/11/01(土) 12:39:28 ID:IrrqNq8q0]
確かに今活躍してるCocoa開発者はNeXTのときにみっちり身につけてる人らばっかりだもんな。

32 名前:名称未設定 mailto:sage [2008/11/01(土) 12:57:52 ID:5Mi4Vs1D0]
MacOSXがリリースされてから、すでに7年はたっている。
これだけ時間があれば、NeXTを知らなくても、Cocoaを身につけられる

33 名前:名称未設定 mailto:sage [2008/11/01(土) 13:00:28 ID:suYAyqpA0]
んなことはない。「たのココ」は知らんが、俺は「ヒレガス本」から入った。
後はサンプルをつまみ食いしつつ、AppleのサイトのApplicationKitと
Foundationのクラスのドキュメントを読めば何とでもなる。Cを知らないと
話にならんが、最初からObjective-Cをすべて網羅する必要はない。

それこそ、CとかObjective-Cの基礎からやってたんでは飽きてしまって
Cocoaに辿り着けなくなるのがオチだ。

NeXTからやってる奴なんてごく少数だ。

34 名前:名称未設定 mailto:sage [2008/11/01(土) 13:02:11 ID:suYAyqpA0]
>>33>>30>>31へのレスだよ。

35 名前:名称未設定 mailto:sage [2008/11/01(土) 13:13:39 ID:9deuPHbB0]
俺も>>33と同意見

俺はプログラミングド素人
Macも6月に買ったばかり
未だに「オブジェクト指向?」「クラス?」「メソッド?」なレベルなんだけど
「たのCoco」とサンプルを参考にして既にiPhoneアプリを一本リリースした
これがそこそこ売れてしまったのでモチベーションUP!!

最近ようやくCの入門書を買って読み始めた
最初にCの入門書を読んでいたら確実に挫折していたと確信している

36 名前:名称未設定 mailto:sage [2008/11/01(土) 17:13:04 ID:fjrubA2a0]
>>35
何作ったの?

37 名前:名称未設定 mailto:sage [2008/11/01(土) 17:58:25 ID:n4dRfqKu0 BE:226400933-2BP(1235)]
sssp://img.2ch.net/ico/si.gif
>>35
有料化できるアプリってどういうのなんだろ。
やっぱちゃんと作らないといけないイメージがある。
あと、レジストキー関係のプログラムが面倒くさそう。
適当でも良いんだけど、適当だと簡単に破られるしね。
そこらへん、iPhoneは有料アプリ組みやすいのかな?

俺の暇つぶし集↓今んとこ全部無料。
www.smilemac.com/

38 名前:名称未設定 mailto:sage [2008/11/01(土) 19:57:18 ID:azplz7rR0]
C言語からはじめる必要はないか。
ただIBで遊んだりチュートリアルのコピペをしばらく
楽しんだら、ある程度基礎的なことも理解していく必要は
あると思うけどね。

その点で、
> 最近ようやくCの入門書を買って読み始めた
という>>35はもう次のステップにうつっているから
良いんだけど、そういうステップに行く前に挫折する人が多いのも
事実。

39 名前:名称未設定 mailto:sage [2008/11/01(土) 20:06:00 ID:ABXtPrBS0]
Cすらも分からんのに何やるのさ

40 名前:14 mailto:sage [2008/11/01(土) 20:41:08 ID:pd2MLZdJ0]
>>19
元々はCocoaバインディングを使ってみて同じ現象になったんでバインディングの
使い方が悪いのかと思ってたんですが、使わなくてもなったんでデバッガの使い方が
悪いのかと思って質問しました。
気にしないことにします。

>>35の行動力は凄いな。



41 名前:名称未設定 mailto:sage [2008/11/01(土) 23:23:16 ID:/+/D9BW40]
>>37
>あと、レジストキー関係のプログラムが面倒くさそう
iPhone の場合はそのあたりは全部 AppStore が面倒見てくれるので
なにも書かなくていい。

42 名前:名称未設定 mailto:sage [2008/11/01(土) 23:32:13 ID:sVr4qJRL0]
>>37
誰かと思ったらMacNicoPlayerの作者さんじゃないかw
暇つぶしとかそんなまた謙遜を。

なんか35見て感動したのでたのCocoAmazonで買ってくるか。

43 名前:名称未設定 mailto:sage [2008/11/02(日) 00:12:33 ID:lKREfCNZ0]
>>35はかなりセンスあるんだな。
俺は趣味グラマ長いけど、未だにInterfaceBuilderには馴染めない。(泣

44 名前:名称未設定 mailto:sage [2008/11/02(日) 00:23:21 ID:HoLoopJM0]
>>43
習うより慣れろ。by パソコンサンデー おヅラも出てたな。

45 名前:名称未設定 mailto:sage [2008/11/02(日) 00:36:37 ID:lKREfCNZ0]
パソコンサンデー・・・
何もかもが懐かしい。
スレ違いスマン。

46 名前:35 mailto:sage [2008/11/02(日) 00:45:43 ID:lImmlfsv0]
iPhone Dev Centerのドキュメントとサンプルコードが充実していたので
なんとか一本書けた感じです
developer.apple.com/iphone/

細かいことはとりあえず気にせずに
とにかく一本AppStoreに出してみようじゃないか!
という勢いだけで突き進みました

課金については>>41の通り
料金をプルダウンメニューから選ぶだけです
もちろんFreeでもいいです

どんなに小さなアプリでも
とにかく一本完成させたことが大きな自信につながったので
小難しいことは軽くスルーしつつ一本作って公開してみるといいと思います
その点、iPhoneのAppStoreは小さいアプリをぽんぽん出せるのでおもしろいです

今後はOSXのアプリにも挑戦したいですねー

47 名前:名称未設定 mailto:sage [2008/11/02(日) 01:00:42 ID:MKapFhX90]
>>41
ほぉ、そうなのか。
ところで、$99払えば誰でもアプリ売れるの?
それとも審査とかがあるのかなぁ。
Developer Connectionは日本語文字化けするので、買い物用のApple IDとは別のIDにしてるんだが、もし審査あるのなら、メイン垢のほうが良さげ?
日本語名の垢でやるとフォーラムとかで自分の名前化けそうなんだよな。
そこらへん誰かkwsk。

>>46
iPhone開発って難しいイメージあったんだが、iPhone SDKのリファレンス見たら、そうでもないのか。
Cocoaアプリ作る要領で、リファレンス見ながらやればすぐいける感じかな?
ちょっくら作ってみるか、実機もって無いけどorz

48 名前:名称未設定 mailto:sage [2008/11/02(日) 01:11:24 ID:lImmlfsv0]
>>47
シミュレータで動かすだけなら無料
実機転送とAppStoreに公開したいのなら$99払う必要有り

アカウントの文字化け問題には俺を含めてかなり多くの日本人が悩まされているけど
「文字化けしてるから直してくれ!」って根気よくADCにメールすればそのうち直るw
これは人によっていろんなケースがあるから一概には言えない

iPhone開発に関しては
プログラミング経験のほとんどない俺が
Macを初めて買って一ヶ月ちょっとでリリースまでこぎつけられたことを考えると
ハードルは高くないはず

アプリは提出すると審査があって
脆弱性とかエログロとかがあると却下される
でもどこが悪いのか教えてくれるから直しやすい

詳しくはiPhone開発スレで
pc11.2ch.net/test/read.cgi/mac/1224089976/

49 名前:名称未設定 mailto:sage [2008/11/02(日) 02:08:28 ID:lyXSXRrr0]
バカお前ら騙されるな
>>35 = mkino (=たのcocoの著者) だ!!
>>35は宣伝なんだよ!!

50 名前:名称未設定 mailto:sage [2008/11/02(日) 02:09:20 ID:j7DXTstY0]
ΩΩΩ < 何だって〜〜!



51 名前:名称未設定 [2008/11/02(日) 02:20:49 ID:fJQfdcGh0]
やられた!
>>35 見て、今すぐ書店に急いじゃったぜ!

52 名前:名称未設定 mailto:sage [2008/11/02(日) 03:34:40 ID:Y374j0B40]
アメリカの会社なのに社会主義的でおかしいよね

53 名前:名称未設定 mailto:sage [2008/11/02(日) 04:03:29 ID:sEZUqidf0]
>>35は売り上げを晒すかアプリを晒して欲しい。


54 名前:名称未設定 mailto:sage [2008/11/02(日) 04:10:21 ID:Y6GegVsr0]
なんで49とか53はそう悪意というか疑いの目で35を見るかな....
嫉妬でもしてるのか?


55 名前:名称未設定 mailto:sage [2008/11/02(日) 04:29:03 ID:9VM5jO2v0]
iPhoneのアプリ作ってる人ってカタギじゃないですよね?

56 名前:名称未設定 mailto:sage [2008/11/02(日) 04:55:14 ID:CejDTsgr0]
>>54
パソコンサンデーとか言って通じる辺り、たぶんここの平均年齢層は高いのだと思うが、
そういう世代にとって、プログラミングというのは「模型を作る」のと同じレベルの趣味で、
さーて、なんかiPhoneだと世界相手にプログラム作って売れるらしいからなー
こりゃ面白い、あーでもMSXマガジンの頃はいくらでもアイデア出たのに、
長年離れてたら勘が鈍ったなー まーcocoaの作法覚えながら、また少しずつ鍛えるかー
ぐらいのもんなんだが、

「プログラミング」っていうのがひょいとパソコンを買ってきたら普通にできるホビー。

じゃなくて、プログラミングというのは専門学校かなにかで習って、
企業に就職したプロが、プロジェクトチームでカネを掛けてやるもの。
ってことに(その子の中では)なってる子が、
これ系の別スレにも迷い込んでて周りと話がかみ合ってなかった。

57 名前:名称未設定 mailto:sage [2008/11/02(日) 05:26:20 ID:Y6GegVsr0]
自分はパソコンサンデー?なにそれ?って感じの世代だがそのホビーとしてのプログラミングって言う発想は分かる。

まだ自分がMacユーザーではなかったときに一番最初にいじった言語はなでしこ(nadesi.com/)だったなそういえば。
その後JavascriptをちょっといじってからMacに移動して、AutomatorとAppleScriptに興奮して、最近たのCoCo版Tigerを買ってXcode 2.x系列を落として色々やっていたらLeopard版が出てしまったというのが現状。

でもそういえば自分は文系だった気がする。おかしいかな?

58 名前:35 mailto:sage [2008/11/02(日) 07:17:52 ID:lImmlfsv0]
パソコンサンデー?
なんだか方向がズレてきてるけど
とりあえず自分が言いたかったことは

・C言語からはじめて挫折するよりも、細かいところには目をつぶってサンプルコードを参考にしてとにかく何か一本完成させて公開までもっていく
・これにはiPhoneアプリが最適なのではないか
(Appleの審査があるので無自覚に危険なアプリをばらまいてしまう恐れも無いし、メンテや課金も簡単)

こんな感じです

アプリは実名で出しているのでアプリ名晒しは勘弁してください
これまでの売り上げはMacBookが買える程度です
売り上げのほとんどが海外です(これもiPhoneアプリのおもしろいところ!)
ではみなさんもがんばって!

59 名前:名称未設定 mailto:sage [2008/11/02(日) 09:39:27 ID:3POzmbdQ0]
ObjC (Cocoa) + IB ってのが、簡易言語的な感じでとっつきやすいんだろうね。
で、実用的なGUIなアプリが割と楽に作れるし、達成感もあると。

素のC言語から初めて、何か人に使ってもらえるものを作るとなったら、
結構な道のりだからなあ。

iPhoneのアプリなんかは、単純なプログラミングの技術より、何かいい発想の
ある人の方が面白いものを作れる可能性が高いような気がする。

60 名前:名称未設定 mailto:sage [2008/11/02(日) 10:18:24 ID:anI9QKlo0]
35が宣伝でも構わんが、たのCocoは正直オススメできない。
内容も薄いし、理解させようと言う意識が感じられない。
入門ならヒレガス本をオススメする。



61 名前:名称未設定 mailto:sage [2008/11/02(日) 10:21:52 ID:sje4Pdr1P]
しかしIBのインターフェースが変わったのがヒレガス本としては痛いな
早く新版でないかなー


62 名前:名称未設定 mailto:sage [2008/11/02(日) 10:28:52 ID:Y6GegVsr0]
もう新版出てないか?>ヒレガス
www.amazon.co.jp/exec/obidos/ASIN/0321503619/
Amazonには2001,2004,2008が全部売られているけどタイトルで分類しているせいか全てに同じ内容の商品説明とカスタマーレビューがついていて混乱する。

63 名前:名称未設定 mailto:sage [2008/11/02(日) 10:54:58 ID:3Vx+y2lH0]
>>62
たぶん>>61は和訳されたものが欲しいのだと思う。

俺も旧版の和訳しか持っていないので
新版出てくれるとありがたい。

64 名前:名称未設定 mailto:sage [2008/11/02(日) 19:07:02 ID:/LuXh8CU0]
>>29

好きに使え、って書いてあったから、XCode3用のチュートリアル書いてみた。
cocoawiki.aerial.st/index.php?Cocoa%20Bnding%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%91

でも画像あげれないから超分かりにくいね、これ。

65 名前:名称未設定 mailto:sage [2008/11/02(日) 19:14:03 ID:MKapFhX90]
developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/05View/chapter_5_section_1.html#//apple_ref/doc/uid/TP40000863-CH7-SW1

66 名前:名称未設定 mailto:sage [2008/11/02(日) 21:02:55 ID:mqh/+RaW0]
すみません、質問です。
アプリを起動した直後に特定のテキストフィールドなどにフォーカスを
当てたいのですが、どうすればよいのでしょうか?

67 名前:名称未設定 mailto:sage [2008/11/02(日) 21:06:32 ID:sje4Pdr1P]
>>64
コメントありがとね
画像アップはちょっとまってて、
2、3日でリアルが片付くから、それからやります
不便をさせて申し訳ない

68 名前:名称未設定 mailto:sage [2008/11/02(日) 21:54:10 ID:lKREfCNZ0]
ここ数日ADCのレスポンスが異常に悪いんですが、皆さんいかがですか?
Software Updateもタイムアウトで完了できない有様で・・・。

69 名前:名称未設定 mailto:sage [2008/11/02(日) 22:03:51 ID:Y6GegVsr0]
>>68
Snow Leopardの新seedのせいとか?

70 名前:名称未設定 mailto:sage [2008/11/02(日) 22:03:55 ID:rI4hnwUX0]
>>64
Cocoa Bndingになってる



71 名前:名称未設定 mailto:sage [2008/11/02(日) 22:11:09 ID:MKapFhX90]
>>68
-(void)awakeFromNib{
[myField becomeFirstResponder];
}

72 名前:名称未設定 mailto:sage [2008/11/02(日) 22:11:42 ID:MKapFhX90]
ごめん、安価ミス
>>66宛。

73 名前:名称未設定 mailto:sage [2008/11/02(日) 23:48:27 ID:mqh/+RaW0]
>>71
ありがとうございます。
ちなみに調べていて

[myWindow makeFirstResponder:myField];

でも行けたのですが、どちらも同じですかね?



74 名前:11 mailto:sage [2008/11/03(月) 00:21:48 ID:3VCrO+9U0]
通りすがりだけど
becomeFirstResponder
には

Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly.

とあるね

75 名前:名称未設定 mailto:sage [2008/11/03(月) 00:58:24 ID:Hr4zrpPq0]
becomeFirstResponderってオーバーライド用じゃなかったっけ?

76 名前:名称未設定 mailto:sage [2008/11/03(月) 02:17:40 ID:qCH2Sci10]
OSX10.3辺りで一時期cocoaに触れて、
その時に作ったソフトが起動すらしなくなったので改めて一から作り直そうと
久々にcocoaに再挑戦する所なのですが、
レオパルドの開発環境では何か根本的に作り方が変わったりしてるんでしょうか?

77 名前:名称未設定 mailto:sage [2008/11/03(月) 02:44:14 ID:1yy3U75q0]
再ビルドすれば起動するんじゃないの

IBが変わりすぎて慣れるのに時間がかかる。

78 名前:名称未設定 mailto:sage [2008/11/03(月) 02:52:02 ID:mTkV4jRn0]
>>74-75
73ですけどご意見ありがとうございます。
makeFirstResponder を使った方が良いという事ですよね。


79 名前:76 mailto:sage [2008/11/03(月) 03:22:30 ID:qCH2Sci10]
以前改良しようと中途半端に手を加えた場所等、
もう全体構造が判らなくなってるので一から作った方が早いと思ったからです。

80 名前:名称未設定 mailto:sage [2008/11/03(月) 03:36:44 ID:Foy84T9X0]
いや、プログラムのサイズにもよるけど、
がんばって思い出してみたほうがいいんじゃないかな。
とりあえずは昔のプロジェクトを最新の xcode で開いて、
コンパイルしてみるのをおすすめします。
なにか 10.5 になってなくなった/挙動がかわった
API をつかってるのかもしれないし ...
デバッガでどこで落ちてるのかを調べるだけでもちがうでしょう。

別に本質的にはなにもかわってませんよ。
いろいろ Cocoa の API が増えてるのを除けば。
(CoreData, Binding とか... Binding は 10.3 にもあったっけ?)

>>77 さんもいうように
IB3 は IB2 からかなり変わりましたが、outlet / target の考え方はかわらないし。
クラスは IB 側で作らずに XCode で作ることが推奨されるようになったぐらい?



81 名前:名称未設定 mailto:sage [2008/11/03(月) 10:01:54 ID:DCZONU6Z0]
>>73
IBでwindowのinitialFirstResponderとテキストフィールドを繋げてもできた
後はnextKeyViewを繋げていけばタブキーの移動が制御できた

82 名前:名称未設定 mailto:sage [2008/11/03(月) 10:02:46 ID:dKQvPNo00]
>>78
becomeFirstResponderは「自分がFirstResponderになるか否か」を返すためのもの。
FirstResponderにしないビューを作りたい場合、
becomeFirstResponderをオーバーライドしてNOを返せば良い。

- (BOOL)becomeFirstResponder {
return NO;
}

83 名前:名称未設定 mailto:sage [2008/11/03(月) 18:19:30 ID:jVQJ8W/E0]
unsigned int hoge = 4264034304;
NSData *hogedata = [NSData dataWithBytes:&hoge length:4];
NSLog(@"hoge is %d, hogedata is %@" , hoge, hogedata);

とやってコンソールの出力を見ると
hoge is -30932992, hogedata is <000028fe>
となります。
32bitなので unsigned int なら4264034304(0xfe280000)はきちんと表示されると思ったのですが、
この-30932992や<000028fe>はどうして出力されるのでしょうか?


84 名前:名称未設定 mailto:sage [2008/11/03(月) 19:17:31 ID:+8TFOxC70]
>>83
こんな感じでどうでしょう
unsigned int hoge = 4264034304;
NSData *hogedata = [NSData dataWithBytes:&hoge length:4];
NSLog(@"hoge is %u, hogedata is %@" , hoge, hogedata);

union {
unsigned int ui;
unsigned char ch[4];
}test;

[hogedata getBytes:&test length:4];
NSLog(@"hoge2 is %u, %x, %x, %x, %x" , test.ui, test.ch[3], test.ch[2], test.ch[1], test.ch[0]);

developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

85 名前:名称未設定 mailto:sage [2008/11/03(月) 20:07:58 ID:YM+SucNB0]
要は符号付き/無しとエンディアンの話か。

86 名前:名称未設定 mailto:sage [2008/11/04(火) 18:54:34 ID:eYzISOw90]
ライブラリのパスの渡し方を教えてください

プロジェクトの設定でライブラリ検索にパスを渡しても
エラーが生じます。

ちなみにヘッダファイルのパスは上手く通ります。

87 名前:名称未設定 mailto:sage [2008/11/04(火) 23:33:36 ID:G6xtfucg0]
>>86
スタティックライブラリ(.a?)ならファイルが並んでるツリーのところで
右クリック->追加->既存のファイルでライブラリファイルを選択
同様にヘッダファイルを追加してビルドすればできたっぽい
プロジェクトの設定とかはいじってない

88 名前:87 mailto:sage [2008/11/04(火) 23:38:48 ID:G6xtfucg0]
>>87に追記
*.a、*.hの追加時にコピーは作っても作らなくてもできた

89 名前:名称未設定 mailto:sage [2008/11/04(火) 23:41:04 ID:eYzISOw90]
>>87
ありがとうございます。
明日確認してみます。


90 名前:名称未設定 mailto:sage [2008/11/05(水) 21:09:37 ID:19atskXb0]
NSTableView内のセルを編集可能にして
セルの内容をプログラム内で読めるようにしたいのですが、
どのようなメソッドを使えばいいのでしょうか?

変更した時点でデータを読みに行く必要は無くて、
適当なタイミングで(Save Buttonを押した時とか)読めればいいのですが。

元々用意してたデータをNSTableViewに表示までは出来るようになったのですが。。。



91 名前:名称未設定 mailto:sage [2008/11/05(水) 22:03:03 ID:bThhRr9i0]
>>90
tableView:setObjectValue:forTableColumn:row:

セルの内容が変更になった時に呼ばれるから、
該当するデータを差し替えれば良い。

92 名前:76 mailto:sage [2008/11/06(木) 08:26:12 ID:8NSMQDOL0]
遅れながら、言われた通りちょこっと頑張って直せました。
レオパになってメモリ管理の新機能が付いたとかチラ聞きして
その辺りも含めて立ち上がらなくなったのかとか色々考え過ぎて腰が引けてた様です。
有り難うございました。

93 名前:90 mailto:sage [2008/11/06(木) 11:23:58 ID:FHeExVxB0]
>>91さん
出来ました! 素早い解答ありがとうございます。

94 名前:名称未設定 mailto:sage [2008/11/06(木) 21:38:07 ID:5DYNPx6+0]
NSTextField内の挿入ポイントを行の最後に移動したいのですが
どうすればいいでしょうか?
moveToEndOfLine: はNSTextViewでしかできませんでした。

95 名前:名称未設定 mailto:sage [2008/11/06(木) 21:48:16 ID:4wWZp45n0]
currentEditor で NSText を取り出して moveToEndOfLine:

96 名前:名称未設定 [2008/11/06(木) 23:12:39 ID:xQKaLsP4P]
うちのCocoa Wikiにコメントをくれた人、いますかね?
ファイル添付機能を有効にしたので、再度編集していただけると嬉しいです。
ちなみにファイルサイズの上限は5MBです。

97 名前:名称未設定 mailto:sage [2008/11/06(木) 23:48:14 ID:5DYNPx6+0]
>>95
[[inputTextField currentEditor] moveToEndOfLine:self];
できました、ありがとうごさいます。

98 名前:名称未設定 mailto:sage [2008/11/07(金) 01:50:36 ID:ww1WLO3q0]
>>96
ありがと
マターリとやっていきます。

99 名前:名称未設定 mailto:sage [2008/11/07(金) 09:13:42 ID:Xt4hlMq90]
cdn1.ustream.tv/swf/4/viewer.45.swf?cid=317016
めちゃくちゃ可愛い

100 名前:名称未設定 mailto:sage [2008/11/07(金) 11:15:30 ID:DD7bYBXs0]
いまいち何が問題なのかわからないので、質問させてください。
まずMyClass.hとMyClass.mで下のように実装して
@interface MyClass : NSObject {
NSMutableArray *myArray;
}
@end
@implementation MyClass
-(id)init
{
self = [super init];
if( self ){
[myArray initWithCapacity:10];
[myArray addObject:[NSNumber numberWithInteger:1]];
NSLog(@"myArray is %@", myArray);
}
return self;
}
@end
その上で、AppController.h とAppController.mで
@interface AppController : NSObject{
MyClass classObject;
}
@end
@implementation AppController
-(void)awakeFromNib
{
classObject = [[MyClass alloc] init];
}
@end
というふうに初期化してみても、コンソール出力に(NULL)しか出ません。これは何故なのでしょうか?
あとこのmyArrayをアプリケーションの起動から終了までずっと保持しておきたいのですが、ガーベジコレクションを使う場合、ルート集合から参照しておけばよいと本に書いてあります。具体的にはどうすればよいのでしょう?



101 名前:名称未設定 mailto:sage [2008/11/07(金) 11:18:38 ID:I+wKqcuj0]
↑フラッシュの穴を付いた攻撃なので注意

102 名前:名称未設定 mailto:sage [2008/11/07(金) 11:20:56 ID:Xt4hlMq90]
[myArray initWith...] じゃだめ。その時点では myArray は nil でしょ。
nil に initWith メッセージを送ってもどうしようもないです。
myArray=[NSMutableArray alloc];
として myArray に NSMutableArray のインスタンスをつくってから、
initWith... しないと。普通は組み合わせて
myArray=[[NSMutableArray alloc] initWith... ]
とするのが吉。

ルート集合って何のことなのか具体的なことが本に書いてあるはずだけど、
読みましたか?読めばどうすればよいのかこともわかるはずだけど...

103 名前:名称未設定 mailto:sage [2008/11/07(金) 11:22:48 ID:Xt4hlMq90]
え。このフラッシュって悪い奴なの?ごめんなさい。
単に犬の赤ちゃんの live webcam で可愛いなあと思ってみてたんですが...

104 名前:名称未設定 mailto:sage [2008/11/07(金) 12:55:31 ID:xQSQPAmW0]
それをなぜこのスレに貼る

105 名前:100 mailto:sage [2008/11/07(金) 13:08:19 ID:DD7bYBXs0]
>>102さん
確かに[myArray [[NSMutableArray alloc] init..]とすると動きました。
初めて1月たつのに、まだまだ基本的な所が理解できていないようです。
本は荻原さんの詳解Objective-C2.0を読んでるんですが、
外部変数や大域変数がなんなのか、そこから参照するというのがよくわかりません。

106 名前:名称未設定 mailto:sage [2008/11/07(金) 14:08:16 ID:5c1UEXI40]
1ヶ月で理解出来たら、世の中はObj-Cプログラマーで溢れかえってるんだぜ?

107 名前:名称未設定 mailto:sage [2008/11/07(金) 16:01:22 ID:SM5nwPQ/0]
最近プログラミングを初めようと思いCocoa本買いました。
Mac買った時に付属していたDVDからXcodeインストールしたんですが、新規プロジェクトの中のCommand Line Utilityという項目はあるんですが、その中にStanderd ToolやFoundation Toolなどが入ってません。
どうすればいいでしょうか?
素人的なことで申し訳ないです…。(-.-;)

108 名前:名称未設定 mailto:sage [2008/11/07(金) 16:47:19 ID:xH5O/xya0]
買った本は何か? Xcode のバージョンは? 何をしようとしているの?

109 名前:名称未設定 mailto:sage [2008/11/07(金) 18:55:42 ID:VaKcdyjz0]
>>108
バージョンは3.0です。
買った本は木下誠「たのしいCocoaプログラミング」です。
実験用のプロジェクトをつくりたいんですが。

110 名前:名称未設定 [2008/11/07(金) 19:25:52 ID:zN7DmkVq0]
NSString定数で漢字を使えない設計にした人

すぐに自殺してください。



111 名前:名称未設定 mailto:sage [2008/11/07(金) 19:35:18 ID:Qu5mLm7y0]
>>110
貴方の無知は痛々しいです。何が原因か推測さえ出来ないのですか。

112 名前:名称未設定 [2008/11/07(金) 20:00:31 ID:zN7DmkVq0]
原因はObjective-Cのアーキテクトが馬鹿だからです。

113 名前:名称未設定 mailto:sage [2008/11/07(金) 20:02:07 ID:xH5O/xya0]
たのココ(10.5)にはcommandLineAppなんて無かった気がするが…まぁ、無くても出来るよ。
新規プロジェクト>Application>Cocoa Application を選んで、適当にプロジェクト名を
つける。後はXCodeのウィンドーにある>グループとファイル>Other Sources>main.m
をいじれば良い。StanderdToolのmain.c(Cしか使わなければ、Xcode上でmain.mを選択、
右クリック>名称変更で、.c に)は、
#include <stdio.h>
int main (int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!¥n");
return 0;
}
FoundationToolのmain.mは、
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// insert code here...
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
なので、書き換えれば良い。

114 名前:名称未設定 mailto:sage [2008/11/07(金) 20:24:34 ID:WHDeBs4d0]
>>109
木下の本はやめた方が良いと思う。
ヒレガス本にしる。

>>112
じゃやめちまえ。
バカに付き合うほど暇なら別だが。

115 名前:名称未設定 mailto:sage [2008/11/07(金) 20:30:00 ID:qG8ur2d10]
うは、馬鹿降臨。

116 名前:名称未設定 mailto:sage [2008/11/07(金) 20:43:30 ID:7lDacPZy0]
>>110
@"漢字ひらがなアイウエオ"
で全然通りますが。

117 名前:名称未設定 [2008/11/07(金) 21:03:18 ID:zN7DmkVq0]
>>116
(´ι _` ) あっそ

118 名前:名称未設定 mailto:sage [2008/11/07(金) 22:33:21 ID:jHitKJj60]
てかさんざん既出だろ。

119 名前:名称未設定 mailto:sage [2008/11/07(金) 22:39:03 ID:b9cUYWPw0]
>>112
それが「objective-cの」言語仕様だと思っている時点でアホウだな。


120 名前:名称未設定 [2008/11/07(金) 22:41:40 ID:wHlO12kf0]
態度わりーw



121 名前:名称未設定 [2008/11/07(金) 23:08:52 ID:4BK/dCS30]
>>107
>Standerd ToolやFoundation Toolなどが入ってません

けど変だね。普通はそこに5つはいってるけどな

122 名前:名称未設定 mailto:sage [2008/11/08(土) 00:22:53 ID:kXRjTak80]
@"..." の定数って、 7 bit ascii 以外は未定義だよね ???
[NSString stringWithCString: "...."
encoding: ソースコードのエンコーディング]
を使うのが安全なんではないかと思いますが。

あと、お願いだからみなさん NSString <---> char* の変換で
encoding 指定のない deprecate されてるメソッドは使わないようにしましょう。
それらのメソッドは Cocoa のデフォルトエンコーディングをつかいますが、
Cocoa のデフォルトエンコーディングは環境設定で言語を何にしているかに
依存するので、日本語環境では動いているソフトが英語環境にすると
途端に動かなくなったりその逆とかいう意味不明なバグが多発します。

これのせいで英語の作者のつくったユーティリティーが
日本語ファイル名をちゃんと扱えなかったりするので泣けます。

123 名前:名称未設定 mailto:sage [2008/11/08(土) 02:14:53 ID:HB66BG0k0]
>>122
これ何に対するレス?

>[NSString stringWithCString: "...."
>encoding: ソースコードのエンコーディング]
>を使うのが安全なんではないかと思いますが。

とりあえず autorelease されてる点は注意だよね。
それに「ソースコードのエンコーディング」ってのも、ポータビリティを考えると
どうよ、って感じがする。

>これのせいで英語の作者のつくったユーティリティーが
>日本語ファイル名をちゃんと扱えなかったりするので泣けます。

この場合はエンコーディングを指定しても本当は駄目で、
filesystemRepresentaion を使わないといけないのだが。
現実的にはUTF-8にしておけば一応大丈夫だけど。

中途半端なアドバイスをするお前に泣けたw

124 名前:名称未設定 mailto:sage [2008/11/08(土) 02:46:09 ID:D6mFIMvA0]
>>113
ありがとうございました。
助かりました。(≧∇≦)

125 名前:名称未設定 [2008/11/08(土) 06:50:28 ID:+B195WiV0]
NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。
NSMenuItemのArrayとできちゃえばサイコーなんですが…。

126 名前:名称未設定 mailto:sage [2008/11/08(土) 08:06:27 ID:HVynMMKD0]
超ハイパーウルトラ初心者ッス

IBでコントロールを二つ用意しそれぞれアウトレットとアクションを一つずつ持ちます。

でWindowsにテキストフィールド二つとスタートボタンがあります。

テキストフィールドはそれぞれ上記で用意した各コントロールのアウトレットと一対一でコネクトさせています。

しかし、アクションであるスタートボタンを二つのコントロールにコネクトさせることができません!
どちらか一つとコネクトさせると一方のコネクトが(勝手に!)解除されます。

スタートボタンを押すと二つのコントロールを起動させたいのですが・・・・


127 名前:名称未設定 mailto:sage [2008/11/08(土) 08:48:36 ID:SWmtZyAd0]
InterfaceBuilder で何でもできると思ったら大間違いだ

128 名前:名称未設定 mailto:sage [2008/11/08(土) 09:04:59 ID:NHu1yaCo0]
>>126
Windowsってw

Actionは1つのオブジェクトにしか送信できないので、
複数のオブジェクトを動作させたい場合は中間にオブジェクトを置くのが手っ取り早い。

ボタン→中間オブジェクト┬→オブジェクト1
            └→オブジェクト2

というか、1つのアクションで完結するように設計を見直した方が良いと思うが。

129 名前:名称未設定 mailto:sage [2008/11/08(土) 11:20:51 ID:Nk749XR60]
>>125
できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。

130 名前:名称未設定 [2008/11/08(土) 20:44:39 ID:d4+4vCvN0]
超ハイパーウルトラ初心者ッス

>>128さんの言うとおりに中間オブジェクト(Viewクラス)を作りました。
そのViewクラスにIBのテキストフィールドと結びつけるアウトレット変数を定義したのですが・・・・

そのアウトレット変数を>>128で定義されたオブジェクト1や2で使用するにはどうしたらいいのでしょうか?

参考詳細
View.hファイル
IBOutlet id textField1;
-(IBAction)startBu:(id)sender;

View.mファイル
-(IBAction)startBu{
OBJ1 obj1 =[[OBJ alloc] init];
[obj func];

OBJ.m
-(void) func{
[[textField1 setStringValue:"Hello World"]]; //ここでView.hで定義したtextField1を使用したい
}



131 名前:名称未設定 [2008/11/08(土) 20:51:09 ID:d4+4vCvN0]
超ハイパーウルトラ初心者ッス

今日僕はCocoaの奇跡を見ました。
すごい、すごすぎる!

テキストフィールドをプロパティとして簡単に宣言して
等号で結べばいいだけだなんて・・・・・・・・


まー無理だろなーと思いながら試しただけなのに・・・・・

132 名前:名称未設定 mailto:sage [2008/11/08(土) 21:00:30 ID:C2KKDa3W0]
超ハイパーウルトラ初心者ッス

今日はまだ一度もうんこ出てないのに
お腹がすきます

すごい、すごすぎる!

133 名前:名称未設定 mailto:sage [2008/11/08(土) 22:00:57 ID:NHu1yaCo0]
>>130
なんか錯乱しとるから、もうちょい勉強してください。

134 名前:名称未設定 mailto:sage [2008/11/08(土) 23:46:37 ID:RNOdKyfY0]
つーか、キャラ作んなくていいよ。

135 名前:名称未設定 [2008/11/09(日) 00:22:06 ID:L1s+Atna0]
Objective-C糞過ぎ

C++かJavascriptかRubyか、最悪でもJavaで書けるにしろ

つーか、Cocoaなんて廃止して、.NET Framework使えるようにしろよ

136 名前:名称未設定 mailto:sage [2008/11/09(日) 00:26:57 ID:hlpGev2i0]
おまえがやれ

137 名前:名称未設定 [2008/11/09(日) 00:33:30 ID:L1s+Atna0]
お断りだ

138 名前:名称未設定 mailto:sage [2008/11/09(日) 00:38:23 ID:IHDltFNu0]
2行目が何を言いたいのか分からんが
C++とかJavaでやりたいならやればいいじゃん

139 名前:名称未設定 mailto:sage [2008/11/09(日) 00:39:38 ID:5aT87bHO0]
質問です。
たぶんちょっとしたことで出来るんだと思いますが、、、

あるクラスAのメソッドのループから、ウィンドウ中のラベルなどを更新って出来ますか?
ビューコントローラは別にあり、ビューコントローラをインスタンス化してメソッドを直接呼出し
と、安易な考えをしていたのですが、やはり出来ませんでした。

具体的には、ループが進むごとにウィンドウ中のラベル(進行状況%表示)を更新したいのですが、
どうすればいいでしょうか?

140 名前:名称未設定 mailto:sage [2008/11/09(日) 00:42:14 ID:dKIqpJ+F0]
[labelTextField setStringValue:@"hoge"];
[labelTextField display];
これでどうか





141 名前:名称未設定 mailto:sage [2008/11/09(日) 00:42:53 ID:dKIqpJ+F0]
ループの処理を別スレッドにした方がいいけどな

142 名前:名称未設定 [2008/11/09(日) 00:48:20 ID:L1s+Atna0]
>>138
分からないならコメントするな。素人は黙ってろ

143 名前:名称未設定 mailto:sage [2008/11/09(日) 00:49:34 ID:5aT87bHO0]
>>ID:dKIqpJ+F0
ありがとうございます!
スレッドは扱ったことないので、ちょっと勉強してきます。
その場合、ラベルをコントローラにIBOutletとして定義すると思うのですが、
ループ中からそのラベルオブジェクトを扱う事はできるんですかね?
ループの存在するクラスに定義するのは避けたいので・・

144 名前:名称未設定 mailto:sage [2008/11/09(日) 00:53:03 ID:dKIqpJ+F0]
どこで定義しても特に支障無く扱うことができると思うが
ものは試しにやってみれ

145 名前:名称未設定 mailto:sage [2008/11/09(日) 01:09:57 ID:B9u3WR7L0]
メインスレッド以外からは GUI を直接いじってはいけないので、
[object performSelectorOnMainThread: ... waitUntilDone:....]
だったかなにかをつかいましょうね。

146 名前:名称未設定 mailto:sage [2008/11/09(日) 01:10:15 ID:5aT87bHO0]
なるほど、、どこからでも扱えるんですね。
ちょっと今は試せないですが、ありがとうございました!

近々自分のMacを買うつもりなので、転がりながらプログラミングしたいものです。

147 名前:名称未設定 mailto:sage [2008/11/09(日) 01:21:23 ID:fqJDb0t30]
>>145
ん、そうだっけ?
メインスレッドじゃなくてもOKでしょ?
何か制限あったと思うけど、忘れた。

148 名前:名称未設定 mailto:sage [2008/11/09(日) 01:25:37 ID:IHDltFNu0]
GUI系はメインじゃないと危険だったかと
プログレス表示に精密さを求めないならsetNeedDisplay:YESとかでもアリじゃないかな

149 名前:名称未設定 [2008/11/09(日) 01:28:00 ID:NDkcMBd2P]
>>135を読んで思い出したけど、
Objective-J(Cocoaを実装したJavascript?)はどうなったんだ?と思ったら、
ttp://objective-j.orgから ttp://cappuccino.org/ にリダイレクトされて、
なんかダウンロードできるようになってる。

150 名前:名称未設定 mailto:sage [2008/11/09(日) 01:34:57 ID:IHDltFNu0]
>>149を読んで意味が分かったけど、
>>135の2行目は日本語の意味が良く分からんかったってこと。まぁカリカリすんなよ。



151 名前:名称未設定 mailto:sage [2008/11/09(日) 01:53:05 ID:ROIk3bo+0]
>>135
出来ないのはお前が糞だから。俺は出来るもんね。


152 名前:名称未設定 mailto:sage [2008/11/09(日) 03:54:10 ID:B9u3WR7L0]
C 系の言語の文法をひとつでも既に知っていて、
Obj-C の文法が二日でわからないひとは何かがおかしい。
Cocoa API の全貌をつかむのは大変なのはわかるけど、
それは Obj-C の文法の問題ではないベ。

153 名前:名称未設定 mailto:sage [2008/11/09(日) 06:13:08 ID:40c4vp+k0]
.NET Frameworkのどこがいいんだがさっぱり謎だが一応。
www.mono-project.com/Mono:OSX

154 名前:名称未設定 mailto:sage [2008/11/09(日) 08:05:26 ID:ijj+bVEA0]
110=135でOK?

155 名前:名称未設定 mailto:sage [2008/11/09(日) 08:10:56 ID:40c4vp+k0]
>>135はプログラム板のここにでも行った方がいいんじゃないか?
過疎りまくってるが。
Mac OS Xでの開発環境はどれがイイ?
pc11.2ch.net/test/read.cgi/tech/1163314891/

156 名前:名称未設定 [2008/11/09(日) 09:30:27 ID:mFvSzNPX0]
>>125
NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。
NSMenuItemのArrayとできちゃえばサイコーなんですが…。
>>129
できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。

125です。
すいません、言葉が足りませんでした。
NSMenuItemをaddObjectしたNSArrayControllerとバインドした場合、
・"Controller Key"は"arrangedObjects"
・"Model Key Path"は"title"
とするのが普通になると思います。
でも、これだとNSPopUpButtonクラスのaddItemWithTitleをしているような感じになり、
結局はNSStringからポップアップの各項目を作ることになっています。
当方の希望は、
・"Controller Key"は"arrangedObjects"
・"Model Key Path"は"self"
みたいな感じ(実際にこれをやってもobjectの説明がポップアップに追加されるだけです)で
NSMunuItemからポップアップの各項目を作るのが希望です。
 



157 名前:名称未設定 mailto:sage [2008/11/09(日) 09:36:30 ID:lxRIk4K/0]
>>143
ループでGUI更新が動かないのは、NSRunloopが一回りしたタイミングで
更新処理がまとめて行われるからだよね。
コードの中でループしちゃうと、NSRunloopに処理が戻らない。

自分はスレッドが面倒なので、ループをばらし、ループの中身だけ別メソッドに
して、performSelector:withObject:afterDelay: で繰り返し呼び出しに
してる。普通はスレッドにするものなの?

158 名前:名称未設定 [2008/11/09(日) 10:31:27 ID:L1s+Atna0]
>>152
わかるわからないではなく、Obj-Cの文法は美しくない。

159 名前:名称未設定 mailto:sage [2008/11/09(日) 11:29:50 ID:Cd0AMfEC0]
後付け感ありまくりではあるね
シンプルに書けないのも今風ではないね
MacRubyに期待(^^;

160 名前:名称未設定 mailto:sage [2008/11/09(日) 12:48:29 ID:xdgDUb6t0]
>>158
じゃあ、好きな言語を使ったら良いんじゃない?
.NET使う環境から一生出てこなくて良いよ



161 名前:名称未設定 mailto:sage [2008/11/09(日) 13:00:26 ID:la8cu0hU0]
>>156
何をしたいのかわからないけど、
NSMenuのアイテムとNSPopupButtonのアイテムを同期させたい、
または同じ内容にしたいということ?


162 名前:名称未設定 mailto:sage [2008/11/09(日) 13:53:57 ID:VAAVuJ8X0]
>>158
美的感覚の問題だったのか。
じゃあまあ個人の好き嫌いだからそれでいいんじゃね?
僕は括弧の乱舞は好きだけど。

あと、メソッド名が長くてほとんど文章なので
コメントを書く必要がほとんどない、というか
プログラム自体がほとんどコメントになるのはいい点だと思う、って
これは Obj-C の文法の問題ではなくて Cocoa の API の問題か。失礼。

163 名前:名称未設定 mailto:sage [2008/11/09(日) 14:43:48 ID:YNFGyvs40]
文法的に美しく無いとされるフランス語にも素晴らしい文学は存在する。
Objective-Cに文句を言うのは勝手だが、
経験豊富なプログラマであれば言語に左右されない美しいアプリを作れるはず。

164 名前:名称未設定 mailto:sage [2008/11/09(日) 15:18:38 ID:uAivnwgs0]
そういうこと言うと、論点ずらしって言われるぞ。

165 名前:名称未設定 mailto:sage [2008/11/09(日) 15:20:17 ID:YNFGyvs40]
>>164
撒き餌を食うなよw

166 名前:名称未設定 mailto:sage [2008/11/09(日) 16:00:55 ID:cf3ZhWey0]
あれじゃないの?
iPhoneのアプリ開発とか注目されてきてるからObj-Cで組んでみようと思ったけど
VBしか経験がなくて文法の違いが吸収できず、HelloWorldすら出せずにイライラしたとか。

167 名前:名称未設定 mailto:sage [2008/11/09(日) 16:05:18 ID:YNFGyvs40]
>>166
それはあるよな。
iPhone出てから「初心者です」みたいなのが増えた。

168 名前:名称未設定 [2008/11/09(日) 16:23:25 ID:mFvSzNPX0]
>>161
はい、だいたいそういう内容です。
title以外の内容があるアイテムとか、セパレータとか、NSMenuItem自体には
いろいろな状態があるので、そういった状態を抱えたまま同期したいのが希望です。

169 名前:名称未設定 mailto:sage [2008/11/09(日) 16:42:55 ID:HoxfCMO50]
俺はObjective-Cの簡潔なオブジェクトシステムが好きだ。しばらくすると一風変わったメッセージ式にも愛着がわいてくる。

170 名前:名称未設定 [2008/11/09(日) 17:14:50 ID:L1s+Atna0]
お前らの言いたいことはわかった。「オラの方言が最高だべさ」ってことだろ。一生時代遅れの田舎言語使ってろ。



171 名前:名称未設定 mailto:sage [2008/11/09(日) 17:23:45 ID:XOOSfoZw0]
はいはい田舎田舎。
厨房発言に上げ荒し、おまけにドトネト最高か。
まじでVB厨のバカ丸出しだな。

172 名前:名称未設定 mailto:sage [2008/11/09(日) 17:25:12 ID:40c4vp+k0]
田舎の方が味があって和むんだよ。それが分からないとはまだまだだな。

173 名前:名称未設定 [2008/11/09(日) 17:34:46 ID:BSsYOmbX0]
言語とか処理系て、どうせ借り物でしょw
目的は何だ?金?w
だったら冷や汗たらして働けw
何か作りたいものがあるなら最適な手段を選べばいいだけ

174 名前:名称未設定 mailto:sage [2008/11/09(日) 18:06:51 ID:YNFGyvs40]
iPhoneで小遣い稼ぎしようと思ったけど
理解できなくて八つ当たりしてるだけだろ。

175 名前:名称未設定 mailto:sage [2008/11/09(日) 18:49:44 ID:Cd0AMfEC0]
まあ誰がなんと言おうとObjectiveC++ は最強だと思うけどね
C++/CLIよりも使い易いし、判り易い

でも、ちょっと古い感じはするね
MacRubyに(ry

176 名前:名称未設定 mailto:sage [2008/11/09(日) 19:17:05 ID:oz3XxqjX0]
Objective-C++は最強にカオスってことですねわかりまs

177 名前:名称未設定 mailto:sage [2008/11/09(日) 20:05:06 ID:n+KcZ/pQ0]
心の寂しい方がいらっしゃる様ですね
きっと心だけでなくプログラムも隙間だらけなのでしょう

178 名前:名称未設定 mailto:sage [2008/11/09(日) 21:06:35 ID:Se6LpMt+0]
>>158
Ruby でも Java でも C++ でも JavaScript でも出来ますが、何か?

179 名前:名称未設定 mailto:sage [2008/11/10(月) 01:51:16 ID:5p8Fyhi10]
Ruby → RubyCocoa か MacRuby 。 MacRuby は Apple が開発していて大本命ぽい?
Python → PyObjC。
Perl → CamelBones というオープンソースのがある。
Java → Cocoa-Java があったけど、捨てられました。Java の object システムが硬いのが問題?
Javascript → Objective-J (Cappuccino) という web app を Cocoa で書ける opensource のがある。
あと、WebKit つかえば、Javascript から Cocoa の object をいじるのは非常に簡単。
AppleScript → AppleScript Studio... でも使ってる人ぴよまるさん以外にいるの?

MonoObjC → Mono (.Net のオープンソース版) から ObjC を呼べる。
Cocoa# → 同上、こちらのほうが Mono の公式版?でもあんまりアップデートされてないぽい。

C++ で Cocoa をかけるのってあったっけ?Objective-C++ で
C++ と Obj-C を混ぜられるのはそうだけど、Cocoa API を C++ の
クラス階層として実装したのってないよね?
そもそも delegate とか performSelector とか
C++ で実装しようがあるんでしょうか?

180 名前:名称未設定 mailto:sage [2008/11/10(月) 10:38:38 ID:ku2SFWuM0]
C++とか、今のスレの流れは別に興味ないけど、
>>135が今までどんなアプリを作ったのかが
非常に気になるw



181 名前:名称未設定 mailto:sage [2008/11/10(月) 11:56:44 ID:W6D0WGgG0]
多分、hello, world.だろ。

182 名前:名称未設定 mailto:sage [2008/11/10(月) 12:10:30 ID:/kpuffDm0]
ついで、「こんにちわ、世界」と出力しようとしたが、
エンコードがあっていなかったので文字化け。
キレる。

ってのが王道です。

183 名前:名称未設定 mailto:sage [2008/11/10(月) 12:56:58 ID:r8VH7KRc0]
@ も序でに忘れてんじゃね?

184 名前:名称未設定 mailto:sage [2008/11/10(月) 13:13:37 ID:+x+/8+Ia0]
 学び始めて間もなく、色々とやってみたのですが解決できず悩んでいます。
場違いかも知れませんが質問させてください。

 テキストフィールドからNSMatrixをつくり、個々のセルにint型の数値を表示しています。
マウスクリックで選択したセルから数値を取り出しています。
ところが、
個々のセルに対して、NSCellやNSTextFieldCellのメソッド、例えばsetTextColor:等を
送るとその後、セルから数値を取り出せなくなってしまいます。どうしてそうなるのかが
判りません。どなたかご教授いただけませんか?宜しくお願いします。

185 名前:名称未設定 mailto:sage [2008/11/10(月) 14:01:43 ID:jRir/5vF0]
>>184
セルを参照しているインスタンス変数を上書きしておらんか?

186 名前:184 mailto:sage [2008/11/10(月) 14:25:50 ID:+x+/8+Ia0]
>>185 レス有り難うございます。
セルの指定は、以下のようにしています。

[[matrix cellWithTag:n] setTextColor:[NSColor blueColor]];

ご指摘いただいたようにポインタを使った形にしてみたのですが、
やはり上手く行きませんでした。


187 名前:184 mailto:sage [2008/11/10(月) 17:40:23 ID:+x+/8+Ia0]
一人でばたばたして、連続の書き込みになり申し訳ないのですが、
もう少し補足させてください。

マトリクスのセル(テキストフィールド)に数値を設定しているそのメソッドにおいて、
セルの文字の色を変えようとしたとき、
「元の色 -> さらに元の色と同じ色を設定」
の場合はその後でも別のメソッドから数値が取得できる。ところが、
「元の色 -> 別の色に設定」した場合、取得できなくなる。

これはひょっとして文字の色を変更したことによって、
セルが持つテキストフィールドセルが別もの(オブジェクト)に
置き換わったということなのか?と考えています。
ご助言頂ければありがたいです。


188 名前:名称未設定 mailto:sage [2008/11/10(月) 19:16:30 ID:k7er6Elw0]
取り出せないって具体的にはどうなるんですか?
エラーでアプリケーションが落ちるとか?
期待した値じゃなくて0しか返ってこないとか?

189 名前:名称未設定 mailto:sage [2008/11/10(月) 19:35:34 ID:NIf0gNWD0]
値をセットするところ、ゲットするところのコードを見せた方が早いよ。
言葉だけじゃさっぱり伝わらない。

190 名前:名称未設定 mailto:sage [2008/11/10(月) 20:12:33 ID:atwbsV0eO]
昨日、ループからGUIのラベルを更新したいと言っていた者です
ループの存在するメソッドをスレッド化し、ラベル更新部分をメインスレッドで実行するようにしました

しかし、ラベルは更新されませんでした

更新部分は
[対象ラベル setStringValue:newLabel];
[対象ラベル display];
となっています
newLabelはログで確認済みです

携帯からなんで間違っているかもしれませんが、よろしくお願いします



191 名前:184 mailto:sage [2008/11/10(月) 20:43:59 ID:+x+/8+Ia0]
>>188,189 レス有り難うございます。簡略化したものを見て頂くと、
//クリックしてセルの値を取り出す
- (IBAction)getNumber:(id)sender
{
NSLog(@"%d", [[myOutletMatrix selectedCell] intValue]);
}

//数字をセット
- (IBAction)setNumber:(id)sender
{
[myOutletMatrix setMode:NSHighlightModeMatrix];

[[myOutletMatrix cellWithTag:0] setIntValue:1];
[[myOutletMatrix cellWithTag:1] setIntValue:2];
[[myOutletMatrix cellWithTag:2] setIntValue:3];

int i;
for (i=0; i<=2; i++){
[[myOutletMatrix cellWithTag:i] setTextColor:[NSColor blackColor]];//悩んでいる箇所
}
}

となります。これで setTextColorの引数[NSColor blackColor]のblackColorを他の色に変えると、
クリックしても値が取得できなくなります。

192 名前:名称未設定 mailto:sage [2008/11/10(月) 22:01:15 ID:k7er6Elw0]
>>191
[NSColor blueColor]に変えても
ウチでは元気よく動いてますが・・・。

10.5.5、DevTools多分最新。

193 名前:名称未設定 mailto:sage [2008/11/10(月) 22:34:29 ID:wRpzRNtU0]
自分はwhiteColorにしましたが動いていますね
数字は見えなくなりましたが...

194 名前:184 mailto:sage [2008/11/10(月) 22:50:22 ID:+x+/8+Ia0]
>>192 レス有り難うございます。
なんと・・。実はこちらは未だOS10.4.11で、XCODE2.5なのですが、
リファレンスではNStextFildCellは10.0以降とあるのでバージョン
のことはまったく頭にありませんでした。>>191のコードのままで上記
のような結果になっています。プログラミング初心者がおこがましいですが、
これはXCODEやコンパイラのバグと考えるべきなのか、それともまだ他に
原因があるのか・・・?取りあえず今日は頭を休めます。

いずれにしてもレス頂いた方々、わざわざ実際に試してくださった192さん、
感謝いたします。有り難うございました。

195 名前:名称未設定 mailto:sage [2008/11/10(月) 22:53:24 ID:jRir/5vF0]
>>194
なんでもバグの所為にすると怒られるよ。
どこか間違ってるんだろ。

196 名前:184 mailto:sage [2008/11/10(月) 22:55:24 ID:+x+/8+Ia0]
>>193さん、わざわざ試して頂いて有り難うございました。
やはり、私の環境に問題がある可能性が明確になってきました。
感謝です。

197 名前:190 mailto:sage [2008/11/10(月) 22:56:24 ID:hIykeUF50]
質問してる身であれですが、、、

>>184さん
カラースペースの設定とか関係ないでしょうか?
見当違いの回答かもしれないですが、RGB色空間を扱っているとき、[NSColor blackColor]が使えなかったもので、、、
自分も始めたばかりなんでそのあたりが知りたいです


198 名前:184 mailto:sage [2008/11/10(月) 23:29:28 ID:+x+/8+Ia0]
>>195さん そうですね、軽率でした。ご容赦の程。

>>197さん カラースペースというのは環境設定ーディスプレイの設定か
もしくはキャリブレーション関係でしょうか。もしそれならば、1670万色に設定されている
状態です。ガンマ補正以外はデフォルトのままにしています。しかし、そういうことがあるの
ですね。私はまだまだそこまで到達していませんが、いずれグラフィック関連のプログラミング
もできればと思っていたので、とても参考になりました。

お二方とも有り難うございました。

199 名前:名称未設定 [2008/11/11(火) 00:04:08 ID:I3pahUr70]
>>194
>OS10.4.11で、XCODE2.5

同じ環境で試してもちゃんと動くぞ(ちなみに192、193とは別人)

200 名前:名称未設定 mailto:sage [2008/11/11(火) 01:05:54 ID:PUKvd1/H0]
>>194
>>190

コード全体を晒したほうがいいんじゃないかな。
きっと自分では予期せぬところがおかしくなっていると思われる。

基本的に、なんかプログラムをかいて、バグがあって、
自分ではここがおかしいんじゃないかなというところを
いくら考えて修正しても正しく動かないばあいは、
その自分がここがおかしいんじゃないかなと思うところだけ
抜き出して 2ch で聞いても改善する可能性は非常に低いです。
なぜなら、そういうときはえてしてそこと違う場所がおかしいからです。



201 名前:名称未設定 mailto:sage [2008/11/11(火) 01:14:55 ID:K+WZjSUa0]
勘だが
- (IBAction)setNumber:(id)sender
{
[myOutletMatrix setMode:NSHighlightModeMatrix];

int i;
for (i=0; i<=2; i++){
[[myOutletMatrix cellWithTag:i] setTextColor:[NSColor blackColor]];//悩んでいる箇所
}

[[myOutletMatrix cellWithTag:0] setIntValue:1];
[[myOutletMatrix cellWithTag:1] setIntValue:2];
[[myOutletMatrix cellWithTag:2] setIntValue:3];
}
こうしたらどうなる?

202 名前:名称未設定 mailto:sage [2008/11/11(火) 01:29:08 ID:wEupgvlC0]
>>190
- (IBAction)start:(id)sender
{
[NSThread detachNewThreadSelector:@selector(doWork) toTarget:self withObject:nil];
}
- (void)doWork
{
for (int i = 0; i <= 100; i++) {
double percentage = i /100.;

[button setEnabled:(BOOL)percentage];
[textField setDoubleValue:percentage];
[progressIndicator setDoubleValue:percentage];

usleep(20000);
}
}

こんなテキトーなコードでも動いてます。
NSWindow上に置いた、NSButton, NSTextField, NSProgressIndicator
すべてガンガン更新されてます。@10.5.5

203 名前:名称未設定 mailto:sage [2008/11/11(火) 02:15:56 ID:+aCpyxf+0]
>>200
なるほど。。
提示されている例と明らかに異なる部分はあるのですが、
それがダメなのかはわかりませんからね。。

>>202
ありがとうございます
手元にMacがないのが辛い;いろいろ試したいのに

ちょっと流れをさらして見ます
ループを含むメソッドをもつクラスRoopTestと、ビューコントローラMyViewCtrlがあります

///myViewCtrlのメソッド
- (IBAction)push { //ループ開始
RoopTest* rt = [[RoopTest allc] init];
[NSThread detachNewThreadSelector:@selector(roopMethod) toTarget:rt withObject:nil];
}

- (void)updateLabel:(NSString*)newLabel {
[myLabel setStringValue:newLabel];
[myLabel display];
}

204 名前:名称未設定 mailto:sage [2008/11/11(火) 02:18:49 ID:+aCpyxf+0]
///RoopTestのメソッド
- (void)roopMethod {
/*
AutoPoolの宣言など
*/
while(1) {
/*
ループ内の処理
*/
if(....) { //更新する条件にはまった場合
[self performSelectorOnMainThread:@selector(updateMethod) withObject:Label waitUntilDone:YES];
}
}
}

- (void)updateMethod:(NSString*)newLabel {
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
[vc updateLabel:newLabel];
}

こんな感じです
ボタンプッシュ→ループクラスのインスタンス作成→ループメソッド呼び出し
→更新時、メインスレッドで更新メソッド呼び出し
→ビューコントローラのインスタンス作成→ビューコントローラ内の更新メソッド呼び出し

見づらくて申し訳ないです
なんか変な事やっているのは感じていますが、これでは動かないのでしょうか?

205 名前:名称未設定 mailto:sage [2008/11/11(火) 03:13:01 ID:K+WZjSUa0]
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
ここが諸悪の根源だ。

あと
performSelectorOnMainThread:@selector(updateMethod)
でコロンを忘れてる。

206 名前:名称未設定 mailto:sage [2008/11/11(火) 03:38:59 ID:K+WZjSUa0]
RoopTest* rt = [[RoopTest allc] init];
ここもなんだか気持ち悪いな。

207 名前:名称未設定 mailto:sage [2008/11/11(火) 08:11:40 ID:fkU0XAOh0]
何で画面更新の度に MyViewCtrl を alloc してるんだ?
どう考えたら、こんなコードを書けるんだろう...
あと、allc じゃなくて、alloc だろ。

明らかに自分のコードに問題があるのに、

>これはXCODEやコンパイラのバグと考えるべきなのか
とか、

>やはり、私の環境に問題がある可能性が明確になってきました。
とかよく言えるな。
コンパイラのバグとか考えるのは最後だろ。


208 名前:名称未設定 mailto:sage [2008/11/11(火) 08:12:02 ID:PUKvd1/H0]
updateMethod: で newLabel をどう渡しているつもりなのか?
あと、
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
無理ではないけど、そうやってつくったものは
インターフェースビルダーで既につくったオブジェクトとは別のものです。

209 名前:名称未設定 mailto:sage [2008/11/11(火) 09:13:26 ID:FpRggH2w0]
あんまし速度を求めないのであれば
スレッド使うよりNSTimerにした方が無難だと思うけど。

210 名前:184 mailto:sage [2008/11/11(火) 09:57:42 ID:zECfChq+0]
皆さん、レスポンス頂いて有り難うございます。
>>207さん、203、204さんは私とは別の方です。軽卒な発言を書いたのは私の方です。
平にご容赦ください。

>>200さん >>191のコードのみで、やはり値が取り出せない状況になっております。
>>201さん 結果は変わりませんでした。
>>199さん、わざわざ試していただき有り難うございました。199さんが>>191のコードのみで
検証されたとしますと、私のInterface Builderでの作業が間違っているのかもしれないと考え始め
ました。

夜まで作業できませんが、なんらかの結論なり経過なりはまたご報告させて頂きます。
有り難うございました。



211 名前:名称未設定 mailto:sage [2008/11/11(火) 10:23:26 ID:fkU0XAOh0]
>>210
>>>207さん、203、204さんは私とは別の方です。
勘違いしてた。スマソ。


212 名前:203 mailto:sage [2008/11/11(火) 12:21:53 ID:a+a3ujwr0]
みなさん、いろいろ助言をありがとうございます
調べたところ、NSConnectionを用いてスレッド間通信をすればよいとあったのでやってみたところ、ついに出来ました!
やはり、ラベルの授受がうまく行ってなかったようですね
ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?
上にある、RoopTestにIBOutletを定義しても更新できなかったので。。

とりあえず、今後のGUI更新作業は、必ずコントローラ上で行うようにします

213 名前:名称未設定 mailto:sage [2008/11/11(火) 12:44:52 ID:FpRggH2w0]
>>212
結局やりたい事は名にだったんだろう?
NSTimerだとかなり簡単なんだが。

214 名前:203 mailto:sage [2008/11/11(火) 12:52:55 ID:a+a3ujwr0]
>>213
目的の処理はとても重いのですが、NSTimerも重いとのことだったので避けていました
ループメソッドがコントローラクラスのメソッドではなく、別クラスのものだったため、例があまりなかったので悩んでいました
正直わかりやすくするためで目的の結果には必要ないものなので、時間をとってしまったのは失敗でした^^;



215 名前:名称未設定 mailto:sage [2008/11/11(火) 12:58:33 ID:K+WZjSUa0]
>ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?

可能。やり方を知らないだけ。
NSConnection なんて馬鹿げたことするよりよほど簡単にできる。

216 名前:名称未設定 mailto:sage [2008/11/11(火) 13:16:49 ID:PUKvd1/H0]
どうも 203 さんは日本語力が足りない気がする。
自分が書いたことを、相手が読んでわかるためには
何をどこまで書いたらいいか、考えていますか?

あなたにとっては暗黙の了解でも、読んでる人にはわからないかも知れないし、
読んでる人にはそもそもまったく納得出来ない話かもしれません。

「NSTimer も重いとのことだったので」なんてどこから出て来たのか?
NSConnection なんかつかわなくても、
performSelectorOnMainThread で withObject: で渡せばいいんでないかと
おもいますが...

217 名前:名称未設定 mailto:sage [2008/11/11(火) 13:24:59 ID:wEupgvlC0]
>>203
///myViewCtrlのメソッド
- (IBAction)push { //ループ開始
RoopTest* rt = [[RoopTest allc] init];
[NSThread detachNewThreadSelector:@selector(roopMethod:) toTarget:rt withObject:self];
}


///RoopTestのメソッド
- (void)roopMethod:(MyViewCtrl*)myViewCtrl {
/*
AutoPoolの宣言など
*/
while(1) {
/*
ループ内の処理
*/
if(....) { //更新する条件にはまった場合
[myViewCtrl performSelectorOnMainThread:@selector(updateLabel:) withObject:Label waitUntilDone:YES];
}
}
}

どうでも良いんだけど、roopはloop。

218 名前:203 mailto:sage [2008/11/11(火) 13:49:08 ID:a+a3ujwr0]
>>216
>>209
>あんまし速度を求めないのであれば
>スレッド使うよりNSTimerにした方が無難だと思うけど。
から勝手に重いものと解釈していました、申し訳ないです

performSelectorOnMainThreadは初め使っていました
が、できなかったのですが。。
>>217をみてわかりました
いろいろと勘違いをしていたようです

みなさんありがとうございます

最後に、差し支えなければNSConnectionが劣っている?理由が知りたいです

219 名前:名称未設定 mailto:sage [2008/11/11(火) 13:54:33 ID:4BivI9sj0]
自分だったらthread側はstringに対するアクセッサ用意するだけで何もしない。
Thread側から他へ要求すると遅くなるし、結合度が強くなって簡単に修正できなくなる。
メイン側はtimerかevent loopのついでに進捗見て非同期にゆっくり表示すれば良い。
人間が視認できる速度は知れてるからそれで十分

220 名前:名称未設定 mailto:sage [2008/11/11(火) 14:21:48 ID:LVzKoGmm0]
> NSConnectionが劣っている?
というよりは、この場合は不必要である処理が間に挟まっちゃいます。
適材適所でご利用ください。



221 名前:名称未設定 [2008/11/11(火) 20:37:16 ID:nt03fgQI0]
超初心者です。
windowの立ち上がり時にcomboBoxに項目を自動的に加えたいのですが・・・

たぶんtableViewの時と同じようにdatasoceとして登録しておくのか、
window起動時の動作を定義できる関数とかがあるのだろうと思って調べたのですが
見つかりませんでした。

222 名前:名称未設定 [2008/11/11(火) 20:45:45 ID:nt03fgQI0]
一応IBのwindowのデリゲートをコントローラに接続して
windowWillMoveをオーバーライドすることによって
windowを動かしたときの定義はできたのですが・・・・・

windowを開いたときの動作を定義する関数もあるのでしょうか?

223 名前:名称未設定 [2008/11/11(火) 20:58:42 ID:nt03fgQI0]
データソースで登録できますね。
お騒がせして申し訳ございません。

224 名前:名称未設定 [2008/11/11(火) 22:21:22 ID:nt03fgQI0]
データソースで登録する仕方がわかんねー

225 名前:名称未設定 mailto:sage [2008/11/11(火) 22:52:41 ID:mgiOCDFu0]
www.oomori.com/cocoafw/ApplicationKit/NSComboBox/index.html

datasource使わなくてもできるっぽいけど。

226 名前:名称未設定 [2008/11/11(火) 23:07:33 ID:nt03fgQI0]
>>225
確かに出来るんですが、起動時にすでにcomboBoxの中に項目が追加されているように
したいんですよね。
で、最初はwindowDidBecomeKeyのオーバーライドでクリアさせたんですけど、
でもデータソースがあるって知って、今それをトライしているところです。

227 名前:名称未設定 mailto:sage [2008/11/11(火) 23:18:55 ID:u7V+zvQV0]
>>226
awakeFromNibで追加するのはダメなん?

228 名前:名称未設定 mailto:sage [2008/11/12(水) 00:23:06 ID:7kG+RNj90]
>>224
これじゃ駄目?
-(void)awakeFromNib{
int i;
_array = [[NSMutableArray alloc] initWithCapacity:0];
for(i=0;i<10;i++){
[_array addObject:[NSString stringWithFormat:@"String%d",i]];
}
[myComboBox setUsesDataSource:YES];
[myComboBox setDataSource:self];
}

windowBecomeKeyをどうしても使いたいなら、
-(void)windowDidBecomeKey:(NSNotification *)aNotofication{
if([myComboBox dataSource] != self){
上と同じなので略。
}
}

で、↓これ。

-(int)numberOfItemsInComboBox:(NSComboBox *)aComboBox{
return [_array count];
}
-(id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index{
return [_array objectAtIndex:index];
}
酔っ払ってカキコしてるから間違ってたらすまん

229 名前:名称未設定 mailto:sage [2008/11/12(水) 12:21:14 ID:/WVpT08D0]
NSTextFieldのSubClassを作って並んでいる状態でtabキーを押してもNextKeyViewに移動しないんですがなにか特殊な処理は必要ですか?

SubClassでは
- (id)initWithFrame:(NSRect)r
{
self = [super initWithFrame:r];
if(self){
[self setDelegate:self];
before = [[NSString string] retain];
}
return self;
}

- (BOOL)becomeFirstResponder
{
[before release];
before = [[self stringValue] retain];
return [super becomeFirstResponder];
}
- (void)textDidEndEditing:(NSNotification*)aNotification
{
if(![before isEqual:[self stringValue]]){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil];
}
}
しか処理をしておらず、編集終了時に内容に変更があれば、別のControllerで
[window setDocumentEdited:YES];
を処理する、と言った感じです。
Controllerで通知を受け取らないのは、bindingを設定してあり通知がControllerに来なかったためです。

Xcode、OSともに最新のものを使用しています。
どなたかお知恵をお貸しください。

230 名前:名称未設定 mailto:sage [2008/11/12(水) 12:36:08 ID:rhZoTYoC0]
>>229
- (BOOL)resignFirstResponder {
return NO;
}

は書いてある?



231 名前:名称未設定 mailto:sage [2008/11/12(水) 12:39:39 ID:rhZoTYoC0]
>>230
逆だったorz

- (BOOL)resignFirstResponder {
return YES;
}

232 名前:名称未設定 mailto:sage [2008/11/12(水) 12:58:01 ID:DjwU0p+F0]
>>229
何でこんな無茶苦茶なコードを書く必要があるのか聞きたいw
サブクラス作る必要もないし、自分自身をdelegateにする必要もないし、Notificationをわざわざ転送する必要もない。

233 名前:名称未設定 mailto:sage [2008/11/12(水) 13:02:27 ID:/WVpT08D0]
>>230
ありがとうございます。
それは書いていませんが、オーバーライドしていないメソッドは
SuperClass(この場合NSTextFieldやNSControl)のものが勝手に使われる
という認識ですが間違っているのでしょうか。

ところで今回の件に関しましては自己解決しました。。。
- (void)textDidEndEditing:(NSNotification*)aNotification
{
if(![before isEqual:[self stringValue]]){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil];
}

[super textDidEndEditing:aNotification]; ←これがポイント。
}

と、最後にSuperClassのメソッドを呼び出してやることで無事にNextKeyViewが選択されました。

この問題に取り組んでくれた皆様、ありがとうございました。

234 名前:名称未設定 mailto:sage [2008/11/12(水) 13:08:58 ID:/WVpT08D0]
>>232
私も正直こんな面倒なことはしたくなかったのですが。。。
Bindingを使いこなせていないせいかイマイチ「編集終了時に値が実際に変更されているかどうか」
を比較する手段が思い浮かばずこんなことになった次第です。

235 名前:名称未設定 mailto:sage [2008/11/12(水) 13:47:41 ID:rhZoTYoC0]
>>234
>編集終了時に値が実際に変更されているかどうか
それだけなら普通にデリゲート使えばいいんじゃね?

236 名前:名称未設定 mailto:sage [2008/11/12(水) 14:00:48 ID:bpwWLlCO0]
>>234
Core Dataを使ったり自分でUndoを実装すればsetDocumentEdited:YESは自動でなされるだろうし、
そこまでしない小規模なものならdelegateのcontrolTextDidChange:でいいし、
Bindingされているモデルが変更されたときやりたいならモデルに対してKVOすればいいと思う。

237 名前:名称未設定 mailto:sage [2008/11/12(水) 14:26:27 ID:L0OFkZM60]
どうぞ

キー値監視について(Key Value Observing)
developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueObserving/


238 名前:名称未設定 mailto:sage [2008/11/12(水) 15:04:38 ID:/WVpT08D0]
>>235
Bindingが設定してあるNSTextFieldからはDelegateしても通知がポストされなかったんです。

>>236
>>237
CoreDataは一度かじって挫折してました。今度調べてみようと思います。
とりあえずはKVOの方向から解決策を模索してみます。



239 名前:名称未設定 mailto:sage [2008/11/12(水) 15:28:59 ID:RkfhbVlK0]
>>238
Bindingしてても普通にデリゲートメソッド呼ばれるよ?
念のため書いておくとtextDidEndEditing:はデリゲートメソッドじゃないからね。
controlTextDidEndEditing:かcontrolTextDidChange:を使えばいいと思う…が、
もちろんcontrolTextDidEndEditing:は変更の有無は関係ないし呼ばれたときにはBindingで変更された後だから、
その用途には向いていないのかもしれない。

240 名前:名称未設定 mailto:sage [2008/11/12(水) 15:59:05 ID:/WVpT08D0]
>>239
textDidEndEditing:はDelegateではないんですか。
大きな勘違いでした。どうりで。。。

そしてDelegateが呼ばれるということは
そのときの私の何か他の部分がよくなくて正しくない動作をしていたか
もしくはtextDidEndEditing:がController側で実装してあり呼び出されなかった、
という話だったのではないかという気もしてきますね。

じっくり調べてみます。


皆さんありがとうございました。



241 名前:名称未設定 mailto:sage [2008/11/12(水) 20:29:57 ID:3TV0qhbR0]
ttp://www.friday.com/bbum/2008/11/11/autozone-the-objective-c-garbage-collector/
darwinsourceに最近、追加された(?)AutoZoneって何かと思ったら、objcのgcなんだ?

242 名前:名称未設定 [2008/11/12(水) 21:22:46 ID:xTjUSaTU0]
>>228
非常に参考になりました。
ありがとうございます。
あー僕も酔っ払いながらかけるようになりたいっす。

243 名前:名称未設定 mailto:sage [2008/11/13(木) 05:09:02 ID:Zr8Iqv0x0]
暫くcocoaから離れてたんですが、
ファイルをゴミ箱に入れる方法ってNSworkspace以外に実装されてませんかね?ゴミ入れ音付で

244 名前:名称未設定 mailto:sage [2008/11/13(木) 08:32:00 ID:z+Jww09y0]
NSAppleScriptでFinderにやらせれば音が出るよ。

245 名前:名称未設定 mailto:sage [2008/11/13(木) 09:22:35 ID:XbONM5Ht0]
Finder でゴミ箱にすてるのと同じ動作をする API が
Leopard で Carbon に追加されてます。
developer.apple.com/releasenotes/Carbon/RN-CarbonCore/
の File Manager のところを参照。

246 名前:名称未設定 [2008/11/13(木) 20:54:10 ID:Jm2bYpNn0]
初心者です
ボタンを押したら新たにwindowを表示したいんですが
そういった関数をご存知の方いませんか?


247 名前:名称未設定 mailto:sage [2008/11/13(木) 21:02:24 ID:qC4pYBiI0]
>>246
まずオブジェクト指向の意味を理解してください。
そうすれば自ずと何をすれば良いか分かります。

248 名前:名称未設定 mailto:sage [2008/11/13(木) 21:15:19 ID:hEQXH/4q0]
複数のウインドウを表示したり制御するのって意外と難しくて面倒なんだよね。
メニューのアクションとかもキーウインドウに対してセンドしなきゃいけないし。

249 名前:名称未設定 [2008/11/13(木) 21:21:03 ID:Jm2bYpNn0]
>>247
そこまで戻る必要があるんですか・・・・・
ただ単にAPIの問題だと思っていたのですが・・・・
深いですね。

250 名前:名称未設定 mailto:sage [2008/11/13(木) 21:33:42 ID:Eaz1tdC20]
単にダイアログを表示するだけならAPIの問題だけどな。



251 名前:名称未設定 mailto:sage [2008/11/13(木) 21:39:35 ID:uPguWfkE0]
>>246
Interface builderだけで簡単に作れるよ

252 名前:名称未設定 [2008/11/13(木) 21:53:20 ID:Jm2bYpNn0]
>>251
customViewを使うことにしました。
教えていただいてありがとうございます

253 名前:名称未設定 mailto:sage [2008/11/13(木) 21:55:02 ID:Eaz1tdC20]
何をやりたかったんだ……

254 名前:名称未設定 mailto:sage [2008/11/13(木) 22:07:32 ID:NIwWlo0Q0]
>>252
えええ、アクションつなぐのじゃdameなの?

255 名前:名称未設定 mailto:sage [2008/11/13(木) 22:35:51 ID:qC4pYBiI0]
www

256 名前:名称未設定 [2008/11/13(木) 22:55:55 ID:Jm2bYpNn0]
>>253-254
何とかボタン一つでwindowを表示させることに成功しました
お騒がせしてすみません。

257 名前:名称未設定 mailto:sage [2008/11/13(木) 23:03:14 ID:2FfKOU+J0]
Finderウインドウの表示内容を更新する方法って
NSFileManagerでフォルダを作る意外には無いのかな

258 名前:名称未設定 mailto:sage [2008/11/13(木) 23:07:22 ID:cv3LdfgN0]
>>257
NSWorkspaceのnoteFileSystemChangedではだめ?

259 名前:名称未設定 mailto:sage [2008/11/13(木) 23:21:55 ID:2FfKOU+J0]
>>258
noteFileSystemChangedでは更新されるときとされないときがあるんだよね。
特に、smbでマウントしたwindows共有フォルダには効かなくて、無理矢理不可視フォルダを作って削除する方法で対処してる。


260 名前:名称未設定 mailto:sage [2008/11/14(金) 03:52:32 ID:Z7zd+aLz0]
>>246
まず手始めにwindow画面を起動時に見えなくして
NSWindowクラスのmakeナンタラ関数で前面に出してきたらいいんじゃないのか?
後IBでコネクトね。

オブジェクト指向を理解してても出来ませんよ。
APIの問題です。



261 名前:名称未設定 mailto:sage [2008/11/14(金) 20:14:55 ID:9weqjvTi0]
今はCarbonのGestaltを使っているんだけど、CocoaでOSのバージョンを
取得する方法はありますか?

262 名前:名称未設定 mailto:sage [2008/11/14(金) 22:32:15 ID:9w5lRAlf0]
>>261
[[NSProcessInfo processInfo] operatingSystemName]

263 名前:名称未設定 mailto:sage [2008/11/14(金) 22:45:01 ID:xk6PzQrT0]
いつも気になるんだが
NSWorkspaceとNSProcessinfoのメソッドの分け方がおかしい
と思うのは俺だけだろうか。

直感的じゃないんだよな

264 名前:262 mailto:sage [2008/11/15(土) 00:33:02 ID:/jR4jH2p0]
すまん、間違えた
[[NSProcessInfo processInfo] operatingSystemVersionString]

265 名前:名称未設定 mailto:sage [2008/11/15(土) 01:13:29 ID:Fo6g+zIo0]
どうせ NSProcessInfo も最終的に Gestalt を呼んでるんだろうから
Gestalt でいいんでは?

266 名前:名称未設定 mailto:sage [2008/11/15(土) 11:36:16 ID:4imPoNXz0]
ローカリゼーションとかで使う .strings ファイルの形式って、どっかに詳細なスペックは
あるかな?

自分でも同じフォーマットを利用しようと思って(ローカライズ目的ではないけど)、
foo = var; 式のエントリの文字列を -[NSString propertyListFromStringsFileFormat]
でパースさせているんだけど、エラーになる条件がよくわからない。
 class = hogehoge;
みたいに、1単語の時はクォートしなくていいように一見見えるんだけど、少し違うタイプ
 name[0] = hogehoge;
だとエラーになる。

267 名前:名称未設定 mailto:sage [2008/11/15(土) 11:56:07 ID:7DuJOrGV0]
developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html

268 名前:261 mailto:sage [2008/11/15(土) 13:03:33 ID:8pxLxWly0]
>>262,264
ありがとう。NSProcessInfoとは・・・なかなか見つからないわけだ。
>>265
今はGestaltで間に合うけど、Carbonもいつまでサポートされるか
わからないからね。

269 名前:266 mailto:sage [2008/11/15(土) 14:34:07 ID:9X9dz6u50]
>>267
あ、どうもありがとうございます。

でもよく考えたら自分の最終目的は なんたら = かんから; のようなエントリが複数ある
ファイルから、この なんたら/かんたら のペアを取り出すことでしたw
で、.strings用のAPIが使えないかと思った、という流れです。でも厳しそうですね。

ここで なんたら や かんたら は、
name[0]のような式の場合もあれば、文字列の場合もある。複数の語からなる文字列の
場合はダブルクォートで囲まれる。文字列自身にダブルクォートが含まれる場合は
バックスラッシュでエスケープする。みたいな感じです。

ちゃんとやろうとするとパーサーみたいのを書かないといけないと思うんですが、
もし出来合いのものがあるならそれを利用しようかと.... プログラムの設定ファイルとかで
ありがちな処理だと思うので、何かいいものがあれば....
CocoaなのでObjCから利用できるものが望ましいです。よろしくお願いします。

270 名前:名称未設定 mailto:sage [2008/11/15(土) 14:38:35 ID:7DuJOrGV0]
>>269
そゆばあいはNSUserDefaults使います。

どうしても .stringsでなきゃならないなら、
-[NSBundle localizedStringForKey:value:table:]
で無理やり。



271 名前:名称未設定 mailto:sage [2008/11/15(土) 14:51:20 ID:Fo6g+zIo0]
>>269
.strings ファイルは "..." = "..." しか公式にはサポートされてないんではとおもいます。

それは OS X 以外のソフトとデータをやりとりする必要がある?
OS X だけですむなら、単に内部では NSDictionary でもっておいて、
保存するときには plist 形式で書き出すだけで済むと思います。
OS X 以外とデータをやりとりする必要がある場合でも、
2008年暮れにもなってパーサを自前で書くのは馬鹿らしいとおもいます。
単に XML で書き出して、(plistもXMLなのでそれでいいですが、)
ほかのプラットホームで読むときはXMLライブラリつかって
読み込むのが簡便だとおもいます。


272 名前:名称未設定 mailto:sage [2008/11/15(土) 14:54:03 ID:7DuJOrGV0]
ごめん。全然読まずにレスしてた。

たぶん、そういう特殊用途なら自力でパースした方が早いです。
NSScannerならObjCで使うことが可能です。:-)

273 名前:266 mailto:sage [2008/11/15(土) 14:58:56 ID:9X9dz6u50]
>>270
>そゆばあいはNSUserDefaults使います。

えーと、状況は なんたら = かんたら; みたいのが沢山入ったファイルがまずありきで、
この なんたら/かんたら のようなペアをロードしたいのです。

ただ、ここで なんたら と かんたら はダブルクォートで囲まれた文字列とは限らず、
そういう場合に.strings用のAPIだと失敗するようなのでどうしましょう、という流れです。

わかりにくくてすみません。もしかしてCocoaと関係ないかもしれないですね。

274 名前:名称未設定 mailto:sage [2008/11/15(土) 15:05:03 ID:7HtqMIxl0]
プロパティリストでいいじゃん。
NSDictionaryをそのまま保存すればいいよ。

275 名前:266 mailto:sage [2008/11/15(土) 15:29:05 ID:9X9dz6u50]
>>271
OS Xではあるんですが、自分の直接の管理下にない別のソフトが なんたら = かんたら;
みたいなフォーマットでデータを吐き出してくるのです。で、それを処理します。
長期的にはそのソフトが最初からplist(XML)を吐き出すべきなんでしょうが、差し当たってw

>>272
一応、そこそこ汎用な解析をしないといけなそうな感じなんですが、
NSScanner がおすすめですか。使ったことがないので調べてみます。

276 名前:名称未設定 [2008/11/15(土) 19:31:31 ID:74MSLTm4P]
汎用性を持たせるならJASONって手もあるよ

277 名前:名称未設定 [2008/11/15(土) 19:34:08 ID:74MSLTm4P]
間違えた、JSONか

278 名前:名称未設定 mailto:sage [2008/11/16(日) 02:31:44 ID:5nyRUfyn0]
>>275
>自分の直接の管理下にない別のソフトが なんたら = かんたら;
>みたいなフォーマットでデータを吐き出してくるのです。
なるほどそれはしかたないですね。

NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/Articles/OldStylePListsConcept.html
あなたのファイルを読み込んで、さらに { ... } で囲んだら、
NSPropertyListSerialization をつかって NSDictionary に出来ると思いますが、
Unicode が通るかどうかわかりません。

僕なら perl か ruby かなにかでそのフォーマットのデータを
plist に書き換える短いスクリプトを書いて、
Cocoa からそのスクリプトを呼びますが。

279 名前:266 mailto:sage [2008/11/16(日) 04:41:34 ID:NL8p9MOk0]
>>277
>JSON
おーなんか面白そうですが今回はとりあえず。

>>278
>NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
結局CFPropertyListほげに処理が行くようで、エラーになる感じは>>266と同様のようです。

>僕なら perl か ruby かなにかで
確かに、正規表現で切り出したりすればいいですかね。
左辺or右辺が文字列リテラルのときとそうでないときがあるのがちょっと面倒ですが...

280 名前:名称未設定 mailto:sage [2008/11/16(日) 05:06:34 ID:IF7lggCK0]
NSScannerでパースするのが一番楽だと思うな。
たいして複雑な書式じゃないようだし。



281 名前:266 mailto:sage [2008/11/16(日) 06:29:16 ID:NL8p9MOk0]
>>280
まだNSScannerを理解しきれてないですが、割と単純に文字をスキャンするだけじゃない
ですかねえ?
書式には文字リテラルが含まれるので、そんなに単純じゃなかったりします。例えばリテラル内に
¥"が現れる可能性もあったり... 結局、それなりの状態遷移を書く必要があるような。

とりあえずperlで正規表現を考えてみました... 文字リテラル用の表現が、なんとかできたかなあ
という感じです。文字リテラルじゃないときの場合分けはむしろ簡単かな。

282 名前:名称未設定 mailto:sage [2008/11/16(日) 11:57:37 ID:IF7lggCK0]
>>281
NSScannerはその名の通りスキャンするだけだから、この場合は「"なんたら" = かんたら\";」から「"なんたら"」と「かんたら\"」を
取り出すだけしか出来ないね。エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。
正規表現使うならPerlじゃなくてもCocoaから使えるライブラリもあるよ。
www8.ocn.ne.jp/~sonoisa/OgreKit/

283 名前:266 mailto:sage [2008/11/16(日) 21:53:32 ID:NL8p9MOk0]
>>282
>この場合は「"なんたら" = かんたら¥";」から「"なんたら"」と「かんたら¥"」を
>取り出すだけしか出来ないね。

こういう風に、値のデリミタが異なる場合を毎回試さないといけないので、なんかすでに面倒感
が出てくるというか...

>エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。

勿論¥自体もエスケープされていることがあります。ので、上の場合のでも¥のさらに手前が¥かどうか
調べないといけなくて、下手するとさらにその前、みたいなバックトラックモードに...
で、そういうのを普通のプログラムで書いていると、
「これって正規表現を展開したのを書いてるんじゃないか?」、という気分になってくるという....

>Cocoaから使えるライブラリもあるよ。

ちらっと眺めてみました。よさげですね。
なんか正規表現のセットが複数種類あるみたいですが... ONIG_SYNTAX_PERL というのを
有効にしたい場合はどうしたらいいんですかね? (ソースを調べろって?)

284 名前:名称未設定 mailto:sage [2008/11/17(月) 07:34:57 ID:WMJOqaGa0]
ステートマシンを書くといいよ

285 名前:名称未設定 mailto:前スレ947 [2008/11/17(月) 21:43:05 ID:VleoNMSp0]
前スレでCGImageRefの輪郭抽出でお世話になったもんです。
御礼が遅くなりましたが、とりあえず無事解決?したのでご報告まで。

結局、シェーダー書いてCoreImageで処理に落ち着きました。クリック判定の時だけ
CGColorAtX: Y:で判定というかなりテキトウな処理です。

いまのところ問題なく動くようです。アドバイスしてくれた方、ありがとうございました。
しかし、CoreImage面白いですね。

286 名前:前スレ947 [2008/11/17(月) 21:43:56 ID:VleoNMSp0]
間違えた… 285です。メール欄に名前入れちまったい…

287 名前:名称未設定 mailto:sage [2008/11/17(月) 22:50:50 ID:AI8JnSZ50]
NSOpenPanelでオープンダイアログ出すと
スレッドの数が異常に増殖するんだけど
これって普通ですか?

5-6スレッドも何に使ってんだろ・・・。

288 名前:266 mailto:sage [2008/11/17(月) 23:25:37 ID:VM9cdE+20]
>>284
正規表現はそれと同等な有限オートマトンで表現できる... いえ、もうそこはいいですw
巷に優秀な正規表現コンパイラが溢れる今日日、固定パターンの受理マシンを最初から作るのは...
今回。文字リテラルを含む入力の正規表現を確定するのに少し試行錯誤しましたが、
同じことを毎回プログラムの変更でやるのと、どっちが楽かと..

しかし、Cocoaでネイティブに正規表現をサポートしてくれたりしないのかな。おしまい。

289 名前:名称未設定 mailto:sage [2008/11/18(火) 00:48:50 ID:d2ANkhTZ0]
>>287
modalってだけて、ランループを3つぐらい塞いでる気がするし、
あとディレクトリに変化あったら自動で更新されるのもスレッド立ててる気がするし
まぁ5-6スレッドぐらいすぐ使うんじゃない?

290 名前:名称未設定 mailto:sage [2008/11/18(火) 20:18:09 ID:wWLAMWH+0]
>>288
時代遅れな技ですが。

#define Pattern NSClassFromString(@"java.util.regex.Pattern")

NSJavaSetupVirtualMachine();
id matcher = [[Pattern compile:@"ab(.+)cd"] matcher:@"ab123cd"];
BOOL result = [matcher find];
if(result) NSLog(@"%@", [matcher group:1]);





291 名前:名称未設定 mailto:sage [2008/11/19(水) 01:24:15 ID:awxWx5gM0]
>>290
なるほどー。試してみると、最初の一回は時間がかかるけど2回目以降は悪くないですね。

Java -> Cocoa は確か新規のCocoa APIが今後サポートされないとかいう話がありましたが、
Cocoa -> Java の方も同じことになるんですかね?
Cocoa というより ObjC と書くべきなのかもしれないけど。

292 名前:名称未設定 [2008/11/19(水) 15:26:17 ID:BWlnzWKG0]
Dictionaryに格納すると
順番がめちゃくちゃになるんですけど・・・・・
なにかいい方法ないですか?

293 名前:名称未設定 [2008/11/19(水) 15:36:59 ID:7EA3pAHdP]
NSArrayにも格納したら?
NSDictionaryやNSArrayはオブジェクトのコピーじゃなくてそのポインタを格納するだけだから,
両方使ってもメモリが一気に増えるってことはないと思う.

294 名前:名称未設定 mailto:sage [2008/11/19(水) 16:11:23 ID:LDJCxdq70]
ソートも使えるしな

295 名前:名称未設定 [2008/11/19(水) 16:13:18 ID:BWlnzWKG0]
>>293-294
そうします。
ありがとうございます。

296 名前:名称未設定 mailto:sage [2008/11/19(水) 21:02:02 ID:gPj/kG9F0]
>>291
java -> ObjCもObjC -> javaもサポート停止です。というか保守停止かな?バグが発見されても放置みたいな。
下位互換のために、それ自体は、OSの中に残るようですけども。

297 名前:名称未設定 mailto:sage [2008/11/19(水) 23:16:35 ID:TXTxCrRP0]
>>292
めちゃくちゃってか、アルファベット順とかそんなんだろ?

298 名前:名称未設定 mailto:sage [2008/11/19(水) 23:44:27 ID:tDuS/dfz0]
っていうかディクショナリに順番を期待するのが間違いだよね。

299 名前:名称未設定 mailto:sage [2008/11/19(水) 23:50:44 ID:NbUmXR8v0]
>>298
普通本屋で売ってる辞書って順番にデータが格納されてるよね...
いや、僕らは NSDictionary はハッシュテーブルだって知ってるから
順番を期待しないけど、プログラムはじめたばかりのひとが
混乱してもしかたないんじゃないかな。

それで気になるのは、~/Library って素人は中をいじっちゃだめだけど、
日常用語としては図書館には行ってもいいはずだから、
すくなくとも英語圏の素人さんなら中に pdf を大量にためちゃったりとか
ある気がするんだが問題ないんだろうか。

300 名前:名称未設定 mailto:sage [2008/11/19(水) 23:54:18 ID:ie6rHw0y0]
ディクショナリに順番を期待するってREALbasicからの移行組?
コイツはハッシュ型でありながら追加した順番も保持されてるんだよな。



301 名前:名称未設定 mailto:sage [2008/11/20(木) 00:36:58 ID:3uwYS9mh0]
>>299
>Library
中をあけたらすでにごちゃごちゃとフォルダが入っているのは
わかるはずだから、自分で自由に使っていいフォルダとは違う
ということぐらいはわかるんじゃないのか。
もっともアメリカに限っていえば、ぬれた猫を電子レンジに
かける人がいるお国柄だからどうだかわからんが…

302 名前:名称未設定 mailto:sage [2008/11/20(木) 00:41:31 ID:/EKcz7fk0]
そもそもアメリカ人は馬鹿だから Library と聞くと怯えて近寄らないとか?

303 名前:名称未設定 mailto:sage [2008/11/20(木) 11:32:25 ID:bdDdnpxd0]
図書館に自分の本を勝手に置いて来たり
中身を書き換えたりするようなことは普通しないと思う

304 名前:名称未設定 [2008/11/20(木) 22:48:47 ID:USnih3EQ0]
>>302
でもおれたちはその馬鹿なアメリカ人が作ったソフトでひいひい言ってるんだぜ?

305 名前:名称未設定 [2008/11/21(金) 00:37:17 ID:Mt+yfcCZ0]
cocoaって標準で正規表現使えないの?
どんだけ屑なの?

306 名前:名称未設定 mailto:sage [2008/11/21(金) 00:40:11 ID:ulllyDug0]
OgreKit

307 名前:名称未設定 mailto:sage [2008/11/21(金) 02:58:00 ID:KDDxp3BY0]
雪ヒョウではOgreKitを標準で搭載すべきだ

308 名前:名称未設定 mailto:sage [2008/11/21(金) 02:59:39 ID:603c8RI50]
毎回フレームワークを追加して<OgreKit/OgreKit.h>を書くのがめんどくさい

309 名前:名称未設定 mailto:sage [2008/11/21(金) 04:02:45 ID:Iagf3QtT0]
OgreKit 自体はすごいんだろうけど、Cocoa に取り込むとした場合、既存の Unicode 処理との
整合性が気になるけど大丈夫なんだろうか。Unicode の正規化の規則とか、case insensitive で
マッチした場合の振る舞いとか... そこら辺、何か気づいた人はいますか?

一方、Cocoa は内部で ICU をいろいろ参照しているみたいなんで、もし正規表現を実装することに
なるならやはり ICU を経由するのかなあと思うが...

310 名前:名称未設定 [2008/11/21(金) 04:09:28 ID:M0Acd2jx0]
>>309
おお、我が母校はCocoa内部からも参照されていたか。



311 名前:名称未設定 mailto:sage [2008/11/21(金) 04:17:30 ID:ulllyDug0]
>>310
笑ったww
自分は卒業生でも関係者でもないが、そのネタ分かる人どれだけいるんだ?

312 名前:名称未設定 mailto:sage [2008/11/21(金) 04:41:23 ID:Iagf3QtT0]
あそこ広々して、雰囲気もいいよね。やはりCならではとでも言いましょうか...
ほとんど関係者じゃないんだけど、知り合いの先生が教員用住宅に住んでてそこが結構広くて、
飲み会(一応アカデミックな)とかよく開いてもらったなあ。
そういえばかつて天文台にも用があったので、何かの拍子にNAOって綴りをみると思い出すw

しかしICUは一般的にはいろんな管を繋がれてピッ、ピッ、とか鳴ってるイメージかとw

313 名前:名称未設定 mailto:sage [2008/11/21(金) 09:31:03 ID:cugDLjhM0]
あれ?聞いた話では構内での飲み会は禁止だったが…今度あったら確認してみよう。
って、Cocoaはどうした?

314 名前:名称未設定 mailto:sage [2008/11/21(金) 09:34:44 ID:pKv4qdEc0]
Cocoaどこ?わたしは誰?

315 名前:名称未設定 mailto:sage [2008/11/21(金) 10:17:50 ID:AatvtfKP0]
俺はUnicodeのみの制約を嫌ってオリジナルの鬼車の方を使ってる。

316 名前:名称未設定 mailto:sage [2008/11/21(金) 13:25:04 ID:6z3WSjYr0]
>>305はどんな言語を使ってるの?

317 名前:名称未設定 [2008/11/21(金) 13:43:56 ID:M0Acd2jx0]
パァるじゃね?パァる。

318 名前:名称未設定 mailto:sage [2008/11/21(金) 14:23:01 ID:jqALT49u0]
ぱぁる厨の城東区だからね

319 名前:名称未設定 mailto:sage [2008/11/21(金) 14:35:54 ID:KDDxp3BY0]
Rubyでも正規表現は使えたはず。
REALbasicも3.5あたりから内蔵されてバリバリ使えるしね。
だが俺はCocoaが屑とは思わん。むしろマンセーしてる。
AppleがPascalかBASICでCocoaアプリ作れるようにしてくれれば
もっとマンセーするんだけどねぇ

320 名前:名称未設定 mailto:sage [2008/11/21(金) 18:13:59 ID:JwOtb6rU0]
>>319
つ 旧OS



321 名前:名称未設定 mailto:sage [2008/11/21(金) 18:25:23 ID:FH+sWgoq0]
Cocoa-Perlが出たらパァる厨も大喜び

322 名前:名称未設定 mailto:sage [2008/11/21(金) 18:45:13 ID:tTr4sDtj0]
regex(3)じゃだめなの?俺仕事のコードでバンバン使っちゃってるけど。

323 名前:名称未設定 mailto:sage [2008/11/21(金) 20:00:45 ID:7NEuk8Da0]
regex(3)の機能で充分ならばそれでいいんでないの

324 名前:名称未設定 mailto:sage [2008/11/22(土) 00:01:23 ID:Fh4kVmb/0]
>>321
CamelBones が既にあるよ。

>>319
Pascal、BASIC と Obj-C のどこに違いがあるのかわからん。
見た目はちがうが、ほとんど文法一対一に対応するのに。

325 名前:名称未設定 mailto:sage [2008/11/22(土) 10:33:51 ID:Ua3yloZ/0]
>>324
CamelBones、中の人がやる気がなさすぎでしょう。
10.5になるまでは「標準でのるかも?」って勢いだったけど、その後失速し
て、いまじゃそのままでは動かない。他の人があてたパッチでかろうじて、、、



326 名前:名称未設定 mailto:sage [2008/11/22(土) 13:24:04 ID:N1bFgiBw0]
Propertyって便利だけど、何か中途半端な気がするのは気のせいですかね?
オプジェクトを作成してプロパティをセットする所までは便利だと思うけど
id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
受けるときはプロパティなんて使ってないし、あーソースが汚くなる....

327 名前:名称未設定 [2008/11/22(土) 13:41:41 ID:E1jjc5CT0]
?

328 名前:名称未設定 mailto:sage [2008/11/22(土) 13:41:52 ID:Fh4kVmb/0]
>>326
>id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
>受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
意味が判らんのですが、どういうこと?
なんでプロパティつかっててキャストするはめになるのか判らんのですが。

329 名前:名称未設定 mailto:sage [2008/11/22(土) 13:44:26 ID:Q5Vk1lrT0]
画像のExifや一般情報を取得する方法って有るんでしょうか?

330 名前:名称未設定 mailto:sage [2008/11/22(土) 13:50:30 ID:Fh4kVmb/0]
Core Graphics の CGImage をつかえばいいです。
CGImageSourceCopyProperties のあたりを参照。



331 名前:名称未設定 mailto:sage [2008/11/22(土) 13:59:13 ID:E1jjc5CT0]
>>326
property設定する時、全部idで宣言してるとかじゃないよね。

332 名前:名称未設定 mailto:sage [2008/11/22(土) 14:17:29 ID:RI5N1Fnn0]
ひとつ賢くなった>>326であった

333 名前:名称未設定 mailto:sage [2008/11/22(土) 16:47:35 ID:N1bFgiBw0]
senderで送られてくるオブジェクトって通常id型でしょう?
そのプロパティにアクセスしようと思たらキャストかクラスに代入する必要があるでしょうに



334 名前:名称未設定 mailto:sage [2008/11/22(土) 17:07:45 ID:F4n+OlHB0]
プロパティ関係ないじゃん。
普通のメソッドでもそうじゃん。

335 名前:名称未設定 mailto:sage [2008/11/22(土) 17:24:03 ID:lKz+QYh00]
>>333
プロパティどうやって書いてんの?

336 名前:名称未設定 mailto:sage [2008/11/22(土) 17:35:49 ID:IISK+7aO0]
- (IBAction)hoge:(id)sender
{
sender.foo = [aClass new]; // ???
}
ってことね。


俺はsenderに働きかけたことないけど。

337 名前:名称未設定 mailto:sage [2008/11/22(土) 18:11:15 ID:R6yOr3bR0]
>>333
senderなんてほとんどIBOutletだろ。

if (sender == hoge) {
float value = hoge.foo;
}

みたいに書くんじゃね? 普通は。

338 名前:名称未設定 mailto:sage [2008/11/22(土) 19:12:12 ID:Il+FqCN50]
うそーん

339 名前:名称未設定 mailto:sage [2008/11/22(土) 19:40:36 ID:EmZE7Gqk0]
NSTextViewでsetEditable:NOにしておき、クリックされた、またはフォーカスが当った時に
setEditable:YESに変更、view外がクリックされた、またはフォーカスが外れた時にsetEditable:NOに
するにはどうすればよろしいのでしょうか?

他のボタンでsetKeyEquivalent:@"半角スペース"などで設定した時に、NSTextViewにキーイベントを
取られるのを防ぎたいのです。

よろしくお願いします。

340 名前:名称未設定 mailto:sage [2008/11/22(土) 22:11:15 ID:v4sMs7r70]
>>330
すいません、Core関係は全く触った事無く扱い方自体知らないんですが、参考になる日本語ページとか無いでしょうか?



341 名前:名称未設定 mailto:sage [2008/11/22(土) 23:16:25 ID:W+1fjktw0]
>>333

- (void)action:(MyClass*)sender
{
...
}

ソースコード側は、こう書いてもいいんだよ。


342 名前:名称未設定 mailto:sage [2008/11/22(土) 23:18:38 ID:hv+kYqZ80]
id型が何か分かってないんだと思う

343 名前:名称未設定 mailto:sage [2008/11/22(土) 23:26:23 ID:W+1fjktw0]
>>339
NSTextViewのサブクラスを作って、becomeFirstResponderとresignFirstResponderをオーバーライドすれば、できそうだけど。

ただ、NSTextViewからフォーカスが外れたら、そもそもキーイベントがNSTextViewに行く事は無いと思う。


344 名前:名称未設定 mailto:sage [2008/11/23(日) 00:08:59 ID:knCwFm3k0]
>>340
ちょうど良さそうなのが
ttp://cocoawiki.aerial.st/index.php?FrontPage

345 名前:名称未設定 mailto:sage [2008/11/23(日) 00:16:15 ID:knCwFm3k0]
Cocoa Drawing Guide
ttp://www.mosa.gr.jp/?p=444

346 名前:名称未設定 mailto:sage [2008/11/23(日) 01:41:23 ID:fOaeIxBi0]
>>341
id の問題はおいとくとしても、 action メソッドで sender のプロパティに
アクセスしないといけない状況ってほとんどないと思うんだけど。
バインディングつかってないの?

347 名前:名称未設定 mailto:sage [2008/11/23(日) 09:19:20 ID:iaCcgTxk0]
継承関係が無いクラスをポリモルフィックに扱う時はid型を使うだしょ
その時の話をしていたのだがorz...

348 名前:名称未設定 mailto:sage [2008/11/23(日) 09:32:18 ID:fOaeIxBi0]
>>347
そういう状況でなんでプロパティを読みとりたくなるのか
具体的な状況がまったくわからんのだが。

349 名前:名称未設定 mailto:sage [2008/11/23(日) 11:27:47 ID:iaCcgTxk0]
つうことで、propertyに違和感を感じるのは俺だけってことで...orz

350 名前:名称未設定 [2008/11/23(日) 12:33:34 ID:fOaeIxBi0]
orz とか言うのはいいけど、こっちの疑問に答えてくれないんでは
違和感も伝わらないんだけど ???
a.property というのは obj-c ぽくなくて違和感があるが、
それは >>349 の感じている違和感ではなさそう。

どういう局面で sender の property が読みたくなるの?



351 名前:名称未設定 mailto:sage [2008/11/23(日) 14:14:58 ID:iaCcgTxk0]
クラスHogeとFugeがあって
@interface Hoge : NSObject {
int x,y;
}
@property int x,y;
@end
@interface Fuge : NSObject {
int x,y;
}
@property int x,y;
@end
こんな感じかな。そんでもってこんな感じで使って
Hoge* hoge = [Hoge new];
hoge.x = 10;
hoge.y = 5;
[self shift:hoge];
Fuge* fuge = [Fuge new];
fuge.x = 15;
fuge.y = 25;
[self shift:fuge];
んでメッセージを受ける方が
- (void) shift:(id)point
{
//point.x += 10; としたくなんない?
//point.y += 10; としたくなんない?
//いちいちキャストなんてやりたくないからこんなんなるでしょ。
[point setX:[point x] + 10];
[point setY:[point y] + 10]; //コードが統一できない...orz
}
簡単に書くとこんな感じ。動的なオブジェクト言語なんで無理矢理継承関係を持たずにシンプルに書きたいときが多いよね

352 名前:名称未設定 mailto:sage [2008/11/23(日) 15:03:15 ID:lPFF9JrY0]
>>351
- (void) shift:(hoge *)point {

}



にすればええやん。

353 名前:名称未設定 mailto:sage [2008/11/23(日) 15:10:01 ID:qOiHI6Fa0]
それだとfugeが受け取れない

354 名前:名称未設定 mailto:sage [2008/11/23(日) 15:10:47 ID:lPFF9JrY0]
異なるクラスを1つのメソッドで処理したいのかが分からん。

355 名前:名称未設定 mailto:sage [2008/11/23(日) 15:17:00 ID:iaCcgTxk0]
orz

356 名前:名称未設定 mailto:sage [2008/11/23(日) 15:31:04 ID:qOiHI6Fa0]
まあ、アプリを作るよりもコードの組み方に執心するのも悪くないが、
それで満足出来ないならこれ以上は無駄な議論になる。
自分で言語を作るか満足出来る言語を探すしかないな。

357 名前:名称未設定 mailto:sage [2008/11/23(日) 15:38:14 ID:iaCcgTxk0]
そこまで拘ってはいないんだけど、規模が大きくなると
可読性も重要になるもんでちょっと気になっただけです。
スレ汚しすまそん。

358 名前:名称未設定 mailto:sage [2008/11/23(日) 15:43:18 ID:NCg555PX0]
>>351
例としてそれが正しいんだとすると、クラス設計が間違ってるんじゃない?

>>354も言ってるけど、
同じプロパティ持ってて、なおかつ一つのメソッドで処理したいんなら
共通の親クラス持つべきでしょ。

> 動的なオブジェクト言語なんで無理矢理継承関係を持たずに
どっちかっつーと、継承させればいいのに無理矢理継承させなかったようににみえるよ

359 名前:名称未設定 mailto:sage [2008/11/23(日) 15:58:16 ID:iaCcgTxk0]
サンプルの例は簡単すぎるけど、継承関係を持ちたくない動的なポリモルフィズムでは
プロパティは合わないってことかな。たぶん俺の設計が悪いんでしょう...。

360 名前:名称未設定 mailto:sage [2008/11/23(日) 15:59:47 ID:qbiNAB4B0]
>>358
いや、実際継承関係なしに同じメソッドを持たせたいときのためにプロトコルってもんがあるんだけどな…
プロパティ使ってもプロトコル作っとけばメソッドでアクセスは出来るだろうけどプロパティ構文でアクセスは出来ないか。

ていうかプロトコルみたいな基礎の基礎を理解してからプロパティみたいな(ある意味シュガーシンタックス)を使うべきだと思う。



361 名前:名称未設定 mailto:sage [2008/11/23(日) 15:59:59 ID:lPFF9JrY0]
>>359
具体的に何をしたかったのか気になるな。
こういう事は参考になるし、差し支えなければ教えてたもれ。

362 名前:名称未設定 mailto:sage [2008/11/23(日) 16:10:58 ID:5E7pfPDV0]
プロトコルって
たった一つの関数のために宣言するのも気が引けない・・・・・

それに今回の場合は二つのクラスがあってそれを第三者である別のクラスのメソッドを使用して
この二つのクラスのオブジェクトにメッセージを送りたいんでしょ?






363 名前:名称未設定 mailto:sage [2008/11/23(日) 16:20:45 ID:qbiNAB4B0]
>>362
メソッドの数は関係ないだろ…NSCopyingとか知ってる?
>>351の例で言えば、HogeとFugeが共通のプロトコルを実装していれば、継承関係がなくても
id <protocol> point2 = pointとすれば、少なくともメソッドでのアクセスはできるわけ。
まあid型なんだからメソッド呼ぶ分にはコンパイルエラーは出ないと思うが、静的型チェックしたい場合は。

こういう継承関係はないけどある程度のメソッドのセットを共有するクラスって、実際にアプリケーション作ってれば
結構あるんだけどな。プロパティってカテゴリとかプロトコル中で使えないんだっけ?

364 名前:名称未設定 mailto:sage [2008/11/23(日) 16:22:46 ID:5E7pfPDV0]
メッセージを送りたいんじゃなくて
その二つのクラスを仮引数にしたいのか。

そうなると仮引数での型宣言がid型にならざるを得ない・・・

・・・hoge型を受け取るセレクタとfuge型を受け取るセレクタ
両セレクタを第3者のクラス(たぶんメインのほうなんだろうけれど)で定義すればいけるよね。

これだとソースも汚れないんじゃない?

365 名前:名称未設定 mailto:sage [2008/11/23(日) 16:24:25 ID:NCg555PX0]
>>360
まぁインターフェースだけ持ちたい場合はそうなんだけど、
>>351の例じゃメンバも一緒だし、プロトコルじゃなくて継承があってるっしょ

例が簡単過ぎと言う事だから、何がしたいかによるけどさ
同機能の名称だけ違うクラスがあるようだったから、これを親クラス使わないテは無いんじゃない?

366 名前:名称未設定 mailto:sage [2008/11/23(日) 16:31:47 ID:5E7pfPDV0]
>>363
そうなのか。
僕は研究で使うためのアプリケーションを作成させられているんだけど、
まわりにcocoaなんてやってる人がいないから、相談できる相手がいないんですよ。

だからイメージ的にプロトコルなんだから一つだけの関数のためにあっても仕方ないよなー
って感じだったんですよ。

でも確かにcocoaのプロトコルの存在理由を考えれば一つでもありですよね。

沢山のクラスで同じメソッドが使われている。
となればそのメソッドを一つの「Aプロトコル」と宣言しておけば

このクラスは「Aプロトコルに沿っています」となればその関数は使用できるってことがわかるわけだし。
その逆もしかりだしね。



367 名前:名称未設定 mailto:sage [2008/11/23(日) 16:33:55 ID:4U1xjB9Y0]
ある程度プログラムが出来上がったあとに、別個に作って来たクラスを共通の基底クラスに
乗せるのは厄介でできない、というのはデザイン云々はともかく実際問題としてあるかも。
C++ だと多重継承という逃げ道もあるが... あるいはテンプレート。

規模が大きくなると可読性が... とかいうなら、それこそプロトコルとかである程度縛りを
持たせないとまずい気がする。

368 名前:名称未設定 mailto:sage [2008/11/23(日) 16:35:19 ID:qbiNAB4B0]
>>365
>>351の例そのままなら誰だって継承を選択するし、継承ならプロパティもそのまま使えるからわざわざ質問なんかしないよ。

369 名前:名称未設定 mailto:sage [2008/11/23(日) 16:44:44 ID:5E7pfPDV0]
ごめん、366で納得しといて申し訳ないんだけど・・・・
今回の例でプロトコルをしようするってどういうこと?

何度も確認するんだけど、
今回の例は

第三者のクラスで実装されている一つのメソッドにおいて
二つのクラスを仮引数として受け取れるようにするには id型しかなくて

それだとわざわざプロパティとして定義してあるx,yなのにドット演算子を用いてアクセスできない

っていう不満なんですよね?

どの辺にプロトコル・・・・・・・・が関係するんですか?

370 名前:名称未設定 mailto:sage [2008/11/23(日) 16:45:50 ID:qbiNAB4B0]
>>364
あ、そうか。
HogeまたはFugeをインスタンス変数として持つ第3のクラスを作って、
プロパティはそっちに実装すれば…って余計めんどくさいけど、どうしてもプロパティ使いたいならこれかw



371 名前:名称未設定 mailto:sage [2008/11/23(日) 16:55:57 ID:qbiNAB4B0]
>>369
いや、プロパティじゃなくてメソッドだったらプロトコル使えるねって話。を俺がしてるだけw 混乱させたらすまん。

372 名前:名称未設定 mailto:sage [2008/11/23(日) 17:16:16 ID:bRvMtYeW0]
@protocol MyProtocol
@property int x, y;
@end

@interface A : NSObject <MyProtocol>
{ int x, y; }
@property int x, y;
@end

@interface B : NSObject <MyProtocol>
{ int x, y; }
@property int x, y;
@end

void printXY(id <MyProtocol> obj)
{ NSLog(@"%d, %d", obj.x, obj.y); }

面倒くせぇ。

373 名前:名称未設定 mailto:sage [2008/11/23(日) 17:19:54 ID:5E7pfPDV0]
351の解決策
----Fugeクラス--------

int x,y //プロパティとして宣言

----Hogeクラス--------

int x,y //プロパティとして宣言

----第3のクラス--------
- (int) myMain(void){
  Fuge* fuge = [Fuge new];
Hoge* hoge = [Hoge new];


}

- (void) shift:(Fuge*)point
{
point.x += 10;


}
 

374 名前:326 mailto:sage [2008/11/23(日) 17:20:53 ID:iaCcgTxk0]
番号書いとかないと解らなくなりますね(^^;
話題がクラスの設計にまで発展していて恐縮してしまいます。

最初に戻りますけど、プロパティは便利だから使うんじゃなくて
静的な設計でしっかりとしたチェックを行う為に導入されたのかもしれませんね。
あ、でもメッセージを送信できてしまうのでそうでも無いのか。

プロトコルを使った設計もいいんですけど、ObjectiveCなのでAPIを作るとき以外は
あまり使いたくないと思ってしまうんですよね....

もっと使い込んで良い使用例を見つけてみます。サンクスアロット!

375 名前:名称未設定 mailto:sage [2008/11/23(日) 17:21:33 ID:5E7pfPDV0]
ごめん途中でかきこんでしまいました・・・・

まぁ省くと
さらに
- (void) shift:(Hoge*)point
を作成して
myMainで

両方ともうけとれるんでは?と・・・・

376 名前:名称未設定 mailto:sage [2008/11/23(日) 17:22:27 ID:5E7pfPDV0]
>>374

ものすごく参考になる例でしたよ
こちらこそありがとう

377 名前:名称未設定 mailto:sage [2008/11/23(日) 18:39:08 ID:wtDM58qW0]
高度な話題の途中で申し訳ないんですが、
ファイルの有無を返すメソッドって何を使えばいいのでしょう?
例えば、
/Users/me/hoge.txt
を引数にして、hoge.txtがあればYES,無ければNoを返すようなものです。
で、もしあったらそれをhoge2.txtにリネームしたいのですが、
便利なメソッドありますか?

今はNSStringのinitWithContentsOfFileでエラーが出なかったら、
そのNSStringをwriteToFileで書き込んでるんですが、
無駄にメモリを使っているような気がします。

378 名前:名称未設定 mailto:sage [2008/11/23(日) 18:57:59 ID:CafrItRj0]
やっと答えられるネタがw

id fm = [NSFileManager defaultManager];
BOOL flag = [fm fileExistsAtFilePath:theFilePath];

でいいかと

379 名前:名称未設定 mailto:sage [2008/11/23(日) 19:48:14 ID:knCwFm3k0]
ちなみに
- (BOOL)fileExistsAtPath:(NSString*)path isDirectory:(BOOL*)flag
でディレクトリかどうかも分かる

380 名前:377 mailto:sage [2008/11/23(日) 19:48:57 ID:wtDM58qW0]
>>378さん
こういう時はNSFileManagerを使えばいいんですね。
ありがとうございます。参考になりました。



381 名前:名称未設定 mailto:sage [2008/11/23(日) 22:06:28 ID:UPPqK5k50]
インスタンス変数の先頭や後ろに_を付けたり、
mを付けたりしてるのをよく見掛けるのですが、
正式(もしくは通例)な書き方ってあるのですか?

382 名前:名称未設定 mailto:sage [2008/11/23(日) 22:51:13 ID:zrPQcDP/0]
ないです

383 名前:名称未設定 mailto:sage [2008/11/23(日) 23:08:33 ID:HpygaMZ60]
俺の例で申し訳ないけど
1.あまり変数名を考えないで何もつけない
2._を付ける
3.mを付ける
4.変数名をよく考えて何もつけない
の順で進化(退化?)してきて、現在では何も付けないに固まりつつあるよ

384 名前:名称未設定 mailto:sage [2008/11/23(日) 23:17:00 ID:lPFF9JrY0]
よく_を付ける人がいるけど、
あれってAppleが予約してるんだよね?

385 名前:名称未設定 mailto:sage [2008/11/23(日) 23:27:30 ID:NCg555PX0]
mって懐かしいな
CodeWarrior PowerPlantの命名規則だっけ


386 名前:名称未設定 mailto:sage [2008/11/24(月) 01:10:28 ID:zG2/3T9r0]
質問です。
10.4.11以降で実行(記述)出来るようになったメソッド(webView:didClearWindowObject:forFrame:)を
記述した場合、10.4.11以前のOSで起動したらどうなるのでしょうか?(落ちる?)

また、このメソッドを実行(記述)したくない場合、下記のように書けばよろしいのでしょうか?
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4(またはMAC_OS_X_VERSION_10_4_11?)
- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)wso forFrame:(WebFrame *)frame
{
// いろいろ処理
}
#endif

稼働確認の環境がないもので(当方10.4.11)、これでいいのかよろしくお願いします。



387 名前:名称未設定 mailto:sage [2008/11/24(月) 01:17:47 ID:GByYYnXG0]
>>386
それはデリゲートメソッドなんで大丈夫。10.4.11より前では単に呼ばれなくなるだけ。

388 名前:名称未設定 mailto:sage [2008/11/24(月) 01:55:11 ID:zG2/3T9r0]
>>387
早速の回答ありがとうございます。
特に気にすることはないのですね。

あと、もう一つ便乗で申し訳ないのですが、
10.4.11でDeprecatedになったwebView:windowScriptObjectAvailable:を記述しても
呼ばれないのですが、(>>386のメソッドは記述しないで)
-(void)windowScriptObjectAvailable:(WebScriptObject*)wso
{
NSLog(@"windowScriptObjectAvailable");
}
何か記述がたりないのか、単に10.4.11でテストしてるから呼ばれないのか、
わからない状態です。
(ソースは@interface myWebView : WebView でサブクラスにしています)



389 名前:名称未設定 mailto:sage [2008/11/24(月) 04:04:16 ID:GByYYnXG0]
>>388
それもデリゲートメソッドなんだからWebViewのサブクラスに書くメソッドではないよ。
そもそも
- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject ;
だと思うんだが。そのコードじゃ呼ばれるわけがない。

390 名前:名称未設定 mailto:sage [2008/11/24(月) 14:03:19 ID:PGqxC8ff0]
Garbage collection有りのcocoa-Applicationで、
アプリの起動から終了まで、あるNSMutableArrayの中身を保持したいのですが
どういう風に宣言すればいいのでしょうか?
AppController Classのインスタンス変数として宣言すればいいのかなと思いましたが
うまくいきませんでした。



391 名前:名称未設定 mailto:sage [2008/11/24(月) 15:50:19 ID:HWz3ev+J0]
>>390
AppControllerが、どこからも参照されていないのではないかな。
NSAppのdelegateにすれば良いでしょう。
nibのfile's ownerからdelegateを接続すれば解決するでしょう


392 名前:名称未設定 [2008/11/24(月) 17:07:43 ID:/NHK9Ydy0]
リファレンスカウンタを利用してみれば?

393 名前:名称未設定 mailto:sage [2008/11/24(月) 17:13:33 ID:ljIgus1G0]
id型だとプロパティ構文が使えないのは、コンパイラが、それがプロパティへのアクセスなのか、構造体(または共有体)へのアクセスなのか区別できなくなるためです。
こういうときは、非公式プロトコルを使ってコンパイラを騙してしまえば、綺麗に書けると思います。

// 非公式プロトコル
@interface common
@property int x,y;
@end

// 非公式プロトコルを使うメソッド
- (void) shift:(common*)point { point.x += 10;}

あとは、>>352>>375が言ってることといっしょです。

394 名前:名称未設定 mailto:sage [2008/11/24(月) 17:22:33 ID:ljIgus1G0]
>>381
Cocoaの場合、インスタンス変数名が、そのままプロパティ名や、KVCのキーになったりするので、プリフィックスを付けずに、そのままの名前で書くのがよいと思います。
逆に、メソッドの引数や、ローカル変数側にプリフィックスを付けるのが、Cocoa流なのではないかと最近思ってます。
よくメソッドの引数名で、anObjectとか、aStringとか見かけます。
>>384の言ってる通り、_はアップルが予約してるので使えませんが、ローカル変数名なら使っても問題ないはず。


395 名前:u16249.koalanet.ne.jp mailto:sage [2008/11/24(月) 19:10:15 ID:8eRKNHGE0]
>>394
眼からうろこ落ちた。おれも今日から引数やローカル変数の方にプリフィックス付ける!!
一応、ローカル変数はPowerPlantからの癖でtheを付けてるけど、引数の
方はinとかoutをつけるとメソッド名とかぶってむずがゆいです。
anとかaはいいね。複数だとobjectsとかObjectsArrayとかにしてますか?


396 名前:名称未設定 [2008/11/24(月) 20:05:56 ID:/NHK9Ydy0]
>>393
なるへそ

397 名前:名称未設定 [2008/11/24(月) 20:23:03 ID:lYcKzgoR0]
>>35がすごすぎてへこんだorz

自分もがんばるぞ。

398 名前:名称未設定 [2008/11/24(月) 20:31:56 ID:GzPVuqFS0]
Xcode 3.1を使用しています。

Safariの"Advanced"環境設定や、
iTunesの"General"環境設定などで見かける、横線を表示したいのですが、
どのようにしたら良いのでしょうか。

399 名前:名称未設定 mailto:sage [2008/11/24(月) 20:32:59 ID:GzPVuqFS0]
ごめんなさい、IBのLayout Viewsのところにありましたorz

400 名前:名称未設定 mailto:sage [2008/11/24(月) 20:46:50 ID:NpEGxfAA0]
>>389
指摘のメソッドに変えたらうまくいきました、ありがとうございます。



401 名前:名称未設定 mailto:saga [2008/11/24(月) 20:49:20 ID:6rT9ICRJ0]
なんだかんだいってもCocoaでプログラミングするのは楽しいな
ハマル事も多し、標準フレームワークの実装には文句もあるけどね
超高速NSTableViewとか作ってみたけど公開してみようかな

402 名前:名称未設定 [2008/11/24(月) 21:31:36 ID:/NHK9Ydy0]
>>401
dictionaryを展開させるやつならぜひ

403 名前:名称未設定 mailto:sage [2008/11/24(月) 21:32:23 ID:6a5Gwn4E0]
15万件でもサクサクですか?

404 名前:名称未設定 [2008/11/24(月) 21:37:10 ID:/NHK9Ydy0]
mac miniで多重スレッドでのプログラム処理は大丈夫ですか?

405 名前:名称未設定 mailto:sage [2008/11/24(月) 21:40:03 ID:CRbch+U60]
>>401
1万件のCocoaBindingで、PBG4だと1分待たされました。
是非高速版がほしいですw。

406 名前:名称未設定 mailto:sage [2008/11/24(月) 21:48:00 ID:6a5Gwn4E0]
でもそれはアレイコントローラーが高速にならないと。

余談だけど、NSTableViewでサムネ画像など表示させた場合、
描画領域内にある行だけ画像表示させるのって簡単なんですかね?

407 名前:名称未設定 mailto:sage [2008/11/25(火) 00:31:44 ID:n8XQ2L280]
>>406
ふつうに datasource メソッドを実装すれば
描画領域にある列、行のサムネイル画像を NSTabelView が要求してくるから、
その場でサムネイルつくって返せばいいだけだけど。
NSTableView って配列を先に全部与えて表示するものと勘違いしてない?

408 名前:名称未設定 mailto:sage [2008/11/25(火) 20:37:50 ID:fTXxDM330]
アレイコントローラーの配列にNSImageで持たせるか、
画像のパスだけ持たせておいて
データソースで描画内だけNSImageを作成するかの
違いってことかな?

409 名前:名称未設定 mailto:sage [2008/11/25(火) 21:57:22 ID:R26T1kav0]
>>405
1万行あるテーブルなんて、特定の行を探すのが大変そう。
ユーザーインターフェースの設計を考え直した方がいいと思う。

410 名前:名称未設定 mailto:sage [2008/11/26(水) 01:33:15 ID:P35jjkPN0]
文字列オブジェクトは日本語でも全く問題ないよね。
でもそれをC言語のchar型の文字列ポインタにUTF8stringで代入しようとしたら文字化けするんですが、
なぜなんでしょうか?





411 名前:名称未設定 mailto:sage [2008/11/26(水) 06:25:24 ID:xQANSJuC0]
>>410
文字化けしているかしていないかはその char* をどう使ったかによります。
どうやって char* を表示させたのか書いてくれないとわかりません。

412 名前:名称未設定 mailto:sage [2008/11/26(水) 14:48:24 ID:GK26HTBC0]
>>390
[[NSGarbageCollector defaultCollector] disableCollectorForPointer:myMutableArray]
では駄目なの?(それか、グローバル変数として作るとか)

413 名前:名称未設定 mailto:sage [2008/11/26(水) 15:47:10 ID:QSxwsUJ30]
NSWindowをsetLevelでNSNormalWindowLevel以外にするとExposeの時消えてしまいます。
Exposeの対象にする方法はないでしょうか?

414 名前:名称未設定 mailto:sage [2008/11/26(水) 18:44:35 ID:0RmgUrO80]
NSAppleScriptのexecuteAndReturnErrorで
スクリプトファイルからスクリプトを実行する時に
引数を渡す方法ってありますでしょうか…


415 名前:名称未設定 mailto:sage [2008/11/26(水) 19:41:31 ID:FophLCsx0]
>>413
この辺関係ありそう
www.cocoadev.com/index.pl?DontExposeMe
www.cocoadev.com/index.pl?CoreGraphicsPrivate

>>414
スクリプトの引数の部分に%@とか書き込んでおいて、
NSString *src1 = [NSString stringWithContentsOfFile:scriptFile];
NSString *src2 = [NSString stringWithFormat:src1, arg1, arg2…];
NSAppleScript *as = [[[NSAppleScript alloc] initWithSource:src2] autorelease];
NSAppleEventDescriptor *dsc = [as executeAndReturnError:nil];

とするのは?

416 名前:名称未設定 mailto:sage [2008/11/27(木) 02:46:01 ID:B6cixQN+0]
マックから異なるサーバに
メッセージを書き込みに行くときに
日本語が含まれていると、かなり酷い文字化けして格納されるよね。

windowsからxコードで記述したプログラムを見てみると同様に文字化けするし・・・・
一応環境設定でデフォルトのエンコードは「Shift JISS」にはなっているんですが。



417 名前:名称未設定 mailto:sage [2008/11/27(木) 03:18:48 ID:37LWSc7G0]
>>416
>マックから異なるサーバに
>メッセージを書き込みに行くときに
>日本語が含まれていると、かなり酷い文字化けして格納されるよね。
異なるサーバってどういう意味?
ファイルサーバ? それとも HTTPサーバにポストする場合のこと?
ここにいるひとだってエスパーじゃないんだから、もうちょっと
他のひとが読んでも判るように心がけて書き込みしたらいいんじゃない?

ファイルサーバだったら書き込む際に文字コード指定して
書き込めばいいだけだし、
POST とか URL のエンコードがうまくいかないのは
html の form で文字コードをちゃんと
指定してないからで Mac のせいじゃないよね。
Google で検索するときは windows からでも mac からでも
日本語で検索出来るわけでさ。

まあそれはともかく、悪い事は言わないから Windows だけで済まない場合は
もう Shift-JIS を使うのは止めて全部 Unicode ベースにしたほうがいいと思う。

418 名前:名称未設定 mailto:sage [2008/11/27(木) 05:13:33 ID:B6cixQN+0]
>>417
返信ありがとうございます。

サーバはデータベースサーバのことです
言葉足らずで申し訳ございません。

そのUnicodeベースにしたほうがいいって言うのは
どういうことでしょうか?
環境設定でそうしろってことですか?


419 名前:名称未設定 mailto:sage [2008/11/27(木) 05:22:59 ID:37LWSc7G0]
申し訳ございませんと丁寧に謝っていただくより、
もっと細かい状況をおしえてもらったほうがいいんだけど...
データベースサーバのことです。ってたって何種類もあるでしょ。

データベースサーバとはどうやって通信してるの?
Mac 用のクライアントソフトがある?それとも http 経由?
データベース側では文字列は文字コードは何を使うと決めてある?
Mac 側から送る文字コードはデータベースサーバ側が期待している
文字コードになるようにしてますか?

そのあたりはいろいろな設定が関わってくる問題で、
あなた独自の暗黙の了解が通じるところではないです。
Windows な人なら Shift-JIS が好きかもしれないし、
Linux ベースのサーバなひとなら当然 EUC かもしれないし、
Unicode で XML つかってるひとなのかもしれない。
あなたがそのうちどれなのかは説明してもらわないとわからんです。

単に「マックから書き込むと文字化けするよね」という問題じゃ
ないと思いますが...
Windows サーバに Windows のクライアントソフト/ブラウザから
書き込むばあいでも、IE じゃ文字化けしないけど Firefox だと化けるとか
そんなこともあるでしょ。
よく判らない場合は Windows + IE に閉じこもっていたほうが
安全だと思います。

全部 Unicode ベースというのは、XCode もユニコード、
データベースサーバもユニコード、Windows でもユニコードということです。
そうできる権限があるなら、そうしたほうがあとあと楽だと思いますが。

420 名前:名称未設定 mailto:sage [2008/11/27(木) 05:30:59 ID:B6cixQN+0]
データベースサーバはPostgresQLをつかっています。
通信方法はそこで用意されている
libpqというC言語用のAPIを使っています。

ですからUTF8StringでC言語用の文字コードにエンコーディングしてから
Posgreで用意されている関数に渡すことでデータベースに書き込みに行っています。

その時に表のセルに日本語の文字列を書き込みにいくと文字化けして格納されてしまいます。
ただ同じようにWindowsのエディッタで作成したプログラムで書き込みに行くと
文字化けを起こしません。

まったく同じプログラムなのですが・・・・・・

後、再度返信ありがとうございます。



421 名前:名称未設定 mailto:sage [2008/11/27(木) 06:06:19 ID:37LWSc7G0]
>>420
それはちゃんと表のセルに入力した文字列が
UTF8 の文字列に変換されてないんだと思います。

お礼をいただくよりも、暗黙の仮定を減らしていただいたほうがいいんですが、
GUI のプログラムは何のフレームワーク使って書いているんですか?
あなたの >>420 の書き込みを僕が読んで、
どういう言語でどういう GUI ライブラリをつかってプログラムしているか
僕が読みとれると思いますか?思いませんよね。
自分以外のひとが読んで判らないところがないだろうか、
考えて書き込んでくださると助かります。

ですから、「GUI のフレームワークはこれこれで、
文字列クラスは std::string なり NSString なり QString なりを使っていまして、
これこれこのように GUI から渡ってきた文字列を
C の char* に変換しているのだがうまくいきません。
どうすればいいですか?」
というふうに聞いてくれるといいんですけど。

あとこれは Mac のせいじゃなくてあなたのプログラミングのせいでしょう。

422 名前:名称未設定 mailto:sage [2008/11/27(木) 06:15:15 ID:B6cixQN+0]
>>421
僕も自分のプログラムのせいなのかなと考え
実はC言語だけでCUIプログラムを作成して送信したんです。

char command[250];

sprintf(command,"insert into table (id,name)values('101','田中康夫');");

PQexec (conn,command): //PQexec(接続先データベースサーバ情報を格納した構造体ポインタ,実効命令)

これと同様にWindowsのエディッタで作成し実行したところ、こちら側では
田中康夫が文字化けせずに格納できました。



423 名前:名称未設定 mailto:sage [2008/11/27(木) 06:20:31 ID:B6cixQN+0]
あとまた言葉足らずになってしまっていたので、

ですからXコードの文字エンコードの問題かなと考えるにいたったんです。

環境設定ではShift-JISSにしています。

以前マックのターミナルで
データベースサーバからの情報を受け取ったとき
同じように日本語が文字化けを起こしていたので、
環境設定でShift-JISSにしたところ問題が解決されたことがあります。

ですが今回、データベースサーバに日本語の文字列を格納する際に
すでに文字化けを起こして格納しているみたいです。

なんども言うようですが、windowsのエディッタで作成すれば、全く問題ありません。

424 名前:名称未設定 mailto:sage [2008/11/27(木) 06:24:07 ID:37LWSc7G0]
なんか Cocoa じゃないですね、皆様失礼しました。Mac でプログラミングスレ
pc11.2ch.net/test/read.cgi/mac/1216824430/
に移動しましょう。以下返信はそちらにします。

425 名前:名称未設定 mailto:sage [2008/11/27(木) 16:33:22 ID:rWXcKYWw0]
低スキルが間違いをOSのせいにする典型例だな。

426 名前:名称未設定 mailto:sage [2008/11/27(木) 20:01:20 ID:hCNJMOhd0]
unsinged char data = 0xaa;
はできますが
unsinged char data = 0b10101010;
は出来ないのですね。

2進数を使いたい部分があるのですが、どう扱えば良いのでしょうか?

427 名前:名称未設定 mailto:sage [2008/11/27(木) 20:49:24 ID:wLn06wmd0]
#define b00000000 0x00
...
#define b10101010 0xaa
...
#define b11111111 0xff

428 名前:名称未設定 mailto:sage [2008/11/27(木) 21:46:16 ID:t7oDCkvv0]
ぬはは、なんという発想の転換

429 名前:名称未設定 mailto:sage [2008/11/27(木) 23:21:44 ID:PejjknVj0]
>>427
それって、なんの意味があるんだ?
2進数を使いたいっていう話なのに、それだと実質上16進数だろ

430 名前:名称未設定 mailto:sage [2008/11/27(木) 23:57:32 ID:M0fGLrHO0]
データタイプにbitがある言語使うとか。

まあ、普通は10進なり16進なりで処理するべ



431 名前:名称未設定 mailto:sage [2008/11/28(金) 00:11:57 ID:ng41BnSv0]
基数変換はプログラミングの初歩だぞ。自分で作れ。

432 名前:名称未設定 mailto:sage [2008/11/28(金) 00:16:55 ID:/Q9QB/Oa0]
gcc拡張で無かったっけ?

433 名前:名称未設定 mailto:sage [2008/11/28(金) 00:35:02 ID:vpfLJ8rB0]
Cの仕様には含まれてないんですよね。
私は「計算機」のプログラマモードで16進と変換したりしてます。

434 名前:名称未設定 mailto:sage [2008/11/28(金) 01:07:35 ID:G1SWboG00]
>>414
NSAppleScriptは最低機能のラッパだからできない。
OSAを直接使えばパラメータ与えてハンドラ呼び出したりとかできる。
探すべきキーワードはOSADoEvent kASSubroutineEventあたり。
さらに言えば、パラメータ必要になる様なことやるなら、Scripting Bridge
使うかAppleEvent使う方が良い。AppleScript介すると遅いし不安定なだけ。

435 名前:名称未設定 mailto:sage [2008/11/28(金) 15:32:11 ID:xfBeI8Px0]
 if([self なんたら]){
  if([self こうたら]){
   if([self どうたら]){
    if([self ふんたら]){
     if([self ちんたら]){
      // OK牧場
     }
    }
   }
  }
 }

こういう書き方って一般的なんですかね?

436 名前:名称未設定 mailto:sage [2008/11/28(金) 15:50:33 ID:dEcFhsPw0]
好み。

おれは深いインデント嫌いなので、
if(![self なんたら]){
return booooo;
// goto boooo;
// @throw boooo;
}
if(![self こうたら]){
return booooo;
}
if(![self どうたら]){
return booooo;
}
if(![self ふんたら]){
return booooo;
}
if(![self ちんたら]){
return booooo;
}
// OK牧場

か、
if([self なんたら]
&& [self こうたら]
&& [self どうたら]
&& [self ふんたら]
&& [self ちんたら]){
// OK牧場
}
だね。


437 名前:名称未設定 mailto:sage [2008/11/28(金) 19:59:09 ID:dDOC0C8d0]
>>436
>if([self なんたら]
>&& [self こうたら]
>&& [self どうたら]
>&& [self ふんたら]
>&& [self ちんたら]){
>// OK牧場
>}

これに一票。Cの&&は前方から順番評価なので、これでOK。

438 名前:名称未設定 mailto:sage [2008/11/28(金) 21:31:38 ID:3W0bMjsI0]
>437にもう一票だが、それ以前に5重の&&をもっと簡略化できないかに頭を捻るな、自分なら。

(どうしても回避しきれない場合とか、無駄に凝るより素直にまとめて書いたほうが良い場合が
あるのはもちろん承知だが、それでも)。


439 名前:名称未設定 [2008/11/28(金) 21:39:40 ID:72PQStUNP]
順番評価ってことは、一度否定が出たら以降は無視されるんだよね?

440 名前:名称未設定 mailto:sage [2008/11/28(金) 21:47:32 ID:Bb35kMPW0]
仕事で3000行のforループとか300行オーバーのif文とか
悶絶するコードの改修を体験しことがある。



441 名前:名称未設定 mailto:sage [2008/11/28(金) 23:09:54 ID:OvBIZwt90]
>>438
switch文が数値以外の値も評価できるようになればいいのかもしれんね。
...別に簡略化にできてないか

442 名前:名称未設定 mailto:sage [2008/11/28(金) 23:28:41 ID:GUz35KBi0]
ちょっと違うかもだが、
>>436の前の方の用な感じで、
全体を@try{}で囲み、
否定が来たら、returnするのではなく、理由付きの例外を発生させる。
んで、@catch{}で、何故否定されたのか見れるようにする。
こうしとくと、後々検証に便利。



443 名前:名称未設定 mailto:sage [2008/11/28(金) 23:49:35 ID:/Q9QB/Oa0]
俺は条件に合わない時は
早々に退場願いたいので

if(!([self なんたら]
&& [self こうたら]
&& [self どうたら]
&& [self ふんたら]
&& [self ちんたら])){
return booooo;
}
// OK牧場

>>442
例外使う意味が分からん。
NSLog()で十分な気がするんだが。

444 名前:名称未設定 mailto:sage [2008/11/29(土) 00:01:57 ID:jESPa+9z0]
>>442
そういうことをしたいなら、NSAssertを使った方が、ソースが綺麗になると思う。

445 名前:名称未設定 mailto:sage [2008/11/29(土) 04:55:28 ID:5SNi5rkK0]
悶絶するようなコード笑ったw
昔書いてたから余計にw


446 名前:名称未設定 mailto:sage [2008/11/29(土) 06:19:50 ID:nZKJ5UOy0]
あれ、>>435は、実際にはそれぞれの if の中には多少の処理があるんじゃないの?
それともそれは [self どうたら] とかの中に入ってるの?

>>436
return したくないときもあるわね。

>>442
ifの条件が別に例外じゃない場合はよくないよね。まあ「何が例外か」問題があるわけだが。

>>444
>>442 に引きずられているのかもしれないが、
assertは本来事前条件の検証をするためだけのもので、プログラムの条件分岐に使うものでは
ないと思う。

447 名前:名称未設定 mailto:sage [2008/11/29(土) 08:38:53 ID:TUbod1RH0]
>>443
ちょっと待ってw
それ途中でぬけます?
処理時間が微妙に増える恐怖が襲ってきました
理屈じゃないですw

448 名前:名称未設定 mailto:sage [2008/11/29(土) 08:53:47 ID:+QW0vt7S0]
条件で除外して行く様な処理はdo while(0)で書くね。
単純なif文では間に処理が挟まると書けなくなる。
スコープ明示して可読性上げる目的でも有効な手法
do {
 if (除外条件1) break;
   :
 if (除外条件2) break;
   :
 if (除外条件3) break;
 // 全条件を満たした
}while(0);

449 名前:名称未設定 [2008/11/29(土) 21:26:44 ID:YVMtZIRG0]
>>448

なるへそ!



450 名前:名称未設定 mailto:sage [2008/11/30(日) 00:13:49 ID:hhtkbghE0]
>>448
do while(0) は目から鱗。
今まで goto で頑張ってたのが必要が無くなった。
これで gotoを全廃できそうだ……



451 名前:名称未設定 mailto:sage [2008/11/30(日) 00:53:06 ID:sGbGiZTZ0]
>>448はCなんかのバッチ処理のmain関数でよく使う手ですね。
途中の処理で落ちたらbreakで抜けて異常終了とか。


452 名前:名称未設定 [2008/11/30(日) 04:17:53 ID:hSGWx1Tc0]
XCodeでentityを追加する時に押すボタンのように、
スライダーの左にボタンを起きたいのですが、
どうやればいいのでしょうか?

453 名前:名称未設定 mailto:sage [2008/11/30(日) 11:32:42 ID:yoqGZQDC0]
ごめん。なんで while( 1 ) や for ( ; ; ) でなく do while(0); なの?

do while() 句は、長文になったとき抜け出す while 条件の見通し(今回は while(0) だけど)が悪くなってしまうから、ループでの使用順位として低い位置にあるとおもう。普通に while(1) {}; でいいと思うのだけど。

454 名前:名称未設定 mailto:sage [2008/11/30(日) 11:53:00 ID:Sn0/sJgv0]
while(1) や for(;;) は無限ループだけど、
do{ ...} while(0); は一回だけ実行。
{ ... } とほとんどかわらないけど、break で脱出出来るということを使っている。

455 名前:名称未設定 [2008/11/30(日) 11:58:07 ID:bVIoA/Vw0]
>>454
>do{ ...} while(0);

複数行のマクロでよくみるけどこんな使い方もあるんだな

456 名前:名称未設定 mailto:sage [2008/11/30(日) 14:11:33 ID:R4fMeWPr0]
>>454
なるほど、それは便利かも。今度使ってみよう。
しかしほとんどCocoaと関係ないww

457 名前:名称未設定 mailto:sage [2008/11/30(日) 18:53:58 ID:is5S+TiE0]
Cocoaからアプリケーションの「パッケージ内容を表示」するには?
NSWorkspaceだとアプリケーション自体が表示されて
パッケージ内を開いてくれません。


458 名前:名称未設定 mailto:sage [2008/11/30(日) 20:15:19 ID:8UXDFhzQ0]
多分用意されてないと思う

ちなみにパッケージ内を見せる別の方法として NSSavePanel で setTreatsFilePackagesAsDirectories:YES するってのはある

459 名前:ネタですよ mailto:sage [2008/11/30(日) 20:28:41 ID:NRo7NNXS0]
質問です。
cocoaの隠しAPI、NSBoomって何に使うのですか?


460 名前:名称未設定 mailto:sage [2008/11/30(日) 20:38:11 ID:xGKlfZKq0]
>>459
BoomというSteveの声にあわせてExposeが動く。



461 名前:名称未設定 mailto:sage [2008/11/30(日) 20:50:01 ID:v52HvDmO0]
>>457
NSString *path = @"/Applications/Safari.app/Contents/Info.plist";
BOOL flag = [[NSWorkspace sharedWorkspace] selectFile:path
inFileViewerRootedAtPath:nil];

無理矢理だけど、これで/Safari.app/Contents/が開く。

462 名前:457 mailto:sage [2008/12/01(月) 00:15:19 ID:bRkyOVlu0]
>>458
ないですか、残念。
>>461
パッケージ内にあるフォルダなら普通に開けるんですよね
NSString *path = @"/Applications/Safari.app/Contents";
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:path];


463 名前:名称未設定 mailto:sage [2008/12/01(月) 11:07:48 ID:Y2za4y4W0]
>>450
gotoの替わりに使ったりしないで、使いたい時はgotoでいいんじゃない?
はっきりラベルで行き先が明示されている方が可読性も良いと思うし。
breakで抜けるループが1重ならいいけど多重になってたりするとわけ解らなく
なりやすいよ。


464 名前:名称未設定 mailto:sage [2008/12/01(月) 11:21:31 ID:/OHo/hwy0]
NSTableViewで40行程度の表示をしようとしています。
Tableの大きさは8行程度でその部分は表示できているのですが、
縦スクロールバーが機能してくれません。
どのように設定すれば、スクロールバーとTableの中身が同期するのでしょうか?

465 名前:名称未設定 mailto:sage [2008/12/01(月) 11:40:47 ID:FFcDafTQ0]
>>464
インターフェースビルダーで作ったら何もしなくても
自動でスクロールがきくはずだけど。
配置したところでインスペクタを開いて、
何回かクリックしていたら順に
スクロールビュー、テーブルビュー、テーブルカラムの順に設定出来るので
そのへん確認してください。

466 名前:名称未設定 mailto:sage [2008/12/01(月) 13:31:33 ID:tfI3OpAZ0]
>>464
スクロールをOFFにしてない?
TableViewを作り直した方が早いかもしれない。

467 名前:464 mailto:sage [2008/12/01(月) 15:15:48 ID:/OHo/hwy0]
TableViewを作り直しても、うまく行きません。。。
どこかの僕が勝手にいじってしまう可能性もあるので、今回設定したのは
Scroll View AttributeのShow Horizontal Scrollerのチェックを外した。
Table Headerに文字を入れた。
Table Column attributeで各Columnのidentifierを設定した。
だけなのですが、まず縦のスクロールバー自体が表示されません。
(Automatically Hide Scrollerはチェックしていないのに、Hide状態になっています)。
一体何がどうなっているのでしょう?

468 名前:名称未設定 mailto:sage [2008/12/01(月) 15:56:05 ID:tfI3OpAZ0]
>>467
それは面妖な。
IBで実行した時点でスクロールバーが消えてますか?

469 名前:464 mailto:sage [2008/12/01(月) 16:44:53 ID:/OHo/hwy0]
>>468さん
IBの時点でバーの矢印と青い丸は表示されていません。
そこで縦スクロールバーをクリックして、
Scroller attributeをEnableにすると、矢印は出ますがやはり青丸は出ません。

その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
さらにアプリ起動中にスクロールバーをクリックすると青丸が出現します。
しかしその青丸をスライドさせても、TableViewの中身は変わりません。
現状こんな具合でさっぱりです orz

470 名前:名称未設定 mailto:sage [2008/12/01(月) 17:18:39 ID:9aAmboBn0]
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
の実装はどうよ??

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 8;
}
とかって事はないだお??



471 名前:名称未設定 mailto:sage [2008/12/01(月) 17:23:10 ID:9aAmboBn0]
あるいはデータソースを呼び出すメソッド名を間違えてるとか。
デリゲートとか、非形式プロトコルだとそーゆー場合はエラーでないよ。

472 名前:464 mailto:sage [2008/12/01(月) 17:52:34 ID:/OHo/hwy0]
すいません、訂正です。
>その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
この行は、「矢印有り青丸無し」の間違いでした。

>>470さん
TableViewをいっぱいに広げると下の方まで表示されているので、
その二つのメソッドに問題は無いと思います。
データソースを呼び出すメソッドとは何でしょうか?
僕はIBでTableViewからdataSourceに青線を繋ぐ方法で呼び出してるつもりです。

473 名前:名称未設定 mailto:sage [2008/12/01(月) 18:38:40 ID:tfI3OpAZ0]
>>470
データソースが空でもスクロールバーは表示されると思うけどね。
こんな症状は初めて聞いたかも知れない。

474 名前:名称未設定 mailto:sage [2008/12/01(月) 21:43:33 ID:4xQMOEp30]
これからCocoaアプリに初挑戦する者です。
アプリケーションを設計前ってところなんですが・・・
MVCモデルに照らすとコントローラの数と言うのはひとつのアプリにひとつに
するべきなんでしょうか?
それとも、スレッド数分とする方が良いのか、いくつあろうと構わないもの
なんでしょうか?



475 名前:名称未設定 mailto:sage [2008/12/01(月) 22:05:19 ID:ocl8xgfY0]
>>474
コントローラの数は、1アプリにつき1つにする必要もないし、スレッドに関係する訳でもありません。
コントローラの数は、アプリケーションの規模によります。
小規模なアプリなら、1つで足りるかもしれません。大規模なアプリなら、複数必要になるでしょう。

476 名前:名称未設定 mailto:sage [2008/12/01(月) 22:05:40 ID:Y+dyBgaw0]
端的に言うと山盛り一杯?

一口にコントローラって言っても色々有ったりします。
これどうぞ。
developer.apple.com/jp/documentation/Cocoa/Conceptual/AppArchitecture/

developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/
「Cocoaのデザインパターン」の「Model-View-Controllerデザインパターン」

477 名前:名称未設定 mailto:sage [2008/12/01(月) 23:40:24 ID:b7ZJ0Q1q0]
お、デベロッパページの日本語化がだいぶ進んできた?

て、フレーム内の「リファレンス」が全部リンク切れw

478 名前:名称未設定 mailto:sage [2008/12/02(火) 12:44:09 ID:DiP/2Yku0]
>>472
XCode のバージョンと OS のバージョンは?
とりあえず XCode の最新版を再インストールしてみるのはどうでしょう。
それはあきらかに IB の挙動がおかしいとおもう。

最低限症状が出るプロジェクトをかためてアップローダにおいてください。
こっちでチェックできるので。

479 名前:名称未設定 mailto:sage [2008/12/02(火) 13:23:02 ID:qRW1sZo10]
nibファイルが壊れてるとかね
挙動がおかしいときは別フォーマットで保存で治ることもある

480 名前:名称未設定 mailto:sage [2008/12/02(火) 17:58:15 ID:N8ybeWLx0]
ファイルやフォルダのアクセス権の変更ってできますでしょうか…
AppleScriptからUNIXコマンド実行しないと無理?



481 名前:名称未設定 mailto:sage [2008/12/02(火) 19:09:33 ID:N8ybeWLx0]
あ、てかNSTaskで実行すればいいのかw

482 名前:名称未設定 mailto:sage [2008/12/02(火) 19:32:22 ID:r/ZHQGK80]
NSFileManagerでなんかなかったっけ?

483 名前:472 mailto:sage [2008/12/02(火) 20:50:22 ID:if+xUuvJ0]
>>478さん
XCodeは3.1.1 OSは10.5.5、どちらの最新のはずです。
関係する所だけを集めたちっちゃいプロジェクトを作りました。
gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=743
DLKeyは table です。
よろしくお願いします。

484 名前:名称未設定 mailto:sage [2008/12/02(火) 22:39:55 ID:qRW1sZo10]
>>483
listManagerが無いのにdataSource繋げるからいかんのか

IBのdataSourceリンクを外して、
listManager = [[ListManager alloc] init];
のあとに
setDataSource
すればおk

485 名前:名称未設定 [2008/12/02(火) 22:44:57 ID:qFEE5ZYl0]
こんばんは。
>>452
ですがクラス名など分かりましたら教えてほしいです

486 名前:名称未設定 mailto:sage [2008/12/02(火) 22:51:42 ID:BP+tmKAT0]
>>483
>>484のでもいいし、dataSourceアウトレット切らなくて済む方法としては
listManager = [[ListManager alloc] init]; のあとに
[tableView reloadData];
でもいいし、
AppControllerのinitのときに
-(id)init {
self = [super init];
listManager = [[ListManager alloc] init];
return self;
}
でもいいけどとにかくawakeFromNibの呼ばれるタイミングと、TableViewのDataSourceメソッドが呼ばれるタイミングの問題じゃないかな。

487 名前:名称未設定 mailto:sage [2008/12/03(水) 13:15:23 ID:EynOQwwp0]
>>486
ていうか IB で listManager を実体化して
(Objectのアイコンをライブラリからドラッグ&ドロップして、
インスペクタでクラスを ListManager に変更)
しまえば、awakeFromNib とのタイミングとの問題もなくなると思うし、
コードも二三行短くなるかな...

488 名前:472 mailto:sage [2008/12/03(水) 17:26:51 ID:O7b6E22H0]
おお、あっという間に様々な解答が!
タイミングの問題だったのですね。自分だけで考えてたらわからなかったと思います。
皆さんありがとうございました。
今は484さんのコードにして、ちゃんと動いております。

489 名前:名称未設定 mailto:sage [2008/12/03(水) 19:12:38 ID:G3lcVDRU0]
>>488
listManagerは、そのアプリケーションの中で、モデルという位置づけにあるように見えるので、>>486の言う通りinitの中で生成するのが正攻法だと思います。
awakeFromNibは、基本的にnib内のオブジェクトを初期化するコードを書きます。
nibファイル内には、通常モデルは配置しません。

490 名前:名称未設定 mailto:sage [2008/12/03(水) 23:15:10 ID:EynOQwwp0]
データソースはコントローラだとおもうんだけど。
だから nib 内で作っても問題ない... と言ってみる



491 名前:名称未設定 mailto:sage [2008/12/04(木) 00:20:15 ID:OWKazUoG0]
>>490
ソースを見ると分かる通り、AppControllerがNSTableViewのデータソースです。
もちろんこのプロジェクトは単なるサンプルでしょうから、本来の構造がどうあるべきかは分かりませんが、
どっちかというとlistManagerはモデルだと思われます。
コードを短くしたいならこの場合、AppControllerとlistManagerを合体させてしまえばいいんですが、それが目的ではないでしょう。

492 名前:名称未設定 [2008/12/04(木) 20:28:32 ID:HGZjTiEG0]
-(void)mouseDown:(NSEvent*)evを実装したいんですが、
ただXコードで書いただけではなにも反応がありませんでした。・・・当たり前ですけど。

で該当するViewのデリゲートにコントローラを登録してみたのですが、
これもだめでした。

どうすればいいのでしょうか?

493 名前:名称未設定 mailto:sage [2008/12/04(木) 20:51:12 ID:AvJljesh0]
>>492
NSViewから派生させたクラスで、mouseDownメソッドをオーバライドしたってこと?

なら、IBで、ウインドウにCustomView貼って、クラス名を変更すれば動くはず。

カスタムコントロールについては、
ttp://www.stripe-net.jp/cocoa/documents/chapter2/chapter2-1.html
が分かりやすかったです。

494 名前:名称未設定 mailto:sage [2008/12/06(土) 17:10:09 ID:9Wq0jq3Y0]
Cocoa applicationのテンプレートで作成されたMainMenu.xibの
File's owrnerとapplicationの違いは何ですか?
どちらのdelegateにクラスを接続してもNSApplicationのデリゲートとして動く。
優先度がapplicationの方が高いだけで同じ?

495 名前:名称未設定 mailto:sage [2008/12/06(土) 17:54:57 ID:k7xoKMxV0]
意味は違うけど、ものは同じ。

両方に違うオブジェクトをdelegateにすると多分、
File's Ownerが最後にsetDelegate:されると思うから、
File's OwnerのDelegateが最終的にNSAppのdelegateになるんじゃないかな?

あれ?
File's Ownerが一番最後と決まってるのはawakeFromNibだけだったっけ?

496 名前:494 mailto:sage [2008/12/06(土) 19:56:31 ID:kd/tvFHS0]
delegateの優先度はApplication > File's Owner
awakeFromNibの呼び出され順はIBでの順番みたい
とりあえず気にしないことにします

ApplicationのdelegateにClassAをセット
File's OwnerのdelegateにClassBをセット
ClassAのawakeFromNibが呼ばれ
ClassBのawakeFromNibが呼ばれ
ClassAがdelegateになった(AB共にapplicationShouldTerminateAfterLastWindowClosedを実装して確認)

ApplicationのdelegateにClassBをセット
File's OwnerのdelegateにClassAをセット
ClassAのawakeFromNibが呼ばれ
ClassBのawakeFromNibが呼ばれ
ClassBがdelegateになった(AB共にapplicationShouldTerminateAfterLastWindowClosedを実装して確認)

IBのObjectの順序をClassA,ClassB入れ替えたらawakeFromNibの呼び出され順序が入れ替わった

497 名前:名称未設定 [2008/12/07(日) 14:10:48 ID:q2ACHXTU0]
>>494
MainMenu.xibに限っていうならば、ApplicationとFile's Ownerは、同一のオブジェクトです。


498 名前:名称未設定 [2008/12/07(日) 16:03:01 ID:ZU8ZGfPL0]
>>493
返信非常に遅くなり申し訳ございません。
何とかNSViewに貼り付けることで右クリック操作によるコンテキストメニューの
表示に成功させることが出来ました。
ここで気になるのはこれは、レスポンダーチェーンが関わっているのでしょうか?

またそこで今度はNSTableViewで選択行を右クリック→コンテキストメニュー→削除
を実現させようとトライしたのですが、

この際NSTableViewコントローラにmyTableViewを貼り付けました。
右クリックでコンテキストメニューは表示させることができるのですが、
行が選択できません。

データソースは別のモデルmyTableViewDataSourceで用意しています。

myTableViewを貼り付けなければ行が選択できるのですが・・・・
それだと右クリックしたときコンテキストビューを表示させるのに
どうしたらいいのか分からないので・・・・

499 名前:名称未設定 mailto:sage [2008/12/07(日) 16:22:26 ID:hZLd1O/h0]
>>498
とりあえず落ち着いて、最終的な目的から書いてくれ。正直何がしたいのかさっぱり分からん。
NSTableView上で右クリックしたらコンテクストメニューを出すようにするには、コードを書く必要は無い。
IBで別にNSMenuを作り、NSTableViewのmenuアウトレットをそれに繋げるだけでいい。

NSTableView上で右クリックしたら、その行を選択した上でコンテクストメニューを出したい場合は、
NSTableViewサブクラスで右クリックしたときの処理を追加する。
- (void)rightMouseDown:(NSEvent *)theEvent {
NSPoint locationInWindow = [theEvent locationInWindow];
NSPoint locationInSelf = [self convertPoint:locationInWindow fromView:nil];
int row = [self rowAtPoint:locationInSelf];
if (row < 0) return;
[self selectRow:row byExtendingSelection:YES];
[super rightMouseDown:theEvent];
}
こんな感じで、右クリックした行を選択範囲に追加する。

500 名前:名称未設定 [2008/12/07(日) 16:29:52 ID:ZU8ZGfPL0]
>>499
最終的な目的は選択した行を削除することにあります。

そこでコンテキストメニューの項目で「削除」をクリックすれば
選択されている行を削除しようとがんばっています。

IBでMenuをコネクトすればいいとのことですが、
menuとコントローラを接続できずに断念しました。




501 名前:名称未設定 [2008/12/07(日) 16:35:55 ID:ZU8ZGfPL0]
>>499
右クリックしたときに
選択できるようになりました。
これを左クリックしたときに選択できるように自分でやってみます。

502 名前:名称未設定 [2008/12/07(日) 16:39:57 ID:ZU8ZGfPL0]
>>499
できました。
ありがとうございます。


503 名前:ネタですよ mailto:sage [2008/12/07(日) 20:40:21 ID:GT/IU0+g0]
質問です。

XMLの解析で
<entry>
 <title>TITLE</title>
 <link rel="REL" type="TYPE" href="HREF"/>
</entry>

の場合、linkのrel,type,hrefの値を取るにはどうすればよろしいでしょうか?
titleの取り方はわかったのですが。


504 名前:名称未設定 mailto:sage [2008/12/07(日) 21:31:39 ID:dk74pp3E0]
うは、前にネタ書いた時の名前が残ってるw
すいません、ネタではなく真面目な質問です。
お恥ずかしい限りで・・・

505 名前:名称未設定 mailto:sage [2008/12/07(日) 21:35:24 ID:K/k+Z42t0]
>>499
selectRow:byExtendingSelection:はもうダメだべ。

selectRowIndexes:byExtendingSelectionに換えるべ。


506 名前:名称未設定 mailto:sage [2008/12/07(日) 21:44:31 ID:vMU1Eyyg0]
どこがネタなんだろうと悩んでしまったじゃないか...w

507 名前:名称未設定 mailto:sage [2008/12/07(日) 22:37:34 ID:uBxirYjF0]
>>503
>>459の人かw

508 名前:名称未設定 mailto:sage [2008/12/07(日) 23:08:20 ID:1orqG+Pz0]
>>503
titleはどうやって取り出しましたか?

509 名前:名称未設定 mailto:sage [2008/12/07(日) 23:13:41 ID:curmvucM0]
>>503
せめて使ってるパーザ位書きなよ。

んで、NSXMLParser使ってるとして
parser:didStartElement:namespaceURI:qualifiedName:attributes:メソッドを
デリゲードで実装すれば、属性が得られる。

- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict {

if ([elementName isEqualToString:@"link"]) {
NSLog(@"rel = %@, type = %@, href = %@",
[attributeDict valueForKey:@"rel"],
[attributeDict valueForKey:@"type"],
[attributeDict valueForKey:@"href"]);
}

}

510 名前:名称未設定 mailto:sage [2008/12/08(月) 03:28:42 ID:U49CM7Oh0]
cocoa事始めで
ボタンクリックで、Hellow Worldウィンドウを出すことすらできない。
どこかで似たようなチュートリアルありませんか?



511 名前:名称未設定 mailto:sage [2008/12/08(月) 03:48:04 ID:g5ShzTpC0]
Cocoa事始めってどこ?

512 名前:名称未設定 mailto:sage [2008/12/08(月) 11:18:37 ID:WhRI485B0]
事始めて→今年初めて

じゃない?


513 名前:名称未設定 [2008/12/08(月) 13:01:28 ID:KSfoz0Yz0]
・・・

514 名前:名称未設定 mailto:sage [2008/12/08(月) 13:13:13 ID:6I8yRHaT0]
たのCocoLeopardじゃないか?
あの本最初ボタンクリックでHello World出すところから始まるし。

永遠にHellow Worldウィンドウは出ないと思うけどな。

515 名前:名称未設定 [2008/12/08(月) 14:45:57 ID:KSfoz0Yz0]
揚げ足を取りたくてたまらない私

516 名前:名称未設定 mailto:sage [2008/12/08(月) 16:27:55 ID:2m2l4A690]
意味の無い書き込みは見てて不快
発言するなら書く、そうでないならROMっててください
勘違いなレスを見かけた時もそうです

517 名前:名称未設定 [2008/12/08(月) 16:31:06 ID:fWhZhvgy0]
そうですね。
>>510さん、ボタンを押すと新たに画面を表示させたいのでしょうか?

518 名前:名称未設定 [2008/12/08(月) 16:35:36 ID:fWhZhvgy0]
返事を待つのもだるいので、そうだとして仮定して質問に答えると
まずIBのほうで
NSWindowのVisibleのチェックをはずしてください。

そこで新たにモデルのほうで
IBOutlet NSWindow* newWindow; //こいつはIBで該当Windowと結ぶ

- (IBAction)openWindow:(id)sender
{
[newWindow makeKeyAndOrderFront:self];
}

これで一発ででるはず。


519 名前:名称未設定 [2008/12/08(月) 16:39:17 ID:KSfoz0Yz0]
>>516
オマエモナー

520 名前:名称未設定 mailto:sage [2008/12/08(月) 16:46:07 ID:0OjgUTpN0]
>>519
王道なんだが、ちょっとは自重しろw



521 名前:名称未設定 mailto:sage [2008/12/08(月) 17:07:19 ID:2m2l4A690]
>>519
私のレスはあなたに対する明確な意志表示があります
あなたとは違うんです

522 名前:名称未設定 mailto:sage [2008/12/08(月) 18:34:54 ID:WTYb+ld20]
キモチワルイ

523 名前:名称未設定 mailto:sage [2008/12/08(月) 21:05:02 ID:IzfmZjnO0]
>>508 >>509
ありがとうございます。自己解決できました。
NSXMLParserは使わずに NSXMLNodeのchildrenから取ってくる方法で自作しています。
>>503の場合、簡単に書くとこんな感じです。

NSXMLNode *entryNode = 〜entryノードを取得

// getChildNodeは引数ノードのchildrenからnameが一致するNSXMLNodeを取得する自作
// NSXMLNodeからNSXMLElementにキャストして取得
NSXMLElement *element = (NSXMLElement*)[self getChildNode:entryNode name:@"link"]; attrHref = [[elemLink attributeForName:@"href"] stringValue];
NSString *rel = [[element attributeForName:@"rel"] stringValue];
NSString *type = [[element attributeForName:@"type"] stringValue];
NSString *href = [[element attributeForName:@"href"] stringValue];
NSLog(@"rel=%@, type=%@, href=%@", rel, type, href);

NSXMLNodeからNSXMLElementにキャストって大丈夫なんですかね?
エラーもワーニングも出なかったもので。

524 名前:名称未設定 mailto:sage [2008/12/08(月) 21:06:59 ID:IzfmZjnO0]
あ、重ねてすみません。
attrHref = [[elemLink attributeForName:@"href"] stringValue];
はゴミです。

525 名前:名称未設定 mailto:sage [2008/12/08(月) 22:36:04 ID:kFKjusSQP]
初歩的なことかもしれないのですが
日本語が含まれるNSArrayをNSLogで表示させたときに
ユニコード値が出てくるのはどうにもならないのですか?


526 名前:名称未設定 mailto:sage [2008/12/08(月) 23:11:41 ID:/HG0hJ4t0]
>>522
お前のレスが一番キモチワルイよw

>>525
過去ログにあるよ

527 名前:名称未設定 mailto:sage [2008/12/09(火) 12:40:37 ID:7rIjPTyl0]
Safariのダウンロード画面に出てくるインジケータみたいに
後ろに流れて行くようなインジケータバーを表示させたいのですが、
NSIndicatorではその「後ろに流れて行く」表示が設定できませんでした。
なにか他のクラスがあったりするのですか?
それともNSIndicatorの設定の問題でしょうか?

528 名前:名称未設定 mailto:sage [2008/12/09(火) 12:44:56 ID:c+xotcrO0]
>>527
後ろに流れていくというのがアニメーションのことなら、startAnimation:とstopAnimation:を使う。
Binding使うと自動でやってくれたと思う。

529 名前:527 mailto:sage [2008/12/09(火) 13:26:01 ID:7rIjPTyl0]
すいません、NSIndicatorじゃなくてNSProgressIndicatorでした。
やりたいのはdeterminate progress barを増やしつつ、後ろに流れて行く表示なんです。
startAnimationはIndeterminateだけですよね?
Safariのダウンロード表示なんかはそうなっているので、出来なくはないと思っているのですが
どうなのでしょう?

530 名前:名称未設定 mailto:sage [2008/12/09(火) 13:31:04 ID:c+xotcrO0]
>>529
Determinateなら値が設定されていれば勝手にアニメーションしてると思うけど。
あれ、これ10.5だけなのかな?



531 名前:名称未設定 mailto:sage [2008/12/09(火) 13:48:59 ID:nhlJuWQy0]
こだわる必要性をさほど感じない部分ではあるな

532 名前:名称未設定 [2008/12/09(火) 16:04:31 ID:PzccxqHg0]
NSTimerの
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
メソッドを別のスレッドを建てて、そのスレッドで起動させようとしたら撃沈されました。

上記のメソッドは呼び出されると実行ループに登録してすぐに終了しちゃうんですね。
そのおかげで子スレッドも終了しちゃいます。

まぁわざわざ別スレッド上で起動させる必要もないんですが、
解決策ってありますか?


533 名前:名称未設定 mailto:sage [2008/12/09(火) 16:12:27 ID:c+xotcrO0]
>>532
timerWith...のほうで作ってNSRunLoopのmainRunLoopにaddTimer…したら駄目だってリファレンスに書いてあった。

534 名前:名称未設定 mailto:sage [2008/12/09(火) 16:16:37 ID:c+xotcrO0]
>>532
ん、ひょっとしてスレッド内でTimerを使うってことかな。なら自分でRunLoop作ればいいよ。

535 名前:名称未設定 mailto:sage [2008/12/09(火) 16:21:53 ID:vViia8LOP]
>>526
過去ログ漁って
NSLog(@"%@", [NSString stringWithCString:[[array description] UTF8String] encoding:NSNonLossyASCIIStringEncoding]);
でいけました。

536 名前:名称未設定 [2008/12/09(火) 16:23:19 ID:PzccxqHg0]
>>533-534
すばやい回答ありがとうございます。
>>スレッド内でTimerを使うってことかな

子スレッド上でTimerを使おうと画策しました。
ただこいつは時期が来るまで眠っていてくれるから
そんな必要性はほとんどないんですけどね。

自分でRunLoopを作ってそこに登録せよってことでしょうか?

537 名前:名称未設定 mailto:sage [2008/12/09(火) 16:31:44 ID:c+xotcrO0]
>>536
うん。そもそもscheduledTimerなんちゃらって、Timer作ってカレントのRunLoopに登録するものだから。
でもTimer使うためだけにRunLoop回すくらいなら、NSThreadでsleepUntilDateすればいいんじゃないかな。

538 名前:名称未設定 [2008/12/09(火) 16:37:27 ID:PzccxqHg0]
>>537
なるほど休眠させるという手もありますね。
実はその辺悩ましいところなんです。
ただプログラムは同じ動作が得られるなら簡単な方でという原則に従うなら
まちがいなく休眠させておいたほうがいいですよね。

わざわざ実行ループをみずから作成するよりは・・・・・・


539 名前:名称未設定 mailto:sage [2008/12/09(火) 16:48:19 ID:nhlJuWQy0]
むしろスレッド内でNSTimerを使う意味は何も無い気がする。

540 名前:名称未設定 [2008/12/09(火) 16:54:39 ID:PzccxqHg0]
自分が作成しているのはシュミレーションモデルなんですよね。

だから
その部分はメインと切り離して、動作させないとモデルに忠実にならないっていうジレンマがあるんです。

ただプログラム内部でそんなことをする必要性があるのかっていうと
僕には分からないです。
ありますかね?一応大学の卒論なんですが・・・・教授に相談するべきなんでしょうか?



541 名前:名称未設定 mailto:sage [2008/12/09(火) 17:01:26 ID:7aJT8/WT0]
卒論でCocoaで提出していいのか...羨ましいな。

542 名前:名称未設定 [2008/12/09(火) 17:02:00 ID:PzccxqHg0]
そんなわけがない・・・・・。

543 名前:名称未設定 mailto:sage [2008/12/09(火) 17:11:39 ID:+/JU880n0]
setUsesThreadedAnimation:
じゃダメなの?

544 名前:名称未設定 mailto:sage [2008/12/09(火) 23:23:18 ID:JuNa1S6u0]
Cocoaで
「マウスカーソルを任意の座標に持って行き」
「そこで右クリックする」
ということをソフトウェアからコントロールすることは可能でしょうか?
NSEvent あたりのリファレンスを調べましたが,それらしいメソッドが見つかりませんでした。

Leopard の Automator で「操作の記録」をして再生すると,このようなマウスイベントの再現ができているので,
方法がないわけではないと思うのですが…。Automator はどうやって実現しているのでしょうか…。



545 名前:名称未設定 mailto:sage [2008/12/09(火) 23:27:09 ID:yHQ0Sslf0]
>>540
>>541,542を見て「え、だめなんですか」とか言う前に
学校で使っているパソコンのOSがMacOS Xであることを確認しといて。
それ以外だったらだめ。

546 名前:名称未設定 mailto:sage [2008/12/09(火) 23:59:55 ID:ESJXlCz60]
それ以外でもだめなことないだろ。
プレゼンできればいいし、プログラムそのものを提出するんじゃなくてそれについての卒論でしょうよ。

547 名前:名称未設定 mailto:sage [2008/12/10(水) 00:33:46 ID:2N5XkSrD0]
>>544
プログラムで「自動的に」
マウスを任意の位置まで持って行き右クリックさせるプログラムを作ろうとしているのですか?

イベント処理はNSResponderで定義されているとか・・・そんなことは聞いてないんですよね。?


548 名前:名称未設定 mailto:sage [2008/12/10(水) 00:51:56 ID:xSuG9smw0]
まさか>>544>>492,498と同一人物じゃあるまいな。

549 名前:名称未設定 mailto:sage [2008/12/10(水) 01:00:06 ID:2N5XkSrD0]
>>492,498は>>547です・・・・・私です。

えーそれならって思って・・・

550 名前:548 mailto:sage [2008/12/10(水) 01:22:42 ID:6aI1OQjr0]
>>549
目的は>>500なんでしょ?
もはややり方が回りくどすぎて意味不明になってるよ。
世の中のCocoaアプリがコンテクストメニュー一つ出すのにそんな回りくどいコード書いてるわけないのは分かるでしょ。
だったら方法が間違ってることも分かるでしょ。
そこで方法を質問しないで、自分が考えたトンデモ解決法を実現しようとして、その過程で行き詰まって質問したところで
まともなアプリは出来ないよ。



551 名前:548 mailto:sage [2008/12/10(水) 01:27:21 ID:6aI1OQjr0]
んで>>500ね。
menuとコントローラを繋げない…とあるけどコントローラにはすでに削除の処理を実装したアクションメソッドがあるのね?
ならNSMenuItemからコントローラにアクションを繋げればいいよ。コントロールキー押しながらドラッグね。

552 名前:名称未設定 mailto:sage [2008/12/10(水) 01:29:26 ID:3bh9sFCU0]
>>544

void rightClicOn(CGPoint mouseLocationFromTopLeft)
{
CGWarpMouseCursorPosition(mouseLocationFromTopLeft);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, true);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, false);
}

こんなんで逝けるハズ・・・。

553 名前:名称未設定 mailto:sage [2008/12/10(水) 01:30:35 ID:3bh9sFCU0]
うはっ、関数名の綴り間違ってる。

554 名前:名称未設定 mailto:sage [2008/12/10(水) 01:34:01 ID:2N5XkSrD0]
>>550
勘違いされています。
544さんは私ではありません。

自分もイベント処理で苦しんだので、もしかて544さんも
同じように右クリックしたいのかなと思っただけです。





555 名前:名称未設定 mailto:sage [2008/12/10(水) 01:39:47 ID:2N5XkSrD0]
参考にと今見させていただいたんですが、

QuartzのAPIですか・・・・
どうやったらそんな所まで扱えるようになるんですか?
cocoaでアップアップです。

556 名前:名称未設定 mailto:sage [2008/12/10(水) 01:42:40 ID:u8v8vRLL0]
>>552
なんでCocoaは左下でCoreGrapchics?は左上なんだろ。統一してくれりゃいいのに。
変換関数とかってあるのかな?

557 名前:名称未設定 mailto:sage [2008/12/10(水) 03:00:28 ID:fRwjglTW0]
ビットマップ画像扱う場合必然的にCoreGraphics使う事になるよ

558 名前:544 mailto:sage [2008/12/10(水) 05:18:06 ID:0LtvEto10]
>>552
ありがとうございます!

ID:2N5XkSrD0 さんの質問内容と似ていたために,混乱させてしまった人がいたようですみません。
私がやりたかったのは,AppleScript からの右クリックなのですが,これで可能になりました。
AppleScript では,tell application "System Events" で,キーストロークや左クリックのイベントは送信できるのですが,
右クリックだけは手段が用意されておらず,control + 左クリック を送信しても再現できずに困っていたのです。

CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これで,右クリックからしか呼び出せないアプリの機能を使用する,アプリ操作自動化スクリプトが作れそうです。

559 名前:名称未設定 mailto:sage [2008/12/10(水) 05:42:45 ID:GLeH1aY40]
つうかそもそもコンテクストメニューからしか呼び出せないコマンドを持った
アプリなんてそんなにないんじゃ...

560 名前:名称未設定 mailto:sage [2008/12/10(水) 09:16:15 ID:4cshTNqV0]
>>540
とりあえず、趣味レーションじゃなくて、シミュレーション、な。



561 名前:名称未設定 mailto:sage [2008/12/10(水) 09:50:33 ID:lt7oGnOb0]
>>558
>CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
>それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。

これってなんか面白いプロセス間通信じゃない?
もしかしてマウスイベントってこうやって外のプロセスから勝手に発生できる?
ログインしているユーザと同じユーザIDである必要はあるのかな。

562 名前:名称未設定 mailto:sage [2008/12/10(水) 10:10:37 ID:0LtvEto10]
>>559
それが,あるのですよ…。
具体的には,Safari に SafariStand を組み込んだときにコンテクストメニューに現れる,「PDF形式で書き出し...」というコマンドです。
「PDF形式で書き出し...」は,メニューバーのメニュー項目には一切現れず,コンテクストメニューにしか現れません。

AppleScriptからPDF化を行うには,
www1.odn.ne.jp/~cge02410/backnumber/2008/05/09024005.html
のようなCUPS-PDFを使う方法もありますが,この方法だと,A4用紙サイズの場所でページ分割された,マルチページのPDFが生成されます。
それに対し,SafariStand の「PDF形式で書き出し...」コマンドで生成されるPDFは,ページ全体が1ページになった,縦長のPDFです。

印刷が目的でなく,iPhone画面上での閲覧が目的のPDFの場合,ページごとに切られるよりも,
HTMLのようにページの概念なしで縦長に繋がっていた方が便利なので,
この「PDF形式で書き出し...」をAppleScriptから使いたくて,「ソフトウェアから右クリックするには?」という疑問に至ったわけです。

それとも,自分で PDFKit を扱ってどうにかなるものでしょうか?

563 名前:名称未設定 mailto:sage [2008/12/10(水) 10:19:21 ID:tqbTqlML0]
>>559
iTunesにはコンテクストメニューからしか呼べないコマンドかなりあるぞ。

564 名前:名称未設定 mailto:sage [2008/12/10(水) 11:36:17 ID:3bh9sFCU0]
>>556
描画環境については原点左下で統一されてます。
>>552はデバイス上での座標です。ややこしいですな。

それよりも、CocoaとCoreGraphicsとで
微妙に挙動が違うとか、マジ勘弁。

565 名前:548 mailto:sage [2008/12/10(水) 14:27:13 ID:xSuG9smw0]
>>562
Coral使えばいいじゃん。
hmdt.jp/coral/index.html

566 名前:名称未設定 mailto:sage [2008/12/10(水) 21:34:47 ID:0FGfVHqN0]
荻原剛志さんの『詳解 Objective-C 2.0』を購入したのですが、
手元にある同じ荻原さんの『Objective-C Mac OS X プログラミング』は
処分してしまっても大丈夫ですか?

567 名前:名称未設定 mailto:sage [2008/12/10(水) 23:14:04 ID:fRwjglTW0]
好きにするがよろし

568 名前:名称未設定 mailto:sage [2008/12/10(水) 23:58:21 ID:zWsFgxMm0]
>>558
AppleScriptでdo shell scriptするならNSTask使えば良くね?
てかコマンドラインツール作らなくてもCGPostMouseEvent()って普通にカーボン?ならそのままコード書けば良くね?
と思った。
あんまちゃんと読んでないんで的外れだったらスマソ。

569 名前:名称未設定 mailto:sage [2008/12/11(木) 09:37:47 ID:SLO1lTjD0]
>>566
新しい奴では分散オブジェクトのとことか前のものから省略されてる部分が
あるけど、それでもいいなら捨てればよろし。

570 名前:名称未設定 mailto:sage [2008/12/11(木) 10:21:22 ID:LfDuzN4X0]
>>565
そんな便利なものがあったとは……!

>>568
いえ,そういうことではなくて,元々AppleScriptがメインで,AppleScriptで色んなアプリを自動操作しているスクリプト中において,
右クリックを自動化したい場合に,do shell script で CGPostMouseEvent() を呼び出すコマンドラインツールを呼び出す,という話です。




571 名前:名称未設定 mailto:sage [2008/12/11(木) 10:37:08 ID:ZEYSuhvK0]
>>570
AppleScriptがメインなわけね
>>544でCocoaでって書いてあるから勘違いした

572 名前:名称未設定 mailto:sage [2008/12/11(木) 11:54:56 ID:LfDuzN4X0]
>>571
勘違いさせてしまってすみません。
Cocoaで実現可能な機能であれば,
pc11.2ch.net/test/read.cgi/mac/1223026902/171
のように AppleScript から RubyCocoa 経由で呼び出せるので,そういう方法はないかと模索していたわけです。

今回の右クリックも,

require 'osx/cocoa'
OSX.require_framework '/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework'
pos=[10,40]
OSX::CGPostMouseEvent(pos, true, 2, false, true)
OSX::CGPostMouseEvent(pos, true, 2, false, false)

というRubyスクリプトをワンライナーで do shell script から走らせることによって可能ではありました。
しかし,このRubyスクリプトを走らせた後,最初に Finder 上でファイルをドラッグしたときに,
ドラッグが離せなくなるという謎めいた現象が起こりました。
ファインダー上で一度手動で右クリックすれば解消するのですが。

どうも,この現象はRubyCocoaのバグなのかと思われます。

仕方がないので,コマンドラインツールを作ってAppleScriptから呼び出す方法をとったわけです。

573 名前:566 mailto:sage [2008/12/11(木) 20:15:07 ID:aKreviH/0]
>>569
ありがとうございます。
自分で判断がつくまではおいておくことにします。

574 名前:名称未設定 mailto:sage [2008/12/12(金) 03:44:47 ID:IpphkAOm0]
Objective-C / Cocoaで、
mac.hitobashira.org/up/src/maka0123.png
このように、非同期の処理が終わる間、呼び出し元のメソッドAを待機させたいのですが、
方法はあるのでしょうか…

575 名前:名称未設定 mailto:sage [2008/12/12(金) 10:26:53 ID:Vt9WDSMO0]
performSelectorOnMainThread:withObject:waitUntilDone:を使う。

576 名前:名称未設定 mailto:sage [2008/12/12(金) 10:36:04 ID:jo4yNZOw0]
>>574
メソッドの実行に同期・非同期はあるけど(分散オブジェクトかマルチスレッド(>>575)の場合)
メソッドが他の処理をトリガーして、その処理が非同期の場合はもちろん方法はない。

クラスによっては、同期処理と非同期処理のメソッドを分けているものもある。NSURLConnectionの
sendSynchronousRequest:returningResponse:error:と
connectionWithRequest:delegate:のように。
だから実際に何をやりたいのか書くと調べられるかも。

577 名前:名称未設定 mailto:sage [2008/12/12(金) 11:20:55 ID:Lqy+6jQB0]
メソッドを分けたり条件式を足したりすることで実現できそうだけどなぁ
引数の問題はあるけど例えばメソッドAを分けたり、
待機の部分をなんらかのループにしておいて別スレッドのやつにループを抜ける条件を成立させたり
まぁ後者はうまいことやらないとループの間パワー使いまくるからアレだけど
(false)でスレッドをスリープさせて起きたらgotoとかで戻ってまた条件式をチェックして
(true)なら以降の処理へ、とかだったらいけるんじゃない?
で、やはり>>576さんの言う通り、もうちょっと具体的な話しがないとみんな答えにくいと思う

578 名前:名称未設定 mailto:sage [2008/12/12(金) 11:31:37 ID:vTLMpfhJ0]
>>577
それってフツーに条件付きロックじゃないの?

579 名前:名称未設定 mailto:sage [2008/12/13(土) 03:04:23 ID:pWDzXHA/0]
>>575-578
ありがとうございます。

>>576
具体的に書いた方が良かったですね、すみませんorz
WebViewにもそういうのがあったら…

>>577
その手があったか…
確かに負荷が心配ですね。
[NSThread sleepUntilDate:]を使って、0.1秒ごとにしたら大丈夫かな//

具体的には、NSTableViewのデリゲートの
- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(int)row{} (図:メソッドA部分)
から、[webView setMainFrameURL:](図:メソッドB部分)を呼び出し、
webViewから非同期で呼び出された、
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{}(図:メソッドC部分)
で、WebViewの表示結果に応じた画像がセットされるまで、- (void)tableView:(NSTableView *)tableView willDisp(略を待機させて置くようなことを考えています。

- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(int)row{}
のメソッドが終了してしまった後だと、[cell setImage:]を行っても表示に反映されないみたいで…


580 名前:名称未設定 mailto:sage [2008/12/13(土) 05:21:59 ID:n2oMHeo80]
>>579
>確かに負荷が心配ですね。

うーん、リアルで条件付きロックを知らないのか? じゃあちょっとコードを書いてみる。

実は pthread しか使ったことがなかったのだが、インターネットのヤホーで検索したら
ココアにはコソディショソロックというのがあることを発見したのでちょっと調べてみました。
初めて使うので間違ってたらごめんね。
なお、ココアのUIまわりは基本、スレッドセーフじゃないみたいなので、それは別途注意。

うーん、でもなんかちょっと違う気がする。まあいいや。



581 名前:名称未設定 mailto:sage [2008/12/13(土) 05:24:03 ID:n2oMHeo80]
改行が多いと言われるので、ほんとは一個のファイルなんだけど分けます。

#import <Cocoa/Cocoa.h>

NSConditionLock *lock = nil;
const int OK = 1, NG = 0;

@interface Hoge : NSObject {
}
- (void)methodB;
- (void)methodC;
@end

@implementation Hoge
- (void)methodB {
NSLog(@"methodB begin");
[NSThread detachNewThreadSelector:@selector(methodC) toTarget:self withObject:nil];
NSLog(@"methodB end");
}

- (void)methodC {
NSLog(@"methodC begin");
[lock lock];
NSLog(@"sleeping in methodC for 10 seconds:");
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];
[lock unlockWithCondition:OK];
NSLog(@"methodC end");
}
@end

582 名前:名称未設定 mailto:sage [2008/12/13(土) 05:25:39 ID:n2oMHeo80]
int main(void)
{
lock = [[NSConditionLock alloc] initWithCondition:NG];
Hoge *hoge = [[Hoge alloc] init];
[hoge methodB];

NSLog(@"before barrier");
[lock lockWhenCondition:OK];
NSLog(@"after barrier");
exit (0);
}

コンパイルは cc -fobjc-gc -framework Ccocoa でよろしく。

583 名前:名称未設定 mailto:sage [2008/12/13(土) 05:59:47 ID:pWDzXHA/0]
>>580-582
ありがとうございますm(_ _)m
こんな便利なのがあったんですか…、助かりました。

584 名前:名称未設定 mailto:sage [2008/12/13(土) 10:32:27 ID:JcdjU/On0]
>>579
もしかしてtableView:willDisplayCell:forTableColumn:row:で指定されたNSCellをそのまま保持して、
後で画像を設定しようとしたのではないですか?
NSTableViewのCellはしょっちゅうコピーされるので、このメソッドで渡されたCellと実際に表示に使われるCellが
同じインスタンスとは限らないんです。

私だったら、そもそもそういう戦略をとりません。NSImageをインスタンス変数に持つモデルを作成し、
それを格納したNSArrayをNSTableViewにBindingします。
webView:didFinishLoadForFrame:が呼ばれたら該当するモデルのNSImageをsetしてやれば自動で表示も変わります。

表示が必要な部分だけ読み込みを行いたいならば、この場合もtableView:willDisplayCell:forTableColumn:row:を
受け取って該当するモデルのみ読み込ませる必要はあるかと思いますけどね。
WebVIewの読み込みが極端に遅かったりした場合にフリーズ同然の状態になるようでは使ってられません。

585 名前:名称未設定 mailto:sage [2008/12/13(土) 22:29:36 ID:grgosdrm0]
メモリーリークーを静的解析するツールはないのでしょうか?
メモリーリークーだけまともにできない静的解析ツールならあるらしいのですが

586 名前:名称未設定 mailto:sage [2008/12/14(日) 00:05:13 ID:mgsCXS5c0]
>>585
解析しなくてもコード書くときに気づけ

587 名前:名称未設定 mailto:sage [2008/12/14(日) 00:39:03 ID:u82y2nJj0]
>>585
clang.llvm.org/StaticAnalysis.html

使ったこと無いので、詳細不明。
エロイ人のレポ期待。

588 名前:名称未設定 mailto:sage [2008/12/14(日) 02:03:29 ID:0NmjHAe60]
>>579
NSTableViewの行に指定したURLから取ってきた画像を表示させたいのですかね?
でしたら、>>584で指摘されているやり方でWebViewを使わずに、NSURLConnectionで
非同期にデータを取得してNSImageを作成することもできます。

NSURLConnection (非同期) [1]
www.geekpage.jp/programming/macosX-network/NSURLConnection-async-1.php




589 名前:名称未設定 mailto:sage [2008/12/14(日) 02:16:02 ID:Q/f3QCtB0]
>>584
Cellではなく、TableViewにbindingですか…、なるほど。

>>588
画像そのものでしたら、それで良いのですが、
WebViewで表示したhtmlのスクリーンショット(dataWithPDFInsideRect)を表示させたいと考えています。

590 名前:名称未設定 mailto:sage [2008/12/14(日) 16:33:29 ID:SOBNa9070]
知り合いのソースコード見てたら
NSLogデバッグで告白文が書かれていて笑ってしまった。





591 名前:名称未設定 mailto:sage [2008/12/14(日) 17:07:31 ID:NC7/Gvub0]
>>590
で、付き合うの?付き合わないの?
え?違うって?

592 名前:名称未設定 mailto:sage [2008/12/14(日) 20:02:42 ID:x0LVuiPM0]
ウホッ

593 名前:名称未設定 mailto:sage [2008/12/14(日) 20:14:24 ID:wBq7QeXL0]
>>585
チャラララン♪

ドラえもん「メモリーリークー」


594 名前:名称未設定 mailto:sage [2008/12/14(日) 22:18:14 ID:EMo+k0m90]
よく見ておくがいい、プログラマが告白(confess)をするというのは、こういうことだ!


NSLog(@"Error at %s line %d", __FILE__, __LINE___);


笑っていただけたでしょうか。

595 名前:名称未設定 mailto:sage [2008/12/14(日) 22:27:05 ID:E2vidIer0]
UNIX板でその手のスレッドがいつもそれなりの頻度で立ってるな。
確認してないけどクリスマスに向けてまた立ったんじゃないかな?w

596 名前:名称未設定 mailto:sage [2008/12/14(日) 23:16:25 ID:nL5ZmCvA0]
>>595
クリスマス前はビンビンだな

597 名前:名称未設定 [2008/12/14(日) 23:56:48 ID:vUlSNKMI0]
たのココ読んで頑張っています。
質問させてください。

Xcode起動して CocoaApplication を新規プロジェクトで作成して、
すぐにビルドして実行しても以下のエラーが発生してしまいます。

CopyStringsFile /Users/hoge/Desktop/work/TestCocoa/build/Debug/TestCocoa.app/Contents/Resources/English.lproj/InfoPlist.strings English.lproj/InfoPlist.strings
error: can't exec '/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings' (No such file or directory)
Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings failed with exit code 71

どのように解決していけばよいでしょうか?
宜しければ教えてください。

598 名前:名称未設定 [2008/12/14(日) 23:58:00 ID:U9Ih6wbO0]
          ___
        /_ノ ::::ヽ、_\
 ミ ミ ミ  o゚<●>:::::::<●>゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒) マカがwwww
| / / /     |r┬-|    | (⌒)/ / / // 
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


599 名前:名称未設定 mailto:sage [2008/12/15(月) 00:08:18 ID:ONvQ5Bfu0]
>>597
IBはどこもいじってないわけだよね?

後、たのココのどの部分を読んでいるのかとか、Xコードのバージョンとかも書いてもらえないですか?
もしかしたら再度インストールしたほうがいいかもしれない。

600 名前:名称未設定 mailto:sage [2008/12/15(月) 00:14:06 ID:ONvQ5Bfu0]
>>597
検索で
/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings

そしたらあなたと同じように最初にビルドした際にこんなエラーが出たって言う悩みがいっぱい出てあったよ。





601 名前:名称未設定 [2008/12/15(月) 00:17:52 ID:YWho2ACc0]
レスありがとうございます。

IBは思い当たるような設定変更はしていません。
ただ、気になるのは以前にiPhoneのSDKをインストールしているので、
デフォルトとは言い切れません。

たのココはRSS Readerのサンプルを作っています。
本に載っていたサンプルコードを一気に書き上げて、
ビルドしたら上記のエラーが発生しました。

おかしいな、と思って切り分けのために
全く新規に空のプロジェクトを作って見ても同じエラーが
発生したので、異常を感じて調べていたところです。

バージョンは3.1.1 です
コンポーネントのバージョン
Xcode IDE: 1115.0
Xcode Core: 1114.0
ToolSupport: 1102.0

602 名前:名称未設定 mailto:sage [2008/12/15(月) 00:19:36 ID:i+oeVcfk0]
そうですか。とりあえず、自分でも調べるけど、
2ちゃんねるに投げておけば、誰かが調べてくれる。ということで
書いていたんですね。

603 名前:名称未設定 mailto:sage [2008/12/15(月) 00:19:37 ID:ONvQ5Bfu0]
>>597
全く同じ質問がされている。
www.mailinglistarchive.com/xcode-users@lists.apple.com/msg13520.html

2番目の回答ではインストールし直せとかかいてあるけど、
一度全部読んでみて。

604 名前:名称未設定 [2008/12/15(月) 00:20:24 ID:YWho2ACc0]
>>600
ありがとうございます。
copystrings などで検索してたので上手く引っかけれてませんでした。
しばらく読んでみます。

605 名前:名称未設定 [2008/12/15(月) 00:28:26 ID:YWho2ACc0]
完全に私の検索スキルの低さが原因だったようです。
あっという間に解決しました。

簡単に説明しますとエラーが発生している copystrings でrubyが
使用されているのですがそのパスが /usr/bin/ruby 固定でした。
私は macports でrubyをインストールしていたので パスが違うのが
原因でした。

シンボリックリンクを /usr/bin/ruby において解決です。

なんだか皆さんの気分を害されたら申し訳ないです。

606 名前:名称未設定 mailto:sage [2008/12/15(月) 00:37:34 ID:ONvQ5Bfu0]
>>605
www.digitalsanctum.com/2008/10/04/xcode-cant-exec-developerlibraryxcodeplug-inscorebuildtasksxcplugincontentsresourcescopystrings-no-such-file-or-directory/

上記のサイトですね。
最初コレを見つけたんですけど、rubyなんて使ってないだろうと思って・・
解決してよかったです。

607 名前:名称未設定 mailto:sage [2008/12/15(月) 00:39:00 ID:uX3YJL520]
macports って ruby をいれると /usr/bin/ruby が削除されるの?
そんな無茶苦茶な。

608 名前:名称未設定 mailto:sage [2008/12/15(月) 00:47:22 ID:aU8GlMMf0]
世の中にはPATH環境変数ってのがあってだなry)


609 名前:名称未設定 mailto:sage [2008/12/15(月) 01:21:01 ID:uX3YJL520]
う〜ん、でも、copystrings のスクリプトの先頭は #!/usr/bin/ruby に
なっているので、PATH 環境変数の問題では無い気が...
わかってなくてすみません。

610 名前:名称未設定 mailto:sage [2008/12/15(月) 01:28:54 ID:qsoULL6B0]
この場合、PATHは関係ないね。
それよりも、/usr/bin/rubyが無いのが異常に気になる。
macportsの所為では無いと思うんだけど・・・。



611 名前:名称未設定 mailto:sage [2008/12/15(月) 19:04:22 ID:CwNz3R3E0]
MacPorts で Ruby 入れる

$PATHの関係で /usr/bin 以下のRubyが起動される

むきー

sudo rm /usr/bin/ruby

と予測

612 名前:名称未設定 [2008/12/16(火) 13:40:23 ID:ZJJ0pZ8kO]
>>612
オヤスミ…
  <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄


613 名前:名称未設定 mailto:sage [2008/12/18(木) 03:55:29 ID:5NHEEkjy0]
x-codeで
printf("\n")で改行させたいんですが、どうすればいいですか?

一応エンコーディングはshift_jissでコトエリで バックスラッシュを¥になるように設定しています。

バックスラッシュ+n では改行できるんですよね・・・・・・。


614 名前:名称未設定 mailto:sage [2008/12/18(木) 05:52:12 ID:8C6l/M/x0]
バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
あくまで C の規格的には、バックスラッシュ+n が改行。
Shift-JIS でそれが円記号+n に見えるのは、
Shift-JIS ではバックスラッシュの「値」をもつ記号が
円記号のように「表示される」というきまり。
日本語ウィンドウズだとパス名に円記号がいっぱいはいってるけど、
英語ウィンドウズだとそれが全部バックスラッシュになります。

しかしユニコードではバックスラッシュと円記号はちがう文字です。
日本語 Mac で昔標準だった MacJapanese もバックスラッシュと
円記号はちがう文字です。というわけで、悪い事は言わないから
バックスラッシュと円記号を混同するのはやめたほうがいいです。

まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
円記号に見えないのはなんか変な気がしますね

615 名前:名称未設定 mailto:sage [2008/12/18(木) 10:04:04 ID:gsSyM0EO0]
Cocoaでprintfなんぞ使った事は無いが。

616 名前:名称未設定 mailto:sage [2008/12/18(木) 11:04:36 ID:LQ3bq09a0]
>>614
>まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
>円記号に見えないのはなんか変な気がしますね

え? 円記号に見えるでしょ。
もしかして CP932 (日本語 (Windows, DOS)) と勘違いしてない?

>バックスラッシュと円記号の関係を再認識したほうがいいと思うな...

617 名前:名称未設定 [2008/12/18(木) 14:17:49 ID:brBSoHTs0]
>>614
ものすごく参考になりました。
その辺、ちょっと調べてみます。
ただwikiをみると何のことかさっぱりで・・・:・・。

618 名前:名称未設定 mailto:sage [2008/12/18(木) 15:01:53 ID:HPiuHPLV0]
>>617
OS 9時代、7ビットASCIIの一部は表示文字を各国が自由に指定できた。
バックスラッシュがその一例で、日本のフォントやPCメーカーは
バックスラッシュの代わりによく使う円マークを表示するように設計した。
データ的にはバックスラッシュと同じなんで¥nでも問題がなかった。

OS XになってからはUnicodeを使うようになった。
こいつはバックスラッシュと半角円が別々に定義された。
ゆえにデータ的に見ても別物だから¥nは使えなくなった。


こんな感じでおk?

619 名前:名称未設定 mailto:sage [2008/12/18(木) 19:12:09 ID:PDgvlNo80]
OS 9時代と表現に違和感が。
つーか、MacJapaneseではちゃんと区別してたよ。

620 名前:名称未設定 [2008/12/18(木) 21:38:28 ID:brBSoHTs0]
>>618
本当にありがとうございます。
wikiしかりいろんなサイトを見回ってunicode等調べたのですが、
なかなかバックスラッシュが使えたり、使えなかったり
¥マークが制御文字になったりならなかったりする理由を見つけることができませんでした。

でもおかげさまで明確に理由がわかりました。ありがとうございます!




621 名前:名称未設定 mailto:sage [2008/12/18(木) 22:46:09 ID:8C6l/M/x0]
>>616
XCode 3.1.2 で Shift-JIS (Windows, DOS でなくて) にしても
円記号にみえないよ... むむむ。

622 名前:名称未設定 mailto:sage [2008/12/18(木) 22:52:14 ID:pOmvbV3i0]
つまり日本が悪いってことだね?

623 名前:名称未設定 mailto:sage [2008/12/19(金) 00:16:59 ID:kZ9hkPkf0]
>>621
MacにMSゴシックやメイリオを入れても円マークはバックスラッシュになっちゃうんだよね。

624 名前:名称未設定 mailto:sage [2008/12/19(金) 01:29:19 ID:dr8c9lPo0]
0x5Cの字形がバックスラッシュか円記号かはフォント依存の問題。
Unicodeではバックスラッシュ(U+005C)と円記号(0+00A5)は別。

625 名前:名称未設定 mailto:sage [2008/12/19(金) 01:58:06 ID:5xiiw0t00]
>>613
option+\でよい?

626 名前:名称未設定 mailto:sage [2008/12/19(金) 02:05:22 ID:piXJ3bSu0]
>>624
>0x5Cの字形が
フォントのグリフを語る際に、
文字コードを指定せずに 0x5C の字形が、っていっても意味がなくない?
ユニコードでひとつコードを決めると、
グリフは(芸術性をのぞいて)決まってるべきだけど。
あと、シフトJIS の規格って、よく知らないんですが、
各コードのグリフ形状まで指定してないんですか?
指定してるとすると、 0x5C をシフトJIS で表示するときは、
どんなフォントをつかってるにしても、グリフはバックスラッシュでなくて
円記号のグリフを使うべきだと思うんだけど。

627 名前:名称未設定 mailto:sage [2008/12/19(金) 05:28:58 ID:PqTjwco00]
>>621
1. 0x5cを含むファイルを作成。
2. Xcode の環境設定でフォントのデフォルトを全てMonaco、エンコーディングのデフォルトを
「日本語(Shift JIS)」にする。
3. Xcode の「開く...」で1.で作ったファイルを開く。

で、円記号が見えるけどな、自分とこでは。

>>623
Vistaから(ピー)してきたメイリオではU+005Cを円記号で表示するけど。自分のとこでは。
MSゴシックは確かMacのOfficeに付いてくるのとWindows純正ので違ったような気が。

628 名前:名称未設定 mailto:sage [2008/12/19(金) 15:06:35 ID:lttihNqB0]
>>626
そもそも1Bbyteコードって
シフトJISの定義域ではない。

シフトJISを使用するときに
1Byteコード領域は概ねJIS X0201を使う事が多いだけ。

X0201には標準字形は定義されているが
ビットマップ時代の制定だから、グリフの概念がない。
大体、漢字を16Dotで表現するのにグリフなんて考えすらないよ。

629 名前:名称未設定 mailto:sage [2008/12/19(金) 16:43:35 ID:i3qBricn0]
NSString→NSStringへの文字コード変換ってどうんな感じでやればいいんでしょうか…

630 名前:名称未設定 mailto:sage [2008/12/19(金) 16:48:36 ID:HMXc5t5u0]
>>626
純粋な Shift JIS じゃなくて、Windows 上の Shift JIS の実装(拡張)、いわゆる CP932 だと
話はある意味 >>624 の言う通りで、
0x5c は論理的には reverse solidus (バックスラッシュ)。なんだけど対応する文字(グリフ)は
日本語の Windows 上では円記号で表示される(ことが多い)。

確かに「文字コードとグリフのデザインは別の概念」とはいえ、なんだかなあと思ってしまう。
歴史的な互換性の維持とはいえ。
www.microsoft.com/globaldev/reference/dbcs/932.mspx

Mac OS X 上だと CP932 の 0x5c はバックスラッシュのグリフで表示されて(ことが多い)、
こっちの方が純粋というか素直なような。



631 名前:名称未設定 mailto:sage [2008/12/19(金) 17:37:33 ID:1nt96Eco0]
>>629
NSString は(実装はともかくとして)
常に Unicode で文字列を格納していると思うべきです。
そこから char* として取り出すときに encoding を指定して取り出す、
そこに char* からデータをいれるときに encoding を指定して入れる。
+[NSString stringWithCString: encoding:]

-[NSString cStringUsingEncoding:]
を参照。


632 名前:629 mailto:sage [2008/12/19(金) 17:45:58 ID:i3qBricn0]
ふんふん。
やっぱ、間に一発C文字列への変換が必要という事か…
ほいでまたNSStringに戻すと。

633 名前:名称未設定 mailto:sage [2008/12/19(金) 18:57:29 ID:AFDCyKKm0]
>>632
> やっぱ、間に一発C文字列への変換が必要という事か…
> ほいでまたNSStringに戻すと。

ようするに、NSStringからNSStringへの文字コード変換は、無意味という事なのだが。
629はその辺、分かってるのかな?

634 名前:名称未設定 mailto:sage [2008/12/19(金) 19:01:52 ID:Mt5zlTWV0]
多分
>そこに char* からデータをいれるときに encoding を指定して入れる。
で指定したエンコーディングになると思ってるんだろう。
俺もわかってないんだが要するにcStringUsingEncoding:
でC文字列が何でエンコードされているかを判断するってことだろ?

635 名前:名称未設定 [2008/12/19(金) 19:04:52 ID:VujcLHpJP]
なんか勘違いしてる…

NSStringに入れた時点で内部的にはUnicodeに統一される

だからNSStringとして操作する上では、
char型に取り出したり、ファイルと入出力するような場面以外に
文字コードを意識することはないし、
NSString間の文字コード変換ってのもできない(ありえない)よ

636 名前:名称未設定 mailto:sage [2008/12/19(金) 19:23:42 ID:Mt5zlTWV0]
そういうならまずはcStringUsingEncoding:の正しい使い方から教えてくれや

637 名前:名称未設定 mailto:sage [2008/12/19(金) 20:27:22 ID:wF57mWA70]
ドキュメント読め。
何のためのドキュメントなんだ。

developer.apple.com/documentation/CoreFoundation/Conceptual/CFStrings/introCFStrings.html
developer.apple.com/documentation/Cocoa/Conceptual/Strings/introStrings.html

638 名前:名称未設定 mailto:sage [2008/12/20(土) 00:46:03 ID:Niwi5dnC0]
Objective-Cってもっとシンプルに書けるようにならないかな
Dictionaryも dic[key] = value; とか書ければなぁ
KVCの場合は若干気持ち悪いかもしれん
C++でWrapしてみるか...

639 名前:名称未設定 mailto:sage [2008/12/20(土) 01:57:12 ID:eDv0h37G0]
>>638
C++だったら連想配列といわず、行列の積なんかもシンプルに書けるよね。C++万歳!

そのぶん言語自体が激しくシンプルじゃないのは皆さんご存知の通りですがw

C++で wrap って、key や value には Objective-C のオブジェクトを入れるの?
だったら You 最初から STL 使っちゃいなよw

640 名前:名称未設定 [2008/12/20(土) 02:01:54 ID:UW2/XF4a0]
.netを趣味でやっていたものとして言わせていただければ
Objective-cは最高だと思う。
なんたって無料で全ての機能を提供してくれているし。

知れば知るほど奥の深さに魅了されてしまう。




641 名前:名称未設定 mailto:sage [2008/12/20(土) 04:16:49 ID:R19Od2LJ0]
objcつかcocoaはコードがだらだら長くなって見づらくなるのが難点。
入力も面倒になってくる。

642 名前:名称未設定 mailto:sage [2008/12/20(土) 05:52:03 ID:WdjszjrV0]
確かに名前空間を使用したプログラミング言語に比べてそこが一番の欠点だよな。

覚えきれん・・・・・・・。

それに一字でも間違ってたらもうアウトなわけだから
デリゲートメソッドとか悲惨。

エラーどころか警告すら出ないんだから。



643 名前:名称未設定 mailto:sage [2008/12/20(土) 07:35:31 ID:KNV2xQr00]
delegate method は確かに悲惨だよね。
でもそれ以外は XCode なら入力補助があるから
別に長くても問題なくない?
長いメソッド名だから半分強制的にコメントかかされているみたいなものなのも
半年後に自分のプログラムを読むときに案外役に立ってる気がする。
最近はすっかり汚染されてしまって、
自前のオブジェクトのメソッド名もすごい長くして
英語の文章として読めるようにしている。

644 名前:名称未設定 mailto:sage [2008/12/20(土) 07:45:55 ID:WdjszjrV0]
でもVisual.NETしていた人間にとってはX-codeの入力補助なんて糞。

まぁ僕みたいな凡人でトーシローのことですけど・・・・
皆さんは満足ですか?
あの入力補助で・・・・・。

ものすごく邪魔になることも多いんですが。

645 名前:名称未設定 mailto:sage [2008/12/20(土) 09:35:37 ID:Niwi5dnC0]
VCの入力補完も糞じゃね?
C#やVBなららくちんだろうけど。

646 名前:名称未設定 mailto:sage [2008/12/20(土) 11:51:03 ID:zY1fsqkk0]
入力補完なんてふつうOFFだろ。鬱陶しい。

>>640
Objective-cに限らずgccは普通に全ての機能を無料で提供だろ。


647 名前:名称未設定 mailto:sage [2008/12/20(土) 12:47:41 ID:7wiP5m1V0]
こんぱいらはね

648 名前:名称未設定 mailto:sage [2008/12/20(土) 14:03:40 ID:/70q+NvK0]
>>639
もちろんメインはSTLやboostで書いているけどUI周りがねー。

649 名前:名称未設定 mailto:sage [2008/12/20(土) 14:47:22 ID:eDv0h37G0]
>>648
だったら UI は PowerPlant でしょ。え、Cocoa Binding? Core なんちゃら? 何のことですか?

ソースがあるから頑張ればこれからも Mac OS X に追随できる (かも)。
ま、CodeWarrior に付いていたコードは Leopard でコンパイルすると deprecated 警告の嵐で引くけどw
オープンになった方はそこら辺改良されてたり... しないか。

650 名前:名称未設定 mailto:sage [2008/12/20(土) 17:36:34 ID:ElTiCEex0]
弘法は筆を選ばず



651 名前:名称未設定 mailto:sage [2008/12/20(土) 18:44:35 ID:WdjszjrV0]
ん?

誰か俺を呼んだ?


652 名前:名称未設定 [2008/12/20(土) 23:35:09 ID:9hlRQq980]
工房は筆を下ろさず

653 名前:名称未設定 mailto:sage [2008/12/20(土) 23:39:41 ID:pVSz5R1L0]
俺のアプリは「made with simple text」のロゴが入ってるよ。

654 名前:名称未設定 mailto:sage [2008/12/21(日) 01:03:07 ID:03GYYjSC0]
SimpleTextじゃぁ自慢にならんよ。
自慢したいんならedでコーディングしてなんぼ

655 名前:名称未設定 mailto:sage [2008/12/21(日) 01:08:59 ID:kHbQDWZQ0]
そんなの何の自慢にもならんだろ。
自己満足以外の何ものでもない。

656 名前:名称未設定 mailto:sage [2008/12/21(日) 02:07:29 ID:BKOVdXos0]
WebKitを使ったプログラムでFlashプレイヤーのプラグインを使用すると
コンソールに「Debugger() was called!」と出力されますね。
Flashプレイヤー9の時は出なかったのですが、10に上げたら出るようになった感じ。
非常にうざったいです。


657 名前:名称未設定 mailto:sage [2008/12/21(日) 14:53:14 ID:qkj38C460]
若干スレチ気味だけどデータの型からサンプルコードではない正式な使い方を記した文章を知る事は出来ないの?

使いたいAPIの引数にHogeHogeRefみたいのがあったときに、
どうやったらそれを作れるのかがsee alsoで書いてくれたり
HogeHogeRef自身が詳細へのリンクになってたりすると楽なのに。

例えばリファレンスでAPIの引数にCodecTypeって見つけて、
確かにリンクにはなってるんだけど、飛んでも
typedef OSType CodecType;
とだけしか書かれてないとか。
型の詳細もだけど、どんな値を入れたらいいのか知りたいんだよ!と。

658 名前:名称未設定 mailto:sage [2008/12/21(日) 15:16:33 ID:YL4QjoBD0]
ReferenceじゃなくてProgramming Guideを読めばおk

659 名前:名称未設定 mailto:sage [2008/12/21(日) 15:41:09 ID:uX+Fb44J0]
QT関連は複雑な上にドキュメント不足は否めん。
QT7で追加されたAPIとかになると悲惨。

660 名前:名称未設定 mailto:sage [2008/12/21(日) 18:58:24 ID:1bYWKW200]
ココア(←なぜか変換できない)



661 名前:名称未設定 [2008/12/23(火) 10:35:34 ID:AMg5R5ie0]
Xcode3.1.2なんですがボタン上の文字のフォントを変えるにはInterface Builderのどこをいじればいいんでしょうか。設定が見つからないですorz

662 名前:名称未設定 mailto:sage [2008/12/23(火) 10:55:29 ID:8y6CxMf40]
>>661
IBでボタンを選択して、FontメニューからShow Fonts。
普通のアプリと同じ。

663 名前:名称未設定 mailto:sage [2008/12/23(火) 11:25:11 ID:PGYHkvA30]
>>661
ていうかフォントを変えるな。
ほかに非標準のフォントをつかったボタンがあるソフトがありますか?
独自性とかいってかえれば良いってもんじゃありません。

664 名前:名称未設定 [2008/12/23(火) 14:54:44 ID:AMg5R5ie0]
>>662
ありがとございます。
ボタンはできましたが、NSBoxのラベル部分が変わらないなあ。

>>663
やっぱり変えないほうがMacらしいんですかね。Cocoaの本読んでるんですがLeopardになってからかNSBoxのラベル部分の文字が薄くて読みにくい感じがしてBoldにしてみようかなと。

665 名前:名称未設定 mailto:sage [2008/12/23(火) 15:14:26 ID:8y6CxMf40]
>>664
NSBoxはIBからじゃ変えられないですね。
setTitleFont:するしかなさそうです。

666 名前:名称未設定 [2008/12/23(火) 15:23:37 ID:AMg5R5ie0]
>>665
ありがとございます。試してみます。

667 名前:名称未設定 mailto:sage [2008/12/23(火) 15:56:58 ID:b+ysoZu80]
つうか、GUIのフォントってデフォルトから変えていいのか?
ガイドライン的に。

668 名前:名称未設定 mailto:sage [2008/12/23(火) 15:58:13 ID:b+ysoZu80]
スマソ、スクロール足りてなかったorz

669 名前:名称未設定 mailto:sage [2008/12/23(火) 16:28:20 ID:Ch41JxbW0]
自分で使う分には構わないだろ。
人様に使わせるのはどうかと思うが。

670 名前:名称未設定 mailto:sage [2008/12/23(火) 16:52:51 ID:9kr1H59b0]
>>667
システム環境設定→ユニバーサルアクセス



671 名前:名称未設定 mailto:sage [2008/12/23(火) 19:43:10 ID:2buqxug+0]
萩原剛志さんの本はプログラミング初心者には難しいと聞いたのですが
C言語の基礎を知ってる程度では、やはり難しいでしょうか?
「詳解 Objective-C 2.0」を買おうかと思っています

672 名前:名称未設定 mailto:sage [2008/12/23(火) 19:49:25 ID:hxngkr3k0]
>>671
メモリ管理の話とか、オブジェクト指向の話とか、例外処理とかある程度知ってな
いと読むのつらいと思う。

でもまあ齧った程度でも知ってるのならばなんとかなる。
つーかおれはなった。

673 名前:名称未設定 mailto:sage [2008/12/23(火) 20:20:10 ID:2buqxug+0]
>>672
C言語のこと以外は全く知らないのでやめときます
別の本を探します

674 名前:名称未設定 mailto:sage [2008/12/23(火) 20:36:00 ID:I2LctYge0]
Objective-Cに他の本はあるの?

675 名前:名称未設定 mailto:sage [2008/12/23(火) 20:36:57 ID:CzyIQtOV0]
>>671
その本は、Objective-Cを多少知ってないと辛いと思うよ
たのCocoあたりから読むと良いと思います。

676 名前:名称未設定 mailto:sage [2008/12/23(火) 21:42:54 ID:Ch41JxbW0]
たのココは語尾がムカツク

677 名前:名称未設定 mailto:sage [2008/12/23(火) 21:43:59 ID:IWcOJZP00]
あの口調はネットだから許される。
紙媒体では無理。

678 名前:名称未設定 mailto:sage [2008/12/23(火) 22:20:20 ID:CzyIQtOV0]
>>676
それは、確かにw
内容は良いのに残念なんだぜ!

679 名前:名称未設定 mailto:sage [2008/12/23(火) 22:23:22 ID:m5cu4oUi0]
日本語前提でHMDT系じゃない本で情報がup-to-dateなものはこれくらいしか思いつかないなあ...
作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全
www.amazon.co.jp/exec/obidos/ASIN/4048676075/
執筆はPeopleに連載持ってる柴田さん。

680 名前:名称未設定 mailto:sage [2008/12/23(火) 22:25:53 ID:JS+9dWrN0]
参考書無しのネットだけでここまで来たぜ!
で、自作の電卓が動かないんですけど。



681 名前:名称未設定 mailto:sage [2008/12/23(火) 22:33:54 ID:hxngkr3k0]
>>680
デバッグしる。

682 名前:名称未設定 [2008/12/23(火) 23:26:43 ID:cFsVUxjvP]
sourceforgeに上げようぜ

683 名前:名称未設定 mailto:sage [2008/12/24(水) 00:13:05 ID:ej1MZ/+00]
質問です。
入力された文字列が数字のみかどうかのチェックをしたいのですが、
よろしいのでしょうか?
NSTextField上でも入力された後の処理でもかまいません。
よろしくお願いします。

684 名前:名称未設定 mailto:sage [2008/12/24(水) 00:34:59 ID:NHt4bY8g0]
formatterを使えばいいのではないか。

685 名前:名称未設定 mailto:sage [2008/12/24(水) 00:58:03 ID:YvN7oXnF0]
お手軽な入力フィルタだったら
NSTextFieldのサブクラスで
textView:shouldChangeTextInRanges:replacementStrings:
を実装すれば逝けると思います。

686 名前:名称未設定 [2008/12/24(水) 01:57:36 ID:94m8GJXM0]
具体的にプログラムを作るって話になると木下本読まないと厳しいが、
Obj-Cについてもう少し知ろうとすると、萩原本は必須になるとおもうよ。

柴田本は昔のはあれだった印象があるが、今のは使えるのか>詳しい人


687 名前:名称未設定 mailto:sage [2008/12/24(水) 08:41:08 ID:rdLNE9qM0]
>>683
よろしいのでしょうか?

でふいた

688 名前:名称未設定 mailto:sage [2008/12/24(水) 09:55:33 ID:3pqZJ+9a0]
>>686
本屋で立ち読みした限りでは買う価値は依然としてない。
>>679の本はわからんが、多分、アレだろう。

柴田って古いMac OSとか絶滅したAppleIIとか古い話ばかりでいい加減消えて欲しい。
昔はBeOSの本とか出してたな。もう新しい技術についていけないお払い箱ライター。

689 名前:名称未設定 [2008/12/24(水) 19:57:44 ID:pU6O2/Rq0]
俺の同僚がcocoaアプリケーションチュートリアルだけで
目的とするプログラムを書き上げていた。

そいつは、
プロパティどころか、アクセッサメソッドすら理解していなかったけど・・・・・。
それどころかメソッドの書き方も分かってなかった。

もちろん起動しなかったけど、あれだけであそこまで完成させていたのには
ちょっと驚いた。


690 名前:名称未設定 mailto:sage [2008/12/24(水) 20:07:45 ID:rdLNE9qM0]
>>689
起動しないのに完成させたとは?



691 名前:名称未設定 mailto:sage [2008/12/24(水) 21:11:18 ID:2Q4M0dVc0]
>>689
チュートリアルだけ呼んで、動きもしないプログラムを書くぐらいなら君にも出来るさ

692 名前:名称未設定 mailto:sage [2008/12/24(水) 23:19:17 ID:PMjOK3gJ0]
>>691
さすがに芸人を呼ぶのは難しいだろw

693 名前:名称未設定 mailto:sage [2008/12/25(木) 01:01:09 ID:DWj5DZ1R0]
>>689の言いたいことはわかるぞ。わかる。

694 名前:名称未設定 mailto:sage [2008/12/25(木) 02:34:18 ID:Nt+Z4c6J0]
>>689
起動しなきゃ理解してないってことじゃん。
それって単にオブジェクト指向プログラミングのテクニックを知ってるってだけじゃないの?

695 名前:名称未設定 mailto:sage [2008/12/25(木) 10:18:41 ID:WmzR4NXU0]
>>692
お前キングコング並みに寒いぞ

696 名前:名称未設定 mailto:sage [2008/12/25(木) 11:11:30 ID:92TaARB20]
>>695
ザ・パンチに失礼

697 名前:名称未設定 mailto:sage [2008/12/25(木) 13:37:57 ID:s26TIzeM0]
ウンコ連中によるM−1敗者イジリがスタートしたな

698 名前:名称未設定 mailto:sage [2008/12/25(木) 14:28:10 ID:WTPPCtl00]
↑西野乙

699 名前:名称未設定 mailto:sage [2008/12/25(木) 15:11:15 ID:CqvJET2e0]
Appleのサンプルコードに下のような方法で値を返してるのがあるんだけど、
xxxRef系って実装はObj-Cのオブジェクトなの?
ていうかCから扱うためにあるんだろうに、勝手にGCされちゃうわけ?

HogeHogeRef func() {
  HogeHogeRef r;
  // ... rの作成
  return (HogeHogeRef)[(id)r autorelease];
}

700 名前:名称未設定 mailto:sage [2008/12/25(木) 15:16:32 ID:SqNR9yg50]
トールフリーブリッジ(toll-free bridge)といいます。
クラスによってはキャストだけでどっちにも使えます。

GCは使ってないから分かりません。



701 名前:名称未設定 mailto:sage [2008/12/25(木) 15:17:07 ID:9U2YaQaT0]
>>699
逆で、Obj-Cのオブジェクトの実装がxxxRef。…の場合が多い。
journal.mycom.co.jp/column/objc/038/index.html

702 名前:名称未設定 mailto:sage [2008/12/25(木) 16:30:31 ID:D/fdkldl0]
「勝手に」GCされたりはしないだろ。

703 名前:名称未設定 mailto:sage [2008/12/25(木) 21:10:59 ID:wIrcpCJz0]
CoreFoundationのCF〜RefとFoundationのNS〜ではtoll-free bridgeのものが多くあります。
しかしだからといって、それ以外の〜Refも同等のObj-Cのオブジェクトがあるとは思うべきではありません。
基本的にはそれぞれの適切な関数で解放すべきです。

704 名前:名称未設定 mailto:sage [2008/12/25(木) 21:15:39 ID:5IYO0foX0]
CFなんたらって何ですか?
怖くてNSなんたらしか使ったことないんですが。
ネットで拾って参考にしてるコードでもコピペでしか使ったことないですw

705 名前:名称未設定 [2008/12/25(木) 21:24:07 ID:bUlVH57f0]
>>704
>CFなんたら

Core Foundationでそ

706 名前:名称未設定 mailto:sage [2008/12/25(木) 21:31:31 ID:9U2YaQaT0]
>>703
CFTypeRefの関数が使えるものならNSCFTypeRefが面倒見てくれますよ。

707 名前:名称未設定 mailto:sage [2008/12/25(木) 21:46:54 ID:9HW4c/IQi]
NSって何の略でそか?

708 名前:名称未設定 mailto:sage [2008/12/25(木) 21:49:09 ID:wIrcpCJz0]
NextStep

709 名前:名称未設定 mailto:sage [2008/12/25(木) 22:18:29 ID:O7EHv8wm0]
>>707
No Skin

710 名前:名称未設定 mailto:sage [2008/12/25(木) 22:26:36 ID:uTnwU5K00]
500とかRとか付いたり



711 名前:名称未設定 mailto:sage [2008/12/25(木) 22:32:21 ID:jC1CCwNf0]
>>710
中古でしか手に入らん上にえらい高いんじゃw
あと50も思い出してあげて。

712 名前:名称未設定 mailto:sage [2008/12/25(木) 23:21:28 ID:CqvJET2e0]
ありがとうございました。
Toll-Free Bridgeというものがあって、いくつかそれに準拠しているわけですね。
ある型がToll-Free Bridgeかというかどいうのはどこかに明記されているのでしょうか。
それとも調べるしかないのでしょうか。

713 名前:名称未設定 mailto:sage [2008/12/25(木) 23:38:36 ID:uTnwU5K00]
>>711
確かに、50が一番最後まで残ってたわけだし、一番いろんなモデルがあったしね。

714 名前:名称未設定 mailto:sage [2008/12/25(木) 23:52:26 ID:kBcDv0rN0]
>>714
リファレンスの最初の方に載ってる。例えばNsStringの項目をみると、CFStringとキャストするだけでおk、と書いてある。
toll-freeで検索するといいよ。

715 名前:名称未設定 mailto:sage [2008/12/25(木) 23:53:11 ID:kBcDv0rN0]
アンカーミス、>>711です

716 名前:名称未設定 mailto:sage [2008/12/26(金) 03:06:07 ID:py8HyFHM0]
NSStringにclassnameかけるとNSCFStringが返ってきたりするね。


717 名前:名称未設定 mailto:sage [2008/12/26(金) 17:59:20 ID:Gs8UicIM0]
そんなことわざわざしてみたりするんだ・・・・

でもNSArrayとかに最後にnil入れ忘れたりすると、
NSCFArrayエラーとかになるよね。

やっぱりnilはCFとの互換性のために必要なんだろうか。

718 名前:名称未設定 mailto:sage [2008/12/26(金) 18:18:16 ID:sdS5y8k+0]
nil無いと個数が判らんだろ。

719 名前:名称未設定 mailto:sage [2008/12/26(金) 18:40:44 ID:1VG5u8OV0]
>717
可変引数の使い方知らない?

720 名前:名称未設定 mailto:sage [2008/12/26(金) 18:42:42 ID:yOYP+wqH0]
NSほげが実際にはCFほげを呼んでたりする、というのはそれでいいとして
おもしろいことにCFのフレームワークの中にNSほげのメソッドの実体が入ってたりする(Leoprad 限定)。

なんでそんなことをしているのか興味深いし、そもそも中の人がフレームワークをビルドするときに
どうやって依存性を解決しているのかもちょっと不思議だったりする。



721 名前:名称未設定 mailto:sage [2008/12/26(金) 18:44:02 ID:Gs8UicIM0]
あー可変引数の関係か。
そうかメソッドだもんな。あんまりメッソドって意識がなくなっていた。そっか。

文字列定数とかだったら最後にnullを書く必要とかないでしょ。とか言う感覚でいってしまった・・・ORZ。

722 名前:671 mailto:sage [2008/12/26(金) 19:28:07 ID:7HRNK0zL0]
「たのしいCocoa」読みました
なんていうか、ラーメンズが出てたMacのCM思い出しました
レスくれた方ありがとうございました

723 名前:名称未設定 mailto:sage [2008/12/27(土) 11:53:19 ID:6vw8P5nD0]
NSArrayControllerが持ってるcontentArrayの追加/削除された差分が欲しいんだけど、
arrangedObjectsやcontentへのbind:/addObserver:だと配列丸ごとしか受け取れないっす。

差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
それとbind:するしか無いですか?

というか何故NSArrayControllerは差分(NSKeyValueChangeInsertionとか)を
送ってくれないですか?

724 名前:名称未設定 mailto:sage [2008/12/27(土) 14:19:24 ID:1ymko+SU0]
>>723
間にNSArrayControllerを入れずに、ViewとModelを直接バインドする。



725 名前:名称未設定 mailto:sage [2008/12/27(土) 15:10:32 ID:6vw8P5nD0]
>>724
どうもです。

ModelがNSMutableArrayを持ってるわけじゃなくて、
そのModelがNSMutableArrayの中に入ってて、その数の増減をobserveしたいんです。

要するに

> 差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
> それとbind:するしか無いですか?

ですよね?(カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装)

このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしか
いないので、こいつがNSKeyValueChangeInsertionを通知してくれれば助かるんですが、
してくれないんですよね?


726 名前:名称未設定 mailto:sage [2008/12/27(土) 16:00:30 ID:1ymko+SU0]
>>725
MVCパターンにおいては、Modelコンポーネントは1つです。たとえ、それが複数のクラスで構成されていたとしても。

今回のケースは、Modelの内部に配列を含んでいるという話なのでは?

> このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしかいない
NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?

> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
これをModelとして実装すればよいのではないかと思います。
まあ、あえてこの機能をControler側に実装するなら、NSArrayControllerのサブクラスを作ることになりそうですが。


727 名前:名称未設定 mailto:sage [2008/12/27(土) 16:03:14 ID:wr2ktw9Z0]
>>683です。
>>684-685
ありがとうございます。自己解決できたのでお役にたてればと。

// 数字以外のキャラクターセット
NSCharacterSet *decimalInvertSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
// 上記セットがあるか
NSRange rng = [string rangeOfCharacterFromSet:decimalInvertSet];
if(rng.length > 0){
// 数字以外が含まれている
}else{
// 数字のみ
}


728 名前:名称未設定 mailto:sage [2008/12/27(土) 16:18:18 ID:wr2ktw9Z0]
>>723
NSArrayControllerのcontextがCoreDataなら
NSManagedObjectContextObjectsDidChangeNotificationで
NSInsertedObjectsKey、NSUpdatedObjectsKey、NSDeletedObjectsKey等でわかるかもしれません。

NSArrayControllerのみでもいけるのかな?
詳しくはググって見て下さい。

729 名前:名称未設定 mailto:sage [2008/12/27(土) 17:51:40 ID:HOyebOs70]
NSURLConnectionを使っています。

なぜか接続に失敗するのですが、そのときに

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
が呼ばれ、

NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);

の出力により

> Connection failed! Error - ネットワークの接続が解除されました example.com/hoge

と出ているのですが、そのアプリを終了させても
どうもセッションをはって何やらダウンロードが続いているようなのです。
netstat で ESTABLISH になっていますし、ネットワークの下りは一定の速度でダウンロードしているようです。

質問は二つあります。
1. アプリを終了させても接続が続くとは、
Mac OS X や NSURLConnection は一体どのような仕組みになっているのでしょうか。
2. 失敗しても安全にダウンロードが終了できるような NSURLConnection の使い方に何かこつがあるのでしょうか?

どなたかご存知の方いらっしゃいましたらどうかお教え下さい。








730 名前:名称未設定 mailto:sage [2008/12/27(土) 18:25:21 ID:6vw8P5nD0]
>>726 ありがとう。

> 今回のケースは、Modelの内部に配列を含んでいるという話なのでは?
繰り返しですが、これは>>725の通り、ModelはNSMutableArrayを持ってないです。
Modelインスタンスが複数存在して、その変化をobserveしたいんです。
これをNSArrayControllerがやってくれるかな、と思ったんですが。

> NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?
NSArrayControllerのprepareしたcontentにModelを addしているので、
Modelにバインドはしてないんです。objectClassにModelクラスをあててます。

>> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
> これをModelとして実装すればよいのではないかと思います。
やっぱり、監視用に別のModelを作って監視したいModelへの対多リレーション持つしか無いんですね。

これだとNSArrayControllerは必要ない、というかあまり便利じゃないんだよなぁ。
なぜInsertion/Removalを通知してくれないんだろうか。

>>728 ありがとう。
でも残念ながらCore Dataではないです。



731 名前:名称未設定 mailto:sage [2008/12/27(土) 18:38:40 ID:6vw8P5nD0]
連投すいません。>>723です。

例えばNSTableColumnは NSArrayController.arrangedObjects.modelKeyとbindすると
model.modelKeyをその分だけ表示しますが...

このNSTableColumnのようにmodelの数だけ何かを表示する
カスタムビューを作るのを想定してくれると、やりたいことをわかってもらえるでしょうか?

この時NSArrayControllerは差分を送って来ないので、
カスタムビューは自分で差分取らなきゃいけない、これが差分だけ追加/削除できたら
ありがたいのに、という話なんですがどうでしょうか?

これを実現するのにmodelに対してリレーションを持つ別のmodel2が必要なんだとすると、
NSArrayControllerはいらなくなっちゃうし、便利じゃないような気がするんですが。

732 名前:名称未設定 mailto:sage [2008/12/27(土) 19:51:29 ID:dunn+fh10]
>>729
具体的に connection が死ぬ URL を教えてくれないと何とも言えんよ。
憶測で書くけども、
2. は didFailWithError: のなかから [connection cancel] を読んでみたら?
1. NSURLConnection は別スレッドでいろいろ動いているので、
メインスレッドが終了して app が終了したつもりだけど
副スレッドが終了してないから全体は終了していないのかもしれない。


733 名前:名称未設定 mailto:sage [2008/12/27(土) 23:23:38 ID:1ymko+SU0]
>>731
NSTableViewみたいなカスタムビューを作りたいのは分かったけど。
結局のところ、そのカスタムビューに表示させたい項目って何?
ある配列の追加/削除された差分のみを表示したいなら、その差分のみの配列を作って、それにバインドするのが良いです。

もし、カスタムビューに配列の全ての要素を表示させ、パフォーマンス改善のために差分のみが欲しいという話をしてるのなら、カスタムビューの設計が間違っているか、もしくはパフォーマンス改善のためのアプローチが間違っている気がします。

734 名前:名称未設定 mailto:sage [2008/12/27(土) 23:31:53 ID:53GKO3UPi]
>>732
しかしメインスレッドの終了時にそこで作成されたサブスレッドは終了されるんじゃないの?
そのDLされてるってのは全く別件な予感。

735 名前:名称未設定 mailto:sage [2008/12/28(日) 00:57:58 ID:cC5PCGpR0]
>>732
ちょっとはばかられる URL なもので一般論ですみません。
とりあえず [connection cancel] をしてみても同様にプロセス終了してもなお通信していました。
あと書き忘れましたが、一度スリープさせればその通信は切れます。
そうこうしているうちにその URL 群が全くエラーがでなくなってしまいました(それでいいんですけど)。

>>734さんの意見も関連して、NSURLConnection によって作られたスレッドは
メインのプロセスが終了しても生き続けるものなのでしょうか?
このようなことが絶対に起こらない、NSURLConnection の正しい書き方があるのでしょうか。


736 名前:名称未設定 mailto:sage [2008/12/28(日) 01:18:56 ID:Y9TmE8bu0]
>>735
このサイトは参考にならない?
developer.apple.com/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

737 名前:名称未設定 mailto:sage [2008/12/28(日) 01:32:53 ID:Y9TmE8bu0]
僕は以前NSSocketを使ってリモート間のコンピュータを制御したいなぁと
考えていたんだけど、時間が無くて諦めてしまった過去がある。

なんかそんなAPIを使うよりCFSocketを使ってるみたいだね。ボンジュールに関係して・・・・・

マァ結局Cで用意されているBSDSocketを使ってやったんだけど、
いつまでたっても原始人扱いっす。


738 名前:名称未設定 [2008/12/28(日) 02:15:09 ID:v0QJFQvm0]
NSSearchFieldにキーボードから入力→
1文字打つごとにデリゲートメソッドを呼んでインクリメンタルサーチさせてます。

結果を入れたNSMenuはNSSearchFieldの虫眼鏡アイコンをクリックすれば表示できるのですが、
クリックしなくてもメニューをビロッと出したいんです。

Spotlightみたいな動作はどんな風にやれば可能かわかる人います???
虫眼鏡をperformClick:してもだめでした。

739 名前:名称未設定 [2008/12/28(日) 03:42:46 ID:V8qdzKYEP]
>>738
ttp://aerial.st/2ch-log/cocoa/cocoa-005.html#res735 あたりが参考になるのでは。
これはNSSearchField中で↓キーが押下されたときにメニューを表示してるけど、
やることは同じだと思う。

740 名前:名称未設定 mailto:sage [2008/12/28(日) 06:27:37 ID:v0QJFQvm0]
>>739
朝早くからヒントをくれてありがとー。
popUpContextMenu:withEvent:forView:で解決したんだけど、位置決めするのに使うNSEventの
生成とか冗長で面倒でした。キー入力が少し間を置くと、ファーストレスポンダがNSMenuに取られて
しまうのでその辺を改善していこう..



741 名前:名称未設定 mailto:sage [2008/12/28(日) 08:30:32 ID:suc3Lt/M0]
>>733
えっと、カスタムビューの話は例ですが、
最初>>723でも書いてる通り、差分だけ受け取る方法は
NSArrayControllerを使わないで、ModelのNSMutableArrayを持つ
通知用オブジェクトを別途作ればできることはわかってます。

やってみるとわかるけどビューに限らず、NSArrayController.arrangedObjects.modelKeyと
bind:なりaddObserver:したオブジェクトが差分を受け取れないというのは凄く不便。
modelなりmodelKeyなりが全部くるのでそれぞれが何かを適用済みかどうか
判断しなきゃいけない。

<homepage.mac.com/mmalc/CocoaExamples/controllers.html>
の例でもやはりobserveしたオブジェクトが、保持している以前のものと
比較して差分を取ってます。

>>723で言いたいのは、実現するための別の解決策があるかどうかではなくて、
NSArrayControllerが差分を送らないんだけど、オプションなり使い方で
どうにかなんないかな?ということを聞きたかったです。(丸ごとしか受け取れないのか?ということ)

こんなだとNSArrayControllerの有用性って、それこそNSTableColumnとbind:するとき
以外に見いだせないんだが、誰かNSTableColumn以外とbindして便利に使ってる人いませんか?

bind:の時はまぁ色々としょうがないとしても、せめてaddObserver:の時は
Insertion/Removalで通知してほしいわけだが、なんでこんなんになってんのかなぁ...

この辺がわかるbindingの神様の出現を待ちます。

742 名前:名称未設定 mailto:sage [2008/12/28(日) 11:04:56 ID:UzeGKi4d0]
NSArrayController がそういう仕様なんだから仕方がない。
API にだって至らない点はあるさ。Apple にバグレポートをかいて、
10.6 で直ってることを期待するしかない。
だいたい問題の解決策を知ってるんだからあきらめたら?

743 名前:名称未設定 mailto:sage [2008/12/28(日) 11:39:36 ID:7HqAPOGr0]
>>741
結局のところ、何をしたいのかがさっぱりです。
NSArrayControllerは、ViewとModelの間に置くものです。
今回は、Modelとは接続していないそうですが、カスタムビューとも接続していないとなると、いったいどういう使い方をしてるんですか?

> やってみるとわかるけどビューに限らず、NSArrayController.arrangedObjects.modelKeyと bind:なりaddObserver:したオブジェクトが差分を受け取れないというのは凄く不便。
> 実現するための別の解決策があるかどうかではなくて、 NSArrayControllerが差分を送らないんだけど、オプションなり使い方でどうにかなんないかな?

別の解決策があるのに、あえてNSArrayControllerにこだわる理由はなんですか?
NSArrayControllerでは、どうにもならないことは自身で確認済みなのでは?


744 名前:名称未設定 mailto:sage [2008/12/28(日) 12:06:39 ID:suc3Lt/M0]
>>742
ありがとう。NSArrayControlerがそういう仕様なんだとすると、
NSTableColumn以外とのbindで役立つケースが見つからないので、
本当にそうなんだろうか?というのが質問のきっかけです。
自分が知らないだけかもしれないので。

>>743
やりたいことや解決策、NSArrayControllerにこだわるわけじゃなくて、
最初のレス通り、NSArrayControllerが差分を送らないのはなんなんだ?
差分じゃないなら他のModelやNSObjectControllerを使う方が便利、
だとするとNSArrayControllerの存在意義はNSTableColumnだけ?
というのを疑問に思ったんです。

既にNSArrayControllerを持っているのに、役立てることができず
回避策を取るのは美しいとは思えないし、

考え方のプロセスとしては、
回避策があるのでそっちを使う→そうするとNSArrayControllerをどうにも便利に使えない
→NSArrayControllerは不便なもの?→いや、自分が便利な使い方を知らないだけなのでは?
という感じです。

この辺誰も不便に思ってない事が不思議なんですが。
NSTableColumn以外とbind:してかつ便利な使い方あるよって人、
もしくは、いや不便だよそういうものみたいだよって人の意見聞きたいです。

とは言え、レスくれた人ありがとう。
ここはNSArrayControllerを便利に使うために納得いくまで調べたいです。
年明けになりそうですが。

745 名前:名称未設定 mailto:sage [2008/12/28(日) 12:09:46 ID:UzeGKi4d0]
>>744
>ここはNSArrayControllerを便利に使うために納得いくまで調べたいです。
>年明けになりそうですが。
いや、Apple がくれた API をそんなに神聖視してもしかたがないよ。
自分が使いかた知らないだけのばあいもあるけど、
実際 API に機能が足りないこともあるわけでさ。

NSArrayController はむしろ CoreData に接続してつかうのが主目的で
Apple はつくったんじゃないの?僕はそうやって
NSTableColumn に bind して便利に使えてるけど。


746 名前:名称未設定 mailto:sage [2008/12/28(日) 12:33:30 ID:suc3Lt/M0]
>>745
どうもどうも。

> いや、Apple がくれた API をそんなに神聖視してもしかたがないよ。
もちろんそうなんですが、まず自分の無知を疑うというのは自然だと思うんです。

Cocoa bindingの考え方と実現方法はNSBinderを含め素晴らしいと思うので、
なおさらNSArrayControllerの不便さを不思議に思ってたわけです。

主目的はわかるけど、NSArrayControllerを名乗ってるのに
NSArrayの扱いでNSObjectControllerや他のModelに劣るようだと
NSTableColumnでしか使えないNSArrayControllerって何?
いや自分がおかしいでしょJK、という発想になると思いまして。

やりたいこと、解決したい事があるわけではなくて
NSArrayControllerが不便なのが納得いってない、という感じなので、
ブラックボックスな部分でそういう不便な実装がなされている、
ということを少しでも垣間みることが出来たら、それで満足すると思います。
#できれば、便利な使い方がある、と言う方を期待してはいますが。

そういう先人がいたらと思って質問しました。

747 名前:名称未設定 mailto:sage [2008/12/28(日) 13:56:00 ID:hmFht9Ut0]
調べると出てきたと思うけど、ここの「(Missing) KVO notification old and new values」には
homepage.mac.com/mmalc/CocoaExamples/controllers.html

"The change dictionary doesn't contain old and new values.
This is not your fault, it's due to a bug in the controller.
This bug will not be fixed in the forseeable future."

って書いてあってねえ…
なぜAppleがこの挙動のままにしているのかは俺も不思議。

748 名前:名称未設定 mailto:sage [2008/12/28(日) 14:47:11 ID:7Qwd5CJii]
>>747
サンクス!

そこ読みとばしてた。ホントありがとう。ホント感謝。

あーもう俺のバカっ

付き合ってくれた人達にもほんと多謝。
良い年末を。





749 名前:名称未設定 mailto:sage [2008/12/28(日) 16:18:48 ID:7HqAPOGr0]
>>746
> NSArrayControllerを名乗ってるのにNSArrayの扱いでNSObjectControllerや他のModelに劣るようだとNSTableColumnでしか使えないNSArrayControllerって何?

NSArrayControllerは、MVCのうちControllerに当たるものです。それをModelとして扱おうとしてませんか?
それだと、根本的にうまくいきませんよ。


>>747
それは、バグじゃなくて、仕様だと思います。
NSArrayControllerは、Viewに対して配列を見せるためのものだと言う事を理解してください。
Viewにとっては、配列に追加/削除された項目を知ってもしょうがないです。
画面にリストなんかを描画するために、常に配列全体を要求するでしょう。

750 名前:747 mailto:sage [2008/12/28(日) 16:54:32 ID:4MFolM6V0]
>>749
NSArrayControllerのリファレンス見るとarrangedObjectsのところに
"This property is observable using key-value observing."
なーんて書いてあるから当然差分も受け取ることができると期待してしまうんだよ。

あと多分あんた釈迦に説法やってるぜ。



751 名前:名称未設定 mailto:sage [2008/12/28(日) 20:00:12 ID:stOPgQeC0]
NSMutableArrayにバインドしたNSArrayControllerの
追加や削除ってNSMutableArrayで行うもんじゃないの?
NSArrayControllerはそれに追従したりソートして見せかけたりするもので
直接追加や削除をしないもんだと思ってるんだけど。

752 名前:名称未設定 mailto:sage [2008/12/28(日) 22:31:51 ID:kMfgkKcQ0]
>>746
NSArrayControllerのbind相手にはNSTableColumn, NSTableViewの他にも
NSPopupButton, NSMatrix, NSCollectionView, IKImageBrowserViewがあります。
更に、GraphicsBindings(Cocoa Bindings Examples and Hints)のような自前の
カスタムクラスもあります。

change Dictionaryから情報がとれないのは、カスタムクラスとNSArrayControllerを
bindする時に余分な手間がかかることになりますね。
配列の要素のプロパティをobserveするのに必要な情報がchange Dictionary
からは得られないのは困ったものです。
現状ではGraphicsBindingsのような方法をとるしかないようです。
ただモデルオブジェクトのプロパティが変化したことの通知を受けるのに
arrangedObjects.propertyをobserveすることで、代用できる場合もあります。
どのオブジェクトかは不明だけどプロパティが変化したことは通知がきます。

私はNSMatrixのサブクラスで、iTunesのartWork viewerの様なものを作っていましたが、
LeopardでIKImageBrowserViewが導入されたので、IKImageBrowserViewに切り替えました。


753 名前:名称未設定 mailto:sage [2008/12/29(月) 08:10:15 ID:Y2X+4dQpi]
>>749-750
根本的に話が噛み合ってないよ

>>751-752
まさにそういう事


754 名前:名称未設定 mailto:sage [2008/12/29(月) 08:13:23 ID:Y2X+4dQpi]
あ、レス番間違えた
でもわかるよね
>>749,751と>>750,752ね

755 名前:名称未設定 mailto:sage [2008/12/29(月) 08:17:58 ID:drZoORpn0]
本人かどうか知らないけど、
そんなくだらないレスするな。


756 名前:名称未設定 mailto:sage [2008/12/29(月) 11:36:38 ID:Xwc+0ccb0]
>>747
mmalcってもしかしてあの英語がちょっとなまっている人か。

だいぶ前にバグとして認知されているのに直されないというのは、あまりインパクトがないと
認識されているか、fix が結構面倒くさいとか、何か理由があるんだろうねえ。

757 名前:名称未設定 mailto:sage [2008/12/29(月) 16:33:53 ID:TKk5E2Xt0]
>>756
英語下手なもんで mmalc さんの英語はまったく流暢にみえるんだが、
ちなみにどの辺がなまってるのか勉強のためにおしえてください

758 名前:名称未設定 mailto:sage [2008/12/30(火) 01:24:22 ID:I5OBkT890]
>>757
そのウェブページじゃなくて本人のしゃべり(発音)のこと。

759 名前:名称未設定 mailto:sage [2008/12/30(火) 14:20:27 ID:1+yUgkxZ0]
ああ、なるほど。本人にあったことないから判らないよ :p

760 名前:名称未設定 [2008/12/30(火) 17:30:33 ID:gOZWRIBD0]
バインディングについて基本的なところは分かってきました。

でもこんなことやっちゃていいのか!と思ってしまう。
でも便利なんだよねー。
特にNSTableViewに対して応用が利きそうだ。



761 名前:名称未設定 mailto:sage [2008/12/30(火) 20:52:08 ID:DGdbKMqz0]
a.アプリケーション間の通信について質問です。
 [NSDistributedNotificationCenter defaultCenter]
というのがあるようなのですが、イマイチ具体的な使い方が見つかりません。
とっかかりに便利なサンプルコードをご存知でしたら教えてください。

b.さらにググっていたら、
 [[NSWorkspace sharedWorkspace] notificationCenter]
っていうのを使っている例を見つけたのですが、これは
 [NSNotificationCenter defaultCenter]
というのとは違うものなのでしょうか?

この辺の飲み込みが悪くて・・・アドバイスをお願いします。

762 名前:名称未設定 mailto:sage [2008/12/31(水) 00:24:36 ID:OE+Yuv650]
すみません、年末に質問です。
NSTextViewのコンテキストメニューを自作しているのですが、
control+クリックでデフォルトメニュー(Search in Spotlight..)が表示されてしまいます。

サブクラスを作成して、- (void)rightMouseDown:(NSEvent *)theEventで
右クリックの場合は自作のメニューが表示できたのですが、
- (void)mouseDown:(NSEvent *)theEvent
{
// control click
if([theEvent modifierFlags] & NSControlKeyMask){
[self rightMouseDown:theEvent];
}
}
で右クリックの処理に飛ばしてもデフォルトのメニューが表示されてしまいます。
control+クリックでデフォルトメニューを消して自作メニューを表示させることは
出来ないのでしょうか?
ちなみに、setMenu:で自作メニューをセットすると、デフォルトメニューの下に
自作メニューが表示されてしまいます。



763 名前:名称未設定 mailto:sage [2008/12/31(水) 01:48:33 ID:OE+Yuv650]
すみません。>>762です。
NSViewのmenuForEventでいいのですね。あっさり解決しました。
スレ汚しすみません。

764 名前:名称未設定 mailto:sage [2008/12/31(水) 09:57:52 ID:JHc0H2Kf0]
>>761
a.
NSDistributedNotificationCenterのリファレンスにあるRelated Sample Codeは見ましたか?

b.
NSNotificaitonCenterはdefaultCenterのみとは限りません。自分でインスタンスを作って使うことも出来ます。
NSWorkspaceのリファレンスには他のクラス同様にNotificationの一覧がありますが、これはdefaultCenterではなく
NSWorkspaceのnotificationCenterを使って通知されます。

APIリファレンス読めば大抵のことは解決するんですよね。

765 名前:名称未設定 mailto:sage [2008/12/31(水) 13:05:09 ID:VM+WRBUK0]
>>763
Leopardならdeleage methodsの
- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex;
を使ってコントローラから制御できます。

release noteにしか記載がありませんが、使えます。
NSTextView.h
- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex;
// Delegate only. Allows delegate to control the context menu returned by menuForEvent:. The menu parameter is the context menu NSTextView would otherwise return; charIndex is the index of the character that was right-clicked.


766 名前:名称未設定 mailto:sage [2008/12/31(水) 15:35:14 ID:Hoil/CeQ0]
いきなり話ぶったぎるけど
NSMutableArrayまでthread unsafeになってるけど
正しくlockかけて使えばsafeな仕様なのかな?
それもだめならmain thread内で回しておいて最後にNSArrayにinitWithArrayすりゃいいんだけどそんなコストはなあ

まあthread内でNSEnumerator使っててconsoleにエラーログ大量に出てたんで
調べてみたらNSFileManager , NSEnumerator , NSMutableArrayが対象になってたのは分かった。
NSEnumeratorはまあ使わなくてもなんとかできるがNSFileManagerはそうはいかん。
でもってNSFileManagerの部分だけ取り出してthread回してみたら
どうにもこいつだけは回避できそうにもない
POSIX的にやるしかないんかね>thread内でファイル操作



767 名前:名称未設定 [2008/12/31(水) 15:43:39 ID:pWiXouOZ0]
で、要約すると?

768 名前:名称未設定 mailto:sage [2008/12/31(水) 15:50:23 ID:oXdRdpSS0]
>>766
何が問題なのかさっぱり解らん。
もう少し具体的に書いたら?

769 名前:名称未設定 mailto:sage [2008/12/31(水) 16:12:37 ID:Hoil/CeQ0]
>>768
いや書いたまんまなんだけど。
回避できない以上NSFileManagerを使わずにやるしかないのかなって話。

NSMutableArrayはテスト用のコード書き中。

770 名前:名称未設定 mailto:sage [2008/12/31(水) 16:15:23 ID:PCjQWXJZ0]
>>766
まずは Threading Programming Guide を読んでから質問しなさい



771 名前:名称未設定 mailto:sage [2008/12/31(水) 16:23:13 ID:Hoil/CeQ0]
>>770
とっくに読んでるって。
ちなみにNSAutoreleasePool関連の問題ではないよ>NSFileManager
ただの煽りなら消えてくれ。

772 名前:名称未設定 mailto:sage [2008/12/31(水) 17:20:46 ID:YdpY9GEO0]
>>771
何を回避したいのか全然わかんねぇよ。逆ギレしてるし。
要点をまとめて整理して書かないと誰にもわからん。

773 名前:名称未設定 mailto:sage [2008/12/31(水) 17:30:59 ID:BlFHlIMw0]
>>766
>NSMutableArrayまでthread unsafeになってるけど

NSMutableArrayぐらいthread safeにしとけって?
明らかにマルチスレッドでアクセスしない場合にもいちいちロックをかけられたりすると、
パフォーマンスが落ちるだけで嬉しくないんだけど...

>正しくlockかけて使えばsafeな仕様なのかな?

「正しく」使えばねw
NSMutableArray自体に同時アクセスしないことは当然として、要素の寿命にも気をつかわないと
いけないけど(あるスレッドで参照中に別のスレッドのせいでreleaseされるかもしれない)。

とりあえず部分レス。

774 名前:名称未設定 mailto:sage [2008/12/31(水) 17:31:23 ID:34R3NV1F0]
確かに>>766では誰も分からないよ。
まぁ詳細にかけない事情があるのだろうと察するけど。
それでも要点を絞って書くことは出来るはず。

ここは2チャンネルにしては珍しく、丁寧に答えてくださる方が結構いるほうだと思うよ。
ほかのプログラムスレは悲惨だけど。

775 名前:名称未設定 mailto:sage [2008/12/31(水) 18:43:53 ID:A5zFe/us0]
>>764
有り難うございます。こんな理解であっていますでしょうか。

[NSDistributedNotificationCenter defaultCenter]はタスク間で共有され(るもののラッパ)、
[NSNotification defaultCenter]はアプリケーション単位で用意され、
[NSWorkspace sharedWorkspace]もアプリケーション単位で用意され、
[[NSWorkspace sharedWorkspace] notificationCenter]はworkspace側で
 使われるnotificationCenterで、[NSNotification defaultCenter]とは別物
distributedの方はポインタ渡しが出来ないので高コスト、NSstringで代用されている

なので、タスク間で共有する場合以外はNSNotificationを使えばよく、
Workspace依存するもの以外はdefaultCenterでよく、
別途必要な場合のみ別途インスタンス化する

776 名前:名称未設定 mailto:sage [2008/12/31(水) 19:31:04 ID:OE+Yuv650]
複数のNSTableView間でドラッグ&ドロップを実装しているのですが、
自分のテーブルにドロップ出来ないようにするには、どうすればいいのでしょうか?

それぞれのNSTableViewのregisterForDraggedTypesで同一のペーストタイプ名を
登録しています。

777 名前:名称未設定 mailto:sage [2008/12/31(水) 20:16:52 ID:JHc0H2Kf0]
>>775
多分。あと[NSNotificationCenter defaultCenter]ですね。

>>776
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id <NSDraggingInfo>)info
proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)operation
で、
id draggingSource = [info draggingSource];
のdraggingSourceが自分かどうかチェックすればいいと思います。

778 名前:名称未設定 mailto:sage [2008/12/31(水) 20:40:36 ID:OE+Yuv650]
>>777
>>776です。ありがとうございます。
NSTableViewのサブグラスに実装して
// 自分のテーブルなら無視する
if ([info draggingSource] == self) {
return NSDragOperationNone;
}
で、行けました。

779 名前:名称未設定 mailto:sage [2008/12/31(水) 21:01:43 ID:JHc0H2Kf0]
>>778
dataSourceに実装するメソッドですので別にサブクラスを作る必要はないですよ。

780 名前:名称未設定 [2008/12/31(水) 21:57:09 ID:GejtfmAN0]
昨日バインドについて少しずつ分かってきたとのたまった者です。

私は阿呆でした。

荻原さんのObjective-C2.0のp507ページなんですが、
3行目に「辞書オブジェクトは"content"というキーで参照できます」
とあります。
これはそのまま受け取っていいのでしょうか?
それともそれは荻原さんが、そのプログラム内部でそう定めているから
そうなのでしょうか?

あほな私に助言していただければ幸いです。

後、唐突ですが、今年一年皆様に本当にお世話になりました。
来年もよろしくお願いします。



781 名前:名称未設定 mailto:sage [2008/12/31(水) 22:31:39 ID:MjZqxFiz0]
>>779
ええ、ただサブクラスとデータソースとデリゲートをひとつのクラスにまとめて書いています。
テーブルが多いのでそれぞれを分けて書くと多くなるので。


782 名前:名称未設定 mailto:sage [2008/12/31(水) 23:56:43 ID:GoahojC00]
>>780
みんなが荻原さん本持ってるとは限らないので、
質問内容が本を持ってない人にも分かるように質問してみたら?
そうやって頭の中を整理する過程で判るときもありますよ。

783 名前:名称未設定 mailto:sage [2009/01/01(木) 00:24:40 ID:JsmL13+v0]
2008年も無事終了。

皆さん、明けましておめでとうございます。

>>782
バインディングについて勉強中です。
キー値コーディング(KVC),キー値監視(KVO)については大体分かってきましたが、
その総決算とも言うべきcocoaバインディングに取り組んでいます。

windowにはtextFieldを配置し、こいつをNSDictionary型のdicとバインディングさせるだけのプログラムを作ってみました。

- (void)awakeFromNib
{
dic = [[NSDictionary alloc] initWithObjectAndKeys:@"value1",@"key1",nil];
objController = [[NSObjectController alloc] setContent:dic];

[textField bind :@"value" toObject :objController withKeyPath :@"content.key1" //これです。このContentがないとアクセスできません。コレは何?
      options :nil];
}
これでビルドするとtextFieldにValue1の値が入っている。
ただそれだけのプログラムなんですが・・・・

784 名前:名称未設定 mailto:sage [2009/01/01(木) 00:46:12 ID:nr1t9X2O0]
>>783
その「content」はNSObjectControllerのcontentプロパティのことなんです。
content.key1で、そのNSObjectControllerのcontentであるオブジェクトのkey1プロパティを指定してます。

IB上ではController KeyとModel Key Pathに分けて設定しますが、実際のところこれは一つのKey Pathです。

785 名前:名称未設定 mailto:sage [2009/01/01(木) 00:49:01 ID:NZvHn75T0]
正月からココアかよ!

786 名前:名称未設定 mailto:sage [2009/01/01(木) 00:57:45 ID:JsmL13+v0]
>>784
さっそくレスありがとうございます。

なるほどー。
そういうことだったんですね。
IBでもやろうと取り組んでいたんですが、
Controller keyが一体何のか分からなかったんですよ。

ありがとうございます。

787 名前:名称未設定 mailto:sage [2009/01/02(金) 16:00:52 ID:y7bSH71J0]
ObjCのメモリ管理って難しいですね。バグの温床になりそうです。こうなるとGCを使いたい気も
しますが、これはこれでプログラムの内容によっては別の問題を引き起こしそうな気もします。
ところでautoreleaseにしたobjectはframeworkが適当なタイミングで解放してくれるという
ことですが、運悪くretainする前に解放されてしまうことは起こりえないのでしょうか?

788 名前:名称未設定 mailto:sage [2009/01/02(金) 16:37:12 ID:dyxTOEUj0]
>>787
autoreleaseは、今ではないいつか、自分ではない誰かにreleaseされるというだけです。
より具体的に言えば、autoreleaseメッセージを送られたオブジェクトはNSAutoreleasePoolに登録され、
当該NSAutoreleasePoolが解放されるときにreleaseされます。
通常NSAutoreleasePoolはRunLoopごとに生成と解放を繰り返していますが、自分で生成・解放することも出来ます。

参照カウントによるメモリ管理はとっつきにくいかもしれませんが、一度理解すると簡単です。


789 名前:名称未設定 [2009/01/02(金) 18:22:04 ID:v8vXElzP0]
IB3.1ですがボタンをOption+ドラッグでコピーしてもNSMatrixが作られないんですがどのようにすればいいでしょうか?

790 名前:名称未設定 [2009/01/02(金) 18:25:38 ID:v8vXElzP0]
>>789
メニューからLayout->Embeded Objects in->Matrixでできました。なんでこんな方法に・・・



791 名前:787 mailto:sage [2009/01/02(金) 19:21:43 ID:anFlbT+C0]
>>788
解説ありがとうございます。(数日前にObjCを調べだしたばかりなので勉強になります。)
RunLoopごとということはイベント待ち状態に入るようなメソッドを呼び出した後は
autoreleaseなobjectは解放されてしまっている可能性があるということでしょうか。
そのような関数を呼び出す前にretainしておけば問題ないということですね。

> 参照カウントによるメモリ管理はとっつきにくいかもしれませんが、一度理解すると簡単です。

色々なclassを見て理解を深める必要がありそうです。今は@""で作られるNSString objectは
autoreleaseなのかな? Class methodから返されるobjectは普通autoreleaseになっていそう、
などと頭を悩ましています。

792 名前:名称未設定 mailto:sage [2009/01/02(金) 19:34:28 ID:dyxTOEUj0]
>>791
まずはリファレンスを一読することをお勧めします。英語の方が読みやすいですが。
developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/

参照カウントを用いたCocoaのメモリ管理については、ここによくまとまっています。
wwwa.dcns.ne.jp/~nito/CocoaClub/index.html

クラスメソッド、とくにファクトリメソッドと呼ばれるメソッドで返されるオブジェクトは基本的にautoreleaseされているものとして
考えて間違いありません。
例えば[NSString string]などですね。
これは自分でファクトリメソッドを作るときのことを考えれば理解出来ます。

あと@""で作られるNSStringはさらに少し特殊です。基本的に通常のNSStringと同様に扱うべきですが、
実際にはオブジェクト定数と呼ばれる解放されないオブジェクトです。

793 名前:名称未設定 mailto:sage [2009/01/02(金) 21:43:21 ID:7tH047C60]
自分でallocを記述しない限りreleaseを気にすることはないないなあ。
allocしてもautoreleaseで勝手にしてちょ状態だし。

794 名前:787 mailto:sage [2009/01/02(金) 23:16:09 ID:warDD5wN0]
>>792
補足の説明と資料へのpointerと補足ありがとうございます。Webには日本語版も
あるのですね。いくつか疑問に思っているところについて当たってみたいと思います。

>>793
慣れてしまうとそういうものなのでしょうか。今のところの印象としては常にカウンタの
動きを意識していないと解放してしまっている領域にアクセスしてしまいそうで少し怖い
というのがあります。

795 名前:名称未設定 [2009/01/03(土) 01:09:56 ID:W5I29rEl0]
ToolbarのToolbarItemについての質問です。

マックの「全般」もしくは「一般」みたいなイメージアイコンを使用したいのですが、
そういった情報が紹介されているサイトとかご存知の方、ぜひ教えてください。

796 名前:名称未設定 mailto:sage [2009/01/03(土) 07:54:36 ID:syVneJlP0]
たしかicons.hだかいうヘッダファイルに定義があったと思う。
違ってたらスマソ

797 名前:名称未設定 mailto:sage [2009/01/03(土) 10:10:44 ID:eDRVrGAa0]
>>795
IBのLibraryウインドウのMediaで探せばいい。そのアイコンならNSPreferencesGeneralって名前で表示されてるはず。
コードから利用するなら、[NSImage imageNamed: @"NSPreferencesGeneral"]]

798 名前:名称未設定 [2009/01/03(土) 10:56:55 ID:36pLQ2/L0]
初めまして。最近cocoaに興味を持ち始めたものなのですが、
旧版の楽しいCocoaプログラミングを読みました。これだけでは
次は詳解objective-Cを読もうと思っているのですが、Cの知識が
足りないのではないかと不安です。気にせず次の本に行ってしまって
構わないか、それともお勧めのCの本があれば教えて下さい
店頭で探したところ、MS-DOSでの操作法を書いたものばかりなので
使い難そうだなと思い、お尋ねしました。よろしくお願いします

799 名前:名称未設定 mailto:sage [2009/01/03(土) 11:09:53 ID:zpr/dVhB0]
気にせず進んで、足りないなと思ったらそのとき C の勉強したらいいと思います。
Objective-C で必要な C の知識は、C だけでプログラムする際に必要な C の知識
と重点が異なってくるので、C のためだけの本をまず読んで次に進むというのは
遠回りになると思います。もちろんいろいろ知っていて損はないんだけど。

それよりも、読むだけでなくて、じゃんじゃんサンプルコードを
実際に XCode でプログラムしてみることだと思います。

800 名前:名称未設定 mailto:sage [2009/01/03(土) 12:12:04 ID:Y07nrpBw0]
>>796-797
本当にありがとうございます。
明日、直ぐに確認します。

こういうときに手元にmacがないのが悔しいです。
3月に引越しするので、今PCを買うとどうかなと思って買えずにいるんですよ。

今は大学でminiを使っているんですが、proか自分でカスタマイズしたPCにOSをインストールして
これからもmacを使って少しでもObjective-Cの普及に貢献できればと思っています。




801 名前:名称未設定 mailto:sage [2009/01/03(土) 12:41:44 ID:5AoBrdvQ0]
>>798
どうしてもCの勉強をしたいなら「やさしいC」がオススメ
他の本と同じくWinを基準にした文章だけど、特に問題ないと思う
自分は大丈夫でした

802 名前:名称未設定 mailto:sage [2009/01/03(土) 12:54:13 ID:eEQ3v3z20]
>>798
たぶん大丈夫です。Obj-cしばらく使ってからようやくCのポインタ配列とか勉強
しましたし。
逆によほど特殊な場合じゃないと、使わないってことです。

803 名前:名称未設定 [2009/01/03(土) 15:47:37 ID:36pLQ2/L0]
>>799
>>801
>>802
解糖ありがとうございます。Cは必要に迫られて、という感じです。教えていただいた本は
ObjCを進めて行き詰まった時にでも読んでみます
サンプルコードを読めということですが、自分はXcodeの使い方がまだ分かっていないのか、
IBとXcodeで書いたファイルがどうつながるのか分かっていないようでアプリが作れない状態です
根本的な所が抜けているようなのでもう少し勉強してみる事にします

804 名前:名称未設定 mailto:sage [2009/01/03(土) 16:57:04 ID:RLKgqpNV0]
>>800
つMacBook
大学へも持ち運び出来るぞ。

805 名前:名称未設定 [2009/01/03(土) 18:35:16 ID:1ihLZGSiP]
最近は白いやつなら安いしなー

806 名前:名称未設定 mailto:sage [2009/01/03(土) 18:42:26 ID:QXEUHyuB0]
しかも明日もっと安いの出るかもよー。出ないかもよー。

807 名前:名称未設定 mailto:sage [2009/01/03(土) 20:33:29 ID:zpr/dVhB0]
>>803
たのココって XCode を一歩一歩触りながらアプリを作る方法のってないの?
それができないと詳解 Obj-C とか読んでも仕方がないよ。
まずはちいさいアプリでも実際に作れるようになるのが先決です。

808 名前:名称未設定 mailto:sage [2009/01/03(土) 22:17:32 ID:I13K2saa0]
やっぱり!とかHMDTとか?
まーどうでもいいや。
まだやる気ないし。

と803とは別の人が呟きました






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<262KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef