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

Cocoaはさっぱり!!! version.9
http://pc11.2ch.net/test/read.cgi/mac/1201106820/
Cocoaはさっぱり!!! version.8
http://pc11.2ch.net/test/read.cgi/mac/1179498292/
Cocoaはさっぱり!!! version.7
http://pc11.2ch.net/test/read.cgi/mac/1161486802/
Cocoaはさっぱり!!! version.6
http://pc11.2ch.net/test/read.cgi/mac/1146391229/
Cocoaはさっぱり!!! version.5
http://pc11.2ch.net/test/read.cgi/mac/1124986925/
Cocoaはさっぱり!!! version.4
http://pc11.2ch.net/test/read.cgi/mac/1091927026/
Cocoaはさっぱり!!! Version.3
http://pc5.2ch.net/test/read.cgi/mac/1063295248/
Cocoaはさっぱり!version:2
http://pc11.2ch.net/test/read.cgi/mac/1036923528/
Cocoaはさっぱり!
http://pc11.2ch.net/test/read.cgi/mac/1007632025/
2 Name: 名称未設定 [sage] Date: 2008/10/26(日) 03:43:22 ID: Ato5tySs0 Be:
関連スレ
Macでプログラミング{9}
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
MacOS XをUnixとして使ってる人の為のスレ その14
http://pc11.2ch.net/test/read.cgi/mac/1216715423/
Xcode part7
http://pc11.2ch.net/test/read.cgi/mac/1218774554/
MacでJava その4
http://pc11.2ch.net/test/read.cgi/mac/1214284891/
RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/
AppleScript アップルスクリプト 質問、発表 3
http://pc11.2ch.net/test/read.cgi/mac/1223026902/
Cocoaリファレンス日本語化計画
http://pc11.2ch.net/test/read.cgi/mac/1207312910/
3 Name: 名称未設定 [sage] Date: 2008/10/26(日) 19:27:40 ID: Ob0KlCLP0 Be:
>>1

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

まだ情報少ないみたいだけど、メモ代わりに使わせてもらおっと
4 Name: 名称未設定 [sage] Date: 2008/10/27(月) 17:43:20 ID: 9uBJK4c00 Be:
いちもつ
5 Name: 名称未設定 [sage] Date: 2008/10/28(火) 00:59:41 ID: YdtXB3i50 Be:
テンプレに英語系 Cocoa 役立ちサイトを追加:
本家ドキュメント
http://developer.apple.com/referencelibrary/Cocoa/
わかりやすいチュートリアル
http://cocoadevcentral.com/
Cocoa に関する Wiki
http://cocoadev.com/
Cocoa blog 一覧
http://cocoablogs.com/

だれか日本語の Cocoa サイトをまとめて。
6 Name: 名称未設定 [sage] Date: 2008/10/28(火) 01:32:23 ID: UXhSYK7I0 Be:
>>5

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

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

HMDT
http://homepage.mac.com/mkino2/

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

こんなとこ?

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

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

ほかにもオヌヌメあったら、ヨロシコ
7 Name: 名称未設定 [sage] Date: 2008/10/28(火) 01:41:19 ID: Fus9Bxnw0 Be:
Cocoa Break!
http://park15.wakwak.com/~concordia/cocoa_break/index.html

Cocoa Bindings Examples and Hints
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html
8 Name: 名称未設定 [] Date: 2008/10/28(火) 10:47:25 ID: e40mOyml0 Be:
とりあえず良さげな知っている所を挙げてみる
Omni Developer
http://www.omnigroup.com/developer/

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

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

みるくCocoa
http://www.stripe-net.jp/cocoa/
9 Name: 名称未設定 [sage] Date: 2008/10/28(火) 12:34:15 ID: /p+sPRRh0 Be:
全然書き込みないけど

Carbonはさっぱり!!!
http://pc11.2ch.net/test/read.cgi/mac/1217108500/
10 Name: 名称未設定 [sage] Date: 2008/10/28(火) 18:29:50 ID: e40mOyml0 Be:
あ、これ忘れてあげないで。
Objective-C [ObjC part:3];
http://pc11.2ch.net/test/read.cgi/tech/1186543111/

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

【Cocoa】Macプログラマのスレ【Objective-C】
http://pc11.2ch.net/test/read.cgi/prog/1214208397/
11 Name: 名称未設定 [sage] Date: 2008/10/28(火) 18:47:24 ID: /p+sPRRh0 Be:
OmniGraffleやOffice 2004(たぶん2008も)のUtility Windowのように、
ドラッグにより、Window同士がある程度近づくと、ドラッグがある程度離れるまで、
ぴったりくっついた状態をキープする動きを実装したいのです。

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

mouseDragged:内で、[NSWindow setFrameOrigin:]などで位置を強制的に固定しようとしても、
mouseUp:になるまで効きませんでした。どうすればいいのでしょう?
12 Name: 名称未設定 [sage] Date: 2008/10/28(火) 21:40:46 ID: iCg2NlHu0 Be:
>>11
http://www.literatureandlatte.com/freestuff/index.html
にある、KBPalettePanelExampleがそれっぽい挙動実装してるよ。
13 Name: 11 [sage] Date: 2008/10/29(水) 19:46:15 ID: lZE7N+XQ0 Be:
>>12
まさにこれですね。じっくり見てみます。
とりあえずありがとうございます。
14 Name: 名称未設定 [sage] Date: 2008/10/29(水) 22:02:38 ID: cQqhv9zc0 Be:
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 Name: 名称未設定 [sage] Date: 2008/10/30(木) 16:30:52 ID: 01X0n4GO0 Be:
オブジェクトのディープコピーをするにはどうしたらいいですか?
16 Name: 名称未設定 [sage] Date: 2008/10/30(木) 23:25:40 ID: sjApbA2/0 Be:
自分でメソッドかけば仕舞いだと思いますが。
めんどくさければ、
NSKeyedArchiver で NSData にかためて、
NSKeyedUnArchiver で NSData にとかせばディープコピーになるんでは?
17 Name: 名称未設定 [sage] Date: 2008/10/31(金) 00:07:46 ID: WY8mn5mD0 Be:
俺いつもそうやってるw
18 Name: 名称未設定 [sage] Date: 2008/10/31(金) 00:22:36 ID: Ijy6iEQp0 Be:
>>15
ここ読むといいかもしれない。
http://journal.mycom.co.jp/column/objc/058/index.html
19 Name: 名称未設定 [sage] Date: 2008/10/31(金) 10:11:29 ID: nFHujBCu0 Be:
>>14
まあ自分では対処しようがないんだから気にすることは無いんじゃない?
あと@"string"をインスタンス変数に入れて
初期化が一回だけになるようにしたらどうだろう?
たしか文字定数は初期化一回だけのはずではあるけど
20 Name: 名称未設定 [] Date: 2008/10/31(金) 22:16:59 ID: 9ab+JRCT0 Be:
Xcode 3.1/Mac OS 10.5.5 (intel)
MacBookとか、iMacとかのモデル名を取得する方法ってあるでしょうか。
21 Name: 名称未設定 [] Date: 2008/10/31(金) 22:30:21 ID: 3evJZ2XL0 Be:
>>20
ハードウエアの情報については、開発ツールのIORegistryExplorerで目的のものがあるか探してくれ
22 Name: 名称未設定 [sage] Date: 2008/10/31(金) 22:34:21 ID: cB2Q2v1H0 Be:
ADCの日本語ドキュメントを見ながら初Cocoaに触れてますが、チュートリアルでいきなりつまずきました。
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/06Controller/chapter_6_section_6.html
ここで
> ConverterController.hファイルを選択して「開く」をクリックします。
とありますが、これをやっても何もおきません。図5-3のようにもならなければエラーも出ません。
何が原因でしょうか???
23 Name: 名称未設定 [sage] Date: 2008/10/31(金) 22:42:52 ID: 23e1rSMO0 Be:
なにもおきなくて正解です。単にその操作は、
.h に書かれている内容を IB に教えてあげるだけです。
図 5.3 のようにするには、ステップ 3 をしないといけないです。
ライブラリから青い立方体のをドラッグ&ドロップして、
クラス名を NSObject から ConverterController にしてやらないといけないです。
24 Name: 22 [sage] Date: 2008/10/31(金) 22:53:59 ID: cB2Q2v1H0 Be:
>>23
おお!なるほど!できました!
それにしても紛らわしい書き方ですね…。
25 Name: 名称未設定 [sage] Date: 2008/10/31(金) 23:04:11 ID: 23e1rSMO0 Be:
Apple のかわりにあやまっておきます。ごめんなさい。
あと、普通は 2. のステップ (.h を開く もしくは IB にドロップ) は
IB が自動的に XCode に登録されてる .h を全部監視しているので
しなくてもいいんですが、ときどき IB が混乱して
新しい .h を読まなかったりするので、やり方は覚えておいたほうがいいでしょう。

まあ頑張ってね :) 仕組みがわかれば IB は快適です。
26 Name: 名称未設定 [sage] Date: 2008/11/01(土) 01:11:52 ID: n4dRfqKu0 Be:
>>21
ありがとうございます。見つかりました。
Macにもレジストリってあったんですか…。
27 Name: 名称未設定 [sage] Date: 2008/11/01(土) 01:17:48 ID: nRvsaBqW0 Be:
てめー、Mr. Registry.appさんにケンカうってんのか
28 Name: 名称未設定 [sage] Date: 2008/11/01(土) 03:04:31 ID: ABXtPrBS0 Be:
RegistryはMicrosoftの登録商標ですか
29 Name: 名称未設定 [sage] Date: 2008/11/01(土) 04:53:05 ID: lyFOviiP0 Be:
iPhoneで何か作るか~と昔買ったヒレガス本を引っ張り出してきて
まーとりあえず、cocoaでOSX用乱数発生アプリを手本通りに組んで
追々思い出しながら手慣らしを~・・・

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

Xcode3(というかインターフェースビルダーというか)が変わってて
昔の本の記述が役に立たねぇ orz
30 Name: 名称未設定 [sage] Date: 2008/11/01(土) 12:13:33 ID: azplz7rR0 Be:
つうかCocoaの「たのココ」とかチュートリアルとか、
に何となく簡単そうに見える本から入っていく初心者って、
IBでGUI作ったりチュートリアルのコピペあたりで終わって
つまづいて進歩しないか、飽きていくのがほとんど。

ちゃんとC言語、オブジェクト指向、Objective-C、と基礎から
積み上げて行かないと、いくらやっても表面なでてるだけで、
まともに書けるようにならないよ。
31 Name: 名称未設定 [sage] Date: 2008/11/01(土) 12:39:28 ID: IrrqNq8q0 Be:
確かに今活躍してるCocoa開発者はNeXTのときにみっちり身につけてる人らばっかりだもんな。
32 Name: 名称未設定 [sage] Date: 2008/11/01(土) 12:57:52 ID: 5Mi4Vs1D0 Be:
MacOSXがリリースされてから、すでに7年はたっている。
これだけ時間があれば、NeXTを知らなくても、Cocoaを身につけられる
33 Name: 名称未設定 [sage] Date: 2008/11/01(土) 13:00:28 ID: suYAyqpA0 Be:
んなことはない。「たのココ」は知らんが、俺は「ヒレガス本」から入った。
後はサンプルをつまみ食いしつつ、AppleのサイトのApplicationKitと
Foundationのクラスのドキュメントを読めば何とでもなる。Cを知らないと
話にならんが、最初からObjective-Cをすべて網羅する必要はない。

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

NeXTからやってる奴なんてごく少数だ。
34 Name: 名称未設定 [sage] Date: 2008/11/01(土) 13:02:11 ID: suYAyqpA0 Be:
>>33>>30>>31へのレスだよ。
35 Name: 名称未設定 [sage] Date: 2008/11/01(土) 13:13:39 ID: 9deuPHbB0 Be:
俺も>>33と同意見

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

最近ようやくCの入門書を買って読み始めた
最初にCの入門書を読んでいたら確実に挫折していたと確信している
36 Name: 名称未設定 [sage] Date: 2008/11/01(土) 17:13:04 ID: fjrubA2a0 Be:
>>35
何作ったの?
37 Name: 名称未設定 [sage] Date: 2008/11/01(土) 17:58:25 ID: n4dRfqKu0 BE:226400933-2BP(1235) Be:
sssp://img.2ch.net/ico/si.gif
>>35
有料化できるアプリってどういうのなんだろ。
やっぱちゃんと作らないといけないイメージがある。
あと、レジストキー関係のプログラムが面倒くさそう。
適当でも良いんだけど、適当だと簡単に破られるしね。
そこらへん、iPhoneは有料アプリ組みやすいのかな?

俺の暇つぶし集↓今んとこ全部無料。
http://www.smilemac.com/
38 Name: 名称未設定 [sage] Date: 2008/11/01(土) 19:57:18 ID: azplz7rR0 Be:
C言語からはじめる必要はないか。
ただIBで遊んだりチュートリアルのコピペをしばらく
楽しんだら、ある程度基礎的なことも理解していく必要は
あると思うけどね。

その点で、
> 最近ようやくCの入門書を買って読み始めた
という>>35はもう次のステップにうつっているから
良いんだけど、そういうステップに行く前に挫折する人が多いのも
事実。
39 Name: 名称未設定 [sage] Date: 2008/11/01(土) 20:06:00 ID: ABXtPrBS0 Be:
Cすらも分からんのに何やるのさ
40 Name: 14 [sage] Date: 2008/11/01(土) 20:41:08 ID: pd2MLZdJ0 Be:
>>19
元々はCocoaバインディングを使ってみて同じ現象になったんでバインディングの
使い方が悪いのかと思ってたんですが、使わなくてもなったんでデバッガの使い方が
悪いのかと思って質問しました。
気にしないことにします。

>>35の行動力は凄いな。
41 Name: 名称未設定 [sage] Date: 2008/11/01(土) 23:23:16 ID: /+/D9BW40 Be:
>>37
>あと、レジストキー関係のプログラムが面倒くさそう
iPhone の場合はそのあたりは全部 AppStore が面倒見てくれるので
なにも書かなくていい。
42 Name: 名称未設定 [sage] Date: 2008/11/01(土) 23:32:13 ID: sVr4qJRL0 Be:
>>37
誰かと思ったらMacNicoPlayerの作者さんじゃないかw
暇つぶしとかそんなまた謙遜を。

なんか35見て感動したのでたのCocoAmazonで買ってくるか。
43 Name: 名称未設定 [sage] Date: 2008/11/02(日) 00:12:33 ID: lKREfCNZ0 Be:
>>35はかなりセンスあるんだな。
俺は趣味グラマ長いけど、未だにInterfaceBuilderには馴染めない。(泣
44 Name: 名称未設定 [sage] Date: 2008/11/02(日) 00:23:21 ID: HoLoopJM0 Be:
>>43
習うより慣れろ。by パソコンサンデー おヅラも出てたな。
45 Name: 名称未設定 [sage] Date: 2008/11/02(日) 00:36:37 ID: lKREfCNZ0 Be:
パソコンサンデー・・・
何もかもが懐かしい。
スレ違いスマン。
46 Name: 35 [sage] Date: 2008/11/02(日) 00:45:43 ID: lImmlfsv0 Be:
iPhone Dev Centerのドキュメントとサンプルコードが充実していたので
なんとか一本書けた感じです
http://developer.apple.com/iphone/

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

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

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

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

>>46
iPhone開発って難しいイメージあったんだが、iPhone SDKのリファレンス見たら、そうでもないのか。
Cocoaアプリ作る要領で、リファレンス見ながらやればすぐいける感じかな?
ちょっくら作ってみるか、実機もって無いけどorz
48 Name: 名称未設定 [sage] Date: 2008/11/02(日) 01:11:24 ID: lImmlfsv0 Be:
>>47
シミュレータで動かすだけなら無料
実機転送とAppStoreに公開したいのなら$99払う必要有り

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

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

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

詳しくはiPhone開発スレで
http://pc11.2ch.net/test/read.cgi/mac/1224089976/
49 Name: 名称未設定 [sage] Date: 2008/11/02(日) 02:08:28 ID: lyXSXRrr0 Be:
バカお前ら騙されるな
>>35 = mkino (=たのcocoの著者) だ!!
>>35は宣伝なんだよ!!
50 Name: 名称未設定 [sage] Date: 2008/11/02(日) 02:09:20 ID: j7DXTstY0 Be:
ΩΩΩ < 何だって~~!
51 Name: 名称未設定 [] Date: 2008/11/02(日) 02:20:49 ID: fJQfdcGh0 Be:
やられた!
>>35 見て、今すぐ書店に急いじゃったぜ!
52 Name: 名称未設定 [sage] Date: 2008/11/02(日) 03:34:40 ID: Y374j0B40 Be:
アメリカの会社なのに社会主義的でおかしいよね
53 Name: 名称未設定 [sage] Date: 2008/11/02(日) 04:03:29 ID: sEZUqidf0 Be:
>>35は売り上げを晒すかアプリを晒して欲しい。
54 Name: 名称未設定 [sage] Date: 2008/11/02(日) 04:10:21 ID: Y6GegVsr0 Be:
なんで49とか53はそう悪意というか疑いの目で35を見るかな....
嫉妬でもしてるのか?
55 Name: 名称未設定 [sage] Date: 2008/11/02(日) 04:29:03 ID: 9VM5jO2v0 Be:
iPhoneのアプリ作ってる人ってカタギじゃないですよね?
56 Name: 名称未設定 [sage] Date: 2008/11/02(日) 04:55:14 ID: CejDTsgr0 Be:
>>54
パソコンサンデーとか言って通じる辺り、たぶんここの平均年齢層は高いのだと思うが、
そういう世代にとって、プログラミングというのは「模型を作る」のと同じレベルの趣味で、
さーて、なんかiPhoneだと世界相手にプログラム作って売れるらしいからなー
こりゃ面白い、あーでもMSXマガジンの頃はいくらでもアイデア出たのに、
長年離れてたら勘が鈍ったなー まーcocoaの作法覚えながら、また少しずつ鍛えるかー
ぐらいのもんなんだが、

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

じゃなくて、プログラミングというのは専門学校かなにかで習って、
企業に就職したプロが、プロジェクトチームでカネを掛けてやるもの。
ってことに(その子の中では)なってる子が、
これ系の別スレにも迷い込んでて周りと話がかみ合ってなかった。
57 Name: 名称未設定 [sage] Date: 2008/11/02(日) 05:26:20 ID: Y6GegVsr0 Be:
自分はパソコンサンデー?なにそれ?って感じの世代だがそのホビーとしてのプログラミングって言う発想は分かる。

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

でもそういえば自分は文系だった気がする。おかしいかな?
58 Name: 35 [sage] Date: 2008/11/02(日) 07:17:52 ID: lImmlfsv0 Be:
パソコンサンデー?
なんだか方向がズレてきてるけど
とりあえず自分が言いたかったことは

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

こんな感じです

アプリは実名で出しているのでアプリ名晒しは勘弁してください
これまでの売り上げはMacBookが買える程度です
売り上げのほとんどが海外です(これもiPhoneアプリのおもしろいところ!)
ではみなさんもがんばって!
59 Name: 名称未設定 [sage] Date: 2008/11/02(日) 09:39:27 ID: 3POzmbdQ0 Be:
ObjC (Cocoa) + IB ってのが、簡易言語的な感じでとっつきやすいんだろうね。
で、実用的なGUIなアプリが割と楽に作れるし、達成感もあると。

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

iPhoneのアプリなんかは、単純なプログラミングの技術より、何かいい発想の
ある人の方が面白いものを作れる可能性が高いような気がする。
60 Name: 名称未設定 [sage] Date: 2008/11/02(日) 10:18:24 ID: anI9QKlo0 Be:
35が宣伝でも構わんが、たのCocoは正直オススメできない。
内容も薄いし、理解させようと言う意識が感じられない。
入門ならヒレガス本をオススメする。
61 Name: 名称未設定 [sage] Date: 2008/11/02(日) 10:21:52 ID: sje4Pdr1P Be:
しかしIBのインターフェースが変わったのがヒレガス本としては痛いな
早く新版でないかなー
62 Name: 名称未設定 [sage] Date: 2008/11/02(日) 10:28:52 ID: Y6GegVsr0 Be:
もう新版出てないか?>ヒレガス
http://www.amazon.co.jp/exec/obidos/ASIN/0321503619/
Amazonには2001,2004,2008が全部売られているけどタイトルで分類しているせいか全てに同じ内容の商品説明とカスタマーレビューがついていて混乱する。
63 Name: 名称未設定 [sage] Date: 2008/11/02(日) 10:54:58 ID: 3Vx+y2lH0 Be:
>>62
たぶん>>61は和訳されたものが欲しいのだと思う。

俺も旧版の和訳しか持っていないので
新版出てくれるとありがたい。
64 Name: 名称未設定 [sage] Date: 2008/11/02(日) 19:07:02 ID: /LuXh8CU0 Be:
>>29

好きに使え、って書いてあったから、XCode3用のチュートリアル書いてみた。
http://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 Name: 名称未設定 [sage] Date: 2008/11/02(日) 19:14:03 ID: MKapFhX90 Be:
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/05View/chapter_5_section_1.html#//apple_ref/doc/uid/TP40000863-CH7-SW1
66 Name: 名称未設定 [sage] Date: 2008/11/02(日) 21:02:55 ID: mqh/+RaW0 Be:
すみません、質問です。
アプリを起動した直後に特定のテキストフィールドなどにフォーカスを
当てたいのですが、どうすればよいのでしょうか?
67 Name: 名称未設定 [sage] Date: 2008/11/02(日) 21:06:32 ID: sje4Pdr1P Be:
>>64
コメントありがとね
画像アップはちょっとまってて、
2、3日でリアルが片付くから、それからやります
不便をさせて申し訳ない
68 Name: 名称未設定 [sage] Date: 2008/11/02(日) 21:54:10 ID: lKREfCNZ0 Be:
ここ数日ADCのレスポンスが異常に悪いんですが、皆さんいかがですか?
Software Updateもタイムアウトで完了できない有様で・・・。
69 Name: 名称未設定 [sage] Date: 2008/11/02(日) 22:03:51 ID: Y6GegVsr0 Be:
>>68
Snow Leopardの新seedのせいとか?
70 Name: 名称未設定 [sage] Date: 2008/11/02(日) 22:03:55 ID: rI4hnwUX0 Be:
>>64
Cocoa Bndingになってる
71 Name: 名称未設定 [sage] Date: 2008/11/02(日) 22:11:09 ID: MKapFhX90 Be:
>>68
-(void)awakeFromNib{
[myField becomeFirstResponder];
}
72 Name: 名称未設定 [sage] Date: 2008/11/02(日) 22:11:42 ID: MKapFhX90 Be:
ごめん、安価ミス
>>66宛。
73 Name: 名称未設定 [sage] Date: 2008/11/02(日) 23:48:27 ID: mqh/+RaW0 Be:
>>71
ありがとうございます。
ちなみに調べていて

[myWindow makeFirstResponder:myField];

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

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

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

とあるね
75 Name: 名称未設定 [sage] Date: 2008/11/03(月) 00:58:24 ID: Hr4zrpPq0 Be:
becomeFirstResponderってオーバーライド用じゃなかったっけ?
76 Name: 名称未設定 [sage] Date: 2008/11/03(月) 02:17:40 ID: qCH2Sci10 Be:
OSX10.3辺りで一時期cocoaに触れて、
その時に作ったソフトが起動すらしなくなったので改めて一から作り直そうと
久々にcocoaに再挑戦する所なのですが、
レオパルドの開発環境では何か根本的に作り方が変わったりしてるんでしょうか?
77 Name: 名称未設定 [sage] Date: 2008/11/03(月) 02:44:14 ID: 1yy3U75q0 Be:
再ビルドすれば起動するんじゃないの

IBが変わりすぎて慣れるのに時間がかかる。
78 Name: 名称未設定 [sage] Date: 2008/11/03(月) 02:52:02 ID: mTkV4jRn0 Be:
>>74-75
73ですけどご意見ありがとうございます。
makeFirstResponder を使った方が良いという事ですよね。
79 Name: 76 [sage] Date: 2008/11/03(月) 03:22:30 ID: qCH2Sci10 Be:
以前改良しようと中途半端に手を加えた場所等、
もう全体構造が判らなくなってるので一から作った方が早いと思ったからです。
80 Name: 名称未設定 [sage] Date: 2008/11/03(月) 03:36:44 ID: Foy84T9X0 Be:
いや、プログラムのサイズにもよるけど、
がんばって思い出してみたほうがいいんじゃないかな。
とりあえずは昔のプロジェクトを最新の xcode で開いて、
コンパイルしてみるのをおすすめします。
なにか 10.5 になってなくなった/挙動がかわった
API をつかってるのかもしれないし ...
デバッガでどこで落ちてるのかを調べるだけでもちがうでしょう。

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

>>77 さんもいうように
IB3 は IB2 からかなり変わりましたが、outlet / target の考え方はかわらないし。
クラスは IB 側で作らずに XCode で作ることが推奨されるようになったぐらい?
81 Name: 名称未設定 [sage] Date: 2008/11/03(月) 10:01:54 ID: DCZONU6Z0 Be:
>>73
IBでwindowのinitialFirstResponderとテキストフィールドを繋げてもできた
後はnextKeyViewを繋げていけばタブキーの移動が制御できた
82 Name: 名称未設定 [sage] Date: 2008/11/03(月) 10:02:46 ID: dKQvPNo00 Be:
>>78
becomeFirstResponderは「自分がFirstResponderになるか否か」を返すためのもの。
FirstResponderにしないビューを作りたい場合、
becomeFirstResponderをオーバーライドしてNOを返せば良い。

- (BOOL)becomeFirstResponder {
return NO;
}
83 Name: 名称未設定 [sage] Date: 2008/11/03(月) 18:19:30 ID: jVQJ8W/E0 Be:
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 Name: 名称未設定 [sage] Date: 2008/11/03(月) 19:17:31 ID: +8TFOxC70 Be:
>>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]);

http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html
85 Name: 名称未設定 [sage] Date: 2008/11/03(月) 20:07:58 ID: YM+SucNB0 Be:
要は符号付き/無しとエンディアンの話か。
86 Name: 名称未設定 [sage] Date: 2008/11/04(火) 18:54:34 ID: eYzISOw90 Be:
ライブラリのパスの渡し方を教えてください

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

ちなみにヘッダファイルのパスは上手く通ります。
87 Name: 名称未設定 [sage] Date: 2008/11/04(火) 23:33:36 ID: G6xtfucg0 Be:
>>86
スタティックライブラリ(.a?)ならファイルが並んでるツリーのところで
右クリック->追加->既存のファイルでライブラリファイルを選択
同様にヘッダファイルを追加してビルドすればできたっぽい
プロジェクトの設定とかはいじってない
88 Name: 87 [sage] Date: 2008/11/04(火) 23:38:48 ID: G6xtfucg0 Be:
>>87に追記
*.a、*.hの追加時にコピーは作っても作らなくてもできた
89 Name: 名称未設定 [sage] Date: 2008/11/04(火) 23:41:04 ID: eYzISOw90 Be:
>>87
ありがとうございます。
明日確認してみます。
90 Name: 名称未設定 [sage] Date: 2008/11/05(水) 21:09:37 ID: 19atskXb0 Be:
NSTableView内のセルを編集可能にして
セルの内容をプログラム内で読めるようにしたいのですが、
どのようなメソッドを使えばいいのでしょうか?

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

元々用意してたデータをNSTableViewに表示までは出来るようになったのですが。。。
91 Name: 名称未設定 [sage] Date: 2008/11/05(水) 22:03:03 ID: bThhRr9i0 Be:
>>90
tableView:setObjectValue:forTableColumn:row:

セルの内容が変更になった時に呼ばれるから、
該当するデータを差し替えれば良い。
92 Name: 76 [sage] Date: 2008/11/06(木) 08:26:12 ID: 8NSMQDOL0 Be:
遅れながら、言われた通りちょこっと頑張って直せました。
レオパになってメモリ管理の新機能が付いたとかチラ聞きして
その辺りも含めて立ち上がらなくなったのかとか色々考え過ぎて腰が引けてた様です。
有り難うございました。
93 Name: 90 [sage] Date: 2008/11/06(木) 11:23:58 ID: FHeExVxB0 Be:
>>91さん
出来ました! 素早い解答ありがとうございます。
94 Name: 名称未設定 [sage] Date: 2008/11/06(木) 21:38:07 ID: 5DYNPx6+0 Be:
NSTextField内の挿入ポイントを行の最後に移動したいのですが
どうすればいいでしょうか?
moveToEndOfLine: はNSTextViewでしかできませんでした。
95 Name: 名称未設定 [sage] Date: 2008/11/06(木) 21:48:16 ID: 4wWZp45n0 Be:
currentEditor で NSText を取り出して moveToEndOfLine:
96 Name: 名称未設定 [] Date: 2008/11/06(木) 23:12:39 ID: xQKaLsP4P Be:
うちのCocoa Wikiにコメントをくれた人、いますかね?
ファイル添付機能を有効にしたので、再度編集していただけると嬉しいです。
ちなみにファイルサイズの上限は5MBです。
97 Name: 名称未設定 [sage] Date: 2008/11/06(木) 23:48:14 ID: 5DYNPx6+0 Be:
>>95
[[inputTextField currentEditor] moveToEndOfLine:self];
できました、ありがとうごさいます。
98 Name: 名称未設定 [sage] Date: 2008/11/07(金) 01:50:36 ID: ww1WLO3q0 Be:
>>96
ありがと
マターリとやっていきます。
99 Name: 名称未設定 [sage] Date: 2008/11/07(金) 09:13:42 ID: Xt4hlMq90 Be:
http://cdn1.ustream.tv/swf/4/viewer.45.swf?cid=317016
めちゃくちゃ可愛い
100 Name: 名称未設定 [sage] Date: 2008/11/07(金) 11:15:30 ID: DD7bYBXs0 Be:
いまいち何が問題なのかわからないので、質問させてください。
まず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 Name: 名称未設定 [sage] Date: 2008/11/07(金) 11:18:38 ID: I+wKqcuj0 Be:
↑フラッシュの穴を付いた攻撃なので注意
102 Name: 名称未設定 [sage] Date: 2008/11/07(金) 11:20:56 ID: Xt4hlMq90 Be:
[myArray initWith...] じゃだめ。その時点では myArray は nil でしょ。
nil に initWith メッセージを送ってもどうしようもないです。
myArray=[NSMutableArray alloc];
として myArray に NSMutableArray のインスタンスをつくってから、
initWith... しないと。普通は組み合わせて
myArray=[[NSMutableArray alloc] initWith... ]
とするのが吉。

ルート集合って何のことなのか具体的なことが本に書いてあるはずだけど、
読みましたか?読めばどうすればよいのかこともわかるはずだけど...
103 Name: 名称未設定 [sage] Date: 2008/11/07(金) 11:22:48 ID: Xt4hlMq90 Be:
え。このフラッシュって悪い奴なの?ごめんなさい。
単に犬の赤ちゃんの live webcam で可愛いなあと思ってみてたんですが...
104 Name: 名称未設定 [sage] Date: 2008/11/07(金) 12:55:31 ID: xQSQPAmW0 Be:
それをなぜこのスレに貼る
105 Name: 100 [sage] Date: 2008/11/07(金) 13:08:19 ID: DD7bYBXs0 Be:
>>102さん
確かに[myArray [[NSMutableArray alloc] init..]とすると動きました。
初めて1月たつのに、まだまだ基本的な所が理解できていないようです。
本は荻原さんの詳解Objective-C2.0を読んでるんですが、
外部変数や大域変数がなんなのか、そこから参照するというのがよくわかりません。
106 Name: 名称未設定 [sage] Date: 2008/11/07(金) 14:08:16 ID: 5c1UEXI40 Be:
1ヶ月で理解出来たら、世の中はObj-Cプログラマーで溢れかえってるんだぜ?
107 Name: 名称未設定 [sage] Date: 2008/11/07(金) 16:01:22 ID: SM5nwPQ/0 Be:
最近プログラミングを初めようと思いCocoa本買いました。
Mac買った時に付属していたDVDからXcodeインストールしたんですが、新規プロジェクトの中のCommand Line Utilityという項目はあるんですが、その中にStanderd ToolやFoundation Toolなどが入ってません。
どうすればいいでしょうか?
素人的なことで申し訳ないです…。(-.-;)
108 Name: 名称未設定 [sage] Date: 2008/11/07(金) 16:47:19 ID: xH5O/xya0 Be:
買った本は何か? Xcode のバージョンは? 何をしようとしているの?
109 Name: 名称未設定 [sage] Date: 2008/11/07(金) 18:55:42 ID: VaKcdyjz0 Be:
>>108
バージョンは3.0です。
買った本は木下誠「たのしいCocoaプログラミング」です。
実験用のプロジェクトをつくりたいんですが。
110 Name: 名称未設定 [] Date: 2008/11/07(金) 19:25:52 ID: zN7DmkVq0 Be:
NSString定数で漢字を使えない設計にした人

すぐに自殺してください。
111 Name: 名称未設定 [sage] Date: 2008/11/07(金) 19:35:18 ID: Qu5mLm7y0 Be:
>>110
貴方の無知は痛々しいです。何が原因か推測さえ出来ないのですか。
112 Name: 名称未設定 [] Date: 2008/11/07(金) 20:00:31 ID: zN7DmkVq0 Be:
原因はObjective-Cのアーキテクトが馬鹿だからです。
113 Name: 名称未設定 [sage] Date: 2008/11/07(金) 20:02:07 ID: xH5O/xya0 Be:
たのココ(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 Name: 名称未設定 [sage] Date: 2008/11/07(金) 20:24:34 ID: WHDeBs4d0 Be:
>>109
木下の本はやめた方が良いと思う。
ヒレガス本にしる。

>>112
じゃやめちまえ。
バカに付き合うほど暇なら別だが。
115 Name: 名称未設定 [sage] Date: 2008/11/07(金) 20:30:00 ID: qG8ur2d10 Be:
うは、馬鹿降臨。
116 Name: 名称未設定 [sage] Date: 2008/11/07(金) 20:43:30 ID: 7lDacPZy0 Be:
>>110
@"漢字ひらがなアイウエオ"
で全然通りますが。
117 Name: 名称未設定 [] Date: 2008/11/07(金) 21:03:18 ID: zN7DmkVq0 Be:
>>116
(´ι _` ) あっそ
118 Name: 名称未設定 [sage] Date: 2008/11/07(金) 22:33:21 ID: jHitKJj60 Be:
てかさんざん既出だろ。
119 Name: 名称未設定 [sage] Date: 2008/11/07(金) 22:39:03 ID: b9cUYWPw0 Be:
>>112
それが「objective-cの」言語仕様だと思っている時点でアホウだな。
120 Name: 名称未設定 [] Date: 2008/11/07(金) 22:41:40 ID: wHlO12kf0 Be:
態度わりーw
121 Name: 名称未設定 [] Date: 2008/11/07(金) 23:08:52 ID: 4BK/dCS30 Be:
>>107
>Standerd ToolやFoundation Toolなどが入ってません

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

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

これのせいで英語の作者のつくったユーティリティーが
日本語ファイル名をちゃんと扱えなかったりするので泣けます。
123 Name: 名称未設定 [sage] Date: 2008/11/08(土) 02:14:53 ID: HB66BG0k0 Be:
>>122
これ何に対するレス?

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

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

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

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

中途半端なアドバイスをするお前に泣けたw
124 Name: 名称未設定 [sage] Date: 2008/11/08(土) 02:46:09 ID: D6mFIMvA0 Be:
>>113
ありがとうございました。
助かりました。(≧∇≦)
125 Name: 名称未設定 [] Date: 2008/11/08(土) 06:50:28 ID: +B195WiV0 Be:
NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。
NSMenuItemのArrayとできちゃえばサイコーなんですが…。
126 Name: 名称未設定 [sage] Date: 2008/11/08(土) 08:06:27 ID: HVynMMKD0 Be:
超ハイパーウルトラ初心者ッス

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

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

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

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

スタートボタンを押すと二つのコントロールを起動させたいのですが・・・・
127 Name: 名称未設定 [sage] Date: 2008/11/08(土) 08:48:36 ID: SWmtZyAd0 Be:
InterfaceBuilder で何でもできると思ったら大間違いだ
128 Name: 名称未設定 [sage] Date: 2008/11/08(土) 09:04:59 ID: NHu1yaCo0 Be:
>>126
Windowsってw

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

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

というか、1つのアクションで完結するように設計を見直した方が良いと思うが。
129 Name: 名称未設定 [sage] Date: 2008/11/08(土) 11:20:51 ID: Nk749XR60 Be:
>>125
できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。
130 Name: 名称未設定 [] Date: 2008/11/08(土) 20:44:39 ID: d4+4vCvN0 Be:
超ハイパーウルトラ初心者ッス

>>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 Name: 名称未設定 [] Date: 2008/11/08(土) 20:51:09 ID: d4+4vCvN0 Be:
超ハイパーウルトラ初心者ッス

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

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


まー無理だろなーと思いながら試しただけなのに・・・・・
132 Name: 名称未設定 [sage] Date: 2008/11/08(土) 21:00:30 ID: C2KKDa3W0 Be:
超ハイパーウルトラ初心者ッス

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

すごい、すごすぎる!
133 Name: 名称未設定 [sage] Date: 2008/11/08(土) 22:00:57 ID: NHu1yaCo0 Be:
>>130
なんか錯乱しとるから、もうちょい勉強してください。
134 Name: 名称未設定 [sage] Date: 2008/11/08(土) 23:46:37 ID: RNOdKyfY0 Be:
つーか、キャラ作んなくていいよ。
135 Name: 名称未設定 [] Date: 2008/11/09(日) 00:22:06 ID: L1s+Atna0 Be:
Objective-C糞過ぎ

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

つーか、Cocoaなんて廃止して、.NET Framework使えるようにしろよ
136 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:26:57 ID: hlpGev2i0 Be:
おまえがやれ
137 Name: 名称未設定 [] Date: 2008/11/09(日) 00:33:30 ID: L1s+Atna0 Be:
お断りだ
138 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:38:23 ID: IHDltFNu0 Be:
2行目が何を言いたいのか分からんが
C++とかJavaでやりたいならやればいいじゃん
139 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:39:38 ID: 5aT87bHO0 Be:
質問です。
たぶんちょっとしたことで出来るんだと思いますが、、、

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

具体的には、ループが進むごとにウィンドウ中のラベル(進行状況%表示)を更新したいのですが、
どうすればいいでしょうか?
140 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:42:14 ID: dKIqpJ+F0 Be:
[labelTextField setStringValue:@"hoge"];
[labelTextField display];
これでどうか

141 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:42:53 ID: dKIqpJ+F0 Be:
ループの処理を別スレッドにした方がいいけどな
142 Name: 名称未設定 [] Date: 2008/11/09(日) 00:48:20 ID: L1s+Atna0 Be:
>>138
分からないならコメントするな。素人は黙ってろ
143 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:49:34 ID: 5aT87bHO0 Be:
>>ID:dKIqpJ+F0
ありがとうございます!
スレッドは扱ったことないので、ちょっと勉強してきます。
その場合、ラベルをコントローラにIBOutletとして定義すると思うのですが、
ループ中からそのラベルオブジェクトを扱う事はできるんですかね?
ループの存在するクラスに定義するのは避けたいので・・
144 Name: 名称未設定 [sage] Date: 2008/11/09(日) 00:53:03 ID: dKIqpJ+F0 Be:
どこで定義しても特に支障無く扱うことができると思うが
ものは試しにやってみれ
145 Name: 名称未設定 [sage] Date: 2008/11/09(日) 01:09:57 ID: B9u3WR7L0 Be:
メインスレッド以外からは GUI を直接いじってはいけないので、
[object performSelectorOnMainThread: ... waitUntilDone:....]
だったかなにかをつかいましょうね。
146 Name: 名称未設定 [sage] Date: 2008/11/09(日) 01:10:15 ID: 5aT87bHO0 Be:
なるほど、、どこからでも扱えるんですね。
ちょっと今は試せないですが、ありがとうございました!

近々自分のMacを買うつもりなので、転がりながらプログラミングしたいものです。
147 Name: 名称未設定 [sage] Date: 2008/11/09(日) 01:21:23 ID: fqJDb0t30 Be:
>>145
ん、そうだっけ?
メインスレッドじゃなくてもOKでしょ?
何か制限あったと思うけど、忘れた。
148 Name: 名称未設定 [sage] Date: 2008/11/09(日) 01:25:37 ID: IHDltFNu0 Be:
GUI系はメインじゃないと危険だったかと
プログレス表示に精密さを求めないならsetNeedDisplay:YESとかでもアリじゃないかな
149 Name: 名称未設定 [] Date: 2008/11/09(日) 01:28:00 ID: NDkcMBd2P Be:
>>135を読んで思い出したけど、
Objective-J(Cocoaを実装したJavascript?)はどうなったんだ?と思ったら、
ttp://objective-j.orgから ttp://cappuccino.org/ にリダイレクトされて、
なんかダウンロードできるようになってる。
150 Name: 名称未設定 [sage] Date: 2008/11/09(日) 01:34:57 ID: IHDltFNu0 Be:
>>149を読んで意味が分かったけど、
>>135の2行目は日本語の意味が良く分からんかったってこと。まぁカリカリすんなよ。
151 Name: 名称未設定 [sage] Date: 2008/11/09(日) 01:53:05 ID: ROIk3bo+0 Be:
>>135
出来ないのはお前が糞だから。俺は出来るもんね。
152 Name: 名称未設定 [sage] Date: 2008/11/09(日) 03:54:10 ID: B9u3WR7L0 Be:
C 系の言語の文法をひとつでも既に知っていて、
Obj-C の文法が二日でわからないひとは何かがおかしい。
Cocoa API の全貌をつかむのは大変なのはわかるけど、
それは Obj-C の文法の問題ではないベ。
153 Name: 名称未設定 [sage] Date: 2008/11/09(日) 06:13:08 ID: 40c4vp+k0 Be:
.NET Frameworkのどこがいいんだがさっぱり謎だが一応。
http://www.mono-project.com/Mono:OSX
154 Name: 名称未設定 [sage] Date: 2008/11/09(日) 08:05:26 ID: ijj+bVEA0 Be:
110=135でOK?
155 Name: 名称未設定 [sage] Date: 2008/11/09(日) 08:10:56 ID: 40c4vp+k0 Be:
>>135はプログラム板のここにでも行った方がいいんじゃないか?
過疎りまくってるが。
Mac OS Xでの開発環境はどれがイイ?
http://pc11.2ch.net/test/read.cgi/tech/1163314891/
156 Name: 名称未設定 [] Date: 2008/11/09(日) 09:30:27 ID: mFvSzNPX0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/09(日) 09:36:30 ID: lxRIk4K/0 Be:
>>143
ループでGUI更新が動かないのは、NSRunloopが一回りしたタイミングで
更新処理がまとめて行われるからだよね。
コードの中でループしちゃうと、NSRunloopに処理が戻らない。

自分はスレッドが面倒なので、ループをばらし、ループの中身だけ別メソッドに
して、performSelector:withObject:afterDelay: で繰り返し呼び出しに
してる。普通はスレッドにするものなの?
158 Name: 名称未設定 [] Date: 2008/11/09(日) 10:31:27 ID: L1s+Atna0 Be:
>>152
わかるわからないではなく、Obj-Cの文法は美しくない。
159 Name: 名称未設定 [sage] Date: 2008/11/09(日) 11:29:50 ID: Cd0AMfEC0 Be:
後付け感ありまくりではあるね
シンプルに書けないのも今風ではないね
MacRubyに期待(^^;
160 Name: 名称未設定 [sage] Date: 2008/11/09(日) 12:48:29 ID: xdgDUb6t0 Be:
>>158
じゃあ、好きな言語を使ったら良いんじゃない?
.NET使う環境から一生出てこなくて良いよ
161 Name: 名称未設定 [sage] Date: 2008/11/09(日) 13:00:26 ID: la8cu0hU0 Be:
>>156
何をしたいのかわからないけど、
NSMenuのアイテムとNSPopupButtonのアイテムを同期させたい、
または同じ内容にしたいということ?
162 Name: 名称未設定 [sage] Date: 2008/11/09(日) 13:53:57 ID: VAAVuJ8X0 Be:
>>158
美的感覚の問題だったのか。
じゃあまあ個人の好き嫌いだからそれでいいんじゃね?
僕は括弧の乱舞は好きだけど。

あと、メソッド名が長くてほとんど文章なので
コメントを書く必要がほとんどない、というか
プログラム自体がほとんどコメントになるのはいい点だと思う、って
これは Obj-C の文法の問題ではなくて Cocoa の API の問題か。失礼。
163 Name: 名称未設定 [sage] Date: 2008/11/09(日) 14:43:48 ID: YNFGyvs40 Be:
文法的に美しく無いとされるフランス語にも素晴らしい文学は存在する。
Objective-Cに文句を言うのは勝手だが、
経験豊富なプログラマであれば言語に左右されない美しいアプリを作れるはず。
164 Name: 名称未設定 [sage] Date: 2008/11/09(日) 15:18:38 ID: uAivnwgs0 Be:
そういうこと言うと、論点ずらしって言われるぞ。
165 Name: 名称未設定 [sage] Date: 2008/11/09(日) 15:20:17 ID: YNFGyvs40 Be:
>>164
撒き餌を食うなよw
166 Name: 名称未設定 [sage] Date: 2008/11/09(日) 16:00:55 ID: cf3ZhWey0 Be:
あれじゃないの?
iPhoneのアプリ開発とか注目されてきてるからObj-Cで組んでみようと思ったけど
VBしか経験がなくて文法の違いが吸収できず、HelloWorldすら出せずにイライラしたとか。
167 Name: 名称未設定 [sage] Date: 2008/11/09(日) 16:05:18 ID: YNFGyvs40 Be:
>>166
それはあるよな。
iPhone出てから「初心者です」みたいなのが増えた。
168 Name: 名称未設定 [] Date: 2008/11/09(日) 16:23:25 ID: mFvSzNPX0 Be:
>>161
はい、だいたいそういう内容です。
title以外の内容があるアイテムとか、セパレータとか、NSMenuItem自体には
いろいろな状態があるので、そういった状態を抱えたまま同期したいのが希望です。
169 Name: 名称未設定 [sage] Date: 2008/11/09(日) 16:42:55 ID: HoxfCMO50 Be:
俺はObjective-Cの簡潔なオブジェクトシステムが好きだ。しばらくすると一風変わったメッセージ式にも愛着がわいてくる。
170 Name: 名称未設定 [] Date: 2008/11/09(日) 17:14:50 ID: L1s+Atna0 Be:
お前らの言いたいことはわかった。「オラの方言が最高だべさ」ってことだろ。一生時代遅れの田舎言語使ってろ。
171 Name: 名称未設定 [sage] Date: 2008/11/09(日) 17:23:45 ID: XOOSfoZw0 Be:
はいはい田舎田舎。
厨房発言に上げ荒し、おまけにドトネト最高か。
まじでVB厨のバカ丸出しだな。
172 Name: 名称未設定 [sage] Date: 2008/11/09(日) 17:25:12 ID: 40c4vp+k0 Be:
田舎の方が味があって和むんだよ。それが分からないとはまだまだだな。
173 Name: 名称未設定 [] Date: 2008/11/09(日) 17:34:46 ID: BSsYOmbX0 Be:
言語とか処理系て、どうせ借り物でしょw
目的は何だ?金?w
だったら冷や汗たらして働けw
何か作りたいものがあるなら最適な手段を選べばいいだけ
174 Name: 名称未設定 [sage] Date: 2008/11/09(日) 18:06:51 ID: YNFGyvs40 Be:
iPhoneで小遣い稼ぎしようと思ったけど
理解できなくて八つ当たりしてるだけだろ。
175 Name: 名称未設定 [sage] Date: 2008/11/09(日) 18:49:44 ID: Cd0AMfEC0 Be:
まあ誰がなんと言おうとObjectiveC++ は最強だと思うけどね
C++/CLIよりも使い易いし、判り易い

でも、ちょっと古い感じはするね
MacRubyに(ry
176 Name: 名称未設定 [sage] Date: 2008/11/09(日) 19:17:05 ID: oz3XxqjX0 Be:
Objective-C++は最強にカオスってことですねわかりまs
177 Name: 名称未設定 [sage] Date: 2008/11/09(日) 20:05:06 ID: n+KcZ/pQ0 Be:
心の寂しい方がいらっしゃる様ですね
きっと心だけでなくプログラムも隙間だらけなのでしょう
178 Name: 名称未設定 [sage] Date: 2008/11/09(日) 21:06:35 ID: Se6LpMt+0 Be:
>>158
Ruby でも Java でも C++ でも JavaScript でも出来ますが、何か?
179 Name: 名称未設定 [sage] Date: 2008/11/10(月) 01:51:16 ID: 5p8Fyhi10 Be:
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 Name: 名称未設定 [sage] Date: 2008/11/10(月) 10:38:38 ID: ku2SFWuM0 Be:
C++とか、今のスレの流れは別に興味ないけど、
>>135が今までどんなアプリを作ったのかが
非常に気になるw
181 Name: 名称未設定 [sage] Date: 2008/11/10(月) 11:56:44 ID: W6D0WGgG0 Be:
多分、hello, world.だろ。
182 Name: 名称未設定 [sage] Date: 2008/11/10(月) 12:10:30 ID: /kpuffDm0 Be:
ついで、「こんにちわ、世界」と出力しようとしたが、
エンコードがあっていなかったので文字化け。
キレる。

ってのが王道です。
183 Name: 名称未設定 [sage] Date: 2008/11/10(月) 12:56:58 ID: r8VH7KRc0 Be:
@ も序でに忘れてんじゃね?
184 Name: 名称未設定 [sage] Date: 2008/11/10(月) 13:13:37 ID: +x+/8+Ia0 Be:
 学び始めて間もなく、色々とやってみたのですが解決できず悩んでいます。
場違いかも知れませんが質問させてください。

 テキストフィールドからNSMatrixをつくり、個々のセルにint型の数値を表示しています。
マウスクリックで選択したセルから数値を取り出しています。
ところが、
個々のセルに対して、NSCellやNSTextFieldCellのメソッド、例えばsetTextColor:等を
送るとその後、セルから数値を取り出せなくなってしまいます。どうしてそうなるのかが
判りません。どなたかご教授いただけませんか?宜しくお願いします。
185 Name: 名称未設定 [sage] Date: 2008/11/10(月) 14:01:43 ID: jRir/5vF0 Be:
>>184
セルを参照しているインスタンス変数を上書きしておらんか?
186 Name: 184 [sage] Date: 2008/11/10(月) 14:25:50 ID: +x+/8+Ia0 Be:
>>185 レス有り難うございます。
セルの指定は、以下のようにしています。

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

ご指摘いただいたようにポインタを使った形にしてみたのですが、
やはり上手く行きませんでした。
187 Name: 184 [sage] Date: 2008/11/10(月) 17:40:23 ID: +x+/8+Ia0 Be:
一人でばたばたして、連続の書き込みになり申し訳ないのですが、
もう少し補足させてください。

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

これはひょっとして文字の色を変更したことによって、
セルが持つテキストフィールドセルが別もの(オブジェクト)に
置き換わったということなのか?と考えています。
ご助言頂ければありがたいです。
188 Name: 名称未設定 [sage] Date: 2008/11/10(月) 19:16:30 ID: k7er6Elw0 Be:
取り出せないって具体的にはどうなるんですか?
エラーでアプリケーションが落ちるとか?
期待した値じゃなくて0しか返ってこないとか?
189 Name: 名称未設定 [sage] Date: 2008/11/10(月) 19:35:34 ID: NIf0gNWD0 Be:
値をセットするところ、ゲットするところのコードを見せた方が早いよ。
言葉だけじゃさっぱり伝わらない。
190 Name: 名称未設定 [sage] Date: 2008/11/10(月) 20:12:33 ID: atwbsV0eO Be:
昨日、ループからGUIのラベルを更新したいと言っていた者です
ループの存在するメソッドをスレッド化し、ラベル更新部分をメインスレッドで実行するようにしました

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

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

携帯からなんで間違っているかもしれませんが、よろしくお願いします
191 Name: 184 [sage] Date: 2008/11/10(月) 20:43:59 ID: +x+/8+Ia0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/10(月) 22:01:15 ID: k7er6Elw0 Be:
>>191
[NSColor blueColor]に変えても
ウチでは元気よく動いてますが・・・。

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

いずれにしてもレス頂いた方々、わざわざ実際に試してくださった192さん、
感謝いたします。有り難うございました。
195 Name: 名称未設定 [sage] Date: 2008/11/10(月) 22:53:24 ID: jRir/5vF0 Be:
>>194
なんでもバグの所為にすると怒られるよ。
どこか間違ってるんだろ。
196 Name: 184 [sage] Date: 2008/11/10(月) 22:55:24 ID: +x+/8+Ia0 Be:
>>193さん、わざわざ試して頂いて有り難うございました。
やはり、私の環境に問題がある可能性が明確になってきました。
感謝です。
197 Name: 190 [sage] Date: 2008/11/10(月) 22:56:24 ID: hIykeUF50 Be:
質問してる身であれですが、、、

>>184さん
カラースペースの設定とか関係ないでしょうか?
見当違いの回答かもしれないですが、RGB色空間を扱っているとき、[NSColor blackColor]が使えなかったもので、、、
自分も始めたばかりなんでそのあたりが知りたいです
198 Name: 184 [sage] Date: 2008/11/10(月) 23:29:28 ID: +x+/8+Ia0 Be:
>>195さん そうですね、軽率でした。ご容赦の程。

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

お二方とも有り難うございました。
199 Name: 名称未設定 [] Date: 2008/11/11(火) 00:04:08 ID: I3pahUr70 Be:
>>194
>OS10.4.11で、XCODE2.5

同じ環境で試してもちゃんと動くぞ(ちなみに192、193とは別人)
200 Name: 名称未設定 [sage] Date: 2008/11/11(火) 01:05:54 ID: PUKvd1/H0 Be:
>>194
>>190

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

基本的に、なんかプログラムをかいて、バグがあって、
自分ではここがおかしいんじゃないかなというところを
いくら考えて修正しても正しく動かないばあいは、
その自分がここがおかしいんじゃないかなと思うところだけ
抜き出して 2ch で聞いても改善する可能性は非常に低いです。
なぜなら、そういうときはえてしてそこと違う場所がおかしいからです。
201 Name: 名称未設定 [sage] Date: 2008/11/11(火) 01:14:55 ID: K+WZjSUa0 Be:
勘だが
- (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 Name: 名称未設定 [sage] Date: 2008/11/11(火) 01:29:08 ID: wEupgvlC0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/11(火) 02:15:56 ID: +aCpyxf+0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/11(火) 02:18:49 ID: +aCpyxf+0 Be:
///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 Name: 名称未設定 [sage] Date: 2008/11/11(火) 03:13:01 ID: K+WZjSUa0 Be:
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
ここが諸悪の根源だ。

あと
performSelectorOnMainThread:@selector(updateMethod)
でコロンを忘れてる。
206 Name: 名称未設定 [sage] Date: 2008/11/11(火) 03:38:59 ID: K+WZjSUa0 Be:
RoopTest* rt = [[RoopTest allc] init];
ここもなんだか気持ち悪いな。
207 Name: 名称未設定 [sage] Date: 2008/11/11(火) 08:11:40 ID: fkU0XAOh0 Be:
何で画面更新の度に MyViewCtrl を alloc してるんだ?
どう考えたら、こんなコードを書けるんだろう...
あと、allc じゃなくて、alloc だろ。

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

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

>やはり、私の環境に問題がある可能性が明確になってきました。
とかよく言えるな。
コンパイラのバグとか考えるのは最後だろ。
208 Name: 名称未設定 [sage] Date: 2008/11/11(火) 08:12:02 ID: PUKvd1/H0 Be:
updateMethod: で newLabel をどう渡しているつもりなのか?
あと、
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
無理ではないけど、そうやってつくったものは
インターフェースビルダーで既につくったオブジェクトとは別のものです。
209 Name: 名称未設定 [sage] Date: 2008/11/11(火) 09:13:26 ID: FpRggH2w0 Be:
あんまし速度を求めないのであれば
スレッド使うよりNSTimerにした方が無難だと思うけど。
210 Name: 184 [sage] Date: 2008/11/11(火) 09:57:42 ID: zECfChq+0 Be:
皆さん、レスポンス頂いて有り難うございます。
>>207さん、203、204さんは私とは別の方です。軽卒な発言を書いたのは私の方です。
平にご容赦ください。

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

夜まで作業できませんが、なんらかの結論なり経過なりはまたご報告させて頂きます。
有り難うございました。
211 Name: 名称未設定 [sage] Date: 2008/11/11(火) 10:23:26 ID: fkU0XAOh0 Be:
>>210
>>>207さん、203、204さんは私とは別の方です。
勘違いしてた。スマソ。
212 Name: 203 [sage] Date: 2008/11/11(火) 12:21:53 ID: a+a3ujwr0 Be:
みなさん、いろいろ助言をありがとうございます
調べたところ、NSConnectionを用いてスレッド間通信をすればよいとあったのでやってみたところ、ついに出来ました!
やはり、ラベルの授受がうまく行ってなかったようですね
ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?
上にある、RoopTestにIBOutletを定義しても更新できなかったので。。

とりあえず、今後のGUI更新作業は、必ずコントローラ上で行うようにします
213 Name: 名称未設定 [sage] Date: 2008/11/11(火) 12:44:52 ID: FpRggH2w0 Be:
>>212
結局やりたい事は名にだったんだろう?
NSTimerだとかなり簡単なんだが。
214 Name: 203 [sage] Date: 2008/11/11(火) 12:52:55 ID: a+a3ujwr0 Be:
>>213
目的の処理はとても重いのですが、NSTimerも重いとのことだったので避けていました
ループメソッドがコントローラクラスのメソッドではなく、別クラスのものだったため、例があまりなかったので悩んでいました
正直わかりやすくするためで目的の結果には必要ないものなので、時間をとってしまったのは失敗でした^^;

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

可能。やり方を知らないだけ。
NSConnection なんて馬鹿げたことするよりよほど簡単にできる。
216 Name: 名称未設定 [sage] Date: 2008/11/11(火) 13:16:49 ID: PUKvd1/H0 Be:
どうも 203 さんは日本語力が足りない気がする。
自分が書いたことを、相手が読んでわかるためには
何をどこまで書いたらいいか、考えていますか?

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

「NSTimer も重いとのことだったので」なんてどこから出て来たのか?
NSConnection なんかつかわなくても、
performSelectorOnMainThread で withObject: で渡せばいいんでないかと
おもいますが...
217 Name: 名称未設定 [sage] Date: 2008/11/11(火) 13:24:59 ID: wEupgvlC0 Be:
>>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 Name: 203 [sage] Date: 2008/11/11(火) 13:49:08 ID: a+a3ujwr0 Be:
>>216
>>209
>あんまし速度を求めないのであれば
>スレッド使うよりNSTimerにした方が無難だと思うけど。
から勝手に重いものと解釈していました、申し訳ないです

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

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

最後に、差し支えなければNSConnectionが劣っている?理由が知りたいです
219 Name: 名称未設定 [sage] Date: 2008/11/11(火) 13:54:33 ID: 4BivI9sj0 Be:
自分だったらthread側はstringに対するアクセッサ用意するだけで何もしない。
Thread側から他へ要求すると遅くなるし、結合度が強くなって簡単に修正できなくなる。
メイン側はtimerかevent loopのついでに進捗見て非同期にゆっくり表示すれば良い。
人間が視認できる速度は知れてるからそれで十分
220 Name: 名称未設定 [sage] Date: 2008/11/11(火) 14:21:48 ID: LVzKoGmm0 Be:
> NSConnectionが劣っている?
というよりは、この場合は不必要である処理が間に挟まっちゃいます。
適材適所でご利用ください。
221 Name: 名称未設定 [] Date: 2008/11/11(火) 20:37:16 ID: nt03fgQI0 Be:
超初心者です。
windowの立ち上がり時にcomboBoxに項目を自動的に加えたいのですが・・・

たぶんtableViewの時と同じようにdatasoceとして登録しておくのか、
window起動時の動作を定義できる関数とかがあるのだろうと思って調べたのですが
見つかりませんでした。
222 Name: 名称未設定 [] Date: 2008/11/11(火) 20:45:45 ID: nt03fgQI0 Be:
一応IBのwindowのデリゲートをコントローラに接続して
windowWillMoveをオーバーライドすることによって
windowを動かしたときの定義はできたのですが・・・・・

windowを開いたときの動作を定義する関数もあるのでしょうか?
223 Name: 名称未設定 [] Date: 2008/11/11(火) 20:58:42 ID: nt03fgQI0 Be:
データソースで登録できますね。
お騒がせして申し訳ございません。
224 Name: 名称未設定 [] Date: 2008/11/11(火) 22:21:22 ID: nt03fgQI0 Be:
データソースで登録する仕方がわかんねー
225 Name: 名称未設定 [sage] Date: 2008/11/11(火) 22:52:41 ID: mgiOCDFu0 Be:
http://www.oomori.com/cocoafw/ApplicationKit/NSComboBox/index.html

datasource使わなくてもできるっぽいけど。
226 Name: 名称未設定 [] Date: 2008/11/11(火) 23:07:33 ID: nt03fgQI0 Be:
>>225
確かに出来るんですが、起動時にすでにcomboBoxの中に項目が追加されているように
したいんですよね。
で、最初はwindowDidBecomeKeyのオーバーライドでクリアさせたんですけど、
でもデータソースがあるって知って、今それをトライしているところです。
227 Name: 名称未設定 [sage] Date: 2008/11/11(火) 23:18:55 ID: u7V+zvQV0 Be:
>>226
awakeFromNibで追加するのはダメなん?
228 Name: 名称未設定 [sage] Date: 2008/11/12(水) 00:23:06 ID: 7kG+RNj90 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/12(水) 12:21:14 ID: /WVpT08D0 Be:
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 Name: 名称未設定 [sage] Date: 2008/11/12(水) 12:36:08 ID: rhZoTYoC0 Be:
>>229
- (BOOL)resignFirstResponder {
return NO;
}

は書いてある?
231 Name: 名称未設定 [sage] Date: 2008/11/12(水) 12:39:39 ID: rhZoTYoC0 Be:
>>230
逆だったorz

- (BOOL)resignFirstResponder {
return YES;
}
232 Name: 名称未設定 [sage] Date: 2008/11/12(水) 12:58:01 ID: DjwU0p+F0 Be:
>>229
何でこんな無茶苦茶なコードを書く必要があるのか聞きたいw
サブクラス作る必要もないし、自分自身をdelegateにする必要もないし、Notificationをわざわざ転送する必要もない。
233 Name: 名称未設定 [sage] Date: 2008/11/12(水) 13:02:27 ID: /WVpT08D0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/12(水) 13:08:58 ID: /WVpT08D0 Be:
>>232
私も正直こんな面倒なことはしたくなかったのですが。。。
Bindingを使いこなせていないせいかイマイチ「編集終了時に値が実際に変更されているかどうか」
を比較する手段が思い浮かばずこんなことになった次第です。
235 Name: 名称未設定 [sage] Date: 2008/11/12(水) 13:47:41 ID: rhZoTYoC0 Be:
>>234
>編集終了時に値が実際に変更されているかどうか
それだけなら普通にデリゲート使えばいいんじゃね?
236 Name: 名称未設定 [sage] Date: 2008/11/12(水) 14:00:48 ID: bpwWLlCO0 Be:
>>234
Core Dataを使ったり自分でUndoを実装すればsetDocumentEdited:YESは自動でなされるだろうし、
そこまでしない小規模なものならdelegateのcontrolTextDidChange:でいいし、
Bindingされているモデルが変更されたときやりたいならモデルに対してKVOすればいいと思う。
237 Name: 名称未設定 [sage] Date: 2008/11/12(水) 14:26:27 ID: L0OFkZM60 Be:
どうぞ

キー値監視について(Key Value Observing)
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueObserving/
238 Name: 名称未設定 [sage] Date: 2008/11/12(水) 15:04:38 ID: /WVpT08D0 Be:
>>235
Bindingが設定してあるNSTextFieldからはDelegateしても通知がポストされなかったんです。

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

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

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

じっくり調べてみます。


皆さんありがとうございました。
241 Name: 名称未設定 [sage] Date: 2008/11/12(水) 20:29:57 ID: 3TV0qhbR0 Be:
ttp://www.friday.com/bbum/2008/11/11/autozone-the-objective-c-garbage-collector/
darwinsourceに最近、追加された(?)AutoZoneって何かと思ったら、objcのgcなんだ?
242 Name: 名称未設定 [] Date: 2008/11/12(水) 21:22:46 ID: xTjUSaTU0 Be:
>>228
非常に参考になりました。
ありがとうございます。
あー僕も酔っ払いながらかけるようになりたいっす。
243 Name: 名称未設定 [sage] Date: 2008/11/13(木) 05:09:02 ID: Zr8Iqv0x0 Be:
暫くcocoaから離れてたんですが、
ファイルをゴミ箱に入れる方法ってNSworkspace以外に実装されてませんかね?ゴミ入れ音付で
244 Name: 名称未設定 [sage] Date: 2008/11/13(木) 08:32:00 ID: z+Jww09y0 Be:
NSAppleScriptでFinderにやらせれば音が出るよ。
245 Name: 名称未設定 [sage] Date: 2008/11/13(木) 09:22:35 ID: XbONM5Ht0 Be:
Finder でゴミ箱にすてるのと同じ動作をする API が
Leopard で Carbon に追加されてます。
http://developer.apple.com/releasenotes/Carbon/RN-CarbonCore/
の File Manager のところを参照。
246 Name: 名称未設定 [] Date: 2008/11/13(木) 20:54:10 ID: Jm2bYpNn0 Be:
初心者です
ボタンを押したら新たにwindowを表示したいんですが
そういった関数をご存知の方いませんか?
247 Name: 名称未設定 [sage] Date: 2008/11/13(木) 21:02:24 ID: qC4pYBiI0 Be:
>>246
まずオブジェクト指向の意味を理解してください。
そうすれば自ずと何をすれば良いか分かります。
248 Name: 名称未設定 [sage] Date: 2008/11/13(木) 21:15:19 ID: hEQXH/4q0 Be:
複数のウインドウを表示したり制御するのって意外と難しくて面倒なんだよね。
メニューのアクションとかもキーウインドウに対してセンドしなきゃいけないし。
249 Name: 名称未設定 [] Date: 2008/11/13(木) 21:21:03 ID: Jm2bYpNn0 Be:
>>247
そこまで戻る必要があるんですか・・・・・
ただ単にAPIの問題だと思っていたのですが・・・・
深いですね。
250 Name: 名称未設定 [sage] Date: 2008/11/13(木) 21:33:42 ID: Eaz1tdC20 Be:
単にダイアログを表示するだけならAPIの問題だけどな。
251 Name: 名称未設定 [sage] Date: 2008/11/13(木) 21:39:35 ID: uPguWfkE0 Be:
>>246
Interface builderだけで簡単に作れるよ
252 Name: 名称未設定 [] Date: 2008/11/13(木) 21:53:20 ID: Jm2bYpNn0 Be:
>>251
customViewを使うことにしました。
教えていただいてありがとうございます
253 Name: 名称未設定 [sage] Date: 2008/11/13(木) 21:55:02 ID: Eaz1tdC20 Be:
何をやりたかったんだ……
254 Name: 名称未設定 [sage] Date: 2008/11/13(木) 22:07:32 ID: NIwWlo0Q0 Be:
>>252
えええ、アクションつなぐのじゃdameなの?
255 Name: 名称未設定 [sage] Date: 2008/11/13(木) 22:35:51 ID: qC4pYBiI0 Be:
www
256 Name: 名称未設定 [] Date: 2008/11/13(木) 22:55:55 ID: Jm2bYpNn0 Be:
>>253-254
何とかボタン一つでwindowを表示させることに成功しました
お騒がせしてすみません。
257 Name: 名称未設定 [sage] Date: 2008/11/13(木) 23:03:14 ID: 2FfKOU+J0 Be:
Finderウインドウの表示内容を更新する方法って
NSFileManagerでフォルダを作る意外には無いのかな
258 Name: 名称未設定 [sage] Date: 2008/11/13(木) 23:07:22 ID: cv3LdfgN0 Be:
>>257
NSWorkspaceのnoteFileSystemChangedではだめ?
259 Name: 名称未設定 [sage] Date: 2008/11/13(木) 23:21:55 ID: 2FfKOU+J0 Be:
>>258
noteFileSystemChangedでは更新されるときとされないときがあるんだよね。
特に、smbでマウントしたwindows共有フォルダには効かなくて、無理矢理不可視フォルダを作って削除する方法で対処してる。
260 Name: 名称未設定 [sage] Date: 2008/11/14(金) 03:52:32 ID: Z7zd+aLz0 Be:
>>246
まず手始めにwindow画面を起動時に見えなくして
NSWindowクラスのmakeナンタラ関数で前面に出してきたらいいんじゃないのか?
後IBでコネクトね。

オブジェクト指向を理解してても出来ませんよ。
APIの問題です。
261 Name: 名称未設定 [sage] Date: 2008/11/14(金) 20:14:55 ID: 9weqjvTi0 Be:
今はCarbonのGestaltを使っているんだけど、CocoaでOSのバージョンを
取得する方法はありますか?
262 Name: 名称未設定 [sage] Date: 2008/11/14(金) 22:32:15 ID: 9w5lRAlf0 Be:
>>261
[[NSProcessInfo processInfo] operatingSystemName]
263 Name: 名称未設定 [sage] Date: 2008/11/14(金) 22:45:01 ID: xk6PzQrT0 Be:
いつも気になるんだが
NSWorkspaceとNSProcessinfoのメソッドの分け方がおかしい
と思うのは俺だけだろうか。

直感的じゃないんだよな
264 Name: 262 [sage] Date: 2008/11/15(土) 00:33:02 ID: /jR4jH2p0 Be:
すまん、間違えた
[[NSProcessInfo processInfo] operatingSystemVersionString]
265 Name: 名称未設定 [sage] Date: 2008/11/15(土) 01:13:29 ID: Fo6g+zIo0 Be:
どうせ NSProcessInfo も最終的に Gestalt を呼んでるんだろうから
Gestalt でいいんでは?
266 Name: 名称未設定 [sage] Date: 2008/11/15(土) 11:36:16 ID: 4imPoNXz0 Be:
ローカリゼーションとかで使う .strings ファイルの形式って、どっかに詳細なスペックは
あるかな?

自分でも同じフォーマットを利用しようと思って(ローカライズ目的ではないけど)、
foo = var; 式のエントリの文字列を -[NSString propertyListFromStringsFileFormat]
でパースさせているんだけど、エラーになる条件がよくわからない。
 class = hogehoge;
みたいに、1単語の時はクォートしなくていいように一見見えるんだけど、少し違うタイプ
 name[0] = hogehoge;
だとエラーになる。
267 Name: 名称未設定 [sage] Date: 2008/11/15(土) 11:56:07 ID: 7DuJOrGV0 Be:
http://developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html
268 Name: 261 [sage] Date: 2008/11/15(土) 13:03:33 ID: 8pxLxWly0 Be:
>>262,264
ありがとう。NSProcessInfoとは・・・なかなか見つからないわけだ。
>>265
今はGestaltで間に合うけど、Carbonもいつまでサポートされるか
わからないからね。
269 Name: 266 [sage] Date: 2008/11/15(土) 14:34:07 ID: 9X9dz6u50 Be:
>>267
あ、どうもありがとうございます。

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

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

ちゃんとやろうとするとパーサーみたいのを書かないといけないと思うんですが、
もし出来合いのものがあるならそれを利用しようかと.... プログラムの設定ファイルとかで
ありがちな処理だと思うので、何かいいものがあれば....
CocoaなのでObjCから利用できるものが望ましいです。よろしくお願いします。
270 Name: 名称未設定 [sage] Date: 2008/11/15(土) 14:38:35 ID: 7DuJOrGV0 Be:
>>269
そゆばあいはNSUserDefaults使います。

どうしても .stringsでなきゃならないなら、
-[NSBundle localizedStringForKey:value:table:]
で無理やり。
271 Name: 名称未設定 [sage] Date: 2008/11/15(土) 14:51:20 ID: Fo6g+zIo0 Be:
>>269
.strings ファイルは "..." = "..." しか公式にはサポートされてないんではとおもいます。

それは OS X 以外のソフトとデータをやりとりする必要がある?
OS X だけですむなら、単に内部では NSDictionary でもっておいて、
保存するときには plist 形式で書き出すだけで済むと思います。
OS X 以外とデータをやりとりする必要がある場合でも、
2008年暮れにもなってパーサを自前で書くのは馬鹿らしいとおもいます。
単に XML で書き出して、(plistもXMLなのでそれでいいですが、)
ほかのプラットホームで読むときはXMLライブラリつかって
読み込むのが簡便だとおもいます。
272 Name: 名称未設定 [sage] Date: 2008/11/15(土) 14:54:03 ID: 7DuJOrGV0 Be:
ごめん。全然読まずにレスしてた。

たぶん、そういう特殊用途なら自力でパースした方が早いです。
NSScannerならObjCで使うことが可能です。:-)
273 Name: 266 [sage] Date: 2008/11/15(土) 14:58:56 ID: 9X9dz6u50 Be:
>>270
>そゆばあいはNSUserDefaults使います。

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

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

わかりにくくてすみません。もしかしてCocoaと関係ないかもしれないですね。
274 Name: 名称未設定 [sage] Date: 2008/11/15(土) 15:05:03 ID: 7HtqMIxl0 Be:
プロパティリストでいいじゃん。
NSDictionaryをそのまま保存すればいいよ。
275 Name: 266 [sage] Date: 2008/11/15(土) 15:29:05 ID: 9X9dz6u50 Be:
>>271
OS Xではあるんですが、自分の直接の管理下にない別のソフトが なんたら = かんたら;
みたいなフォーマットでデータを吐き出してくるのです。で、それを処理します。
長期的にはそのソフトが最初からplist(XML)を吐き出すべきなんでしょうが、差し当たってw

>>272
一応、そこそこ汎用な解析をしないといけなそうな感じなんですが、
NSScanner がおすすめですか。使ったことがないので調べてみます。
276 Name: 名称未設定 [] Date: 2008/11/15(土) 19:31:31 ID: 74MSLTm4P Be:
汎用性を持たせるならJASONって手もあるよ
277 Name: 名称未設定 [] Date: 2008/11/15(土) 19:34:08 ID: 74MSLTm4P Be:
間違えた、JSONか
278 Name: 名称未設定 [sage] Date: 2008/11/16(日) 02:31:44 ID: 5nyRUfyn0 Be:
>>275
>自分の直接の管理下にない別のソフトが なんたら = かんたら;
>みたいなフォーマットでデータを吐き出してくるのです。
なるほどそれはしかたないですね。

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

僕なら perl か ruby かなにかでそのフォーマットのデータを
plist に書き換える短いスクリプトを書いて、
Cocoa からそのスクリプトを呼びますが。
279 Name: 266 [sage] Date: 2008/11/16(日) 04:41:34 ID: NL8p9MOk0 Be:
>>277
>JSON
おーなんか面白そうですが今回はとりあえず。

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

>僕なら perl か ruby かなにかで
確かに、正規表現で切り出したりすればいいですかね。
左辺or右辺が文字列リテラルのときとそうでないときがあるのがちょっと面倒ですが...
280 Name: 名称未設定 [sage] Date: 2008/11/16(日) 05:06:34 ID: IF7lggCK0 Be:
NSScannerでパースするのが一番楽だと思うな。
たいして複雑な書式じゃないようだし。
281 Name: 266 [sage] Date: 2008/11/16(日) 06:29:16 ID: NL8p9MOk0 Be:
>>280
まだNSScannerを理解しきれてないですが、割と単純に文字をスキャンするだけじゃない
ですかねえ?
書式には文字リテラルが含まれるので、そんなに単純じゃなかったりします。例えばリテラル内に
¥"が現れる可能性もあったり... 結局、それなりの状態遷移を書く必要があるような。

とりあえずperlで正規表現を考えてみました... 文字リテラル用の表現が、なんとかできたかなあ
という感じです。文字リテラルじゃないときの場合分けはむしろ簡単かな。
282 Name: 名称未設定 [sage] Date: 2008/11/16(日) 11:57:37 ID: IF7lggCK0 Be:
>>281
NSScannerはその名の通りスキャンするだけだから、この場合は「"なんたら" = かんたら\";」から「"なんたら"」と「かんたら\"」を
取り出すだけしか出来ないね。エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。
正規表現使うならPerlじゃなくてもCocoaから使えるライブラリもあるよ。
http://www8.ocn.ne.jp/~sonoisa/OgreKit/
283 Name: 266 [sage] Date: 2008/11/16(日) 21:53:32 ID: NL8p9MOk0 Be:
>>282
>この場合は「"なんたら" = かんたら¥";」から「"なんたら"」と「かんたら¥"」を
>取り出すだけしか出来ないね。

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

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

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

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

ちらっと眺めてみました。よさげですね。
なんか正規表現のセットが複数種類あるみたいですが... ONIG_SYNTAX_PERL というのを
有効にしたい場合はどうしたらいいんですかね? (ソースを調べろって?)
284 Name: 名称未設定 [sage] Date: 2008/11/17(月) 07:34:57 ID: WMJOqaGa0 Be:
ステートマシンを書くといいよ
285 Name: 名称未設定 [前スレ947] Date: 2008/11/17(月) 21:43:05 ID: VleoNMSp0 Be:
前スレでCGImageRefの輪郭抽出でお世話になったもんです。
御礼が遅くなりましたが、とりあえず無事解決?したのでご報告まで。

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

いまのところ問題なく動くようです。アドバイスしてくれた方、ありがとうございました。
しかし、CoreImage面白いですね。
286 Name: 前スレ947 [] Date: 2008/11/17(月) 21:43:56 ID: VleoNMSp0 Be:
間違えた… 285です。メール欄に名前入れちまったい…
287 Name: 名称未設定 [sage] Date: 2008/11/17(月) 22:50:50 ID: AI8JnSZ50 Be:
NSOpenPanelでオープンダイアログ出すと
スレッドの数が異常に増殖するんだけど
これって普通ですか?

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

しかし、Cocoaでネイティブに正規表現をサポートしてくれたりしないのかな。おしまい。
289 Name: 名称未設定 [sage] Date: 2008/11/18(火) 00:48:50 ID: d2ANkhTZ0 Be:
>>287
modalってだけて、ランループを3つぐらい塞いでる気がするし、
あとディレクトリに変化あったら自動で更新されるのもスレッド立ててる気がするし
まぁ5-6スレッドぐらいすぐ使うんじゃない?
290 Name: 名称未設定 [sage] Date: 2008/11/18(火) 20:18:09 ID: wWLAMWH+0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/11/19(水) 01:24:15 ID: awxWx5gM0 Be:
>>290
なるほどー。試してみると、最初の一回は時間がかかるけど2回目以降は悪くないですね。

Java -> Cocoa は確か新規のCocoa APIが今後サポートされないとかいう話がありましたが、
Cocoa -> Java の方も同じことになるんですかね?
Cocoa というより ObjC と書くべきなのかもしれないけど。
292 Name: 名称未設定 [] Date: 2008/11/19(水) 15:26:17 ID: BWlnzWKG0 Be:
Dictionaryに格納すると
順番がめちゃくちゃになるんですけど・・・・・
なにかいい方法ないですか?
293 Name: 名称未設定 [] Date: 2008/11/19(水) 15:36:59 ID: 7EA3pAHdP Be:
NSArrayにも格納したら?
NSDictionaryやNSArrayはオブジェクトのコピーじゃなくてそのポインタを格納するだけだから,
両方使ってもメモリが一気に増えるってことはないと思う.
294 Name: 名称未設定 [sage] Date: 2008/11/19(水) 16:11:23 ID: LDJCxdq70 Be:
ソートも使えるしな
295 Name: 名称未設定 [] Date: 2008/11/19(水) 16:13:18 ID: BWlnzWKG0 Be:
>>293-294
そうします。
ありがとうございます。
296 Name: 名称未設定 [sage] Date: 2008/11/19(水) 21:02:02 ID: gPj/kG9F0 Be:
>>291
java -> ObjCもObjC -> javaもサポート停止です。というか保守停止かな?バグが発見されても放置みたいな。
下位互換のために、それ自体は、OSの中に残るようですけども。
297 Name: 名称未設定 [sage] Date: 2008/11/19(水) 23:16:35 ID: TXTxCrRP0 Be:
>>292
めちゃくちゃってか、アルファベット順とかそんなんだろ?
298 Name: 名称未設定 [sage] Date: 2008/11/19(水) 23:44:27 ID: tDuS/dfz0 Be:
っていうかディクショナリに順番を期待するのが間違いだよね。
299 Name: 名称未設定 [sage] Date: 2008/11/19(水) 23:50:44 ID: NbUmXR8v0 Be:
>>298
普通本屋で売ってる辞書って順番にデータが格納されてるよね...
いや、僕らは NSDictionary はハッシュテーブルだって知ってるから
順番を期待しないけど、プログラムはじめたばかりのひとが
混乱してもしかたないんじゃないかな。

それで気になるのは、~/Library って素人は中をいじっちゃだめだけど、
日常用語としては図書館には行ってもいいはずだから、
すくなくとも英語圏の素人さんなら中に pdf を大量にためちゃったりとか
ある気がするんだが問題ないんだろうか。
300 Name: 名称未設定 [sage] Date: 2008/11/19(水) 23:54:18 ID: ie6rHw0y0 Be:
ディクショナリに順番を期待するってREALbasicからの移行組?
コイツはハッシュ型でありながら追加した順番も保持されてるんだよな。
301 Name: 名称未設定 [sage] Date: 2008/11/20(木) 00:36:58 ID: 3uwYS9mh0 Be:
>>299
>Library
中をあけたらすでにごちゃごちゃとフォルダが入っているのは
わかるはずだから、自分で自由に使っていいフォルダとは違う
ということぐらいはわかるんじゃないのか。
もっともアメリカに限っていえば、ぬれた猫を電子レンジに
かける人がいるお国柄だからどうだかわからんが…
302 Name: 名称未設定 [sage] Date: 2008/11/20(木) 00:41:31 ID: /EKcz7fk0 Be:
そもそもアメリカ人は馬鹿だから Library と聞くと怯えて近寄らないとか?
303 Name: 名称未設定 [sage] Date: 2008/11/20(木) 11:32:25 ID: bdDdnpxd0 Be:
図書館に自分の本を勝手に置いて来たり
中身を書き換えたりするようなことは普通しないと思う
304 Name: 名称未設定 [] Date: 2008/11/20(木) 22:48:47 ID: USnih3EQ0 Be:
>>302
でもおれたちはその馬鹿なアメリカ人が作ったソフトでひいひい言ってるんだぜ?
305 Name: 名称未設定 [] Date: 2008/11/21(金) 00:37:17 ID: Mt+yfcCZ0 Be:
cocoaって標準で正規表現使えないの?
どんだけ屑なの?
306 Name: 名称未設定 [sage] Date: 2008/11/21(金) 00:40:11 ID: ulllyDug0 Be:
OgreKit
307 Name: 名称未設定 [sage] Date: 2008/11/21(金) 02:58:00 ID: KDDxp3BY0 Be:
雪ヒョウではOgreKitを標準で搭載すべきだ
308 Name: 名称未設定 [sage] Date: 2008/11/21(金) 02:59:39 ID: 603c8RI50 Be:
毎回フレームワークを追加して<OgreKit/OgreKit.h>を書くのがめんどくさい
309 Name: 名称未設定 [sage] Date: 2008/11/21(金) 04:02:45 ID: Iagf3QtT0 Be:
OgreKit 自体はすごいんだろうけど、Cocoa に取り込むとした場合、既存の Unicode 処理との
整合性が気になるけど大丈夫なんだろうか。Unicode の正規化の規則とか、case insensitive で
マッチした場合の振る舞いとか... そこら辺、何か気づいた人はいますか?

一方、Cocoa は内部で ICU をいろいろ参照しているみたいなんで、もし正規表現を実装することに
なるならやはり ICU を経由するのかなあと思うが...
310 Name: 名称未設定 [] Date: 2008/11/21(金) 04:09:28 ID: M0Acd2jx0 Be:
>>309
おお、我が母校はCocoa内部からも参照されていたか。
311 Name: 名称未設定 [sage] Date: 2008/11/21(金) 04:17:30 ID: ulllyDug0 Be:
>>310
笑ったww
自分は卒業生でも関係者でもないが、そのネタ分かる人どれだけいるんだ?
312 Name: 名称未設定 [sage] Date: 2008/11/21(金) 04:41:23 ID: Iagf3QtT0 Be:
あそこ広々して、雰囲気もいいよね。やはりCならではとでも言いましょうか...
ほとんど関係者じゃないんだけど、知り合いの先生が教員用住宅に住んでてそこが結構広くて、
飲み会(一応アカデミックな)とかよく開いてもらったなあ。
そういえばかつて天文台にも用があったので、何かの拍子にNAOって綴りをみると思い出すw

しかしICUは一般的にはいろんな管を繋がれてピッ、ピッ、とか鳴ってるイメージかとw
313 Name: 名称未設定 [sage] Date: 2008/11/21(金) 09:31:03 ID: cugDLjhM0 Be:
あれ?聞いた話では構内での飲み会は禁止だったが…今度あったら確認してみよう。
って、Cocoaはどうした?
314 Name: 名称未設定 [sage] Date: 2008/11/21(金) 09:34:44 ID: pKv4qdEc0 Be:
Cocoaどこ?わたしは誰?
315 Name: 名称未設定 [sage] Date: 2008/11/21(金) 10:17:50 ID: AatvtfKP0 Be:
俺はUnicodeのみの制約を嫌ってオリジナルの鬼車の方を使ってる。
316 Name: 名称未設定 [sage] Date: 2008/11/21(金) 13:25:04 ID: 6z3WSjYr0 Be:
>>305はどんな言語を使ってるの?
317 Name: 名称未設定 [] Date: 2008/11/21(金) 13:43:56 ID: M0Acd2jx0 Be:
パァるじゃね?パァる。
318 Name: 名称未設定 [sage] Date: 2008/11/21(金) 14:23:01 ID: jqALT49u0 Be:
ぱぁる厨の城東区だからね
319 Name: 名称未設定 [sage] Date: 2008/11/21(金) 14:35:54 ID: KDDxp3BY0 Be:
Rubyでも正規表現は使えたはず。
REALbasicも3.5あたりから内蔵されてバリバリ使えるしね。
だが俺はCocoaが屑とは思わん。むしろマンセーしてる。
AppleがPascalかBASICでCocoaアプリ作れるようにしてくれれば
もっとマンセーするんだけどねぇ
320 Name: 名称未設定 [sage] Date: 2008/11/21(金) 18:13:59 ID: JwOtb6rU0 Be:
>>319
つ 旧OS
321 Name: 名称未設定 [sage] Date: 2008/11/21(金) 18:25:23 ID: FH+sWgoq0 Be:
Cocoa-Perlが出たらパァる厨も大喜び
322 Name: 名称未設定 [sage] Date: 2008/11/21(金) 18:45:13 ID: tTr4sDtj0 Be:
regex(3)じゃだめなの?俺仕事のコードでバンバン使っちゃってるけど。
323 Name: 名称未設定 [sage] Date: 2008/11/21(金) 20:00:45 ID: 7NEuk8Da0 Be:
regex(3)の機能で充分ならばそれでいいんでないの
324 Name: 名称未設定 [sage] Date: 2008/11/22(土) 00:01:23 ID: Fh4kVmb/0 Be:
>>321
CamelBones が既にあるよ。

>>319
Pascal、BASIC と Obj-C のどこに違いがあるのかわからん。
見た目はちがうが、ほとんど文法一対一に対応するのに。
325 Name: 名称未設定 [sage] Date: 2008/11/22(土) 10:33:51 ID: Ua3yloZ/0 Be:
>>324
CamelBones、中の人がやる気がなさすぎでしょう。
10.5になるまでは「標準でのるかも?」って勢いだったけど、その後失速し
て、いまじゃそのままでは動かない。他の人があてたパッチでかろうじて、、、

326 Name: 名称未設定 [sage] Date: 2008/11/22(土) 13:24:04 ID: N1bFgiBw0 Be:
Propertyって便利だけど、何か中途半端な気がするのは気のせいですかね?
オプジェクトを作成してプロパティをセットする所までは便利だと思うけど
id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
327 Name: 名称未設定 [] Date: 2008/11/22(土) 13:41:41 ID: E1jjc5CT0 Be:
?
328 Name: 名称未設定 [sage] Date: 2008/11/22(土) 13:41:52 ID: Fh4kVmb/0 Be:
>>326
>id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
>受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
意味が判らんのですが、どういうこと?
なんでプロパティつかっててキャストするはめになるのか判らんのですが。
329 Name: 名称未設定 [sage] Date: 2008/11/22(土) 13:44:26 ID: Q5Vk1lrT0 Be:
画像のExifや一般情報を取得する方法って有るんでしょうか?
330 Name: 名称未設定 [sage] Date: 2008/11/22(土) 13:50:30 ID: Fh4kVmb/0 Be:
Core Graphics の CGImage をつかえばいいです。
CGImageSourceCopyProperties のあたりを参照。
331 Name: 名称未設定 [sage] Date: 2008/11/22(土) 13:59:13 ID: E1jjc5CT0 Be:
>>326
property設定する時、全部idで宣言してるとかじゃないよね。
332 Name: 名称未設定 [sage] Date: 2008/11/22(土) 14:17:29 ID: RI5N1Fnn0 Be:
ひとつ賢くなった>>326であった
333 Name: 名称未設定 [sage] Date: 2008/11/22(土) 16:47:35 ID: N1bFgiBw0 Be:
senderで送られてくるオブジェクトって通常id型でしょう?
そのプロパティにアクセスしようと思たらキャストかクラスに代入する必要があるでしょうに

334 Name: 名称未設定 [sage] Date: 2008/11/22(土) 17:07:45 ID: F4n+OlHB0 Be:
プロパティ関係ないじゃん。
普通のメソッドでもそうじゃん。
335 Name: 名称未設定 [sage] Date: 2008/11/22(土) 17:24:03 ID: lKz+QYh00 Be:
>>333
プロパティどうやって書いてんの?
336 Name: 名称未設定 [sage] Date: 2008/11/22(土) 17:35:49 ID: IISK+7aO0 Be:
- (IBAction)hoge:(id)sender
{
sender.foo = [aClass new]; // ???
}
ってことね。


俺はsenderに働きかけたことないけど。
337 Name: 名称未設定 [sage] Date: 2008/11/22(土) 18:11:15 ID: R6yOr3bR0 Be:
>>333
senderなんてほとんどIBOutletだろ。

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

みたいに書くんじゃね? 普通は。
338 Name: 名称未設定 [sage] Date: 2008/11/22(土) 19:12:12 ID: Il+FqCN50 Be:
うそーん
339 Name: 名称未設定 [sage] Date: 2008/11/22(土) 19:40:36 ID: EmZE7Gqk0 Be:
NSTextViewでsetEditable:NOにしておき、クリックされた、またはフォーカスが当った時に
setEditable:YESに変更、view外がクリックされた、またはフォーカスが外れた時にsetEditable:NOに
するにはどうすればよろしいのでしょうか?

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

よろしくお願いします。
340 Name: 名称未設定 [sage] Date: 2008/11/22(土) 22:11:15 ID: v4sMs7r70 Be:
>>330
すいません、Core関係は全く触った事無く扱い方自体知らないんですが、参考になる日本語ページとか無いでしょうか?
341 Name: 名称未設定 [sage] Date: 2008/11/22(土) 23:16:25 ID: W+1fjktw0 Be:
>>333

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

ソースコード側は、こう書いてもいいんだよ。
342 Name: 名称未設定 [sage] Date: 2008/11/22(土) 23:18:38 ID: hv+kYqZ80 Be:
id型が何か分かってないんだと思う
343 Name: 名称未設定 [sage] Date: 2008/11/22(土) 23:26:23 ID: W+1fjktw0 Be:
>>339
NSTextViewのサブクラスを作って、becomeFirstResponderとresignFirstResponderをオーバーライドすれば、できそうだけど。

ただ、NSTextViewからフォーカスが外れたら、そもそもキーイベントがNSTextViewに行く事は無いと思う。
344 Name: 名称未設定 [sage] Date: 2008/11/23(日) 00:08:59 ID: knCwFm3k0 Be:
>>340
ちょうど良さそうなのが
ttp://cocoawiki.aerial.st/index.php?FrontPage
345 Name: 名称未設定 [sage] Date: 2008/11/23(日) 00:16:15 ID: knCwFm3k0 Be:
Cocoa Drawing Guide
ttp://www.mosa.gr.jp/?p=444
346 Name: 名称未設定 [sage] Date: 2008/11/23(日) 01:41:23 ID: fOaeIxBi0 Be:
>>341
id の問題はおいとくとしても、 action メソッドで sender のプロパティに
アクセスしないといけない状況ってほとんどないと思うんだけど。
バインディングつかってないの?
347 Name: 名称未設定 [sage] Date: 2008/11/23(日) 09:19:20 ID: iaCcgTxk0 Be:
継承関係が無いクラスをポリモルフィックに扱う時はid型を使うだしょ
その時の話をしていたのだがorz...
348 Name: 名称未設定 [sage] Date: 2008/11/23(日) 09:32:18 ID: fOaeIxBi0 Be:
>>347
そういう状況でなんでプロパティを読みとりたくなるのか
具体的な状況がまったくわからんのだが。
349 Name: 名称未設定 [sage] Date: 2008/11/23(日) 11:27:47 ID: iaCcgTxk0 Be:
つうことで、propertyに違和感を感じるのは俺だけってことで...orz
350 Name: 名称未設定 [] Date: 2008/11/23(日) 12:33:34 ID: fOaeIxBi0 Be:
orz とか言うのはいいけど、こっちの疑問に答えてくれないんでは
違和感も伝わらないんだけど ???
a.property というのは obj-c ぽくなくて違和感があるが、
それは >>349 の感じている違和感ではなさそう。

どういう局面で sender の property が読みたくなるの?
351 Name: 名称未設定 [sage] Date: 2008/11/23(日) 14:14:58 ID: iaCcgTxk0 Be:
クラス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 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:03:15 ID: lPFF9JrY0 Be:
>>351
- (void) shift:(hoge *)point {

}



にすればええやん。
353 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:10:01 ID: qOiHI6Fa0 Be:
それだとfugeが受け取れない
354 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:10:47 ID: lPFF9JrY0 Be:
異なるクラスを1つのメソッドで処理したいのかが分からん。
355 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:17:00 ID: iaCcgTxk0 Be:
orz
356 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:31:04 ID: qOiHI6Fa0 Be:
まあ、アプリを作るよりもコードの組み方に執心するのも悪くないが、
それで満足出来ないならこれ以上は無駄な議論になる。
自分で言語を作るか満足出来る言語を探すしかないな。
357 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:38:14 ID: iaCcgTxk0 Be:
そこまで拘ってはいないんだけど、規模が大きくなると
可読性も重要になるもんでちょっと気になっただけです。
スレ汚しすまそん。
358 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:43:18 ID: NCg555PX0 Be:
>>351
例としてそれが正しいんだとすると、クラス設計が間違ってるんじゃない?

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

> 動的なオブジェクト言語なんで無理矢理継承関係を持たずに
どっちかっつーと、継承させればいいのに無理矢理継承させなかったようににみえるよ
359 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:58:16 ID: iaCcgTxk0 Be:
サンプルの例は簡単すぎるけど、継承関係を持ちたくない動的なポリモルフィズムでは
プロパティは合わないってことかな。たぶん俺の設計が悪いんでしょう...。
360 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:59:47 ID: qbiNAB4B0 Be:
>>358
いや、実際継承関係なしに同じメソッドを持たせたいときのためにプロトコルってもんがあるんだけどな…
プロパティ使ってもプロトコル作っとけばメソッドでアクセスは出来るだろうけどプロパティ構文でアクセスは出来ないか。

ていうかプロトコルみたいな基礎の基礎を理解してからプロパティみたいな(ある意味シュガーシンタックス)を使うべきだと思う。
361 Name: 名称未設定 [sage] Date: 2008/11/23(日) 15:59:59 ID: lPFF9JrY0 Be:
>>359
具体的に何をしたかったのか気になるな。
こういう事は参考になるし、差し支えなければ教えてたもれ。
362 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:10:58 ID: 5E7pfPDV0 Be:
プロトコルって
たった一つの関数のために宣言するのも気が引けない・・・・・

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




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

こういう継承関係はないけどある程度のメソッドのセットを共有するクラスって、実際にアプリケーション作ってれば
結構あるんだけどな。プロパティってカテゴリとかプロトコル中で使えないんだっけ?
364 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:22:46 ID: 5E7pfPDV0 Be:
メッセージを送りたいんじゃなくて
その二つのクラスを仮引数にしたいのか。

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

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

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

例が簡単過ぎと言う事だから、何がしたいかによるけどさ
同機能の名称だけ違うクラスがあるようだったから、これを親クラス使わないテは無いんじゃない?
366 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:31:47 ID: 5E7pfPDV0 Be:
>>363
そうなのか。
僕は研究で使うためのアプリケーションを作成させられているんだけど、
まわりにcocoaなんてやってる人がいないから、相談できる相手がいないんですよ。

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

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

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

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

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

規模が大きくなると可読性が... とかいうなら、それこそプロトコルとかである程度縛りを
持たせないとまずい気がする。
368 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:35:19 ID: qbiNAB4B0 Be:
>>365
>>351の例そのままなら誰だって継承を選択するし、継承ならプロパティもそのまま使えるからわざわざ質問なんかしないよ。
369 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:44:44 ID: 5E7pfPDV0 Be:
ごめん、366で納得しといて申し訳ないんだけど・・・・
今回の例でプロトコルをしようするってどういうこと?

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

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

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

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

どの辺にプロトコル・・・・・・・・が関係するんですか?
370 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:45:50 ID: qbiNAB4B0 Be:
>>364
あ、そうか。
HogeまたはFugeをインスタンス変数として持つ第3のクラスを作って、
プロパティはそっちに実装すれば…って余計めんどくさいけど、どうしてもプロパティ使いたいならこれかw
371 Name: 名称未設定 [sage] Date: 2008/11/23(日) 16:55:57 ID: qbiNAB4B0 Be:
>>369
いや、プロパティじゃなくてメソッドだったらプロトコル使えるねって話。を俺がしてるだけw 混乱させたらすまん。
372 Name: 名称未設定 [sage] Date: 2008/11/23(日) 17:16:16 ID: bRvMtYeW0 Be:
@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 Name: 名称未設定 [sage] Date: 2008/11/23(日) 17:19:54 ID: 5E7pfPDV0 Be:
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 Name: 326 [sage] Date: 2008/11/23(日) 17:20:53 ID: iaCcgTxk0 Be:
番号書いとかないと解らなくなりますね(^^;
話題がクラスの設計にまで発展していて恐縮してしまいます。

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

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

もっと使い込んで良い使用例を見つけてみます。サンクスアロット!
375 Name: 名称未設定 [sage] Date: 2008/11/23(日) 17:21:33 ID: 5E7pfPDV0 Be:
ごめん途中でかきこんでしまいました・・・・

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

両方ともうけとれるんでは?と・・・・
376 Name: 名称未設定 [sage] Date: 2008/11/23(日) 17:22:27 ID: 5E7pfPDV0 Be:
>>374

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

今はNSStringのinitWithContentsOfFileでエラーが出なかったら、
そのNSStringをwriteToFileで書き込んでるんですが、
無駄にメモリを使っているような気がします。
378 Name: 名称未設定 [sage] Date: 2008/11/23(日) 18:57:59 ID: CafrItRj0 Be:
やっと答えられるネタがw

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

でいいかと
379 Name: 名称未設定 [sage] Date: 2008/11/23(日) 19:48:14 ID: knCwFm3k0 Be:
ちなみに
- (BOOL)fileExistsAtPath:(NSString*)path isDirectory:(BOOL*)flag
でディレクトリかどうかも分かる
380 Name: 377 [sage] Date: 2008/11/23(日) 19:48:57 ID: wtDM58qW0 Be:
>>378さん
こういう時はNSFileManagerを使えばいいんですね。
ありがとうございます。参考になりました。
381 Name: 名称未設定 [sage] Date: 2008/11/23(日) 22:06:28 ID: UPPqK5k50 Be:
インスタンス変数の先頭や後ろに_を付けたり、
mを付けたりしてるのをよく見掛けるのですが、
正式(もしくは通例)な書き方ってあるのですか?
382 Name: 名称未設定 [sage] Date: 2008/11/23(日) 22:51:13 ID: zrPQcDP/0 Be:
ないです
383 Name: 名称未設定 [sage] Date: 2008/11/23(日) 23:08:33 ID: HpygaMZ60 Be:
俺の例で申し訳ないけど
1.あまり変数名を考えないで何もつけない
2._を付ける
3.mを付ける
4.変数名をよく考えて何もつけない
の順で進化(退化?)してきて、現在では何も付けないに固まりつつあるよ
384 Name: 名称未設定 [sage] Date: 2008/11/23(日) 23:17:00 ID: lPFF9JrY0 Be:
よく_を付ける人がいるけど、
あれってAppleが予約してるんだよね?
385 Name: 名称未設定 [sage] Date: 2008/11/23(日) 23:27:30 ID: NCg555PX0 Be:
mって懐かしいな
CodeWarrior PowerPlantの命名規則だっけ
386 Name: 名称未設定 [sage] Date: 2008/11/24(月) 01:10:28 ID: zG2/3T9r0 Be:
質問です。
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 Name: 名称未設定 [sage] Date: 2008/11/24(月) 01:17:47 ID: GByYYnXG0 Be:
>>386
それはデリゲートメソッドなんで大丈夫。10.4.11より前では単に呼ばれなくなるだけ。
388 Name: 名称未設定 [sage] Date: 2008/11/24(月) 01:55:11 ID: zG2/3T9r0 Be:
>>387
早速の回答ありがとうございます。
特に気にすることはないのですね。

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

389 Name: 名称未設定 [sage] Date: 2008/11/24(月) 04:04:16 ID: GByYYnXG0 Be:
>>388
それもデリゲートメソッドなんだからWebViewのサブクラスに書くメソッドではないよ。
そもそも
- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject ;
だと思うんだが。そのコードじゃ呼ばれるわけがない。
390 Name: 名称未設定 [sage] Date: 2008/11/24(月) 14:03:19 ID: PGqxC8ff0 Be:
Garbage collection有りのcocoa-Applicationで、
アプリの起動から終了まで、あるNSMutableArrayの中身を保持したいのですが
どういう風に宣言すればいいのでしょうか?
AppController Classのインスタンス変数として宣言すればいいのかなと思いましたが
うまくいきませんでした。
391 Name: 名称未設定 [sage] Date: 2008/11/24(月) 15:50:19 ID: HWz3ev+J0 Be:
>>390
AppControllerが、どこからも参照されていないのではないかな。
NSAppのdelegateにすれば良いでしょう。
nibのfile's ownerからdelegateを接続すれば解決するでしょう
392 Name: 名称未設定 [] Date: 2008/11/24(月) 17:07:43 ID: /NHK9Ydy0 Be:
リファレンスカウンタを利用してみれば?
393 Name: 名称未設定 [sage] Date: 2008/11/24(月) 17:13:33 ID: ljIgus1G0 Be:
id型だとプロパティ構文が使えないのは、コンパイラが、それがプロパティへのアクセスなのか、構造体(または共有体)へのアクセスなのか区別できなくなるためです。
こういうときは、非公式プロトコルを使ってコンパイラを騙してしまえば、綺麗に書けると思います。

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

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

あとは、>>352>>375が言ってることといっしょです。
394 Name: 名称未設定 [sage] Date: 2008/11/24(月) 17:22:33 ID: ljIgus1G0 Be:
>>381
Cocoaの場合、インスタンス変数名が、そのままプロパティ名や、KVCのキーになったりするので、プリフィックスを付けずに、そのままの名前で書くのがよいと思います。
逆に、メソッドの引数や、ローカル変数側にプリフィックスを付けるのが、Cocoa流なのではないかと最近思ってます。
よくメソッドの引数名で、anObjectとか、aStringとか見かけます。
>>384の言ってる通り、_はアップルが予約してるので使えませんが、ローカル変数名なら使っても問題ないはず。
395 Name: u16249.koalanet.ne.jp [sage] Date: 2008/11/24(月) 19:10:15 ID: 8eRKNHGE0 Be:
>>394
眼からうろこ落ちた。おれも今日から引数やローカル変数の方にプリフィックス付ける!!
一応、ローカル変数はPowerPlantからの癖でtheを付けてるけど、引数の
方はinとかoutをつけるとメソッド名とかぶってむずがゆいです。
anとかaはいいね。複数だとobjectsとかObjectsArrayとかにしてますか?
396 Name: 名称未設定 [] Date: 2008/11/24(月) 20:05:56 ID: /NHK9Ydy0 Be:
>>393
なるへそ
397 Name: 名称未設定 [] Date: 2008/11/24(月) 20:23:03 ID: lYcKzgoR0 Be:
>>35がすごすぎてへこんだorz

自分もがんばるぞ。
398 Name: 名称未設定 [] Date: 2008/11/24(月) 20:31:56 ID: GzPVuqFS0 Be:
Xcode 3.1を使用しています。

Safariの"Advanced"環境設定や、
iTunesの"General"環境設定などで見かける、横線を表示したいのですが、
どのようにしたら良いのでしょうか。
399 Name: 名称未設定 [sage] Date: 2008/11/24(月) 20:32:59 ID: GzPVuqFS0 Be:
ごめんなさい、IBのLayout Viewsのところにありましたorz
400 Name: 名称未設定 [sage] Date: 2008/11/24(月) 20:46:50 ID: NpEGxfAA0 Be:
>>389
指摘のメソッドに変えたらうまくいきました、ありがとうございます。
401 Name: 名称未設定 [saga] Date: 2008/11/24(月) 20:49:20 ID: 6rT9ICRJ0 Be:
なんだかんだいってもCocoaでプログラミングするのは楽しいな
ハマル事も多し、標準フレームワークの実装には文句もあるけどね
超高速NSTableViewとか作ってみたけど公開してみようかな
402 Name: 名称未設定 [] Date: 2008/11/24(月) 21:31:36 ID: /NHK9Ydy0 Be:
>>401
dictionaryを展開させるやつならぜひ
403 Name: 名称未設定 [sage] Date: 2008/11/24(月) 21:32:23 ID: 6a5Gwn4E0 Be:
15万件でもサクサクですか?
404 Name: 名称未設定 [] Date: 2008/11/24(月) 21:37:10 ID: /NHK9Ydy0 Be:
mac miniで多重スレッドでのプログラム処理は大丈夫ですか?
405 Name: 名称未設定 [sage] Date: 2008/11/24(月) 21:40:03 ID: CRbch+U60 Be:
>>401
1万件のCocoaBindingで、PBG4だと1分待たされました。
是非高速版がほしいですw。
406 Name: 名称未設定 [sage] Date: 2008/11/24(月) 21:48:00 ID: 6a5Gwn4E0 Be:
でもそれはアレイコントローラーが高速にならないと。

余談だけど、NSTableViewでサムネ画像など表示させた場合、
描画領域内にある行だけ画像表示させるのって簡単なんですかね?
407 Name: 名称未設定 [sage] Date: 2008/11/25(火) 00:31:44 ID: n8XQ2L280 Be:
>>406
ふつうに datasource メソッドを実装すれば
描画領域にある列、行のサムネイル画像を NSTabelView が要求してくるから、
その場でサムネイルつくって返せばいいだけだけど。
NSTableView って配列を先に全部与えて表示するものと勘違いしてない?
408 Name: 名称未設定 [sage] Date: 2008/11/25(火) 20:37:50 ID: fTXxDM330 Be:
アレイコントローラーの配列にNSImageで持たせるか、
画像のパスだけ持たせておいて
データソースで描画内だけNSImageを作成するかの
違いってことかな?
409 Name: 名称未設定 [sage] Date: 2008/11/25(火) 21:57:22 ID: R26T1kav0 Be:
>>405
1万行あるテーブルなんて、特定の行を探すのが大変そう。
ユーザーインターフェースの設計を考え直した方がいいと思う。
410 Name: 名称未設定 [sage] Date: 2008/11/26(水) 01:33:15 ID: P35jjkPN0 Be:
文字列オブジェクトは日本語でも全く問題ないよね。
でもそれをC言語のchar型の文字列ポインタにUTF8stringで代入しようとしたら文字化けするんですが、
なぜなんでしょうか?

411 Name: 名称未設定 [sage] Date: 2008/11/26(水) 06:25:24 ID: xQANSJuC0 Be:
>>410
文字化けしているかしていないかはその char* をどう使ったかによります。
どうやって char* を表示させたのか書いてくれないとわかりません。
412 Name: 名称未設定 [sage] Date: 2008/11/26(水) 14:48:24 ID: GK26HTBC0 Be:
>>390
[[NSGarbageCollector defaultCollector] disableCollectorForPointer:myMutableArray]
では駄目なの?(それか、グローバル変数として作るとか)
413 Name: 名称未設定 [sage] Date: 2008/11/26(水) 15:47:10 ID: QSxwsUJ30 Be:
NSWindowをsetLevelでNSNormalWindowLevel以外にするとExposeの時消えてしまいます。
Exposeの対象にする方法はないでしょうか?
414 Name: 名称未設定 [sage] Date: 2008/11/26(水) 18:44:35 ID: 0RmgUrO80 Be:
NSAppleScriptのexecuteAndReturnErrorで
スクリプトファイルからスクリプトを実行する時に
引数を渡す方法ってありますでしょうか…
415 Name: 名称未設定 [sage] Date: 2008/11/26(水) 19:41:31 ID: FophLCsx0 Be:
>>413
この辺関係ありそう
http://www.cocoadev.com/index.pl?DontExposeMe
http://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 Name: 名称未設定 [sage] Date: 2008/11/27(木) 02:46:01 ID: B6cixQN+0 Be:
マックから異なるサーバに
メッセージを書き込みに行くときに
日本語が含まれていると、かなり酷い文字化けして格納されるよね。

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

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

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

まあそれはともかく、悪い事は言わないから Windows だけで済まない場合は
もう Shift-JIS を使うのは止めて全部 Unicode ベースにしたほうがいいと思う。
418 Name: 名称未設定 [sage] Date: 2008/11/27(木) 05:13:33 ID: B6cixQN+0 Be:
>>417
返信ありがとうございます。

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

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

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

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

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

全部 Unicode ベースというのは、XCode もユニコード、
データベースサーバもユニコード、Windows でもユニコードということです。
そうできる権限があるなら、そうしたほうがあとあと楽だと思いますが。
420 Name: 名称未設定 [sage] Date: 2008/11/27(木) 05:30:59 ID: B6cixQN+0 Be:
データベースサーバはPostgresQLをつかっています。
通信方法はそこで用意されている
libpqというC言語用のAPIを使っています。

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

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

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

後、再度返信ありがとうございます。
421 Name: 名称未設定 [sage] Date: 2008/11/27(木) 06:06:19 ID: 37LWSc7G0 Be:
>>420
それはちゃんと表のセルに入力した文字列が
UTF8 の文字列に変換されてないんだと思います。

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

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

あとこれは Mac のせいじゃなくてあなたのプログラミングのせいでしょう。
422 Name: 名称未設定 [sage] Date: 2008/11/27(木) 06:15:15 ID: B6cixQN+0 Be:
>>421
僕も自分のプログラムのせいなのかなと考え
実はC言語だけでCUIプログラムを作成して送信したんです。

char command[250];

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

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

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

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

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

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

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

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

なんども言うようですが、windowsのエディッタで作成すれば、全く問題ありません。
424 Name: 名称未設定 [sage] Date: 2008/11/27(木) 06:24:07 ID: 37LWSc7G0 Be:
なんか Cocoa じゃないですね、皆様失礼しました。Mac でプログラミングスレ
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
に移動しましょう。以下返信はそちらにします。
425 Name: 名称未設定 [sage] Date: 2008/11/27(木) 16:33:22 ID: rWXcKYWw0 Be:
低スキルが間違いをOSのせいにする典型例だな。
426 Name: 名称未設定 [sage] Date: 2008/11/27(木) 20:01:20 ID: hCNJMOhd0 Be:
unsinged char data = 0xaa;
はできますが
unsinged char data = 0b10101010;
は出来ないのですね。

2進数を使いたい部分があるのですが、どう扱えば良いのでしょうか?
427 Name: 名称未設定 [sage] Date: 2008/11/27(木) 20:49:24 ID: wLn06wmd0 Be:
#define b00000000 0x00
...
#define b10101010 0xaa
...
#define b11111111 0xff
428 Name: 名称未設定 [sage] Date: 2008/11/27(木) 21:46:16 ID: t7oDCkvv0 Be:
ぬはは、なんという発想の転換
429 Name: 名称未設定 [sage] Date: 2008/11/27(木) 23:21:44 ID: PejjknVj0 Be:
>>427
それって、なんの意味があるんだ?
2進数を使いたいっていう話なのに、それだと実質上16進数だろ
430 Name: 名称未設定 [sage] Date: 2008/11/27(木) 23:57:32 ID: M0fGLrHO0 Be:
データタイプにbitがある言語使うとか。

まあ、普通は10進なり16進なりで処理するべ
431 Name: 名称未設定 [sage] Date: 2008/11/28(金) 00:11:57 ID: ng41BnSv0 Be:
基数変換はプログラミングの初歩だぞ。自分で作れ。
432 Name: 名称未設定 [sage] Date: 2008/11/28(金) 00:16:55 ID: /Q9QB/Oa0 Be:
gcc拡張で無かったっけ?
433 Name: 名称未設定 [sage] Date: 2008/11/28(金) 00:35:02 ID: vpfLJ8rB0 Be:
Cの仕様には含まれてないんですよね。
私は「計算機」のプログラマモードで16進と変換したりしてます。
434 Name: 名称未設定 [sage] Date: 2008/11/28(金) 01:07:35 ID: G1SWboG00 Be:
>>414
NSAppleScriptは最低機能のラッパだからできない。
OSAを直接使えばパラメータ与えてハンドラ呼び出したりとかできる。
探すべきキーワードはOSADoEvent kASSubroutineEventあたり。
さらに言えば、パラメータ必要になる様なことやるなら、Scripting Bridge
使うかAppleEvent使う方が良い。AppleScript介すると遅いし不安定なだけ。
435 Name: 名称未設定 [sage] Date: 2008/11/28(金) 15:32:11 ID: xfBeI8Px0 Be:
 if([self なんたら]){
  if([self こうたら]){
   if([self どうたら]){
    if([self ふんたら]){
     if([self ちんたら]){
      // OK牧場
     }
    }
   }
  }
 }

こういう書き方って一般的なんですかね?
436 Name: 名称未設定 [sage] Date: 2008/11/28(金) 15:50:33 ID: dEcFhsPw0 Be:
好み。

おれは深いインデント嫌いなので、
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 Name: 名称未設定 [sage] Date: 2008/11/28(金) 19:59:09 ID: dDOC0C8d0 Be:
>>436
>if([self なんたら]
>&& [self こうたら]
>&& [self どうたら]
>&& [self ふんたら]
>&& [self ちんたら]){
>// OK牧場
>}

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

(どうしても回避しきれない場合とか、無駄に凝るより素直にまとめて書いたほうが良い場合が
あるのはもちろん承知だが、それでも)。
439 Name: 名称未設定 [] Date: 2008/11/28(金) 21:39:40 ID: 72PQStUNP Be:
順番評価ってことは、一度否定が出たら以降は無視されるんだよね?
440 Name: 名称未設定 [sage] Date: 2008/11/28(金) 21:47:32 ID: Bb35kMPW0 Be:
仕事で3000行のforループとか300行オーバーのif文とか
悶絶するコードの改修を体験しことがある。
441 Name: 名称未設定 [sage] Date: 2008/11/28(金) 23:09:54 ID: OvBIZwt90 Be:
>>438
switch文が数値以外の値も評価できるようになればいいのかもしれんね。
...別に簡略化にできてないか
442 Name: 名称未設定 [sage] Date: 2008/11/28(金) 23:28:41 ID: GUz35KBi0 Be:
ちょっと違うかもだが、
>>436の前の方の用な感じで、
全体を@try{}で囲み、
否定が来たら、returnするのではなく、理由付きの例外を発生させる。
んで、@catch{}で、何故否定されたのか見れるようにする。
こうしとくと、後々検証に便利。

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

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

>>442
例外使う意味が分からん。
NSLog()で十分な気がするんだが。
444 Name: 名称未設定 [sage] Date: 2008/11/29(土) 00:01:57 ID: jESPa+9z0 Be:
>>442
そういうことをしたいなら、NSAssertを使った方が、ソースが綺麗になると思う。
445 Name: 名称未設定 [sage] Date: 2008/11/29(土) 04:55:28 ID: 5SNi5rkK0 Be:
悶絶するようなコード笑ったw
昔書いてたから余計にw
446 Name: 名称未設定 [sage] Date: 2008/11/29(土) 06:19:50 ID: nZKJ5UOy0 Be:
あれ、>>435は、実際にはそれぞれの if の中には多少の処理があるんじゃないの?
それともそれは [self どうたら] とかの中に入ってるの?

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

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

>>444
>>442 に引きずられているのかもしれないが、
assertは本来事前条件の検証をするためだけのもので、プログラムの条件分岐に使うものでは
ないと思う。
447 Name: 名称未設定 [sage] Date: 2008/11/29(土) 08:38:53 ID: TUbod1RH0 Be:
>>443
ちょっと待ってw
それ途中でぬけます?
処理時間が微妙に増える恐怖が襲ってきました
理屈じゃないですw
448 Name: 名称未設定 [sage] Date: 2008/11/29(土) 08:53:47 ID: +QW0vt7S0 Be:
条件で除外して行く様な処理はdo while(0)で書くね。
単純なif文では間に処理が挟まると書けなくなる。
スコープ明示して可読性上げる目的でも有効な手法
do {
 if (除外条件1) break;
   :
 if (除外条件2) break;
   :
 if (除外条件3) break;
 // 全条件を満たした
}while(0);
449 Name: 名称未設定 [] Date: 2008/11/29(土) 21:26:44 ID: YVMtZIRG0 Be:
>>448

なるへそ!

450 Name: 名称未設定 [sage] Date: 2008/11/30(日) 00:13:49 ID: hhtkbghE0 Be:
>>448
do while(0) は目から鱗。
今まで goto で頑張ってたのが必要が無くなった。
これで gotoを全廃できそうだ……
451 Name: 名称未設定 [sage] Date: 2008/11/30(日) 00:53:06 ID: sGbGiZTZ0 Be:
>>448はCなんかのバッチ処理のmain関数でよく使う手ですね。
途中の処理で落ちたらbreakで抜けて異常終了とか。
452 Name: 名称未設定 [] Date: 2008/11/30(日) 04:17:53 ID: hSGWx1Tc0 Be:
XCodeでentityを追加する時に押すボタンのように、
スライダーの左にボタンを起きたいのですが、
どうやればいいのでしょうか?
453 Name: 名称未設定 [sage] Date: 2008/11/30(日) 11:32:42 ID: yoqGZQDC0 Be:
ごめん。なんで while( 1 ) や for ( ; ; ) でなく do while(0); なの?

do while() 句は、長文になったとき抜け出す while 条件の見通し(今回は while(0) だけど)が悪くなってしまうから、ループでの使用順位として低い位置にあるとおもう。普通に while(1) {}; でいいと思うのだけど。
454 Name: 名称未設定 [sage] Date: 2008/11/30(日) 11:53:00 ID: Sn0/sJgv0 Be:
while(1) や for(;;) は無限ループだけど、
do{ ...} while(0); は一回だけ実行。
{ ... } とほとんどかわらないけど、break で脱出出来るということを使っている。
455 Name: 名称未設定 [] Date: 2008/11/30(日) 11:58:07 ID: bVIoA/Vw0 Be:
>>454
>do{ ...} while(0);

複数行のマクロでよくみるけどこんな使い方もあるんだな
456 Name: 名称未設定 [sage] Date: 2008/11/30(日) 14:11:33 ID: R4fMeWPr0 Be:
>>454
なるほど、それは便利かも。今度使ってみよう。
しかしほとんどCocoaと関係ないww
457 Name: 名称未設定 [sage] Date: 2008/11/30(日) 18:53:58 ID: is5S+TiE0 Be:
Cocoaからアプリケーションの「パッケージ内容を表示」するには?
NSWorkspaceだとアプリケーション自体が表示されて
パッケージ内を開いてくれません。
458 Name: 名称未設定 [sage] Date: 2008/11/30(日) 20:15:19 ID: 8UXDFhzQ0 Be:
多分用意されてないと思う

ちなみにパッケージ内を見せる別の方法として NSSavePanel で setTreatsFilePackagesAsDirectories:YES するってのはある
459 Name: ネタですよ [sage] Date: 2008/11/30(日) 20:28:41 ID: NRo7NNXS0 Be:
質問です。
cocoaの隠しAPI、NSBoomって何に使うのですか?
460 Name: 名称未設定 [sage] Date: 2008/11/30(日) 20:38:11 ID: xGKlfZKq0 Be:
>>459
BoomというSteveの声にあわせてExposeが動く。
461 Name: 名称未設定 [sage] Date: 2008/11/30(日) 20:50:01 ID: v52HvDmO0 Be:
>>457
NSString *path = @"/Applications/Safari.app/Contents/Info.plist";
BOOL flag = [[NSWorkspace sharedWorkspace] selectFile:path
inFileViewerRootedAtPath:nil];

無理矢理だけど、これで/Safari.app/Contents/が開く。
462 Name: 457 [sage] Date: 2008/12/01(月) 00:15:19 ID: bRkyOVlu0 Be:
>>458
ないですか、残念。
>>461
パッケージ内にあるフォルダなら普通に開けるんですよね
NSString *path = @"/Applications/Safari.app/Contents";
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:path];
463 Name: 名称未設定 [sage] Date: 2008/12/01(月) 11:07:48 ID: Y2za4y4W0 Be:
>>450
gotoの替わりに使ったりしないで、使いたい時はgotoでいいんじゃない?
はっきりラベルで行き先が明示されている方が可読性も良いと思うし。
breakで抜けるループが1重ならいいけど多重になってたりするとわけ解らなく
なりやすいよ。
464 Name: 名称未設定 [sage] Date: 2008/12/01(月) 11:21:31 ID: /OHo/hwy0 Be:
NSTableViewで40行程度の表示をしようとしています。
Tableの大きさは8行程度でその部分は表示できているのですが、
縦スクロールバーが機能してくれません。
どのように設定すれば、スクロールバーとTableの中身が同期するのでしょうか?
465 Name: 名称未設定 [sage] Date: 2008/12/01(月) 11:40:47 ID: FFcDafTQ0 Be:
>>464
インターフェースビルダーで作ったら何もしなくても
自動でスクロールがきくはずだけど。
配置したところでインスペクタを開いて、
何回かクリックしていたら順に
スクロールビュー、テーブルビュー、テーブルカラムの順に設定出来るので
そのへん確認してください。
466 Name: 名称未設定 [sage] Date: 2008/12/01(月) 13:31:33 ID: tfI3OpAZ0 Be:
>>464
スクロールをOFFにしてない?
TableViewを作り直した方が早いかもしれない。
467 Name: 464 [sage] Date: 2008/12/01(月) 15:15:48 ID: /OHo/hwy0 Be:
TableViewを作り直しても、うまく行きません。。。
どこかの僕が勝手にいじってしまう可能性もあるので、今回設定したのは
Scroll View AttributeのShow Horizontal Scrollerのチェックを外した。
Table Headerに文字を入れた。
Table Column attributeで各Columnのidentifierを設定した。
だけなのですが、まず縦のスクロールバー自体が表示されません。
(Automatically Hide Scrollerはチェックしていないのに、Hide状態になっています)。
一体何がどうなっているのでしょう?
468 Name: 名称未設定 [sage] Date: 2008/12/01(月) 15:56:05 ID: tfI3OpAZ0 Be:
>>467
それは面妖な。
IBで実行した時点でスクロールバーが消えてますか?
469 Name: 464 [sage] Date: 2008/12/01(月) 16:44:53 ID: /OHo/hwy0 Be:
>>468さん
IBの時点でバーの矢印と青い丸は表示されていません。
そこで縦スクロールバーをクリックして、
Scroller attributeをEnableにすると、矢印は出ますがやはり青丸は出ません。

その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
さらにアプリ起動中にスクロールバーをクリックすると青丸が出現します。
しかしその青丸をスライドさせても、TableViewの中身は変わりません。
現状こんな具合でさっぱりです orz
470 Name: 名称未設定 [sage] Date: 2008/12/01(月) 17:18:39 ID: 9aAmboBn0 Be:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
の実装はどうよ??

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 8;
}
とかって事はないだお??
471 Name: 名称未設定 [sage] Date: 2008/12/01(月) 17:23:10 ID: 9aAmboBn0 Be:
あるいはデータソースを呼び出すメソッド名を間違えてるとか。
デリゲートとか、非形式プロトコルだとそーゆー場合はエラーでないよ。
472 Name: 464 [sage] Date: 2008/12/01(月) 17:52:34 ID: /OHo/hwy0 Be:
すいません、訂正です。
>その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
この行は、「矢印有り青丸無し」の間違いでした。

>>470さん
TableViewをいっぱいに広げると下の方まで表示されているので、
その二つのメソッドに問題は無いと思います。
データソースを呼び出すメソッドとは何でしょうか?
僕はIBでTableViewからdataSourceに青線を繋ぐ方法で呼び出してるつもりです。
473 Name: 名称未設定 [sage] Date: 2008/12/01(月) 18:38:40 ID: tfI3OpAZ0 Be:
>>470
データソースが空でもスクロールバーは表示されると思うけどね。
こんな症状は初めて聞いたかも知れない。
474 Name: 名称未設定 [sage] Date: 2008/12/01(月) 21:43:33 ID: 4xQMOEp30 Be:
これからCocoaアプリに初挑戦する者です。
アプリケーションを設計前ってところなんですが・・・
MVCモデルに照らすとコントローラの数と言うのはひとつのアプリにひとつに
するべきなんでしょうか?
それとも、スレッド数分とする方が良いのか、いくつあろうと構わないもの
なんでしょうか?

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

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

http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/
「Cocoaのデザインパターン」の「Model-View-Controllerデザインパターン」
477 Name: 名称未設定 [sage] Date: 2008/12/01(月) 23:40:24 ID: b7ZJ0Q1q0 Be:
お、デベロッパページの日本語化がだいぶ進んできた?

て、フレーム内の「リファレンス」が全部リンク切れw
478 Name: 名称未設定 [sage] Date: 2008/12/02(火) 12:44:09 ID: DiP/2Yku0 Be:
>>472
XCode のバージョンと OS のバージョンは?
とりあえず XCode の最新版を再インストールしてみるのはどうでしょう。
それはあきらかに IB の挙動がおかしいとおもう。

最低限症状が出るプロジェクトをかためてアップローダにおいてください。
こっちでチェックできるので。
479 Name: 名称未設定 [sage] Date: 2008/12/02(火) 13:23:02 ID: qRW1sZo10 Be:
nibファイルが壊れてるとかね
挙動がおかしいときは別フォーマットで保存で治ることもある
480 Name: 名称未設定 [sage] Date: 2008/12/02(火) 17:58:15 ID: N8ybeWLx0 Be:
ファイルやフォルダのアクセス権の変更ってできますでしょうか…
AppleScriptからUNIXコマンド実行しないと無理?
481 Name: 名称未設定 [sage] Date: 2008/12/02(火) 19:09:33 ID: N8ybeWLx0 Be:
あ、てかNSTaskで実行すればいいのかw
482 Name: 名称未設定 [sage] Date: 2008/12/02(火) 19:32:22 ID: r/ZHQGK80 Be:
NSFileManagerでなんかなかったっけ?
483 Name: 472 [sage] Date: 2008/12/02(火) 20:50:22 ID: if+xUuvJ0 Be:
>>478さん
XCodeは3.1.1 OSは10.5.5、どちらの最新のはずです。
関係する所だけを集めたちっちゃいプロジェクトを作りました。
http://gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=743
DLKeyは table です。
よろしくお願いします。
484 Name: 名称未設定 [sage] Date: 2008/12/02(火) 22:39:55 ID: qRW1sZo10 Be:
>>483
listManagerが無いのにdataSource繋げるからいかんのか

IBのdataSourceリンクを外して、
listManager = [[ListManager alloc] init];
のあとに
setDataSource
すればおk
485 Name: 名称未設定 [] Date: 2008/12/02(火) 22:44:57 ID: qFEE5ZYl0 Be:
こんばんは。
>>452
ですがクラス名など分かりましたら教えてほしいです
486 Name: 名称未設定 [sage] Date: 2008/12/02(火) 22:51:42 ID: BP+tmKAT0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/12/03(水) 13:15:23 ID: EynOQwwp0 Be:
>>486
ていうか IB で listManager を実体化して
(Objectのアイコンをライブラリからドラッグ&ドロップして、
インスペクタでクラスを ListManager に変更)
しまえば、awakeFromNib とのタイミングとの問題もなくなると思うし、
コードも二三行短くなるかな...
488 Name: 472 [sage] Date: 2008/12/03(水) 17:26:51 ID: O7b6E22H0 Be:
おお、あっという間に様々な解答が!
タイミングの問題だったのですね。自分だけで考えてたらわからなかったと思います。
皆さんありがとうございました。
今は484さんのコードにして、ちゃんと動いております。
489 Name: 名称未設定 [sage] Date: 2008/12/03(水) 19:12:38 ID: G3lcVDRU0 Be:
>>488
listManagerは、そのアプリケーションの中で、モデルという位置づけにあるように見えるので、>>486の言う通りinitの中で生成するのが正攻法だと思います。
awakeFromNibは、基本的にnib内のオブジェクトを初期化するコードを書きます。
nibファイル内には、通常モデルは配置しません。
490 Name: 名称未設定 [sage] Date: 2008/12/03(水) 23:15:10 ID: EynOQwwp0 Be:
データソースはコントローラだとおもうんだけど。
だから nib 内で作っても問題ない... と言ってみる
491 Name: 名称未設定 [sage] Date: 2008/12/04(木) 00:20:15 ID: OWKazUoG0 Be:
>>490
ソースを見ると分かる通り、AppControllerがNSTableViewのデータソースです。
もちろんこのプロジェクトは単なるサンプルでしょうから、本来の構造がどうあるべきかは分かりませんが、
どっちかというとlistManagerはモデルだと思われます。
コードを短くしたいならこの場合、AppControllerとlistManagerを合体させてしまえばいいんですが、それが目的ではないでしょう。
492 Name: 名称未設定 [] Date: 2008/12/04(木) 20:28:32 ID: HGZjTiEG0 Be:
-(void)mouseDown:(NSEvent*)evを実装したいんですが、
ただXコードで書いただけではなにも反応がありませんでした。・・・当たり前ですけど。

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

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

なら、IBで、ウインドウにCustomView貼って、クラス名を変更すれば動くはず。

カスタムコントロールについては、
ttp://www.stripe-net.jp/cocoa/documents/chapter2/chapter2-1.html
が分かりやすかったです。
494 Name: 名称未設定 [sage] Date: 2008/12/06(土) 17:10:09 ID: 9Wq0jq3Y0 Be:
Cocoa applicationのテンプレートで作成されたMainMenu.xibの
File's owrnerとapplicationの違いは何ですか?
どちらのdelegateにクラスを接続してもNSApplicationのデリゲートとして動く。
優先度がapplicationの方が高いだけで同じ?
495 Name: 名称未設定 [sage] Date: 2008/12/06(土) 17:54:57 ID: k7xoKMxV0 Be:
意味は違うけど、ものは同じ。

両方に違うオブジェクトをdelegateにすると多分、
File's Ownerが最後にsetDelegate:されると思うから、
File's OwnerのDelegateが最終的にNSAppのdelegateになるんじゃないかな?

あれ?
File's Ownerが一番最後と決まってるのはawakeFromNibだけだったっけ?
496 Name: 494 [sage] Date: 2008/12/06(土) 19:56:31 ID: kd/tvFHS0 Be:
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 Name: 名称未設定 [] Date: 2008/12/07(日) 14:10:48 ID: q2ACHXTU0 Be:
>>494
MainMenu.xibに限っていうならば、ApplicationとFile's Ownerは、同一のオブジェクトです。
498 Name: 名称未設定 [] Date: 2008/12/07(日) 16:03:01 ID: ZU8ZGfPL0 Be:
>>493
返信非常に遅くなり申し訳ございません。
何とかNSViewに貼り付けることで右クリック操作によるコンテキストメニューの
表示に成功させることが出来ました。
ここで気になるのはこれは、レスポンダーチェーンが関わっているのでしょうか?

またそこで今度はNSTableViewで選択行を右クリック→コンテキストメニュー→削除
を実現させようとトライしたのですが、

この際NSTableViewコントローラにmyTableViewを貼り付けました。
右クリックでコンテキストメニューは表示させることができるのですが、
行が選択できません。

データソースは別のモデルmyTableViewDataSourceで用意しています。

myTableViewを貼り付けなければ行が選択できるのですが・・・・
それだと右クリックしたときコンテキストビューを表示させるのに
どうしたらいいのか分からないので・・・・
499 Name: 名称未設定 [sage] Date: 2008/12/07(日) 16:22:26 ID: hZLd1O/h0 Be:
>>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 Name: 名称未設定 [] Date: 2008/12/07(日) 16:29:52 ID: ZU8ZGfPL0 Be:
>>499
最終的な目的は選択した行を削除することにあります。

そこでコンテキストメニューの項目で「削除」をクリックすれば
選択されている行を削除しようとがんばっています。

IBでMenuをコネクトすればいいとのことですが、
menuとコントローラを接続できずに断念しました。
501 Name: 名称未設定 [] Date: 2008/12/07(日) 16:35:55 ID: ZU8ZGfPL0 Be:
>>499
右クリックしたときに
選択できるようになりました。
これを左クリックしたときに選択できるように自分でやってみます。
502 Name: 名称未設定 [] Date: 2008/12/07(日) 16:39:57 ID: ZU8ZGfPL0 Be:
>>499
できました。
ありがとうございます。
503 Name: ネタですよ [sage] Date: 2008/12/07(日) 20:40:21 ID: GT/IU0+g0 Be:
質問です。

XMLの解析で
<entry>
 <title>TITLE</title>
 <link rel="REL" type="TYPE" href="HREF"/>
</entry>

の場合、linkのrel,type,hrefの値を取るにはどうすればよろしいでしょうか?
titleの取り方はわかったのですが。
504 Name: 名称未設定 [sage] Date: 2008/12/07(日) 21:31:39 ID: dk74pp3E0 Be:
うは、前にネタ書いた時の名前が残ってるw
すいません、ネタではなく真面目な質問です。
お恥ずかしい限りで・・・
505 Name: 名称未設定 [sage] Date: 2008/12/07(日) 21:35:24 ID: K/k+Z42t0 Be:
>>499
selectRow:byExtendingSelection:はもうダメだべ。

selectRowIndexes:byExtendingSelectionに換えるべ。
506 Name: 名称未設定 [sage] Date: 2008/12/07(日) 21:44:31 ID: vMU1Eyyg0 Be:
どこがネタなんだろうと悩んでしまったじゃないか...w
507 Name: 名称未設定 [sage] Date: 2008/12/07(日) 22:37:34 ID: uBxirYjF0 Be:
>>503
>>459の人かw
508 Name: 名称未設定 [sage] Date: 2008/12/07(日) 23:08:20 ID: 1orqG+Pz0 Be:
>>503
titleはどうやって取り出しましたか?
509 Name: 名称未設定 [sage] Date: 2008/12/07(日) 23:13:41 ID: curmvucM0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/12/08(月) 03:28:42 ID: U49CM7Oh0 Be:
cocoa事始めで
ボタンクリックで、Hellow Worldウィンドウを出すことすらできない。
どこかで似たようなチュートリアルありませんか?
511 Name: 名称未設定 [sage] Date: 2008/12/08(月) 03:48:04 ID: g5ShzTpC0 Be:
Cocoa事始めってどこ?
512 Name: 名称未設定 [sage] Date: 2008/12/08(月) 11:18:37 ID: WhRI485B0 Be:
事始めて→今年初めて

じゃない?
513 Name: 名称未設定 [] Date: 2008/12/08(月) 13:01:28 ID: KSfoz0Yz0 Be:
・・・
514 Name: 名称未設定 [sage] Date: 2008/12/08(月) 13:13:13 ID: 6I8yRHaT0 Be:
たのCocoLeopardじゃないか?
あの本最初ボタンクリックでHello World出すところから始まるし。

永遠にHellow Worldウィンドウは出ないと思うけどな。
515 Name: 名称未設定 [] Date: 2008/12/08(月) 14:45:57 ID: KSfoz0Yz0 Be:
揚げ足を取りたくてたまらない私
516 Name: 名称未設定 [sage] Date: 2008/12/08(月) 16:27:55 ID: 2m2l4A690 Be:
意味の無い書き込みは見てて不快
発言するなら書く、そうでないならROMっててください
勘違いなレスを見かけた時もそうです
517 Name: 名称未設定 [] Date: 2008/12/08(月) 16:31:06 ID: fWhZhvgy0 Be:
そうですね。
>>510さん、ボタンを押すと新たに画面を表示させたいのでしょうか?
518 Name: 名称未設定 [] Date: 2008/12/08(月) 16:35:36 ID: fWhZhvgy0 Be:
返事を待つのもだるいので、そうだとして仮定して質問に答えると
まずIBのほうで
NSWindowのVisibleのチェックをはずしてください。

そこで新たにモデルのほうで
IBOutlet NSWindow* newWindow; //こいつはIBで該当Windowと結ぶ

- (IBAction)openWindow:(id)sender
{
[newWindow makeKeyAndOrderFront:self];
}

これで一発ででるはず。
519 Name: 名称未設定 [] Date: 2008/12/08(月) 16:39:17 ID: KSfoz0Yz0 Be:
>>516
オマエモナー
520 Name: 名称未設定 [sage] Date: 2008/12/08(月) 16:46:07 ID: 0OjgUTpN0 Be:
>>519
王道なんだが、ちょっとは自重しろw
521 Name: 名称未設定 [sage] Date: 2008/12/08(月) 17:07:19 ID: 2m2l4A690 Be:
>>519
私のレスはあなたに対する明確な意志表示があります
あなたとは違うんです
522 Name: 名称未設定 [sage] Date: 2008/12/08(月) 18:34:54 ID: WTYb+ld20 Be:
キモチワルイ
523 Name: 名称未設定 [sage] Date: 2008/12/08(月) 21:05:02 ID: IzfmZjnO0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/12/08(月) 21:06:59 ID: IzfmZjnO0 Be:
あ、重ねてすみません。
attrHref = [[elemLink attributeForName:@"href"] stringValue];
はゴミです。
525 Name: 名称未設定 [sage] Date: 2008/12/08(月) 22:36:04 ID: kFKjusSQP Be:
初歩的なことかもしれないのですが
日本語が含まれるNSArrayをNSLogで表示させたときに
ユニコード値が出てくるのはどうにもならないのですか?
526 Name: 名称未設定 [sage] Date: 2008/12/08(月) 23:11:41 ID: /HG0hJ4t0 Be:
>>522
お前のレスが一番キモチワルイよw

>>525
過去ログにあるよ
527 Name: 名称未設定 [sage] Date: 2008/12/09(火) 12:40:37 ID: 7rIjPTyl0 Be:
Safariのダウンロード画面に出てくるインジケータみたいに
後ろに流れて行くようなインジケータバーを表示させたいのですが、
NSIndicatorではその「後ろに流れて行く」表示が設定できませんでした。
なにか他のクラスがあったりするのですか?
それともNSIndicatorの設定の問題でしょうか?
528 Name: 名称未設定 [sage] Date: 2008/12/09(火) 12:44:56 ID: c+xotcrO0 Be:
>>527
後ろに流れていくというのがアニメーションのことなら、startAnimation:とstopAnimation:を使う。
Binding使うと自動でやってくれたと思う。
529 Name: 527 [sage] Date: 2008/12/09(火) 13:26:01 ID: 7rIjPTyl0 Be:
すいません、NSIndicatorじゃなくてNSProgressIndicatorでした。
やりたいのはdeterminate progress barを増やしつつ、後ろに流れて行く表示なんです。
startAnimationはIndeterminateだけですよね?
Safariのダウンロード表示なんかはそうなっているので、出来なくはないと思っているのですが
どうなのでしょう?
530 Name: 名称未設定 [sage] Date: 2008/12/09(火) 13:31:04 ID: c+xotcrO0 Be:
>>529
Determinateなら値が設定されていれば勝手にアニメーションしてると思うけど。
あれ、これ10.5だけなのかな?
531 Name: 名称未設定 [sage] Date: 2008/12/09(火) 13:48:59 ID: nhlJuWQy0 Be:
こだわる必要性をさほど感じない部分ではあるな
532 Name: 名称未設定 [] Date: 2008/12/09(火) 16:04:31 ID: PzccxqHg0 Be:
NSTimerの
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
メソッドを別のスレッドを建てて、そのスレッドで起動させようとしたら撃沈されました。

上記のメソッドは呼び出されると実行ループに登録してすぐに終了しちゃうんですね。
そのおかげで子スレッドも終了しちゃいます。

まぁわざわざ別スレッド上で起動させる必要もないんですが、
解決策ってありますか?
533 Name: 名称未設定 [sage] Date: 2008/12/09(火) 16:12:27 ID: c+xotcrO0 Be:
>>532
timerWith...のほうで作ってNSRunLoopのmainRunLoopにaddTimer…したら駄目だってリファレンスに書いてあった。
534 Name: 名称未設定 [sage] Date: 2008/12/09(火) 16:16:37 ID: c+xotcrO0 Be:
>>532
ん、ひょっとしてスレッド内でTimerを使うってことかな。なら自分でRunLoop作ればいいよ。
535 Name: 名称未設定 [sage] Date: 2008/12/09(火) 16:21:53 ID: vViia8LOP Be:
>>526
過去ログ漁って
NSLog(@"%@", [NSString stringWithCString:[[array description] UTF8String] encoding:NSNonLossyASCIIStringEncoding]);
でいけました。
536 Name: 名称未設定 [] Date: 2008/12/09(火) 16:23:19 ID: PzccxqHg0 Be:
>>533-534
すばやい回答ありがとうございます。
>>スレッド内でTimerを使うってことかな

子スレッド上でTimerを使おうと画策しました。
ただこいつは時期が来るまで眠っていてくれるから
そんな必要性はほとんどないんですけどね。

自分でRunLoopを作ってそこに登録せよってことでしょうか?
537 Name: 名称未設定 [sage] Date: 2008/12/09(火) 16:31:44 ID: c+xotcrO0 Be:
>>536
うん。そもそもscheduledTimerなんちゃらって、Timer作ってカレントのRunLoopに登録するものだから。
でもTimer使うためだけにRunLoop回すくらいなら、NSThreadでsleepUntilDateすればいいんじゃないかな。
538 Name: 名称未設定 [] Date: 2008/12/09(火) 16:37:27 ID: PzccxqHg0 Be:
>>537
なるほど休眠させるという手もありますね。
実はその辺悩ましいところなんです。
ただプログラムは同じ動作が得られるなら簡単な方でという原則に従うなら
まちがいなく休眠させておいたほうがいいですよね。

わざわざ実行ループをみずから作成するよりは・・・・・・
539 Name: 名称未設定 [sage] Date: 2008/12/09(火) 16:48:19 ID: nhlJuWQy0 Be:
むしろスレッド内でNSTimerを使う意味は何も無い気がする。
540 Name: 名称未設定 [] Date: 2008/12/09(火) 16:54:39 ID: PzccxqHg0 Be:
自分が作成しているのはシュミレーションモデルなんですよね。

だから
その部分はメインと切り離して、動作させないとモデルに忠実にならないっていうジレンマがあるんです。

ただプログラム内部でそんなことをする必要性があるのかっていうと
僕には分からないです。
ありますかね?一応大学の卒論なんですが・・・・教授に相談するべきなんでしょうか?
541 Name: 名称未設定 [sage] Date: 2008/12/09(火) 17:01:26 ID: 7aJT8/WT0 Be:
卒論でCocoaで提出していいのか...羨ましいな。
542 Name: 名称未設定 [] Date: 2008/12/09(火) 17:02:00 ID: PzccxqHg0 Be:
そんなわけがない・・・・・。
543 Name: 名称未設定 [sage] Date: 2008/12/09(火) 17:11:39 ID: +/JU880n0 Be:
setUsesThreadedAnimation:
じゃダメなの?
544 Name: 名称未設定 [sage] Date: 2008/12/09(火) 23:23:18 ID: JuNa1S6u0 Be:
Cocoaで
「マウスカーソルを任意の座標に持って行き」
「そこで右クリックする」
ということをソフトウェアからコントロールすることは可能でしょうか?
NSEvent あたりのリファレンスを調べましたが,それらしいメソッドが見つかりませんでした。

Leopard の Automator で「操作の記録」をして再生すると,このようなマウスイベントの再現ができているので,
方法がないわけではないと思うのですが…。Automator はどうやって実現しているのでしょうか…。

545 Name: 名称未設定 [sage] Date: 2008/12/09(火) 23:27:09 ID: yHQ0Sslf0 Be:
>>540
>>541,542を見て「え、だめなんですか」とか言う前に
学校で使っているパソコンのOSがMacOS Xであることを確認しといて。
それ以外だったらだめ。
546 Name: 名称未設定 [sage] Date: 2008/12/09(火) 23:59:55 ID: ESJXlCz60 Be:
それ以外でもだめなことないだろ。
プレゼンできればいいし、プログラムそのものを提出するんじゃなくてそれについての卒論でしょうよ。
547 Name: 名称未設定 [sage] Date: 2008/12/10(水) 00:33:46 ID: 2N5XkSrD0 Be:
>>544
プログラムで「自動的に」
マウスを任意の位置まで持って行き右クリックさせるプログラムを作ろうとしているのですか?

イベント処理はNSResponderで定義されているとか・・・そんなことは聞いてないんですよね。?
548 Name: 名称未設定 [sage] Date: 2008/12/10(水) 00:51:56 ID: xSuG9smw0 Be:
まさか>>544>>492,498と同一人物じゃあるまいな。
549 Name: 名称未設定 [sage] Date: 2008/12/10(水) 01:00:06 ID: 2N5XkSrD0 Be:
>>492,498は>>547です・・・・・私です。

えーそれならって思って・・・
550 Name: 548 [sage] Date: 2008/12/10(水) 01:22:42 ID: 6aI1OQjr0 Be:
>>549
目的は>>500なんでしょ?
もはややり方が回りくどすぎて意味不明になってるよ。
世の中のCocoaアプリがコンテクストメニュー一つ出すのにそんな回りくどいコード書いてるわけないのは分かるでしょ。
だったら方法が間違ってることも分かるでしょ。
そこで方法を質問しないで、自分が考えたトンデモ解決法を実現しようとして、その過程で行き詰まって質問したところで
まともなアプリは出来ないよ。
551 Name: 548 [sage] Date: 2008/12/10(水) 01:27:21 ID: 6aI1OQjr0 Be:
んで>>500ね。
menuとコントローラを繋げない…とあるけどコントローラにはすでに削除の処理を実装したアクションメソッドがあるのね?
ならNSMenuItemからコントローラにアクションを繋げればいいよ。コントロールキー押しながらドラッグね。
552 Name: 名称未設定 [sage] Date: 2008/12/10(水) 01:29:26 ID: 3bh9sFCU0 Be:
>>544

void rightClicOn(CGPoint mouseLocationFromTopLeft)
{
CGWarpMouseCursorPosition(mouseLocationFromTopLeft);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, true);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, false);
}

こんなんで逝けるハズ・・・。
553 Name: 名称未設定 [sage] Date: 2008/12/10(水) 01:30:35 ID: 3bh9sFCU0 Be:
うはっ、関数名の綴り間違ってる。
554 Name: 名称未設定 [sage] Date: 2008/12/10(水) 01:34:01 ID: 2N5XkSrD0 Be:
>>550
勘違いされています。
544さんは私ではありません。

自分もイベント処理で苦しんだので、もしかて544さんも
同じように右クリックしたいのかなと思っただけです。



555 Name: 名称未設定 [sage] Date: 2008/12/10(水) 01:39:47 ID: 2N5XkSrD0 Be:
参考にと今見させていただいたんですが、

QuartzのAPIですか・・・・
どうやったらそんな所まで扱えるようになるんですか?
cocoaでアップアップです。
556 Name: 名称未設定 [sage] Date: 2008/12/10(水) 01:42:40 ID: u8v8vRLL0 Be:
>>552
なんでCocoaは左下でCoreGrapchics?は左上なんだろ。統一してくれりゃいいのに。
変換関数とかってあるのかな?
557 Name: 名称未設定 [sage] Date: 2008/12/10(水) 03:00:28 ID: fRwjglTW0 Be:
ビットマップ画像扱う場合必然的にCoreGraphics使う事になるよ
558 Name: 544 [sage] Date: 2008/12/10(水) 05:18:06 ID: 0LtvEto10 Be:
>>552
ありがとうございます!

ID:2N5XkSrD0 さんの質問内容と似ていたために,混乱させてしまった人がいたようですみません。
私がやりたかったのは,AppleScript からの右クリックなのですが,これで可能になりました。
AppleScript では,tell application "System Events" で,キーストロークや左クリックのイベントは送信できるのですが,
右クリックだけは手段が用意されておらず,control + 左クリック を送信しても再現できずに困っていたのです。

CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これで,右クリックからしか呼び出せないアプリの機能を使用する,アプリ操作自動化スクリプトが作れそうです。
559 Name: 名称未設定 [sage] Date: 2008/12/10(水) 05:42:45 ID: GLeH1aY40 Be:
つうかそもそもコンテクストメニューからしか呼び出せないコマンドを持った
アプリなんてそんなにないんじゃ...
560 Name: 名称未設定 [sage] Date: 2008/12/10(水) 09:16:15 ID: 4cshTNqV0 Be:
>>540
とりあえず、趣味レーションじゃなくて、シミュレーション、な。
561 Name: 名称未設定 [sage] Date: 2008/12/10(水) 09:50:33 ID: lt7oGnOb0 Be:
>>558
>CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
>それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。

これってなんか面白いプロセス間通信じゃない?
もしかしてマウスイベントってこうやって外のプロセスから勝手に発生できる?
ログインしているユーザと同じユーザIDである必要はあるのかな。
562 Name: 名称未設定 [sage] Date: 2008/12/10(水) 10:10:37 ID: 0LtvEto10 Be:
>>559
それが,あるのですよ…。
具体的には,Safari に SafariStand を組み込んだときにコンテクストメニューに現れる,「PDF形式で書き出し...」というコマンドです。
「PDF形式で書き出し...」は,メニューバーのメニュー項目には一切現れず,コンテクストメニューにしか現れません。

AppleScriptからPDF化を行うには,
http://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 Name: 名称未設定 [sage] Date: 2008/12/10(水) 10:19:21 ID: tqbTqlML0 Be:
>>559
iTunesにはコンテクストメニューからしか呼べないコマンドかなりあるぞ。
564 Name: 名称未設定 [sage] Date: 2008/12/10(水) 11:36:17 ID: 3bh9sFCU0 Be:
>>556
描画環境については原点左下で統一されてます。
>>552はデバイス上での座標です。ややこしいですな。

それよりも、CocoaとCoreGraphicsとで
微妙に挙動が違うとか、マジ勘弁。
565 Name: 548 [sage] Date: 2008/12/10(水) 14:27:13 ID: xSuG9smw0 Be:
>>562
Coral使えばいいじゃん。
http://hmdt.jp/coral/index.html
566 Name: 名称未設定 [sage] Date: 2008/12/10(水) 21:34:47 ID: 0FGfVHqN0 Be:
荻原剛志さんの『詳解 Objective-C 2.0』を購入したのですが、
手元にある同じ荻原さんの『Objective-C Mac OS X プログラミング』は
処分してしまっても大丈夫ですか?
567 Name: 名称未設定 [sage] Date: 2008/12/10(水) 23:14:04 ID: fRwjglTW0 Be:
好きにするがよろし
568 Name: 名称未設定 [sage] Date: 2008/12/10(水) 23:58:21 ID: zWsFgxMm0 Be:
>>558
AppleScriptでdo shell scriptするならNSTask使えば良くね?
てかコマンドラインツール作らなくてもCGPostMouseEvent()って普通にカーボン?ならそのままコード書けば良くね?
と思った。
あんまちゃんと読んでないんで的外れだったらスマソ。
569 Name: 名称未設定 [sage] Date: 2008/12/11(木) 09:37:47 ID: SLO1lTjD0 Be:
>>566
新しい奴では分散オブジェクトのとことか前のものから省略されてる部分が
あるけど、それでもいいなら捨てればよろし。
570 Name: 名称未設定 [sage] Date: 2008/12/11(木) 10:21:22 ID: LfDuzN4X0 Be:
>>565
そんな便利なものがあったとは……!

>>568
いえ,そういうことではなくて,元々AppleScriptがメインで,AppleScriptで色んなアプリを自動操作しているスクリプト中において,
右クリックを自動化したい場合に,do shell script で CGPostMouseEvent() を呼び出すコマンドラインツールを呼び出す,という話です。
571 Name: 名称未設定 [sage] Date: 2008/12/11(木) 10:37:08 ID: ZEYSuhvK0 Be:
>>570
AppleScriptがメインなわけね
>>544でCocoaでって書いてあるから勘違いした
572 Name: 名称未設定 [sage] Date: 2008/12/11(木) 11:54:56 ID: LfDuzN4X0 Be:
>>571
勘違いさせてしまってすみません。
Cocoaで実現可能な機能であれば,
http://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 Name: 566 [sage] Date: 2008/12/11(木) 20:15:07 ID: aKreviH/0 Be:
>>569
ありがとうございます。
自分で判断がつくまではおいておくことにします。
574 Name: 名称未設定 [sage] Date: 2008/12/12(金) 03:44:47 ID: IpphkAOm0 Be:
Objective-C / Cocoaで、
http://mac.hitobashira.org/up/src/maka0123.png
このように、非同期の処理が終わる間、呼び出し元のメソッドAを待機させたいのですが、
方法はあるのでしょうか…
575 Name: 名称未設定 [sage] Date: 2008/12/12(金) 10:26:53 ID: Vt9WDSMO0 Be:
performSelectorOnMainThread:withObject:waitUntilDone:を使う。
576 Name: 名称未設定 [sage] Date: 2008/12/12(金) 10:36:04 ID: jo4yNZOw0 Be:
>>574
メソッドの実行に同期・非同期はあるけど(分散オブジェクトかマルチスレッド(>>575)の場合)
メソッドが他の処理をトリガーして、その処理が非同期の場合はもちろん方法はない。

クラスによっては、同期処理と非同期処理のメソッドを分けているものもある。NSURLConnectionの
sendSynchronousRequest:returningResponse:error:と
connectionWithRequest:delegate:のように。
だから実際に何をやりたいのか書くと調べられるかも。
577 Name: 名称未設定 [sage] Date: 2008/12/12(金) 11:20:55 ID: Lqy+6jQB0 Be:
メソッドを分けたり条件式を足したりすることで実現できそうだけどなぁ
引数の問題はあるけど例えばメソッドAを分けたり、
待機の部分をなんらかのループにしておいて別スレッドのやつにループを抜ける条件を成立させたり
まぁ後者はうまいことやらないとループの間パワー使いまくるからアレだけど
(false)でスレッドをスリープさせて起きたらgotoとかで戻ってまた条件式をチェックして
(true)なら以降の処理へ、とかだったらいけるんじゃない?
で、やはり>>576さんの言う通り、もうちょっと具体的な話しがないとみんな答えにくいと思う
578 Name: 名称未設定 [sage] Date: 2008/12/12(金) 11:31:37 ID: vTLMpfhJ0 Be:
>>577
それってフツーに条件付きロックじゃないの?
579 Name: 名称未設定 [sage] Date: 2008/12/13(土) 03:04:23 ID: pWDzXHA/0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/12/13(土) 05:21:59 ID: n2oMHeo80 Be:
>>579
>確かに負荷が心配ですね。

うーん、リアルで条件付きロックを知らないのか? じゃあちょっとコードを書いてみる。

実は pthread しか使ったことがなかったのだが、インターネットのヤホーで検索したら
ココアにはコソディショソロックというのがあることを発見したのでちょっと調べてみました。
初めて使うので間違ってたらごめんね。
なお、ココアのUIまわりは基本、スレッドセーフじゃないみたいなので、それは別途注意。

うーん、でもなんかちょっと違う気がする。まあいいや。
581 Name: 名称未設定 [sage] Date: 2008/12/13(土) 05:24:03 ID: n2oMHeo80 Be:
改行が多いと言われるので、ほんとは一個のファイルなんだけど分けます。

#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 Name: 名称未設定 [sage] Date: 2008/12/13(土) 05:25:39 ID: n2oMHeo80 Be:
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 Name: 名称未設定 [sage] Date: 2008/12/13(土) 05:59:47 ID: pWDzXHA/0 Be:
>>580-582
ありがとうございますm(_ _)m
こんな便利なのがあったんですか…、助かりました。
584 Name: 名称未設定 [sage] Date: 2008/12/13(土) 10:32:27 ID: JcdjU/On0 Be:
>>579
もしかしてtableView:willDisplayCell:forTableColumn:row:で指定されたNSCellをそのまま保持して、
後で画像を設定しようとしたのではないですか?
NSTableViewのCellはしょっちゅうコピーされるので、このメソッドで渡されたCellと実際に表示に使われるCellが
同じインスタンスとは限らないんです。

私だったら、そもそもそういう戦略をとりません。NSImageをインスタンス変数に持つモデルを作成し、
それを格納したNSArrayをNSTableViewにBindingします。
webView:didFinishLoadForFrame:が呼ばれたら該当するモデルのNSImageをsetしてやれば自動で表示も変わります。

表示が必要な部分だけ読み込みを行いたいならば、この場合もtableView:willDisplayCell:forTableColumn:row:を
受け取って該当するモデルのみ読み込ませる必要はあるかと思いますけどね。
WebVIewの読み込みが極端に遅かったりした場合にフリーズ同然の状態になるようでは使ってられません。
585 Name: 名称未設定 [sage] Date: 2008/12/13(土) 22:29:36 ID: grgosdrm0 Be:
メモリーリークーを静的解析するツールはないのでしょうか?
メモリーリークーだけまともにできない静的解析ツールならあるらしいのですが
586 Name: 名称未設定 [sage] Date: 2008/12/14(日) 00:05:13 ID: mgsCXS5c0 Be:
>>585
解析しなくてもコード書くときに気づけ
587 Name: 名称未設定 [sage] Date: 2008/12/14(日) 00:39:03 ID: u82y2nJj0 Be:
>>585
http://clang.llvm.org/StaticAnalysis.html

使ったこと無いので、詳細不明。
エロイ人のレポ期待。
588 Name: 名称未設定 [sage] Date: 2008/12/14(日) 02:03:29 ID: 0NmjHAe60 Be:
>>579
NSTableViewの行に指定したURLから取ってきた画像を表示させたいのですかね?
でしたら、>>584で指摘されているやり方でWebViewを使わずに、NSURLConnectionで
非同期にデータを取得してNSImageを作成することもできます。

NSURLConnection (非同期) [1]
http://www.geekpage.jp/programming/macosX-network/NSURLConnection-async-1.php


589 Name: 名称未設定 [sage] Date: 2008/12/14(日) 02:16:02 ID: Q/f3QCtB0 Be:
>>584
Cellではなく、TableViewにbindingですか…、なるほど。

>>588
画像そのものでしたら、それで良いのですが、
WebViewで表示したhtmlのスクリーンショット(dataWithPDFInsideRect)を表示させたいと考えています。
590 Name: 名称未設定 [sage] Date: 2008/12/14(日) 16:33:29 ID: SOBNa9070 Be:
知り合いのソースコード見てたら
NSLogデバッグで告白文が書かれていて笑ってしまった。

591 Name: 名称未設定 [sage] Date: 2008/12/14(日) 17:07:31 ID: NC7/Gvub0 Be:
>>590
で、付き合うの?付き合わないの?
え?違うって?
592 Name: 名称未設定 [sage] Date: 2008/12/14(日) 20:02:42 ID: x0LVuiPM0 Be:
ウホッ
593 Name: 名称未設定 [sage] Date: 2008/12/14(日) 20:14:24 ID: wBq7QeXL0 Be:
>>585
チャラララン♪

ドラえもん「メモリーリークー」
594 Name: 名称未設定 [sage] Date: 2008/12/14(日) 22:18:14 ID: EMo+k0m90 Be:
よく見ておくがいい、プログラマが告白(confess)をするというのは、こういうことだ!


NSLog(@"Error at %s line %d", __FILE__, __LINE___);


笑っていただけたでしょうか。
595 Name: 名称未設定 [sage] Date: 2008/12/14(日) 22:27:05 ID: E2vidIer0 Be:
UNIX板でその手のスレッドがいつもそれなりの頻度で立ってるな。
確認してないけどクリスマスに向けてまた立ったんじゃないかな?w
596 Name: 名称未設定 [sage] Date: 2008/12/14(日) 23:16:25 ID: nL5ZmCvA0 Be:
>>595
クリスマス前はビンビンだな
597 Name: 名称未設定 [] Date: 2008/12/14(日) 23:56:48 ID: vUlSNKMI0 Be:
たのココ読んで頑張っています。
質問させてください。

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 Name: 名称未設定 [] Date: 2008/12/14(日) 23:58:00 ID: U9Ih6wbO0 Be:
          ___
        /_ノ ::::ヽ、_\
 ミ ミ ミ  o゚<●>:::::::<●>゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒) マカがwwww
| / / /     |r┬-|    | (⌒)/ / / // 
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
599 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:08:18 ID: ONvQ5Bfu0 Be:
>>597
IBはどこもいじってないわけだよね?

後、たのココのどの部分を読んでいるのかとか、Xコードのバージョンとかも書いてもらえないですか?
もしかしたら再度インストールしたほうがいいかもしれない。
600 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:14:06 ID: ONvQ5Bfu0 Be:
>>597
検索で
/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings

そしたらあなたと同じように最初にビルドした際にこんなエラーが出たって言う悩みがいっぱい出てあったよ。

601 Name: 名称未設定 [] Date: 2008/12/15(月) 00:17:52 ID: YWho2ACc0 Be:
レスありがとうございます。

IBは思い当たるような設定変更はしていません。
ただ、気になるのは以前にiPhoneのSDKをインストールしているので、
デフォルトとは言い切れません。

たのココはRSS Readerのサンプルを作っています。
本に載っていたサンプルコードを一気に書き上げて、
ビルドしたら上記のエラーが発生しました。

おかしいな、と思って切り分けのために
全く新規に空のプロジェクトを作って見ても同じエラーが
発生したので、異常を感じて調べていたところです。

バージョンは3.1.1 です
コンポーネントのバージョン
Xcode IDE: 1115.0
Xcode Core: 1114.0
ToolSupport: 1102.0
602 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:19:36 ID: i+oeVcfk0 Be:
そうですか。とりあえず、自分でも調べるけど、
2ちゃんねるに投げておけば、誰かが調べてくれる。ということで
書いていたんですね。
603 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:19:37 ID: ONvQ5Bfu0 Be:
>>597
全く同じ質問がされている。
http://www.mailinglistarchive.com/xcode-users@lists.apple.com/msg13520.html

2番目の回答ではインストールし直せとかかいてあるけど、
一度全部読んでみて。
604 Name: 名称未設定 [] Date: 2008/12/15(月) 00:20:24 ID: YWho2ACc0 Be:
>>600
ありがとうございます。
copystrings などで検索してたので上手く引っかけれてませんでした。
しばらく読んでみます。
605 Name: 名称未設定 [] Date: 2008/12/15(月) 00:28:26 ID: YWho2ACc0 Be:
完全に私の検索スキルの低さが原因だったようです。
あっという間に解決しました。

簡単に説明しますとエラーが発生している copystrings でrubyが
使用されているのですがそのパスが /usr/bin/ruby 固定でした。
私は macports でrubyをインストールしていたので パスが違うのが
原因でした。

シンボリックリンクを /usr/bin/ruby において解決です。

なんだか皆さんの気分を害されたら申し訳ないです。
606 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:37:34 ID: ONvQ5Bfu0 Be:
>>605
http://www.digitalsanctum.com/2008/10/04/xcode-cant-exec-developerlibraryxcodeplug-inscorebuildtasksxcplugincontentsresourcescopystrings-no-such-file-or-directory/

上記のサイトですね。
最初コレを見つけたんですけど、rubyなんて使ってないだろうと思って・・
解決してよかったです。
607 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:39:00 ID: uX3YJL520 Be:
macports って ruby をいれると /usr/bin/ruby が削除されるの?
そんな無茶苦茶な。
608 Name: 名称未設定 [sage] Date: 2008/12/15(月) 00:47:22 ID: aU8GlMMf0 Be:
世の中にはPATH環境変数ってのがあってだなry)
609 Name: 名称未設定 [sage] Date: 2008/12/15(月) 01:21:01 ID: uX3YJL520 Be:
う~ん、でも、copystrings のスクリプトの先頭は #!/usr/bin/ruby に
なっているので、PATH 環境変数の問題では無い気が...
わかってなくてすみません。
610 Name: 名称未設定 [sage] Date: 2008/12/15(月) 01:28:54 ID: qsoULL6B0 Be:
この場合、PATHは関係ないね。
それよりも、/usr/bin/rubyが無いのが異常に気になる。
macportsの所為では無いと思うんだけど・・・。
611 Name: 名称未設定 [sage] Date: 2008/12/15(月) 19:04:22 ID: CwNz3R3E0 Be:
MacPorts で Ruby 入れる

$PATHの関係で /usr/bin 以下のRubyが起動される

むきー

sudo rm /usr/bin/ruby

と予測
612 Name: 名称未設定 [] Date: 2008/12/16(火) 13:40:23 ID: ZJJ0pZ8kO Be:
>>612
オヤスミ…
  <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
613 Name: 名称未設定 [sage] Date: 2008/12/18(木) 03:55:29 ID: 5NHEEkjy0 Be:
x-codeで
printf("\n")で改行させたいんですが、どうすればいいですか?

一応エンコーディングはshift_jissでコトエリで バックスラッシュを¥になるように設定しています。

バックスラッシュ+n では改行できるんですよね・・・・・・。
614 Name: 名称未設定 [sage] Date: 2008/12/18(木) 05:52:12 ID: 8C6l/M/x0 Be:
バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
あくまで C の規格的には、バックスラッシュ+n が改行。
Shift-JIS でそれが円記号+n に見えるのは、
Shift-JIS ではバックスラッシュの「値」をもつ記号が
円記号のように「表示される」というきまり。
日本語ウィンドウズだとパス名に円記号がいっぱいはいってるけど、
英語ウィンドウズだとそれが全部バックスラッシュになります。

しかしユニコードではバックスラッシュと円記号はちがう文字です。
日本語 Mac で昔標準だった MacJapanese もバックスラッシュと
円記号はちがう文字です。というわけで、悪い事は言わないから
バックスラッシュと円記号を混同するのはやめたほうがいいです。

まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
円記号に見えないのはなんか変な気がしますね
615 Name: 名称未設定 [sage] Date: 2008/12/18(木) 10:04:04 ID: gsSyM0EO0 Be:
Cocoaでprintfなんぞ使った事は無いが。
616 Name: 名称未設定 [sage] Date: 2008/12/18(木) 11:04:36 ID: LQ3bq09a0 Be:
>>614
>まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
>円記号に見えないのはなんか変な気がしますね

え? 円記号に見えるでしょ。
もしかして CP932 (日本語 (Windows, DOS)) と勘違いしてない?

>バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
617 Name: 名称未設定 [] Date: 2008/12/18(木) 14:17:49 ID: brBSoHTs0 Be:
>>614
ものすごく参考になりました。
その辺、ちょっと調べてみます。
ただwikiをみると何のことかさっぱりで・・・:・・。
618 Name: 名称未設定 [sage] Date: 2008/12/18(木) 15:01:53 ID: HPiuHPLV0 Be:
>>617
OS 9時代、7ビットASCIIの一部は表示文字を各国が自由に指定できた。
バックスラッシュがその一例で、日本のフォントやPCメーカーは
バックスラッシュの代わりによく使う円マークを表示するように設計した。
データ的にはバックスラッシュと同じなんで¥nでも問題がなかった。

OS XになってからはUnicodeを使うようになった。
こいつはバックスラッシュと半角円が別々に定義された。
ゆえにデータ的に見ても別物だから¥nは使えなくなった。


こんな感じでおk?
619 Name: 名称未設定 [sage] Date: 2008/12/18(木) 19:12:09 ID: PDgvlNo80 Be:
OS 9時代と表現に違和感が。
つーか、MacJapaneseではちゃんと区別してたよ。
620 Name: 名称未設定 [] Date: 2008/12/18(木) 21:38:28 ID: brBSoHTs0 Be:
>>618
本当にありがとうございます。
wikiしかりいろんなサイトを見回ってunicode等調べたのですが、
なかなかバックスラッシュが使えたり、使えなかったり
¥マークが制御文字になったりならなかったりする理由を見つけることができませんでした。

でもおかげさまで明確に理由がわかりました。ありがとうございます!
621 Name: 名称未設定 [sage] Date: 2008/12/18(木) 22:46:09 ID: 8C6l/M/x0 Be:
>>616
XCode 3.1.2 で Shift-JIS (Windows, DOS でなくて) にしても
円記号にみえないよ... むむむ。
622 Name: 名称未設定 [sage] Date: 2008/12/18(木) 22:52:14 ID: pOmvbV3i0 Be:
つまり日本が悪いってことだね?
623 Name: 名称未設定 [sage] Date: 2008/12/19(金) 00:16:59 ID: kZ9hkPkf0 Be:
>>621
MacにMSゴシックやメイリオを入れても円マークはバックスラッシュになっちゃうんだよね。
624 Name: 名称未設定 [sage] Date: 2008/12/19(金) 01:29:19 ID: dr8c9lPo0 Be:
0x5Cの字形がバックスラッシュか円記号かはフォント依存の問題。
Unicodeではバックスラッシュ(U+005C)と円記号(0+00A5)は別。
625 Name: 名称未設定 [sage] Date: 2008/12/19(金) 01:58:06 ID: 5xiiw0t00 Be:
>>613
option+\でよい?
626 Name: 名称未設定 [sage] Date: 2008/12/19(金) 02:05:22 ID: piXJ3bSu0 Be:
>>624
>0x5Cの字形が
フォントのグリフを語る際に、
文字コードを指定せずに 0x5C の字形が、っていっても意味がなくない?
ユニコードでひとつコードを決めると、
グリフは(芸術性をのぞいて)決まってるべきだけど。
あと、シフトJIS の規格って、よく知らないんですが、
各コードのグリフ形状まで指定してないんですか?
指定してるとすると、 0x5C をシフトJIS で表示するときは、
どんなフォントをつかってるにしても、グリフはバックスラッシュでなくて
円記号のグリフを使うべきだと思うんだけど。
627 Name: 名称未設定 [sage] Date: 2008/12/19(金) 05:28:58 ID: PqTjwco00 Be:
>>621
1. 0x5cを含むファイルを作成。
2. Xcode の環境設定でフォントのデフォルトを全てMonaco、エンコーディングのデフォルトを
「日本語(Shift JIS)」にする。
3. Xcode の「開く...」で1.で作ったファイルを開く。

で、円記号が見えるけどな、自分とこでは。

>>623
Vistaから(ピー)してきたメイリオではU+005Cを円記号で表示するけど。自分のとこでは。
MSゴシックは確かMacのOfficeに付いてくるのとWindows純正ので違ったような気が。
628 Name: 名称未設定 [sage] Date: 2008/12/19(金) 15:06:35 ID: lttihNqB0 Be:
>>626
そもそも1Bbyteコードって
シフトJISの定義域ではない。

シフトJISを使用するときに
1Byteコード領域は概ねJIS X0201を使う事が多いだけ。

X0201には標準字形は定義されているが
ビットマップ時代の制定だから、グリフの概念がない。
大体、漢字を16Dotで表現するのにグリフなんて考えすらないよ。
629 Name: 名称未設定 [sage] Date: 2008/12/19(金) 16:43:35 ID: i3qBricn0 Be:
NSString→NSStringへの文字コード変換ってどうんな感じでやればいいんでしょうか…
630 Name: 名称未設定 [sage] Date: 2008/12/19(金) 16:48:36 ID: HMXc5t5u0 Be:
>>626
純粋な Shift JIS じゃなくて、Windows 上の Shift JIS の実装(拡張)、いわゆる CP932 だと
話はある意味 >>624 の言う通りで、
0x5c は論理的には reverse solidus (バックスラッシュ)。なんだけど対応する文字(グリフ)は
日本語の Windows 上では円記号で表示される(ことが多い)。

確かに「文字コードとグリフのデザインは別の概念」とはいえ、なんだかなあと思ってしまう。
歴史的な互換性の維持とはいえ。
http://www.microsoft.com/globaldev/reference/dbcs/932.mspx

Mac OS X 上だと CP932 の 0x5c はバックスラッシュのグリフで表示されて(ことが多い)、
こっちの方が純粋というか素直なような。
631 Name: 名称未設定 [sage] Date: 2008/12/19(金) 17:37:33 ID: 1nt96Eco0 Be:
>>629
NSString は(実装はともかくとして)
常に Unicode で文字列を格納していると思うべきです。
そこから char* として取り出すときに encoding を指定して取り出す、
そこに char* からデータをいれるときに encoding を指定して入れる。
+[NSString stringWithCString: encoding:]

-[NSString cStringUsingEncoding:]
を参照。
632 Name: 629 [sage] Date: 2008/12/19(金) 17:45:58 ID: i3qBricn0 Be:
ふんふん。
やっぱ、間に一発C文字列への変換が必要という事か…
ほいでまたNSStringに戻すと。
633 Name: 名称未設定 [sage] Date: 2008/12/19(金) 18:57:29 ID: AFDCyKKm0 Be:
>>632
> やっぱ、間に一発C文字列への変換が必要という事か…
> ほいでまたNSStringに戻すと。

ようするに、NSStringからNSStringへの文字コード変換は、無意味という事なのだが。
629はその辺、分かってるのかな?
634 Name: 名称未設定 [sage] Date: 2008/12/19(金) 19:01:52 ID: Mt5zlTWV0 Be:
多分
>そこに char* からデータをいれるときに encoding を指定して入れる。
で指定したエンコーディングになると思ってるんだろう。
俺もわかってないんだが要するにcStringUsingEncoding:
でC文字列が何でエンコードされているかを判断するってことだろ?
635 Name: 名称未設定 [] Date: 2008/12/19(金) 19:04:52 ID: VujcLHpJP Be:
なんか勘違いしてる…

NSStringに入れた時点で内部的にはUnicodeに統一される

だからNSStringとして操作する上では、
char型に取り出したり、ファイルと入出力するような場面以外に
文字コードを意識することはないし、
NSString間の文字コード変換ってのもできない(ありえない)よ
636 Name: 名称未設定 [sage] Date: 2008/12/19(金) 19:23:42 ID: Mt5zlTWV0 Be:
そういうならまずはcStringUsingEncoding:の正しい使い方から教えてくれや
637 Name: 名称未設定 [sage] Date: 2008/12/19(金) 20:27:22 ID: wF57mWA70 Be:
ドキュメント読め。
何のためのドキュメントなんだ。

http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFStrings/introCFStrings.html
http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/introStrings.html
638 Name: 名称未設定 [sage] Date: 2008/12/20(土) 00:46:03 ID: Niwi5dnC0 Be:
Objective-Cってもっとシンプルに書けるようにならないかな
Dictionaryも dic[key] = value; とか書ければなぁ
KVCの場合は若干気持ち悪いかもしれん
C++でWrapしてみるか...
639 Name: 名称未設定 [sage] Date: 2008/12/20(土) 01:57:12 ID: eDv0h37G0 Be:
>>638
C++だったら連想配列といわず、行列の積なんかもシンプルに書けるよね。C++万歳!

そのぶん言語自体が激しくシンプルじゃないのは皆さんご存知の通りですがw

C++で wrap って、key や value には Objective-C のオブジェクトを入れるの?
だったら You 最初から STL 使っちゃいなよw
640 Name: 名称未設定 [] Date: 2008/12/20(土) 02:01:54 ID: UW2/XF4a0 Be:
.netを趣味でやっていたものとして言わせていただければ
Objective-cは最高だと思う。
なんたって無料で全ての機能を提供してくれているし。

知れば知るほど奥の深さに魅了されてしまう。
641 Name: 名称未設定 [sage] Date: 2008/12/20(土) 04:16:49 ID: R19Od2LJ0 Be:
objcつかcocoaはコードがだらだら長くなって見づらくなるのが難点。
入力も面倒になってくる。
642 Name: 名称未設定 [sage] Date: 2008/12/20(土) 05:52:03 ID: WdjszjrV0 Be:
確かに名前空間を使用したプログラミング言語に比べてそこが一番の欠点だよな。

覚えきれん・・・・・・・。

それに一字でも間違ってたらもうアウトなわけだから
デリゲートメソッドとか悲惨。

エラーどころか警告すら出ないんだから。

643 Name: 名称未設定 [sage] Date: 2008/12/20(土) 07:35:31 ID: KNV2xQr00 Be:
delegate method は確かに悲惨だよね。
でもそれ以外は XCode なら入力補助があるから
別に長くても問題なくない?
長いメソッド名だから半分強制的にコメントかかされているみたいなものなのも
半年後に自分のプログラムを読むときに案外役に立ってる気がする。
最近はすっかり汚染されてしまって、
自前のオブジェクトのメソッド名もすごい長くして
英語の文章として読めるようにしている。
644 Name: 名称未設定 [sage] Date: 2008/12/20(土) 07:45:55 ID: WdjszjrV0 Be:
でもVisual.NETしていた人間にとってはX-codeの入力補助なんて糞。

まぁ僕みたいな凡人でトーシローのことですけど・・・・
皆さんは満足ですか?
あの入力補助で・・・・・。

ものすごく邪魔になることも多いんですが。
645 Name: 名称未設定 [sage] Date: 2008/12/20(土) 09:35:37 ID: Niwi5dnC0 Be:
VCの入力補完も糞じゃね?
C#やVBなららくちんだろうけど。
646 Name: 名称未設定 [sage] Date: 2008/12/20(土) 11:51:03 ID: zY1fsqkk0 Be:
入力補完なんてふつうOFFだろ。鬱陶しい。

>>640
Objective-cに限らずgccは普通に全ての機能を無料で提供だろ。
647 Name: 名称未設定 [sage] Date: 2008/12/20(土) 12:47:41 ID: 7wiP5m1V0 Be:
こんぱいらはね
648 Name: 名称未設定 [sage] Date: 2008/12/20(土) 14:03:40 ID: /70q+NvK0 Be:
>>639
もちろんメインはSTLやboostで書いているけどUI周りがねー。
649 Name: 名称未設定 [sage] Date: 2008/12/20(土) 14:47:22 ID: eDv0h37G0 Be:
>>648
だったら UI は PowerPlant でしょ。え、Cocoa Binding? Core なんちゃら? 何のことですか?

ソースがあるから頑張ればこれからも Mac OS X に追随できる (かも)。
ま、CodeWarrior に付いていたコードは Leopard でコンパイルすると deprecated 警告の嵐で引くけどw
オープンになった方はそこら辺改良されてたり... しないか。
650 Name: 名称未設定 [sage] Date: 2008/12/20(土) 17:36:34 ID: ElTiCEex0 Be:
弘法は筆を選ばず
651 Name: 名称未設定 [sage] Date: 2008/12/20(土) 18:44:35 ID: WdjszjrV0 Be:
ん?

誰か俺を呼んだ?
652 Name: 名称未設定 [] Date: 2008/12/20(土) 23:35:09 ID: 9hlRQq980 Be:
工房は筆を下ろさず
653 Name: 名称未設定 [sage] Date: 2008/12/20(土) 23:39:41 ID: pVSz5R1L0 Be:
俺のアプリは「made with simple text」のロゴが入ってるよ。
654 Name: 名称未設定 [sage] Date: 2008/12/21(日) 01:03:07 ID: 03GYYjSC0 Be:
SimpleTextじゃぁ自慢にならんよ。
自慢したいんならedでコーディングしてなんぼ
655 Name: 名称未設定 [sage] Date: 2008/12/21(日) 01:08:59 ID: kHbQDWZQ0 Be:
そんなの何の自慢にもならんだろ。
自己満足以外の何ものでもない。
656 Name: 名称未設定 [sage] Date: 2008/12/21(日) 02:07:29 ID: BKOVdXos0 Be:
WebKitを使ったプログラムでFlashプレイヤーのプラグインを使用すると
コンソールに「Debugger() was called!」と出力されますね。
Flashプレイヤー9の時は出なかったのですが、10に上げたら出るようになった感じ。
非常にうざったいです。
657 Name: 名称未設定 [sage] Date: 2008/12/21(日) 14:53:14 ID: qkj38C460 Be:
若干スレチ気味だけどデータの型からサンプルコードではない正式な使い方を記した文章を知る事は出来ないの?

使いたいAPIの引数にHogeHogeRefみたいのがあったときに、
どうやったらそれを作れるのかがsee alsoで書いてくれたり
HogeHogeRef自身が詳細へのリンクになってたりすると楽なのに。

例えばリファレンスでAPIの引数にCodecTypeって見つけて、
確かにリンクにはなってるんだけど、飛んでも
typedef OSType CodecType;
とだけしか書かれてないとか。
型の詳細もだけど、どんな値を入れたらいいのか知りたいんだよ!と。
658 Name: 名称未設定 [sage] Date: 2008/12/21(日) 15:16:33 ID: YL4QjoBD0 Be:
ReferenceじゃなくてProgramming Guideを読めばおk
659 Name: 名称未設定 [sage] Date: 2008/12/21(日) 15:41:09 ID: uX+Fb44J0 Be:
QT関連は複雑な上にドキュメント不足は否めん。
QT7で追加されたAPIとかになると悲惨。
660 Name: 名称未設定 [sage] Date: 2008/12/21(日) 18:58:24 ID: 1bYWKW200 Be:
ココア(←なぜか変換できない)
661 Name: 名称未設定 [] Date: 2008/12/23(火) 10:35:34 ID: AMg5R5ie0 Be:
Xcode3.1.2なんですがボタン上の文字のフォントを変えるにはInterface Builderのどこをいじればいいんでしょうか。設定が見つからないですorz
662 Name: 名称未設定 [sage] Date: 2008/12/23(火) 10:55:29 ID: 8y6CxMf40 Be:
>>661
IBでボタンを選択して、FontメニューからShow Fonts。
普通のアプリと同じ。
663 Name: 名称未設定 [sage] Date: 2008/12/23(火) 11:25:11 ID: PGYHkvA30 Be:
>>661
ていうかフォントを変えるな。
ほかに非標準のフォントをつかったボタンがあるソフトがありますか?
独自性とかいってかえれば良いってもんじゃありません。
664 Name: 名称未設定 [] Date: 2008/12/23(火) 14:54:44 ID: AMg5R5ie0 Be:
>>662
ありがとございます。
ボタンはできましたが、NSBoxのラベル部分が変わらないなあ。

>>663
やっぱり変えないほうがMacらしいんですかね。Cocoaの本読んでるんですがLeopardになってからかNSBoxのラベル部分の文字が薄くて読みにくい感じがしてBoldにしてみようかなと。
665 Name: 名称未設定 [sage] Date: 2008/12/23(火) 15:14:26 ID: 8y6CxMf40 Be:
>>664
NSBoxはIBからじゃ変えられないですね。
setTitleFont:するしかなさそうです。
666 Name: 名称未設定 [] Date: 2008/12/23(火) 15:23:37 ID: AMg5R5ie0 Be:
>>665
ありがとございます。試してみます。
667 Name: 名称未設定 [sage] Date: 2008/12/23(火) 15:56:58 ID: b+ysoZu80 Be:
つうか、GUIのフォントってデフォルトから変えていいのか?
ガイドライン的に。
668 Name: 名称未設定 [sage] Date: 2008/12/23(火) 15:58:13 ID: b+ysoZu80 Be:
スマソ、スクロール足りてなかったorz
669 Name: 名称未設定 [sage] Date: 2008/12/23(火) 16:28:20 ID: Ch41JxbW0 Be:
自分で使う分には構わないだろ。
人様に使わせるのはどうかと思うが。
670 Name: 名称未設定 [sage] Date: 2008/12/23(火) 16:52:51 ID: 9kr1H59b0 Be:
>>667
システム環境設定→ユニバーサルアクセス
671 Name: 名称未設定 [sage] Date: 2008/12/23(火) 19:43:10 ID: 2buqxug+0 Be:
萩原剛志さんの本はプログラミング初心者には難しいと聞いたのですが
C言語の基礎を知ってる程度では、やはり難しいでしょうか?
「詳解 Objective-C 2.0」を買おうかと思っています
672 Name: 名称未設定 [sage] Date: 2008/12/23(火) 19:49:25 ID: hxngkr3k0 Be:
>>671
メモリ管理の話とか、オブジェクト指向の話とか、例外処理とかある程度知ってな
いと読むのつらいと思う。

でもまあ齧った程度でも知ってるのならばなんとかなる。
つーかおれはなった。
673 Name: 名称未設定 [sage] Date: 2008/12/23(火) 20:20:10 ID: 2buqxug+0 Be:
>>672
C言語のこと以外は全く知らないのでやめときます
別の本を探します
674 Name: 名称未設定 [sage] Date: 2008/12/23(火) 20:36:00 ID: I2LctYge0 Be:
Objective-Cに他の本はあるの?
675 Name: 名称未設定 [sage] Date: 2008/12/23(火) 20:36:57 ID: CzyIQtOV0 Be:
>>671
その本は、Objective-Cを多少知ってないと辛いと思うよ
たのCocoあたりから読むと良いと思います。
676 Name: 名称未設定 [sage] Date: 2008/12/23(火) 21:42:54 ID: Ch41JxbW0 Be:
たのココは語尾がムカツク
677 Name: 名称未設定 [sage] Date: 2008/12/23(火) 21:43:59 ID: IWcOJZP00 Be:
あの口調はネットだから許される。
紙媒体では無理。
678 Name: 名称未設定 [sage] Date: 2008/12/23(火) 22:20:20 ID: CzyIQtOV0 Be:
>>676
それは、確かにw
内容は良いのに残念なんだぜ!
679 Name: 名称未設定 [sage] Date: 2008/12/23(火) 22:23:22 ID: m5cu4oUi0 Be:
日本語前提でHMDT系じゃない本で情報がup-to-dateなものはこれくらいしか思いつかないなあ...
作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全
http://www.amazon.co.jp/exec/obidos/ASIN/4048676075/
執筆はPeopleに連載持ってる柴田さん。
680 Name: 名称未設定 [sage] Date: 2008/12/23(火) 22:25:53 ID: JS+9dWrN0 Be:
参考書無しのネットだけでここまで来たぜ!
で、自作の電卓が動かないんですけど。
681 Name: 名称未設定 [sage] Date: 2008/12/23(火) 22:33:54 ID: hxngkr3k0 Be:
>>680
デバッグしる。
682 Name: 名称未設定 [] Date: 2008/12/23(火) 23:26:43 ID: cFsVUxjvP Be:
sourceforgeに上げようぜ
683 Name: 名称未設定 [sage] Date: 2008/12/24(水) 00:13:05 ID: ej1MZ/+00 Be:
質問です。
入力された文字列が数字のみかどうかのチェックをしたいのですが、
よろしいのでしょうか?
NSTextField上でも入力された後の処理でもかまいません。
よろしくお願いします。
684 Name: 名称未設定 [sage] Date: 2008/12/24(水) 00:34:59 ID: NHt4bY8g0 Be:
formatterを使えばいいのではないか。
685 Name: 名称未設定 [sage] Date: 2008/12/24(水) 00:58:03 ID: YvN7oXnF0 Be:
お手軽な入力フィルタだったら
NSTextFieldのサブクラスで
textView:shouldChangeTextInRanges:replacementStrings:
を実装すれば逝けると思います。
686 Name: 名称未設定 [] Date: 2008/12/24(水) 01:57:36 ID: 94m8GJXM0 Be:
具体的にプログラムを作るって話になると木下本読まないと厳しいが、
Obj-Cについてもう少し知ろうとすると、萩原本は必須になるとおもうよ。

柴田本は昔のはあれだった印象があるが、今のは使えるのか>詳しい人
687 Name: 名称未設定 [sage] Date: 2008/12/24(水) 08:41:08 ID: rdLNE9qM0 Be:
>>683
よろしいのでしょうか?

でふいた
688 Name: 名称未設定 [sage] Date: 2008/12/24(水) 09:55:33 ID: 3pqZJ+9a0 Be:
>>686
本屋で立ち読みした限りでは買う価値は依然としてない。
>>679の本はわからんが、多分、アレだろう。

柴田って古いMac OSとか絶滅したAppleIIとか古い話ばかりでいい加減消えて欲しい。
昔はBeOSの本とか出してたな。もう新しい技術についていけないお払い箱ライター。
689 Name: 名称未設定 [] Date: 2008/12/24(水) 19:57:44 ID: pU6O2/Rq0 Be:
俺の同僚がcocoaアプリケーションチュートリアルだけで
目的とするプログラムを書き上げていた。

そいつは、
プロパティどころか、アクセッサメソッドすら理解していなかったけど・・・・・。
それどころかメソッドの書き方も分かってなかった。

もちろん起動しなかったけど、あれだけであそこまで完成させていたのには
ちょっと驚いた。
690 Name: 名称未設定 [sage] Date: 2008/12/24(水) 20:07:45 ID: rdLNE9qM0 Be:
>>689
起動しないのに完成させたとは?
691 Name: 名称未設定 [sage] Date: 2008/12/24(水) 21:11:18 ID: 2Q4M0dVc0 Be:
>>689
チュートリアルだけ呼んで、動きもしないプログラムを書くぐらいなら君にも出来るさ
692 Name: 名称未設定 [sage] Date: 2008/12/24(水) 23:19:17 ID: PMjOK3gJ0 Be:
>>691
さすがに芸人を呼ぶのは難しいだろw
693 Name: 名称未設定 [sage] Date: 2008/12/25(木) 01:01:09 ID: DWj5DZ1R0 Be:
>>689の言いたいことはわかるぞ。わかる。
694 Name: 名称未設定 [sage] Date: 2008/12/25(木) 02:34:18 ID: Nt+Z4c6J0 Be:
>>689
起動しなきゃ理解してないってことじゃん。
それって単にオブジェクト指向プログラミングのテクニックを知ってるってだけじゃないの?
695 Name: 名称未設定 [sage] Date: 2008/12/25(木) 10:18:41 ID: WmzR4NXU0 Be:
>>692
お前キングコング並みに寒いぞ
696 Name: 名称未設定 [sage] Date: 2008/12/25(木) 11:11:30 ID: 92TaARB20 Be:
>>695
ザ・パンチに失礼
697 Name: 名称未設定 [sage] Date: 2008/12/25(木) 13:37:57 ID: s26TIzeM0 Be:
ウンコ連中によるM-1敗者イジリがスタートしたな
698 Name: 名称未設定 [sage] Date: 2008/12/25(木) 14:28:10 ID: WTPPCtl00 Be:
↑西野乙
699 Name: 名称未設定 [sage] Date: 2008/12/25(木) 15:11:15 ID: CqvJET2e0 Be:
Appleのサンプルコードに下のような方法で値を返してるのがあるんだけど、
xxxRef系って実装はObj-Cのオブジェクトなの?
ていうかCから扱うためにあるんだろうに、勝手にGCされちゃうわけ?

HogeHogeRef func() {
  HogeHogeRef r;
  // ... rの作成
  return (HogeHogeRef)[(id)r autorelease];
}
700 Name: 名称未設定 [sage] Date: 2008/12/25(木) 15:16:32 ID: SqNR9yg50 Be:
トールフリーブリッジ(toll-free bridge)といいます。
クラスによってはキャストだけでどっちにも使えます。

GCは使ってないから分かりません。
701 Name: 名称未設定 [sage] Date: 2008/12/25(木) 15:17:07 ID: 9U2YaQaT0 Be:
>>699
逆で、Obj-Cのオブジェクトの実装がxxxRef。…の場合が多い。
http://journal.mycom.co.jp/column/objc/038/index.html
702 Name: 名称未設定 [sage] Date: 2008/12/25(木) 16:30:31 ID: D/fdkldl0 Be:
「勝手に」GCされたりはしないだろ。
703 Name: 名称未設定 [sage] Date: 2008/12/25(木) 21:10:59 ID: wIrcpCJz0 Be:
CoreFoundationのCF~RefとFoundationのNS~ではtoll-free bridgeのものが多くあります。
しかしだからといって、それ以外の~Refも同等のObj-Cのオブジェクトがあるとは思うべきではありません。
基本的にはそれぞれの適切な関数で解放すべきです。
704 Name: 名称未設定 [sage] Date: 2008/12/25(木) 21:15:39 ID: 5IYO0foX0 Be:
CFなんたらって何ですか?
怖くてNSなんたらしか使ったことないんですが。
ネットで拾って参考にしてるコードでもコピペでしか使ったことないですw
705 Name: 名称未設定 [] Date: 2008/12/25(木) 21:24:07 ID: bUlVH57f0 Be:
>>704
>CFなんたら

Core Foundationでそ
706 Name: 名称未設定 [sage] Date: 2008/12/25(木) 21:31:31 ID: 9U2YaQaT0 Be:
>>703
CFTypeRefの関数が使えるものならNSCFTypeRefが面倒見てくれますよ。
707 Name: 名称未設定 [sage] Date: 2008/12/25(木) 21:46:54 ID: 9HW4c/IQi Be:
NSって何の略でそか?
708 Name: 名称未設定 [sage] Date: 2008/12/25(木) 21:49:09 ID: wIrcpCJz0 Be:
NextStep
709 Name: 名称未設定 [sage] Date: 2008/12/25(木) 22:18:29 ID: O7EHv8wm0 Be:
>>707
No Skin
710 Name: 名称未設定 [sage] Date: 2008/12/25(木) 22:26:36 ID: uTnwU5K00 Be:
500とかRとか付いたり
711 Name: 名称未設定 [sage] Date: 2008/12/25(木) 22:32:21 ID: jC1CCwNf0 Be:
>>710
中古でしか手に入らん上にえらい高いんじゃw
あと50も思い出してあげて。
712 Name: 名称未設定 [sage] Date: 2008/12/25(木) 23:21:28 ID: CqvJET2e0 Be:
ありがとうございました。
Toll-Free Bridgeというものがあって、いくつかそれに準拠しているわけですね。
ある型がToll-Free Bridgeかというかどいうのはどこかに明記されているのでしょうか。
それとも調べるしかないのでしょうか。
713 Name: 名称未設定 [sage] Date: 2008/12/25(木) 23:38:36 ID: uTnwU5K00 Be:
>>711
確かに、50が一番最後まで残ってたわけだし、一番いろんなモデルがあったしね。
714 Name: 名称未設定 [sage] Date: 2008/12/25(木) 23:52:26 ID: kBcDv0rN0 Be:
>>714
リファレンスの最初の方に載ってる。例えばNsStringの項目をみると、CFStringとキャストするだけでおk、と書いてある。
toll-freeで検索するといいよ。
715 Name: 名称未設定 [sage] Date: 2008/12/25(木) 23:53:11 ID: kBcDv0rN0 Be:
アンカーミス、>>711です
716 Name: 名称未設定 [sage] Date: 2008/12/26(金) 03:06:07 ID: py8HyFHM0 Be:
NSStringにclassnameかけるとNSCFStringが返ってきたりするね。
717 Name: 名称未設定 [sage] Date: 2008/12/26(金) 17:59:20 ID: Gs8UicIM0 Be:
そんなことわざわざしてみたりするんだ・・・・

でもNSArrayとかに最後にnil入れ忘れたりすると、
NSCFArrayエラーとかになるよね。

やっぱりnilはCFとの互換性のために必要なんだろうか。
718 Name: 名称未設定 [sage] Date: 2008/12/26(金) 18:18:16 ID: sdS5y8k+0 Be:
nil無いと個数が判らんだろ。
719 Name: 名称未設定 [sage] Date: 2008/12/26(金) 18:40:44 ID: 1VG5u8OV0 Be:
>717
可変引数の使い方知らない?
720 Name: 名称未設定 [sage] Date: 2008/12/26(金) 18:42:42 ID: yOYP+wqH0 Be:
NSほげが実際にはCFほげを呼んでたりする、というのはそれでいいとして
おもしろいことにCFのフレームワークの中にNSほげのメソッドの実体が入ってたりする(Leoprad 限定)。

なんでそんなことをしているのか興味深いし、そもそも中の人がフレームワークをビルドするときに
どうやって依存性を解決しているのかもちょっと不思議だったりする。
721 Name: 名称未設定 [sage] Date: 2008/12/26(金) 18:44:02 ID: Gs8UicIM0 Be:
あー可変引数の関係か。
そうかメソッドだもんな。あんまりメッソドって意識がなくなっていた。そっか。

文字列定数とかだったら最後にnullを書く必要とかないでしょ。とか言う感覚でいってしまった・・・ORZ。
722 Name: 671 [sage] Date: 2008/12/26(金) 19:28:07 ID: 7HRNK0zL0 Be:
「たのしいCocoa」読みました
なんていうか、ラーメンズが出てたMacのCM思い出しました
レスくれた方ありがとうございました
723 Name: 名称未設定 [sage] Date: 2008/12/27(土) 11:53:19 ID: 6vw8P5nD0 Be:
NSArrayControllerが持ってるcontentArrayの追加/削除された差分が欲しいんだけど、
arrangedObjectsやcontentへのbind:/addObserver:だと配列丸ごとしか受け取れないっす。

差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
それとbind:するしか無いですか?

というか何故NSArrayControllerは差分(NSKeyValueChangeInsertionとか)を
送ってくれないですか?
724 Name: 名称未設定 [sage] Date: 2008/12/27(土) 14:19:24 ID: 1ymko+SU0 Be:
>>723
間にNSArrayControllerを入れずに、ViewとModelを直接バインドする。

725 Name: 名称未設定 [sage] Date: 2008/12/27(土) 15:10:32 ID: 6vw8P5nD0 Be:
>>724
どうもです。

ModelがNSMutableArrayを持ってるわけじゃなくて、
そのModelがNSMutableArrayの中に入ってて、その数の増減をobserveしたいんです。

要するに

> 差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
> それとbind:するしか無いですか?

ですよね?(カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装)

このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしか
いないので、こいつがNSKeyValueChangeInsertionを通知してくれれば助かるんですが、
してくれないんですよね?
726 Name: 名称未設定 [sage] Date: 2008/12/27(土) 16:00:30 ID: 1ymko+SU0 Be:
>>725
MVCパターンにおいては、Modelコンポーネントは1つです。たとえ、それが複数のクラスで構成されていたとしても。

今回のケースは、Modelの内部に配列を含んでいるという話なのでは?

> このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしかいない
NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?

> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
これをModelとして実装すればよいのではないかと思います。
まあ、あえてこの機能をControler側に実装するなら、NSArrayControllerのサブクラスを作ることになりそうですが。
727 Name: 名称未設定 [sage] Date: 2008/12/27(土) 16:03:14 ID: wr2ktw9Z0 Be:
>>683です。
>>684-685
ありがとうございます。自己解決できたのでお役にたてればと。

// 数字以外のキャラクターセット
NSCharacterSet *decimalInvertSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
// 上記セットがあるか
NSRange rng = [string rangeOfCharacterFromSet:decimalInvertSet];
if(rng.length > 0){
// 数字以外が含まれている
}else{
// 数字のみ
}
728 Name: 名称未設定 [sage] Date: 2008/12/27(土) 16:18:18 ID: wr2ktw9Z0 Be:
>>723
NSArrayControllerのcontextがCoreDataなら
NSManagedObjectContextObjectsDidChangeNotificationで
NSInsertedObjectsKey、NSUpdatedObjectsKey、NSDeletedObjectsKey等でわかるかもしれません。

NSArrayControllerのみでもいけるのかな?
詳しくはググって見て下さい。
729 Name: 名称未設定 [sage] Date: 2008/12/27(土) 17:51:40 ID: HOyebOs70 Be:
NSURLConnectionを使っています。

なぜか接続に失敗するのですが、そのときに

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
が呼ばれ、

NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);

の出力により

> Connection failed! Error - ネットワークの接続が解除されました http://example.com/hoge

と出ているのですが、そのアプリを終了させても
どうもセッションをはって何やらダウンロードが続いているようなのです。
netstat で ESTABLISH になっていますし、ネットワークの下りは一定の速度でダウンロードしているようです。

質問は二つあります。
1. アプリを終了させても接続が続くとは、
Mac OS X や NSURLConnection は一体どのような仕組みになっているのでしょうか。
2. 失敗しても安全にダウンロードが終了できるような NSURLConnection の使い方に何かこつがあるのでしょうか?

どなたかご存知の方いらっしゃいましたらどうかお教え下さい。






730 Name: 名称未設定 [sage] Date: 2008/12/27(土) 18:25:21 ID: 6vw8P5nD0 Be:
>>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 Name: 名称未設定 [sage] Date: 2008/12/27(土) 18:38:40 ID: 6vw8P5nD0 Be:
連投すいません。>>723です。

例えばNSTableColumnは NSArrayController.arrangedObjects.modelKeyとbindすると
model.modelKeyをその分だけ表示しますが...

このNSTableColumnのようにmodelの数だけ何かを表示する
カスタムビューを作るのを想定してくれると、やりたいことをわかってもらえるでしょうか?

この時NSArrayControllerは差分を送って来ないので、
カスタムビューは自分で差分取らなきゃいけない、これが差分だけ追加/削除できたら
ありがたいのに、