- 前スレ
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/
- 関連スレ
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/
- >>1乙
あと、こんなの見つけた。
http://cocoawiki.aerial.st/index.php?FrontPage
まだ情報少ないみたいだけど、メモ代わりに使わせてもらおっと
- いちもつ
- テンプレに英語系 Cocoa 役立ちサイトを追加:
本家ドキュメント
http://developer.apple.com/referencelibrary/Cocoa/
わかりやすいチュートリアル
http://cocoadevcentral.com/
Cocoa に関する Wiki
http://cocoadev.com/
Cocoa blog 一覧
http://cocoablogs.com/
だれか日本語の Cocoa サイトをまとめて。
- >>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
ほかにもオヌヌメあったら、ヨロシコ
- Cocoa Break!
http://park15.wakwak.com/~concordia/cocoa_break/index.html
Cocoa Bindings Examples and Hints
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html
- とりあえず良さげな知っている所を挙げてみる
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/
- 全然書き込みないけど
Carbonはさっぱり!!!
http://pc11.2ch.net/test/read.cgi/mac/1217108500/
- あ、これ忘れてあげないで。
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/
- OmniGraffleやOffice 2004(たぶん2008も)のUtility Windowのように、
ドラッグにより、Window同士がある程度近づくと、ドラッグがある程度離れるまで、
ぴったりくっついた状態をキープする動きを実装したいのです。
Windowの位置が近くかどうかは、WindowサブクラスのmouseDragged:内で、位置を取得して割り出せました。
で、Windowがくっついた位置をキープしたいのですが、この方法が分かりませんでした。
mouseDragged:内で、[NSWindow setFrameOrigin:]などで位置を強制的に固定しようとしても、
mouseUp:になるまで効きませんでした。どうすればいいのでしょう?
- >>11
http://www.literatureandlatte.com/freestuff/index.html
にある、KBPalettePanelExampleがそれっぽい挙動実装してるよ。
- >>12
まさにこれですね。じっくり見てみます。
とりあえずありがとうございます。
- 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は操作を繰り返すと増えていきます。)
書いてて気にしないのが良いように思えてきた。
- オブジェクトのディープコピーをするにはどうしたらいいですか?
- 自分でメソッドかけば仕舞いだと思いますが。
めんどくさければ、
NSKeyedArchiver で NSData にかためて、
NSKeyedUnArchiver で NSData にとかせばディープコピーになるんでは?
- 俺いつもそうやってるw
- >>15
ここ読むといいかもしれない。
http://journal.mycom.co.jp/column/objc/058/index.html
- >>14
まあ自分では対処しようがないんだから気にすることは無いんじゃない?
あと@"string"をインスタンス変数に入れて
初期化が一回だけになるようにしたらどうだろう?
たしか文字定数は初期化一回だけのはずではあるけど
- Xcode 3.1/Mac OS 10.5.5 (intel)
MacBookとか、iMacとかのモデル名を取得する方法ってあるでしょうか。
- >>20
ハードウエアの情報については、開発ツールのIORegistryExplorerで目的のものがあるか探してくれ
- ADCの日本語ドキュメントを見ながら初Cocoaに触れてますが、チュートリアルでいきなりつまずきました。
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/06Controller/chapter_6_section_6.html
ここで
> ConverterController.hファイルを選択して「開く」をクリックします。
とありますが、これをやっても何もおきません。図5-3のようにもならなければエラーも出ません。
何が原因でしょうか???
- なにもおきなくて正解です。単にその操作は、
.h に書かれている内容を IB に教えてあげるだけです。
図 5.3 のようにするには、ステップ 3 をしないといけないです。
ライブラリから青い立方体のをドラッグ&ドロップして、
クラス名を NSObject から ConverterController にしてやらないといけないです。
- >>23
おお!なるほど!できました!
それにしても紛らわしい書き方ですね…。
- Apple のかわりにあやまっておきます。ごめんなさい。
あと、普通は 2. のステップ (.h を開く もしくは IB にドロップ) は
IB が自動的に XCode に登録されてる .h を全部監視しているので
しなくてもいいんですが、ときどき IB が混乱して
新しい .h を読まなかったりするので、やり方は覚えておいたほうがいいでしょう。
まあ頑張ってね :) 仕組みがわかれば IB は快適です。
- >>21
ありがとうございます。見つかりました。
Macにもレジストリってあったんですか…。
- てめー、Mr. Registry.appさんにケンカうってんのか
- RegistryはMicrosoftの登録商標ですか
- iPhoneで何か作るか~と昔買ったヒレガス本を引っ張り出してきて
まーとりあえず、cocoaでOSX用乱数発生アプリを手本通りに組んで
追々思い出しながら手慣らしを~・・・
インターフェースビルダにツールバーが無ぇ!(笑
”システムフォント”はどこだ?(笑
NSObjectのサブクラスを・・・ってClassメニューはどこ行った!?(今日はここまでw
Xcode3(というかインターフェースビルダーというか)が変わってて
昔の本の記述が役に立たねぇ orz
- つうかCocoaの「たのココ」とかチュートリアルとか、
に何となく簡単そうに見える本から入っていく初心者って、
IBでGUI作ったりチュートリアルのコピペあたりで終わって
つまづいて進歩しないか、飽きていくのがほとんど。
ちゃんとC言語、オブジェクト指向、Objective-C、と基礎から
積み上げて行かないと、いくらやっても表面なでてるだけで、
まともに書けるようにならないよ。
- 確かに今活躍してるCocoa開発者はNeXTのときにみっちり身につけてる人らばっかりだもんな。
- MacOSXがリリースされてから、すでに7年はたっている。
これだけ時間があれば、NeXTを知らなくても、Cocoaを身につけられる
- んなことはない。「たのココ」は知らんが、俺は「ヒレガス本」から入った。
後はサンプルをつまみ食いしつつ、AppleのサイトのApplicationKitと
Foundationのクラスのドキュメントを読めば何とでもなる。Cを知らないと
話にならんが、最初からObjective-Cをすべて網羅する必要はない。
それこそ、CとかObjective-Cの基礎からやってたんでは飽きてしまって
Cocoaに辿り着けなくなるのがオチだ。
NeXTからやってる奴なんてごく少数だ。
- >>33は>>30と>>31へのレスだよ。
- 俺も>>33と同意見
俺はプログラミングド素人
Macも6月に買ったばかり
未だに「オブジェクト指向?」「クラス?」「メソッド?」なレベルなんだけど
「たのCoco」とサンプルを参考にして既にiPhoneアプリを一本リリースした
これがそこそこ売れてしまったのでモチベーションUP!!
最近ようやくCの入門書を買って読み始めた
最初にCの入門書を読んでいたら確実に挫折していたと確信している
- >>35
何作ったの?
- sssp://img.2ch.net/ico/si.gif
>>35
有料化できるアプリってどういうのなんだろ。
やっぱちゃんと作らないといけないイメージがある。
あと、レジストキー関係のプログラムが面倒くさそう。
適当でも良いんだけど、適当だと簡単に破られるしね。
そこらへん、iPhoneは有料アプリ組みやすいのかな?
俺の暇つぶし集↓今んとこ全部無料。
http://www.smilemac.com/
- C言語からはじめる必要はないか。
ただIBで遊んだりチュートリアルのコピペをしばらく
楽しんだら、ある程度基礎的なことも理解していく必要は
あると思うけどね。
その点で、
> 最近ようやくCの入門書を買って読み始めた
という>>35はもう次のステップにうつっているから
良いんだけど、そういうステップに行く前に挫折する人が多いのも
事実。
- Cすらも分からんのに何やるのさ
- >>19
元々はCocoaバインディングを使ってみて同じ現象になったんでバインディングの
使い方が悪いのかと思ってたんですが、使わなくてもなったんでデバッガの使い方が
悪いのかと思って質問しました。
気にしないことにします。
>>35の行動力は凄いな。
- >>37
>あと、レジストキー関係のプログラムが面倒くさそう
iPhone の場合はそのあたりは全部 AppStore が面倒見てくれるので
なにも書かなくていい。
- >>37
誰かと思ったらMacNicoPlayerの作者さんじゃないかw
暇つぶしとかそんなまた謙遜を。
なんか35見て感動したのでたのCocoAmazonで買ってくるか。
- >>35はかなりセンスあるんだな。
俺は趣味グラマ長いけど、未だにInterfaceBuilderには馴染めない。(泣
- >>43
習うより慣れろ。by パソコンサンデー おヅラも出てたな。
- パソコンサンデー・・・
何もかもが懐かしい。
スレ違いスマン。
- iPhone Dev Centerのドキュメントとサンプルコードが充実していたので
なんとか一本書けた感じです
http://developer.apple.com/iphone/
細かいことはとりあえず気にせずに
とにかく一本AppStoreに出してみようじゃないか!
という勢いだけで突き進みました
課金については>>41の通り
料金をプルダウンメニューから選ぶだけです
もちろんFreeでもいいです
どんなに小さなアプリでも
とにかく一本完成させたことが大きな自信につながったので
小難しいことは軽くスルーしつつ一本作って公開してみるといいと思います
その点、iPhoneのAppStoreは小さいアプリをぽんぽん出せるのでおもしろいです
今後はOSXのアプリにも挑戦したいですねー
- >>41
ほぉ、そうなのか。
ところで、$99払えば誰でもアプリ売れるの?
それとも審査とかがあるのかなぁ。
Developer Connectionは日本語文字化けするので、買い物用のApple IDとは別のIDにしてるんだが、もし審査あるのなら、メイン垢のほうが良さげ?
日本語名の垢でやるとフォーラムとかで自分の名前化けそうなんだよな。
そこらへん誰かkwsk。
>>46
iPhone開発って難しいイメージあったんだが、iPhone SDKのリファレンス見たら、そうでもないのか。
Cocoaアプリ作る要領で、リファレンス見ながらやればすぐいける感じかな?
ちょっくら作ってみるか、実機もって無いけどorz
- >>47
シミュレータで動かすだけなら無料
実機転送とAppStoreに公開したいのなら$99払う必要有り
アカウントの文字化け問題には俺を含めてかなり多くの日本人が悩まされているけど
「文字化けしてるから直してくれ!」って根気よくADCにメールすればそのうち直るw
これは人によっていろんなケースがあるから一概には言えない
iPhone開発に関しては
プログラミング経験のほとんどない俺が
Macを初めて買って一ヶ月ちょっとでリリースまでこぎつけられたことを考えると
ハードルは高くないはず
アプリは提出すると審査があって
脆弱性とかエログロとかがあると却下される
でもどこが悪いのか教えてくれるから直しやすい
詳しくはiPhone開発スレで
http://pc11.2ch.net/test/read.cgi/mac/1224089976/
- バカお前ら騙されるな
>>35 = mkino (=たのcocoの著者) だ!!
>>35は宣伝なんだよ!!
- ΩΩΩ < 何だって~~!
- やられた!
>>35 見て、今すぐ書店に急いじゃったぜ!
- アメリカの会社なのに社会主義的でおかしいよね
- >>35は売り上げを晒すかアプリを晒して欲しい。
- なんで49とか53はそう悪意というか疑いの目で35を見るかな....
嫉妬でもしてるのか?
- iPhoneのアプリ作ってる人ってカタギじゃないですよね?
- >>54
パソコンサンデーとか言って通じる辺り、たぶんここの平均年齢層は高いのだと思うが、
そういう世代にとって、プログラミングというのは「模型を作る」のと同じレベルの趣味で、
さーて、なんかiPhoneだと世界相手にプログラム作って売れるらしいからなー
こりゃ面白い、あーでもMSXマガジンの頃はいくらでもアイデア出たのに、
長年離れてたら勘が鈍ったなー まーcocoaの作法覚えながら、また少しずつ鍛えるかー
ぐらいのもんなんだが、
「プログラミング」っていうのがひょいとパソコンを買ってきたら普通にできるホビー。
じゃなくて、プログラミングというのは専門学校かなにかで習って、
企業に就職したプロが、プロジェクトチームでカネを掛けてやるもの。
ってことに(その子の中では)なってる子が、
これ系の別スレにも迷い込んでて周りと話がかみ合ってなかった。
- 自分はパソコンサンデー?なにそれ?って感じの世代だがそのホビーとしてのプログラミングって言う発想は分かる。
まだ自分がMacユーザーではなかったときに一番最初にいじった言語はなでしこ(http://nadesi.com/)だったなそういえば。
その後JavascriptをちょっといじってからMacに移動して、AutomatorとAppleScriptに興奮して、最近たのCoCo版Tigerを買ってXcode 2.x系列を落として色々やっていたらLeopard版が出てしまったというのが現状。
でもそういえば自分は文系だった気がする。おかしいかな?
- パソコンサンデー?
なんだか方向がズレてきてるけど
とりあえず自分が言いたかったことは
・C言語からはじめて挫折するよりも、細かいところには目をつぶってサンプルコードを参考にしてとにかく何か一本完成させて公開までもっていく
・これにはiPhoneアプリが最適なのではないか
(Appleの審査があるので無自覚に危険なアプリをばらまいてしまう恐れも無いし、メンテや課金も簡単)
こんな感じです
アプリは実名で出しているのでアプリ名晒しは勘弁してください
これまでの売り上げはMacBookが買える程度です
売り上げのほとんどが海外です(これもiPhoneアプリのおもしろいところ!)
ではみなさんもがんばって!
- ObjC (Cocoa) + IB ってのが、簡易言語的な感じでとっつきやすいんだろうね。
で、実用的なGUIなアプリが割と楽に作れるし、達成感もあると。
素のC言語から初めて、何か人に使ってもらえるものを作るとなったら、
結構な道のりだからなあ。
iPhoneのアプリなんかは、単純なプログラミングの技術より、何かいい発想の
ある人の方が面白いものを作れる可能性が高いような気がする。
- 35が宣伝でも構わんが、たのCocoは正直オススメできない。
内容も薄いし、理解させようと言う意識が感じられない。
入門ならヒレガス本をオススメする。
- しかしIBのインターフェースが変わったのがヒレガス本としては痛いな
早く新版でないかなー
- もう新版出てないか?>ヒレガス
http://www.amazon.co.jp/exec/obidos/ASIN/0321503619/
Amazonには2001,2004,2008が全部売られているけどタイトルで分類しているせいか全てに同じ内容の商品説明とカスタマーレビューがついていて混乱する。
- >>62
たぶん>>61は和訳されたものが欲しいのだと思う。
俺も旧版の和訳しか持っていないので
新版出てくれるとありがたい。
- >>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
でも画像あげれないから超分かりにくいね、これ。
- http://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/05View/chapter_5_section_1.html#//apple_ref/doc/uid/TP40000863-CH7-SW1
- すみません、質問です。
アプリを起動した直後に特定のテキストフィールドなどにフォーカスを
当てたいのですが、どうすればよいのでしょうか?
- >>64
コメントありがとね
画像アップはちょっとまってて、
2、3日でリアルが片付くから、それからやります
不便をさせて申し訳ない
- ここ数日ADCのレスポンスが異常に悪いんですが、皆さんいかがですか?
Software Updateもタイムアウトで完了できない有様で・・・。
- >>68
Snow Leopardの新seedのせいとか?
- >>64
Cocoa Bndingになってる
- >>68
-(void)awakeFromNib{
[myField becomeFirstResponder];
}
- ごめん、安価ミス
>>66宛。
- >>71
ありがとうございます。
ちなみに調べていて
[myWindow makeFirstResponder:myField];
でも行けたのですが、どちらも同じですかね?
- 通りすがりだけど
becomeFirstResponder
には
Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly.
とあるね
- becomeFirstResponderってオーバーライド用じゃなかったっけ?
- OSX10.3辺りで一時期cocoaに触れて、
その時に作ったソフトが起動すらしなくなったので改めて一から作り直そうと
久々にcocoaに再挑戦する所なのですが、
レオパルドの開発環境では何か根本的に作り方が変わったりしてるんでしょうか?
- 再ビルドすれば起動するんじゃないの
IBが変わりすぎて慣れるのに時間がかかる。
- >>74-75
73ですけどご意見ありがとうございます。
makeFirstResponder を使った方が良いという事ですよね。
- 以前改良しようと中途半端に手を加えた場所等、
もう全体構造が判らなくなってるので一から作った方が早いと思ったからです。
- いや、プログラムのサイズにもよるけど、
がんばって思い出してみたほうがいいんじゃないかな。
とりあえずは昔のプロジェクトを最新の xcode で開いて、
コンパイルしてみるのをおすすめします。
なにか 10.5 になってなくなった/挙動がかわった
API をつかってるのかもしれないし ...
デバッガでどこで落ちてるのかを調べるだけでもちがうでしょう。
別に本質的にはなにもかわってませんよ。
いろいろ Cocoa の API が増えてるのを除けば。
(CoreData, Binding とか... Binding は 10.3 にもあったっけ?)
>>77 さんもいうように
IB3 は IB2 からかなり変わりましたが、outlet / target の考え方はかわらないし。
クラスは IB 側で作らずに XCode で作ることが推奨されるようになったぐらい?
- >>73
IBでwindowのinitialFirstResponderとテキストフィールドを繋げてもできた
後はnextKeyViewを繋げていけばタブキーの移動が制御できた
- >>78
becomeFirstResponderは「自分がFirstResponderになるか否か」を返すためのもの。
FirstResponderにしないビューを作りたい場合、
becomeFirstResponderをオーバーライドしてNOを返せば良い。
- (BOOL)becomeFirstResponder {
return NO;
}
- 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>はどうして出力されるのでしょうか?
- >>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
- 要は符号付き/無しとエンディアンの話か。
- ライブラリのパスの渡し方を教えてください
プロジェクトの設定でライブラリ検索にパスを渡しても
エラーが生じます。
ちなみにヘッダファイルのパスは上手く通ります。
- >>86
スタティックライブラリ(.a?)ならファイルが並んでるツリーのところで
右クリック->追加->既存のファイルでライブラリファイルを選択
同様にヘッダファイルを追加してビルドすればできたっぽい
プロジェクトの設定とかはいじってない
- >>87に追記
*.a、*.hの追加時にコピーは作っても作らなくてもできた
- >>87
ありがとうございます。
明日確認してみます。
- NSTableView内のセルを編集可能にして
セルの内容をプログラム内で読めるようにしたいのですが、
どのようなメソッドを使えばいいのでしょうか?
変更した時点でデータを読みに行く必要は無くて、
適当なタイミングで(Save Buttonを押した時とか)読めればいいのですが。
元々用意してたデータをNSTableViewに表示までは出来るようになったのですが。。。
- >>90
tableView:setObjectValue:forTableColumn:row:
セルの内容が変更になった時に呼ばれるから、
該当するデータを差し替えれば良い。
- 遅れながら、言われた通りちょこっと頑張って直せました。
レオパになってメモリ管理の新機能が付いたとかチラ聞きして
その辺りも含めて立ち上がらなくなったのかとか色々考え過ぎて腰が引けてた様です。
有り難うございました。
- >>91さん
出来ました! 素早い解答ありがとうございます。
- NSTextField内の挿入ポイントを行の最後に移動したいのですが
どうすればいいでしょうか?
moveToEndOfLine: はNSTextViewでしかできませんでした。
- currentEditor で NSText を取り出して moveToEndOfLine:
- うちのCocoa Wikiにコメントをくれた人、いますかね?
ファイル添付機能を有効にしたので、再度編集していただけると嬉しいです。
ちなみにファイルサイズの上限は5MBです。
- >>95
[[inputTextField currentEditor] moveToEndOfLine:self];
できました、ありがとうごさいます。
- >>96
ありがと
マターリとやっていきます。
- http://cdn1.ustream.tv/swf/4/viewer.45.swf?cid=317016
めちゃくちゃ可愛い
- いまいち何が問題なのかわからないので、質問させてください。
まず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をアプリケーションの起動から終了までずっと保持しておきたいのですが、ガーベジコレクションを使う場合、ルート集合から参照しておけばよいと本に書いてあります。具体的にはどうすればよいのでしょう?
- ↑フラッシュの穴を付いた攻撃なので注意
- [myArray initWith...] じゃだめ。その時点では myArray は nil でしょ。
nil に initWith メッセージを送ってもどうしようもないです。
myArray=[NSMutableArray alloc];
として myArray に NSMutableArray のインスタンスをつくってから、
initWith... しないと。普通は組み合わせて
myArray=[[NSMutableArray alloc] initWith... ]
とするのが吉。
ルート集合って何のことなのか具体的なことが本に書いてあるはずだけど、
読みましたか?読めばどうすればよいのかこともわかるはずだけど...
- え。このフラッシュって悪い奴なの?ごめんなさい。
単に犬の赤ちゃんの live webcam で可愛いなあと思ってみてたんですが...
- それをなぜこのスレに貼る
- >>102さん
確かに[myArray [[NSMutableArray alloc] init..]とすると動きました。
初めて1月たつのに、まだまだ基本的な所が理解できていないようです。
本は荻原さんの詳解Objective-C2.0を読んでるんですが、
外部変数や大域変数がなんなのか、そこから参照するというのがよくわかりません。
- 1ヶ月で理解出来たら、世の中はObj-Cプログラマーで溢れかえってるんだぜ?
- 最近プログラミングを初めようと思いCocoa本買いました。
Mac買った時に付属していたDVDからXcodeインストールしたんですが、新規プロジェクトの中のCommand Line Utilityという項目はあるんですが、その中にStanderd ToolやFoundation Toolなどが入ってません。
どうすればいいでしょうか?
素人的なことで申し訳ないです…。(-.-;)
- 買った本は何か? Xcode のバージョンは? 何をしようとしているの?
- >>108
バージョンは3.0です。
買った本は木下誠「たのしいCocoaプログラミング」です。
実験用のプロジェクトをつくりたいんですが。
- NSString定数で漢字を使えない設計にした人
すぐに自殺してください。
- >>110
貴方の無知は痛々しいです。何が原因か推測さえ出来ないのですか。
- 原因はObjective-Cのアーキテクトが馬鹿だからです。
- たのココ(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;
}
なので、書き換えれば良い。
- >>109
木下の本はやめた方が良いと思う。
ヒレガス本にしる。
>>112
じゃやめちまえ。
バカに付き合うほど暇なら別だが。
- うは、馬鹿降臨。
- >>110
@"漢字ひらがなアイウエオ"
で全然通りますが。
- >>116
(´ι _` ) あっそ
- てかさんざん既出だろ。
- >>112
それが「objective-cの」言語仕様だと思っている時点でアホウだな。
- 態度わりーw
- >>107
>Standerd ToolやFoundation Toolなどが入ってません
けど変だね。普通はそこに5つはいってるけどな
- @"..." の定数って、 7 bit ascii 以外は未定義だよね ???
[NSString stringWithCString: "...."
encoding: ソースコードのエンコーディング]
を使うのが安全なんではないかと思いますが。
あと、お願いだからみなさん NSString <---> char* の変換で
encoding 指定のない deprecate されてるメソッドは使わないようにしましょう。
それらのメソッドは Cocoa のデフォルトエンコーディングをつかいますが、
Cocoa のデフォルトエンコーディングは環境設定で言語を何にしているかに
依存するので、日本語環境では動いているソフトが英語環境にすると
途端に動かなくなったりその逆とかいう意味不明なバグが多発します。
これのせいで英語の作者のつくったユーティリティーが
日本語ファイル名をちゃんと扱えなかったりするので泣けます。
- >>122
これ何に対するレス?
>[NSString stringWithCString: "...."
>encoding: ソースコードのエンコーディング]
>を使うのが安全なんではないかと思いますが。
とりあえず autorelease されてる点は注意だよね。
それに「ソースコードのエンコーディング」ってのも、ポータビリティを考えると
どうよ、って感じがする。
>これのせいで英語の作者のつくったユーティリティーが
>日本語ファイル名をちゃんと扱えなかったりするので泣けます。
この場合はエンコーディングを指定しても本当は駄目で、
filesystemRepresentaion を使わないといけないのだが。
現実的にはUTF-8にしておけば一応大丈夫だけど。
中途半端なアドバイスをするお前に泣けたw
- >>113
ありがとうございました。
助かりました。(≧∇≦)
- NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。
NSMenuItemのArrayとできちゃえばサイコーなんですが…。
- 超ハイパーウルトラ初心者ッス
IBでコントロールを二つ用意しそれぞれアウトレットとアクションを一つずつ持ちます。
でWindowsにテキストフィールド二つとスタートボタンがあります。
テキストフィールドはそれぞれ上記で用意した各コントロールのアウトレットと一対一でコネクトさせています。
しかし、アクションであるスタートボタンを二つのコントロールにコネクトさせることができません!
どちらか一つとコネクトさせると一方のコネクトが(勝手に!)解除されます。
スタートボタンを押すと二つのコントロールを起動させたいのですが・・・・
- InterfaceBuilder で何でもできると思ったら大間違いだ
- >>126
Windowsってw
Actionは1つのオブジェクトにしか送信できないので、
複数のオブジェクトを動作させたい場合は中間にオブジェクトを置くのが手っ取り早い。
ボタン→中間オブジェクト┬→オブジェクト1
└→オブジェクト2
というか、1つのアクションで完結するように設計を見直した方が良いと思うが。
- >>125
できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。
- 超ハイパーウルトラ初心者ッス
>>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を使用したい
}
- 超ハイパーウルトラ初心者ッス
今日僕はCocoaの奇跡を見ました。
すごい、すごすぎる!
テキストフィールドをプロパティとして簡単に宣言して
等号で結べばいいだけだなんて・・・・・・・・
まー無理だろなーと思いながら試しただけなのに・・・・・
- 超ハイパーウルトラ初心者ッス
今日はまだ一度もうんこ出てないのに
お腹がすきます
すごい、すごすぎる!
- >>130
なんか錯乱しとるから、もうちょい勉強してください。
- つーか、キャラ作んなくていいよ。
- Objective-C糞過ぎ
C++かJavascriptかRubyか、最悪でもJavaで書けるにしろ
つーか、Cocoaなんて廃止して、.NET Framework使えるようにしろよ
- おまえがやれ
- お断りだ
- 2行目が何を言いたいのか分からんが
C++とかJavaでやりたいならやればいいじゃん
- 質問です。
たぶんちょっとしたことで出来るんだと思いますが、、、
あるクラスAのメソッドのループから、ウィンドウ中のラベルなどを更新って出来ますか?
ビューコントローラは別にあり、ビューコントローラをインスタンス化してメソッドを直接呼出し
と、安易な考えをしていたのですが、やはり出来ませんでした。
具体的には、ループが進むごとにウィンドウ中のラベル(進行状況%表示)を更新したいのですが、
どうすればいいでしょうか?
- [labelTextField setStringValue:@"hoge"];
[labelTextField display];
これでどうか
- ループの処理を別スレッドにした方がいいけどな
- >>138
分からないならコメントするな。素人は黙ってろ
- >>ID:dKIqpJ+F0
ありがとうございます!
スレッドは扱ったことないので、ちょっと勉強してきます。
その場合、ラベルをコントローラにIBOutletとして定義すると思うのですが、
ループ中からそのラベルオブジェクトを扱う事はできるんですかね?
ループの存在するクラスに定義するのは避けたいので・・
- どこで定義しても特に支障無く扱うことができると思うが
ものは試しにやってみれ
- メインスレッド以外からは GUI を直接いじってはいけないので、
[object performSelectorOnMainThread: ... waitUntilDone:....]
だったかなにかをつかいましょうね。
- なるほど、、どこからでも扱えるんですね。
ちょっと今は試せないですが、ありがとうございました!
近々自分のMacを買うつもりなので、転がりながらプログラミングしたいものです。
- >>145
ん、そうだっけ?
メインスレッドじゃなくてもOKでしょ?
何か制限あったと思うけど、忘れた。
- GUI系はメインじゃないと危険だったかと
プログレス表示に精密さを求めないならsetNeedDisplay:YESとかでもアリじゃないかな
- >>135を読んで思い出したけど、
Objective-J(Cocoaを実装したJavascript?)はどうなったんだ?と思ったら、
ttp://objective-j.orgから ttp://cappuccino.org/ にリダイレクトされて、
なんかダウンロードできるようになってる。
- >>149を読んで意味が分かったけど、
>>135の2行目は日本語の意味が良く分からんかったってこと。まぁカリカリすんなよ。
- >>135
出来ないのはお前が糞だから。俺は出来るもんね。
- C 系の言語の文法をひとつでも既に知っていて、
Obj-C の文法が二日でわからないひとは何かがおかしい。
Cocoa API の全貌をつかむのは大変なのはわかるけど、
それは Obj-C の文法の問題ではないベ。
- .NET Frameworkのどこがいいんだがさっぱり謎だが一応。
http://www.mono-project.com/Mono:OSX
- 110=135でOK?
- >>135はプログラム板のここにでも行った方がいいんじゃないか?
過疎りまくってるが。
Mac OS Xでの開発環境はどれがイイ?
http://pc11.2ch.net/test/read.cgi/tech/1163314891/
- >>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からポップアップの各項目を作るのが希望です。
- >>143
ループでGUI更新が動かないのは、NSRunloopが一回りしたタイミングで
更新処理がまとめて行われるからだよね。
コードの中でループしちゃうと、NSRunloopに処理が戻らない。
自分はスレッドが面倒なので、ループをばらし、ループの中身だけ別メソッドに
して、performSelector:withObject:afterDelay: で繰り返し呼び出しに
してる。普通はスレッドにするものなの?
- >>152
わかるわからないではなく、Obj-Cの文法は美しくない。
- 後付け感ありまくりではあるね
シンプルに書けないのも今風ではないね
MacRubyに期待(^^;
- >>158
じゃあ、好きな言語を使ったら良いんじゃない?
.NET使う環境から一生出てこなくて良いよ
- >>156
何をしたいのかわからないけど、
NSMenuのアイテムとNSPopupButtonのアイテムを同期させたい、
または同じ内容にしたいということ?
- >>158
美的感覚の問題だったのか。
じゃあまあ個人の好き嫌いだからそれでいいんじゃね?
僕は括弧の乱舞は好きだけど。
あと、メソッド名が長くてほとんど文章なので
コメントを書く必要がほとんどない、というか
プログラム自体がほとんどコメントになるのはいい点だと思う、って
これは Obj-C の文法の問題ではなくて Cocoa の API の問題か。失礼。
- 文法的に美しく無いとされるフランス語にも素晴らしい文学は存在する。
Objective-Cに文句を言うのは勝手だが、
経験豊富なプログラマであれば言語に左右されない美しいアプリを作れるはず。
- そういうこと言うと、論点ずらしって言われるぞ。
- >>164
撒き餌を食うなよw
- あれじゃないの?
iPhoneのアプリ開発とか注目されてきてるからObj-Cで組んでみようと思ったけど
VBしか経験がなくて文法の違いが吸収できず、HelloWorldすら出せずにイライラしたとか。
- >>166
それはあるよな。
iPhone出てから「初心者です」みたいなのが増えた。
- >>161
はい、だいたいそういう内容です。
title以外の内容があるアイテムとか、セパレータとか、NSMenuItem自体には
いろいろな状態があるので、そういった状態を抱えたまま同期したいのが希望です。
- 俺はObjective-Cの簡潔なオブジェクトシステムが好きだ。しばらくすると一風変わったメッセージ式にも愛着がわいてくる。
- お前らの言いたいことはわかった。「オラの方言が最高だべさ」ってことだろ。一生時代遅れの田舎言語使ってろ。
- はいはい田舎田舎。
厨房発言に上げ荒し、おまけにドトネト最高か。
まじでVB厨のバカ丸出しだな。
- 田舎の方が味があって和むんだよ。それが分からないとはまだまだだな。
- 言語とか処理系て、どうせ借り物でしょw
目的は何だ?金?w
だったら冷や汗たらして働けw
何か作りたいものがあるなら最適な手段を選べばいいだけ
- iPhoneで小遣い稼ぎしようと思ったけど
理解できなくて八つ当たりしてるだけだろ。
- まあ誰がなんと言おうとObjectiveC++ は最強だと思うけどね
C++/CLIよりも使い易いし、判り易い
でも、ちょっと古い感じはするね
MacRubyに(ry
- Objective-C++は最強にカオスってことですねわかりまs
- 心の寂しい方がいらっしゃる様ですね
きっと心だけでなくプログラムも隙間だらけなのでしょう
- >>158
Ruby でも Java でも C++ でも JavaScript でも出来ますが、何か?
- 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++ で実装しようがあるんでしょうか?
- C++とか、今のスレの流れは別に興味ないけど、
>>135が今までどんなアプリを作ったのかが
非常に気になるw
- 多分、hello, world.だろ。
- ついで、「こんにちわ、世界」と出力しようとしたが、
エンコードがあっていなかったので文字化け。
キレる。
ってのが王道です。
- @ も序でに忘れてんじゃね?
- 学び始めて間もなく、色々とやってみたのですが解決できず悩んでいます。
場違いかも知れませんが質問させてください。
テキストフィールドからNSMatrixをつくり、個々のセルにint型の数値を表示しています。
マウスクリックで選択したセルから数値を取り出しています。
ところが、
個々のセルに対して、NSCellやNSTextFieldCellのメソッド、例えばsetTextColor:等を
送るとその後、セルから数値を取り出せなくなってしまいます。どうしてそうなるのかが
判りません。どなたかご教授いただけませんか?宜しくお願いします。
- >>184
セルを参照しているインスタンス変数を上書きしておらんか?
- >>185 レス有り難うございます。
セルの指定は、以下のようにしています。
[[matrix cellWithTag:n] setTextColor:[NSColor blueColor]];
ご指摘いただいたようにポインタを使った形にしてみたのですが、
やはり上手く行きませんでした。
- 一人でばたばたして、連続の書き込みになり申し訳ないのですが、
もう少し補足させてください。
マトリクスのセル(テキストフィールド)に数値を設定しているそのメソッドにおいて、
セルの文字の色を変えようとしたとき、
「元の色 -> さらに元の色と同じ色を設定」
の場合はその後でも別のメソッドから数値が取得できる。ところが、
「元の色 -> 別の色に設定」した場合、取得できなくなる。
これはひょっとして文字の色を変更したことによって、
セルが持つテキストフィールドセルが別もの(オブジェクト)に
置き換わったということなのか?と考えています。
ご助言頂ければありがたいです。
- 取り出せないって具体的にはどうなるんですか?
エラーでアプリケーションが落ちるとか?
期待した値じゃなくて0しか返ってこないとか?
- 値をセットするところ、ゲットするところのコードを見せた方が早いよ。
言葉だけじゃさっぱり伝わらない。
- 昨日、ループからGUIのラベルを更新したいと言っていた者です
ループの存在するメソッドをスレッド化し、ラベル更新部分をメインスレッドで実行するようにしました
しかし、ラベルは更新されませんでした
更新部分は
[対象ラベル setStringValue:newLabel];
[対象ラベル display];
となっています
newLabelはログで確認済みです
携帯からなんで間違っているかもしれませんが、よろしくお願いします
- >>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を他の色に変えると、
クリックしても値が取得できなくなります。
- >>191
[NSColor blueColor]に変えても
ウチでは元気よく動いてますが・・・。
10.5.5、DevTools多分最新。
- 自分はwhiteColorにしましたが動いていますね
数字は見えなくなりましたが...
- >>192 レス有り難うございます。
なんと・・。実はこちらは未だOS10.4.11で、XCODE2.5なのですが、
リファレンスではNStextFildCellは10.0以降とあるのでバージョン
のことはまったく頭にありませんでした。>>191のコードのままで上記
のような結果になっています。プログラミング初心者がおこがましいですが、
これはXCODEやコンパイラのバグと考えるべきなのか、それともまだ他に
原因があるのか・・・?取りあえず今日は頭を休めます。
いずれにしてもレス頂いた方々、わざわざ実際に試してくださった192さん、
感謝いたします。有り難うございました。
- >>194
なんでもバグの所為にすると怒られるよ。
どこか間違ってるんだろ。
- >>193さん、わざわざ試して頂いて有り難うございました。
やはり、私の環境に問題がある可能性が明確になってきました。
感謝です。
- 質問してる身であれですが、、、
>>184さん
カラースペースの設定とか関係ないでしょうか?
見当違いの回答かもしれないですが、RGB色空間を扱っているとき、[NSColor blackColor]が使えなかったもので、、、
自分も始めたばかりなんでそのあたりが知りたいです
- >>195さん そうですね、軽率でした。ご容赦の程。
>>197さん カラースペースというのは環境設定ーディスプレイの設定か
もしくはキャリブレーション関係でしょうか。もしそれならば、1670万色に設定されている
状態です。ガンマ補正以外はデフォルトのままにしています。しかし、そういうことがあるの
ですね。私はまだまだそこまで到達していませんが、いずれグラフィック関連のプログラミング
もできればと思っていたので、とても参考になりました。
お二方とも有り難うございました。
- >>194
>OS10.4.11で、XCODE2.5
同じ環境で試してもちゃんと動くぞ(ちなみに192、193とは別人)
- >>194
>>190
コード全体を晒したほうがいいんじゃないかな。
きっと自分では予期せぬところがおかしくなっていると思われる。
基本的に、なんかプログラムをかいて、バグがあって、
自分ではここがおかしいんじゃないかなというところを
いくら考えて修正しても正しく動かないばあいは、
その自分がここがおかしいんじゃないかなと思うところだけ
抜き出して 2ch で聞いても改善する可能性は非常に低いです。
なぜなら、そういうときはえてしてそこと違う場所がおかしいからです。
- 勘だが
- (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];
}
こうしたらどうなる?
- >>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
- >>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];
}
- ///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];
}
こんな感じです
ボタンプッシュ→ループクラスのインスタンス作成→ループメソッド呼び出し
→更新時、メインスレッドで更新メソッド呼び出し
→ビューコントローラのインスタンス作成→ビューコントローラ内の更新メソッド呼び出し
見づらくて申し訳ないです
なんか変な事やっているのは感じていますが、これでは動かないのでしょうか?
- MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
ここが諸悪の根源だ。
あと
performSelectorOnMainThread:@selector(updateMethod)
でコロンを忘れてる。
- RoopTest* rt = [[RoopTest allc] init];
ここもなんだか気持ち悪いな。
- 何で画面更新の度に MyViewCtrl を alloc してるんだ?
どう考えたら、こんなコードを書けるんだろう...
あと、allc じゃなくて、alloc だろ。
明らかに自分のコードに問題があるのに、
>これはXCODEやコンパイラのバグと考えるべきなのか
とか、
>やはり、私の環境に問題がある可能性が明確になってきました。
とかよく言えるな。
コンパイラのバグとか考えるのは最後だろ。
- updateMethod: で newLabel をどう渡しているつもりなのか?
あと、
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
無理ではないけど、そうやってつくったものは
インターフェースビルダーで既につくったオブジェクトとは別のものです。
- あんまし速度を求めないのであれば
スレッド使うよりNSTimerにした方が無難だと思うけど。
- 皆さん、レスポンス頂いて有り難うございます。
>>207さん、203、204さんは私とは別の方です。軽卒な発言を書いたのは私の方です。
平にご容赦ください。
>>200さん >>191のコードのみで、やはり値が取り出せない状況になっております。
>>201さん 結果は変わりませんでした。
>>199さん、わざわざ試していただき有り難うございました。199さんが>>191のコードのみで
検証されたとしますと、私のInterface Builderでの作業が間違っているのかもしれないと考え始め
ました。
夜まで作業できませんが、なんらかの結論なり経過なりはまたご報告させて頂きます。
有り難うございました。
- >>210
>>>207さん、203、204さんは私とは別の方です。
勘違いしてた。スマソ。
- みなさん、いろいろ助言をありがとうございます
調べたところ、NSConnectionを用いてスレッド間通信をすればよいとあったのでやってみたところ、ついに出来ました!
やはり、ラベルの授受がうまく行ってなかったようですね
ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?
上にある、RoopTestにIBOutletを定義しても更新できなかったので。。
とりあえず、今後のGUI更新作業は、必ずコントローラ上で行うようにします
- >>212
結局やりたい事は名にだったんだろう?
NSTimerだとかなり簡単なんだが。
- >>213
目的の処理はとても重いのですが、NSTimerも重いとのことだったので避けていました
ループメソッドがコントローラクラスのメソッドではなく、別クラスのものだったため、例があまりなかったので悩んでいました
正直わかりやすくするためで目的の結果には必要ないものなので、時間をとってしまったのは失敗でした^^;
- >ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?
可能。やり方を知らないだけ。
NSConnection なんて馬鹿げたことするよりよほど簡単にできる。
- どうも 203 さんは日本語力が足りない気がする。
自分が書いたことを、相手が読んでわかるためには
何をどこまで書いたらいいか、考えていますか?
あなたにとっては暗黙の了解でも、読んでる人にはわからないかも知れないし、
読んでる人にはそもそもまったく納得出来ない話かもしれません。
「NSTimer も重いとのことだったので」なんてどこから出て来たのか?
NSConnection なんかつかわなくても、
performSelectorOnMainThread で withObject: で渡せばいいんでないかと
おもいますが...
- >>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。
- >>216
>>209の
>あんまし速度を求めないのであれば
>スレッド使うよりNSTimerにした方が無難だと思うけど。
から勝手に重いものと解釈していました、申し訳ないです
performSelectorOnMainThreadは初め使っていました
が、できなかったのですが。。
>>217をみてわかりました
いろいろと勘違いをしていたようです
みなさんありがとうございます
最後に、差し支えなければNSConnectionが劣っている?理由が知りたいです
- 自分だったらthread側はstringに対するアクセッサ用意するだけで何もしない。
Thread側から他へ要求すると遅くなるし、結合度が強くなって簡単に修正できなくなる。
メイン側はtimerかevent loopのついでに進捗見て非同期にゆっくり表示すれば良い。
人間が視認できる速度は知れてるからそれで十分
- > NSConnectionが劣っている?
というよりは、この場合は不必要である処理が間に挟まっちゃいます。
適材適所でご利用ください。
- 超初心者です。
windowの立ち上がり時にcomboBoxに項目を自動的に加えたいのですが・・・
たぶんtableViewの時と同じようにdatasoceとして登録しておくのか、
window起動時の動作を定義できる関数とかがあるのだろうと思って調べたのですが
見つかりませんでした。
- 一応IBのwindowのデリゲートをコントローラに接続して
windowWillMoveをオーバーライドすることによって
windowを動かしたときの定義はできたのですが・・・・・
windowを開いたときの動作を定義する関数もあるのでしょうか?
- データソースで登録できますね。
お騒がせして申し訳ございません。
- データソースで登録する仕方がわかんねー
- http://www.oomori.com/cocoafw/ApplicationKit/NSComboBox/index.html
datasource使わなくてもできるっぽいけど。
- >>225
確かに出来るんですが、起動時にすでにcomboBoxの中に項目が追加されているように
したいんですよね。
で、最初はwindowDidBecomeKeyのオーバーライドでクリアさせたんですけど、
でもデータソースがあるって知って、今それをトライしているところです。
- >>226
awakeFromNibで追加するのはダメなん?
- >>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];
}
酔っ払ってカキコしてるから間違ってたらすまん
- 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ともに最新のものを使用しています。
どなたかお知恵をお貸しください。
- >>229
- (BOOL)resignFirstResponder {
return NO;
}
は書いてある?
- >>230
逆だったorz
- (BOOL)resignFirstResponder {
return YES;
}
- >>229
何でこんな無茶苦茶なコードを書く必要があるのか聞きたいw
サブクラス作る必要もないし、自分自身をdelegateにする必要もないし、Notificationをわざわざ転送する必要もない。
- >>230
ありがとうございます。
それは書いていませんが、オーバーライドしていないメソッドは
SuperClass(この場合NSTextFieldやNSControl)のものが勝手に使われる
という認識ですが間違っているのでしょうか。
ところで今回の件に関しましては自己解決しました。。。
- (void)textDidEndEditing:(NSNotification*)aNotification
{
if(![before isEqual:[self stringValue]]){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil];
}
[super textDidEndEditing:aNotification]; ←これがポイント。
}
と、最後にSuperClassのメソッドを呼び出してやることで無事にNextKeyViewが選択されました。
この問題に取り組んでくれた皆様、ありがとうございました。
- >>232
私も正直こんな面倒なことはしたくなかったのですが。。。
Bindingを使いこなせていないせいかイマイチ「編集終了時に値が実際に変更されているかどうか」
を比較する手段が思い浮かばずこんなことになった次第です。
- >>234
>編集終了時に値が実際に変更されているかどうか
それだけなら普通にデリゲート使えばいいんじゃね?
- >>234
Core Dataを使ったり自分でUndoを実装すればsetDocumentEdited:YESは自動でなされるだろうし、
そこまでしない小規模なものならdelegateのcontrolTextDidChange:でいいし、
Bindingされているモデルが変更されたときやりたいならモデルに対してKVOすればいいと思う。
- どうぞ
キー値監視について(Key Value Observing)
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueObserving/
- >>235
Bindingが設定してあるNSTextFieldからはDelegateしても通知がポストされなかったんです。
>>236
>>237
CoreDataは一度かじって挫折してました。今度調べてみようと思います。
とりあえずはKVOの方向から解決策を模索してみます。
- >>238
Bindingしてても普通にデリゲートメソッド呼ばれるよ?
念のため書いておくとtextDidEndEditing:はデリゲートメソッドじゃないからね。
controlTextDidEndEditing:かcontrolTextDidChange:を使えばいいと思う…が、
もちろんcontrolTextDidEndEditing:は変更の有無は関係ないし呼ばれたときにはBindingで変更された後だから、
その用途には向いていないのかもしれない。
- >>239
textDidEndEditing:はDelegateではないんですか。
大きな勘違いでした。どうりで。。。
そしてDelegateが呼ばれるということは
そのときの私の何か他の部分がよくなくて正しくない動作をしていたか
もしくはtextDidEndEditing:がController側で実装してあり呼び出されなかった、
という話だったのではないかという気もしてきますね。
じっくり調べてみます。
皆さんありがとうございました。
- ttp://www.friday.com/bbum/2008/11/11/autozone-the-objective-c-garbage-collector/
darwinsourceに最近、追加された(?)AutoZoneって何かと思ったら、objcのgcなんだ?
- >>228
非常に参考になりました。
ありがとうございます。
あー僕も酔っ払いながらかけるようになりたいっす。
- 暫くcocoaから離れてたんですが、
ファイルをゴミ箱に入れる方法ってNSworkspace以外に実装されてませんかね?ゴミ入れ音付で
- NSAppleScriptでFinderにやらせれば音が出るよ。
- Finder でゴミ箱にすてるのと同じ動作をする API が
Leopard で Carbon に追加されてます。
http://developer.apple.com/releasenotes/Carbon/RN-CarbonCore/
の File Manager のところを参照。
- 初心者です
ボタンを押したら新たにwindowを表示したいんですが
そういった関数をご存知の方いませんか?
- >>246
まずオブジェクト指向の意味を理解してください。
そうすれば自ずと何をすれば良いか分かります。
- 複数のウインドウを表示したり制御するのって意外と難しくて面倒なんだよね。
メニューのアクションとかもキーウインドウに対してセンドしなきゃいけないし。
- >>247
そこまで戻る必要があるんですか・・・・・
ただ単にAPIの問題だと思っていたのですが・・・・
深いですね。
- 単にダイアログを表示するだけならAPIの問題だけどな。
- >>246
Interface builderだけで簡単に作れるよ
- >>251
customViewを使うことにしました。
教えていただいてありがとうございます
- 何をやりたかったんだ……
- >>252
えええ、アクションつなぐのじゃdameなの?
- www
- >>253-254
何とかボタン一つでwindowを表示させることに成功しました
お騒がせしてすみません。
- Finderウインドウの表示内容を更新する方法って
NSFileManagerでフォルダを作る意外には無いのかな
- >>257
NSWorkspaceのnoteFileSystemChangedではだめ?
- >>258
noteFileSystemChangedでは更新されるときとされないときがあるんだよね。
特に、smbでマウントしたwindows共有フォルダには効かなくて、無理矢理不可視フォルダを作って削除する方法で対処してる。
- >>246
まず手始めにwindow画面を起動時に見えなくして
NSWindowクラスのmakeナンタラ関数で前面に出してきたらいいんじゃないのか?
後IBでコネクトね。
オブジェクト指向を理解してても出来ませんよ。
APIの問題です。
- 今はCarbonのGestaltを使っているんだけど、CocoaでOSのバージョンを
取得する方法はありますか?
- >>261
[[NSProcessInfo processInfo] operatingSystemName]
- いつも気になるんだが
NSWorkspaceとNSProcessinfoのメソッドの分け方がおかしい
と思うのは俺だけだろうか。
直感的じゃないんだよな
- すまん、間違えた
[[NSProcessInfo processInfo] operatingSystemVersionString]
- どうせ NSProcessInfo も最終的に Gestalt を呼んでるんだろうから
Gestalt でいいんでは?
- ローカリゼーションとかで使う .strings ファイルの形式って、どっかに詳細なスペックは
あるかな?
自分でも同じフォーマットを利用しようと思って(ローカライズ目的ではないけど)、
foo = var; 式のエントリの文字列を -[NSString propertyListFromStringsFileFormat]
でパースさせているんだけど、エラーになる条件がよくわからない。
class = hogehoge;
みたいに、1単語の時はクォートしなくていいように一見見えるんだけど、少し違うタイプ
name[0] = hogehoge;
だとエラーになる。
- http://developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html
- >>262,264
ありがとう。NSProcessInfoとは・・・なかなか見つからないわけだ。
>>265
今はGestaltで間に合うけど、Carbonもいつまでサポートされるか
わからないからね。
- >>267
あ、どうもありがとうございます。
でもよく考えたら自分の最終目的は なんたら = かんから; のようなエントリが複数ある
ファイルから、この なんたら/かんたら のペアを取り出すことでしたw
で、.strings用のAPIが使えないかと思った、という流れです。でも厳しそうですね。
ここで なんたら や かんたら は、
name[0]のような式の場合もあれば、文字列の場合もある。複数の語からなる文字列の
場合はダブルクォートで囲まれる。文字列自身にダブルクォートが含まれる場合は
バックスラッシュでエスケープする。みたいな感じです。
ちゃんとやろうとするとパーサーみたいのを書かないといけないと思うんですが、
もし出来合いのものがあるならそれを利用しようかと.... プログラムの設定ファイルとかで
ありがちな処理だと思うので、何かいいものがあれば....
CocoaなのでObjCから利用できるものが望ましいです。よろしくお願いします。
- >>269
そゆばあいはNSUserDefaults使います。
どうしても .stringsでなきゃならないなら、
-[NSBundle localizedStringForKey:value:table:]
で無理やり。
- >>269
.strings ファイルは "..." = "..." しか公式にはサポートされてないんではとおもいます。
それは OS X 以外のソフトとデータをやりとりする必要がある?
OS X だけですむなら、単に内部では NSDictionary でもっておいて、
保存するときには plist 形式で書き出すだけで済むと思います。
OS X 以外とデータをやりとりする必要がある場合でも、
2008年暮れにもなってパーサを自前で書くのは馬鹿らしいとおもいます。
単に XML で書き出して、(plistもXMLなのでそれでいいですが、)
ほかのプラットホームで読むときはXMLライブラリつかって
読み込むのが簡便だとおもいます。
- ごめん。全然読まずにレスしてた。
たぶん、そういう特殊用途なら自力でパースした方が早いです。
NSScannerならObjCで使うことが可能です。:-)
- >>270
>そゆばあいはNSUserDefaults使います。
えーと、状況は なんたら = かんたら; みたいのが沢山入ったファイルがまずありきで、
この なんたら/かんたら のようなペアをロードしたいのです。
ただ、ここで なんたら と かんたら はダブルクォートで囲まれた文字列とは限らず、
そういう場合に.strings用のAPIだと失敗するようなのでどうしましょう、という流れです。
わかりにくくてすみません。もしかしてCocoaと関係ないかもしれないですね。
- プロパティリストでいいじゃん。
NSDictionaryをそのまま保存すればいいよ。
- >>271
OS Xではあるんですが、自分の直接の管理下にない別のソフトが なんたら = かんたら;
みたいなフォーマットでデータを吐き出してくるのです。で、それを処理します。
長期的にはそのソフトが最初からplist(XML)を吐き出すべきなんでしょうが、差し当たってw
>>272
一応、そこそこ汎用な解析をしないといけなそうな感じなんですが、
NSScanner がおすすめですか。使ったことがないので調べてみます。
- 汎用性を持たせるならJASONって手もあるよ
- 間違えた、JSONか
- >>275
>自分の直接の管理下にない別のソフトが なんたら = かんたら;
>みたいなフォーマットでデータを吐き出してくるのです。
なるほどそれはしかたないですね。
NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/Articles/OldStylePListsConcept.html
あなたのファイルを読み込んで、さらに { ... } で囲んだら、
NSPropertyListSerialization をつかって NSDictionary に出来ると思いますが、
Unicode が通るかどうかわかりません。
僕なら perl か ruby かなにかでそのフォーマットのデータを
plist に書き換える短いスクリプトを書いて、
Cocoa からそのスクリプトを呼びますが。
- >>277
>JSON
おーなんか面白そうですが今回はとりあえず。
>>278
>NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
結局CFPropertyListほげに処理が行くようで、エラーになる感じは>>266と同様のようです。
>僕なら perl か ruby かなにかで
確かに、正規表現で切り出したりすればいいですかね。
左辺or右辺が文字列リテラルのときとそうでないときがあるのがちょっと面倒ですが...
- NSScannerでパースするのが一番楽だと思うな。
たいして複雑な書式じゃないようだし。
- >>280
まだNSScannerを理解しきれてないですが、割と単純に文字をスキャンするだけじゃない
ですかねえ?
書式には文字リテラルが含まれるので、そんなに単純じゃなかったりします。例えばリテラル内に
¥"が現れる可能性もあったり... 結局、それなりの状態遷移を書く必要があるような。
とりあえずperlで正規表現を考えてみました... 文字リテラル用の表現が、なんとかできたかなあ
という感じです。文字リテラルじゃないときの場合分けはむしろ簡単かな。
- >>281
NSScannerはその名の通りスキャンするだけだから、この場合は「"なんたら" = かんたら\";」から「"なんたら"」と「かんたら\"」を
取り出すだけしか出来ないね。エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。
正規表現使うならPerlじゃなくてもCocoaから使えるライブラリもあるよ。
http://www8.ocn.ne.jp/~sonoisa/OgreKit/
- >>282
>この場合は「"なんたら" = かんたら¥";」から「"なんたら"」と「かんたら¥"」を
>取り出すだけしか出来ないね。
こういう風に、値のデリミタが異なる場合を毎回試さないといけないので、なんかすでに面倒感
が出てくるというか...
>エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。
勿論¥自体もエスケープされていることがあります。ので、上の場合のでも¥のさらに手前が¥かどうか
調べないといけなくて、下手するとさらにその前、みたいなバックトラックモードに...
で、そういうのを普通のプログラムで書いていると、
「これって正規表現を展開したのを書いてるんじゃないか?」、という気分になってくるという....
>Cocoaから使えるライブラリもあるよ。
ちらっと眺めてみました。よさげですね。
なんか正規表現のセットが複数種類あるみたいですが... ONIG_SYNTAX_PERL というのを
有効にしたい場合はどうしたらいいんですかね? (ソースを調べろって?)
- ステートマシンを書くといいよ
- 前スレでCGImageRefの輪郭抽出でお世話になったもんです。
御礼が遅くなりましたが、とりあえず無事解決?したのでご報告まで。
結局、シェーダー書いてCoreImageで処理に落ち着きました。クリック判定の時だけ
CGColorAtX: Y:で判定というかなりテキトウな処理です。
いまのところ問題なく動くようです。アドバイスしてくれた方、ありがとうございました。
しかし、CoreImage面白いですね。
- 間違えた… 285です。メール欄に名前入れちまったい…
- NSOpenPanelでオープンダイアログ出すと
スレッドの数が異常に増殖するんだけど
これって普通ですか?
5-6スレッドも何に使ってんだろ・・・。
- >>284
正規表現はそれと同等な有限オートマトンで表現できる... いえ、もうそこはいいですw
巷に優秀な正規表現コンパイラが溢れる今日日、固定パターンの受理マシンを最初から作るのは...
今回。文字リテラルを含む入力の正規表現を確定するのに少し試行錯誤しましたが、
同じことを毎回プログラムの変更でやるのと、どっちが楽かと..
しかし、Cocoaでネイティブに正規表現をサポートしてくれたりしないのかな。おしまい。
- >>287
modalってだけて、ランループを3つぐらい塞いでる気がするし、
あとディレクトリに変化あったら自動で更新されるのもスレッド立ててる気がするし
まぁ5-6スレッドぐらいすぐ使うんじゃない?
- >>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]);
- >>290
なるほどー。試してみると、最初の一回は時間がかかるけど2回目以降は悪くないですね。
Java -> Cocoa は確か新規のCocoa APIが今後サポートされないとかいう話がありましたが、
Cocoa -> Java の方も同じことになるんですかね?
Cocoa というより ObjC と書くべきなのかもしれないけど。
- Dictionaryに格納すると
順番がめちゃくちゃになるんですけど・・・・・
なにかいい方法ないですか?
- NSArrayにも格納したら?
NSDictionaryやNSArrayはオブジェクトのコピーじゃなくてそのポインタを格納するだけだから,
両方使ってもメモリが一気に増えるってことはないと思う.
- ソートも使えるしな
- >>293-294
そうします。
ありがとうございます。
- >>291
java -> ObjCもObjC -> javaもサポート停止です。というか保守停止かな?バグが発見されても放置みたいな。
下位互換のために、それ自体は、OSの中に残るようですけども。
- >>292
めちゃくちゃってか、アルファベット順とかそんなんだろ?
- っていうかディクショナリに順番を期待するのが間違いだよね。
- >>298
普通本屋で売ってる辞書って順番にデータが格納されてるよね...
いや、僕らは NSDictionary はハッシュテーブルだって知ってるから
順番を期待しないけど、プログラムはじめたばかりのひとが
混乱してもしかたないんじゃないかな。
それで気になるのは、~/Library って素人は中をいじっちゃだめだけど、
日常用語としては図書館には行ってもいいはずだから、
すくなくとも英語圏の素人さんなら中に pdf を大量にためちゃったりとか
ある気がするんだが問題ないんだろうか。
- ディクショナリに順番を期待するってREALbasicからの移行組?
コイツはハッシュ型でありながら追加した順番も保持されてるんだよな。
- >>299
>Library
中をあけたらすでにごちゃごちゃとフォルダが入っているのは
わかるはずだから、自分で自由に使っていいフォルダとは違う
ということぐらいはわかるんじゃないのか。
もっともアメリカに限っていえば、ぬれた猫を電子レンジに
かける人がいるお国柄だからどうだかわからんが…
- そもそもアメリカ人は馬鹿だから Library と聞くと怯えて近寄らないとか?
- 図書館に自分の本を勝手に置いて来たり
中身を書き換えたりするようなことは普通しないと思う
- >>302
でもおれたちはその馬鹿なアメリカ人が作ったソフトでひいひい言ってるんだぜ?
- cocoaって標準で正規表現使えないの?
どんだけ屑なの?
- OgreKit
- 雪ヒョウではOgreKitを標準で搭載すべきだ
- 毎回フレームワークを追加して<OgreKit/OgreKit.h>を書くのがめんどくさい
- OgreKit 自体はすごいんだろうけど、Cocoa に取り込むとした場合、既存の Unicode 処理との
整合性が気になるけど大丈夫なんだろうか。Unicode の正規化の規則とか、case insensitive で
マッチした場合の振る舞いとか... そこら辺、何か気づいた人はいますか?
一方、Cocoa は内部で ICU をいろいろ参照しているみたいなんで、もし正規表現を実装することに
なるならやはり ICU を経由するのかなあと思うが...
- >>309
おお、我が母校はCocoa内部からも参照されていたか。
- >>310
笑ったww
自分は卒業生でも関係者でもないが、そのネタ分かる人どれだけいるんだ?
- あそこ広々して、雰囲気もいいよね。やはりCならではとでも言いましょうか...
ほとんど関係者じゃないんだけど、知り合いの先生が教員用住宅に住んでてそこが結構広くて、
飲み会(一応アカデミックな)とかよく開いてもらったなあ。
そういえばかつて天文台にも用があったので、何かの拍子にNAOって綴りをみると思い出すw
しかしICUは一般的にはいろんな管を繋がれてピッ、ピッ、とか鳴ってるイメージかとw
- あれ?聞いた話では構内での飲み会は禁止だったが…今度あったら確認してみよう。
って、Cocoaはどうした?
- Cocoaどこ?わたしは誰?
- 俺はUnicodeのみの制約を嫌ってオリジナルの鬼車の方を使ってる。
- >>305はどんな言語を使ってるの?
- パァるじゃね?パァる。
- ぱぁる厨の城東区だからね
- Rubyでも正規表現は使えたはず。
REALbasicも3.5あたりから内蔵されてバリバリ使えるしね。
だが俺はCocoaが屑とは思わん。むしろマンセーしてる。
AppleがPascalかBASICでCocoaアプリ作れるようにしてくれれば
もっとマンセーするんだけどねぇ
- >>319
つ 旧OS
- Cocoa-Perlが出たらパァる厨も大喜び
- regex(3)じゃだめなの?俺仕事のコードでバンバン使っちゃってるけど。
- regex(3)の機能で充分ならばそれでいいんでないの
- >>321
CamelBones が既にあるよ。
>>319
Pascal、BASIC と Obj-C のどこに違いがあるのかわからん。
見た目はちがうが、ほとんど文法一対一に対応するのに。
- >>324
CamelBones、中の人がやる気がなさすぎでしょう。
10.5になるまでは「標準でのるかも?」って勢いだったけど、その後失速し
て、いまじゃそのままでは動かない。他の人があてたパッチでかろうじて、、、
- Propertyって便利だけど、何か中途半端な気がするのは気のせいですかね?
オプジェクトを作成してプロパティをセットする所までは便利だと思うけど
id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
- ?
- >>326
>id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
>受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
意味が判らんのですが、どういうこと?
なんでプロパティつかっててキャストするはめになるのか判らんのですが。
- 画像のExifや一般情報を取得する方法って有るんでしょうか?
- Core Graphics の CGImage をつかえばいいです。
CGImageSourceCopyProperties のあたりを参照。
- >>326
property設定する時、全部idで宣言してるとかじゃないよね。
- ひとつ賢くなった>>326であった
- senderで送られてくるオブジェクトって通常id型でしょう?
そのプロパティにアクセスしようと思たらキャストかクラスに代入する必要があるでしょうに
- プロパティ関係ないじゃん。
普通のメソッドでもそうじゃん。
- >>333
プロパティどうやって書いてんの?
- - (IBAction)hoge:(id)sender
{
sender.foo = [aClass new]; // ???
}
ってことね。
俺はsenderに働きかけたことないけど。
- >>333
senderなんてほとんどIBOutletだろ。
if (sender == hoge) {
float value = hoge.foo;
}
みたいに書くんじゃね? 普通は。
- うそーん
- NSTextViewでsetEditable:NOにしておき、クリックされた、またはフォーカスが当った時に
setEditable:YESに変更、view外がクリックされた、またはフォーカスが外れた時にsetEditable:NOに
するにはどうすればよろしいのでしょうか?
他のボタンでsetKeyEquivalent:@"半角スペース"などで設定した時に、NSTextViewにキーイベントを
取られるのを防ぎたいのです。
よろしくお願いします。
- >>330
すいません、Core関係は全く触った事無く扱い方自体知らないんですが、参考になる日本語ページとか無いでしょうか?
- >>333
- (void)action:(MyClass*)sender
{
...
}
ソースコード側は、こう書いてもいいんだよ。
- id型が何か分かってないんだと思う
- >>339
NSTextViewのサブクラスを作って、becomeFirstResponderとresignFirstResponderをオーバーライドすれば、できそうだけど。
ただ、NSTextViewからフォーカスが外れたら、そもそもキーイベントがNSTextViewに行く事は無いと思う。
- >>340
ちょうど良さそうなのが
ttp://cocoawiki.aerial.st/index.php?FrontPage
- Cocoa Drawing Guide
ttp://www.mosa.gr.jp/?p=444
- >>341
id の問題はおいとくとしても、 action メソッドで sender のプロパティに
アクセスしないといけない状況ってほとんどないと思うんだけど。
バインディングつかってないの?
- 継承関係が無いクラスをポリモルフィックに扱う時はid型を使うだしょ
その時の話をしていたのだがorz...
- >>347
そういう状況でなんでプロパティを読みとりたくなるのか
具体的な状況がまったくわからんのだが。
- つうことで、propertyに違和感を感じるのは俺だけってことで...orz
- orz とか言うのはいいけど、こっちの疑問に答えてくれないんでは
違和感も伝わらないんだけど ???
a.property というのは obj-c ぽくなくて違和感があるが、
それは >>349 の感じている違和感ではなさそう。
どういう局面で sender の property が読みたくなるの?
- クラス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
}
簡単に書くとこんな感じ。動的なオブジェクト言語なんで無理矢理継承関係を持たずにシンプルに書きたいときが多いよね
- >>351
- (void) shift:(hoge *)point {
}
にすればええやん。
- それだとfugeが受け取れない
- 異なるクラスを1つのメソッドで処理したいのかが分からん。
- orz
- まあ、アプリを作るよりもコードの組み方に執心するのも悪くないが、
それで満足出来ないならこれ以上は無駄な議論になる。
自分で言語を作るか満足出来る言語を探すしかないな。
- そこまで拘ってはいないんだけど、規模が大きくなると
可読性も重要になるもんでちょっと気になっただけです。
スレ汚しすまそん。
- >>351
例としてそれが正しいんだとすると、クラス設計が間違ってるんじゃない?
>>354も言ってるけど、
同じプロパティ持ってて、なおかつ一つのメソッドで処理したいんなら
共通の親クラス持つべきでしょ。
> 動的なオブジェクト言語なんで無理矢理継承関係を持たずに
どっちかっつーと、継承させればいいのに無理矢理継承させなかったようににみえるよ
- サンプルの例は簡単すぎるけど、継承関係を持ちたくない動的なポリモルフィズムでは
プロパティは合わないってことかな。たぶん俺の設計が悪いんでしょう...。
- >>358
いや、実際継承関係なしに同じメソッドを持たせたいときのためにプロトコルってもんがあるんだけどな…
プロパティ使ってもプロトコル作っとけばメソッドでアクセスは出来るだろうけどプロパティ構文でアクセスは出来ないか。
ていうかプロトコルみたいな基礎の基礎を理解してからプロパティみたいな(ある意味シュガーシンタックス)を使うべきだと思う。
- >>359
具体的に何をしたかったのか気になるな。
こういう事は参考になるし、差し支えなければ教えてたもれ。
- プロトコルって
たった一つの関数のために宣言するのも気が引けない・・・・・
それに今回の場合は二つのクラスがあってそれを第三者である別のクラスのメソッドを使用して
この二つのクラスのオブジェクトにメッセージを送りたいんでしょ?
- >>362
メソッドの数は関係ないだろ…NSCopyingとか知ってる?
>>351の例で言えば、HogeとFugeが共通のプロトコルを実装していれば、継承関係がなくても
id <protocol> point2 = pointとすれば、少なくともメソッドでのアクセスはできるわけ。
まあid型なんだからメソッド呼ぶ分にはコンパイルエラーは出ないと思うが、静的型チェックしたい場合は。
こういう継承関係はないけどある程度のメソッドのセットを共有するクラスって、実際にアプリケーション作ってれば
結構あるんだけどな。プロパティってカテゴリとかプロトコル中で使えないんだっけ?
- メッセージを送りたいんじゃなくて
その二つのクラスを仮引数にしたいのか。
そうなると仮引数での型宣言がid型にならざるを得ない・・・
・・・hoge型を受け取るセレクタとfuge型を受け取るセレクタ
両セレクタを第3者のクラス(たぶんメインのほうなんだろうけれど)で定義すればいけるよね。
これだとソースも汚れないんじゃない?
- >>360
まぁインターフェースだけ持ちたい場合はそうなんだけど、
>>351の例じゃメンバも一緒だし、プロトコルじゃなくて継承があってるっしょ
例が簡単過ぎと言う事だから、何がしたいかによるけどさ
同機能の名称だけ違うクラスがあるようだったから、これを親クラス使わないテは無いんじゃない?
- >>363
そうなのか。
僕は研究で使うためのアプリケーションを作成させられているんだけど、
まわりにcocoaなんてやってる人がいないから、相談できる相手がいないんですよ。
だからイメージ的にプロトコルなんだから一つだけの関数のためにあっても仕方ないよなー
って感じだったんですよ。
でも確かにcocoaのプロトコルの存在理由を考えれば一つでもありですよね。
沢山のクラスで同じメソッドが使われている。
となればそのメソッドを一つの「Aプロトコル」と宣言しておけば
このクラスは「Aプロトコルに沿っています」となればその関数は使用できるってことがわかるわけだし。
その逆もしかりだしね。
- ある程度プログラムが出来上がったあとに、別個に作って来たクラスを共通の基底クラスに
乗せるのは厄介でできない、というのはデザイン云々はともかく実際問題としてあるかも。
C++ だと多重継承という逃げ道もあるが... あるいはテンプレート。
規模が大きくなると可読性が... とかいうなら、それこそプロトコルとかである程度縛りを
持たせないとまずい気がする。
- >>365
>>351の例そのままなら誰だって継承を選択するし、継承ならプロパティもそのまま使えるからわざわざ質問なんかしないよ。
- ごめん、366で納得しといて申し訳ないんだけど・・・・
今回の例でプロトコルをしようするってどういうこと?
何度も確認するんだけど、
今回の例は
第三者のクラスで実装されている一つのメソッドにおいて
二つのクラスを仮引数として受け取れるようにするには id型しかなくて
それだとわざわざプロパティとして定義してあるx,yなのにドット演算子を用いてアクセスできない
っていう不満なんですよね?
どの辺にプロトコル・・・・・・・・が関係するんですか?
- >>364
あ、そうか。
HogeまたはFugeをインスタンス変数として持つ第3のクラスを作って、
プロパティはそっちに実装すれば…って余計めんどくさいけど、どうしてもプロパティ使いたいならこれかw
- >>369
いや、プロパティじゃなくてメソッドだったらプロトコル使えるねって話。を俺がしてるだけw 混乱させたらすまん。
- @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); }
面倒くせぇ。
- 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;
}
- 番号書いとかないと解らなくなりますね(^^;
話題がクラスの設計にまで発展していて恐縮してしまいます。
最初に戻りますけど、プロパティは便利だから使うんじゃなくて
静的な設計でしっかりとしたチェックを行う為に導入されたのかもしれませんね。
あ、でもメッセージを送信できてしまうのでそうでも無いのか。
プロトコルを使った設計もいいんですけど、ObjectiveCなのでAPIを作るとき以外は
あまり使いたくないと思ってしまうんですよね....
もっと使い込んで良い使用例を見つけてみます。サンクスアロット!
- ごめん途中でかきこんでしまいました・・・・
まぁ省くと
さらに
- (void) shift:(Hoge*)point
を作成して
myMainで
両方ともうけとれるんでは?と・・・・
- >>374
ものすごく参考になる例でしたよ
こちらこそありがとう
- 高度な話題の途中で申し訳ないんですが、
ファイルの有無を返すメソッドって何を使えばいいのでしょう?
例えば、
/Users/me/hoge.txt
を引数にして、hoge.txtがあればYES,無ければNoを返すようなものです。
で、もしあったらそれをhoge2.txtにリネームしたいのですが、
便利なメソッドありますか?
今はNSStringのinitWithContentsOfFileでエラーが出なかったら、
そのNSStringをwriteToFileで書き込んでるんですが、
無駄にメモリを使っているような気がします。
- やっと答えられるネタがw
id fm = [NSFileManager defaultManager];
BOOL flag = [fm fileExistsAtFilePath:theFilePath];
でいいかと
- ちなみに
- (BOOL)fileExistsAtPath:(NSString*)path isDirectory:(BOOL*)flag
でディレクトリかどうかも分かる
- >>378さん
こういう時はNSFileManagerを使えばいいんですね。
ありがとうございます。参考になりました。
- インスタンス変数の先頭や後ろに_を付けたり、
mを付けたりしてるのをよく見掛けるのですが、
正式(もしくは通例)な書き方ってあるのですか?
- ないです
- 俺の例で申し訳ないけど
1.あまり変数名を考えないで何もつけない
2._を付ける
3.mを付ける
4.変数名をよく考えて何もつけない
の順で進化(退化?)してきて、現在では何も付けないに固まりつつあるよ
- よく_を付ける人がいるけど、
あれってAppleが予約してるんだよね?
- mって懐かしいな
CodeWarrior PowerPlantの命名規則だっけ
- 質問です。
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)、これでいいのかよろしくお願いします。
- >>386
それはデリゲートメソッドなんで大丈夫。10.4.11より前では単に呼ばれなくなるだけ。
- >>387
早速の回答ありがとうございます。
特に気にすることはないのですね。
あと、もう一つ便乗で申し訳ないのですが、
10.4.11でDeprecatedになったwebView:windowScriptObjectAvailable:を記述しても
呼ばれないのですが、(>>386のメソッドは記述しないで)
-(void)windowScriptObjectAvailable:(WebScriptObject*)wso
{
NSLog(@"windowScriptObjectAvailable");
}
何か記述がたりないのか、単に10.4.11でテストしてるから呼ばれないのか、
わからない状態です。
(ソースは@interface myWebView : WebView でサブクラスにしています)
- >>388
それもデリゲートメソッドなんだからWebViewのサブクラスに書くメソッドではないよ。
そもそも
- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject ;
だと思うんだが。そのコードじゃ呼ばれるわけがない。
- Garbage collection有りのcocoa-Applicationで、
アプリの起動から終了まで、あるNSMutableArrayの中身を保持したいのですが
どういう風に宣言すればいいのでしょうか?
AppController Classのインスタンス変数として宣言すればいいのかなと思いましたが
うまくいきませんでした。
- >>390
AppControllerが、どこからも参照されていないのではないかな。
NSAppのdelegateにすれば良いでしょう。
nibのfile's ownerからdelegateを接続すれば解決するでしょう
- リファレンスカウンタを利用してみれば?
- id型だとプロパティ構文が使えないのは、コンパイラが、それがプロパティへのアクセスなのか、構造体(または共有体)へのアクセスなのか区別できなくなるためです。
こういうときは、非公式プロトコルを使ってコンパイラを騙してしまえば、綺麗に書けると思います。
// 非公式プロトコル
@interface common
@property int x,y;
@end
// 非公式プロトコルを使うメソッド
- (void) shift:(common*)point { point.x += 10;}
あとは、>>352や>>375が言ってることといっしょです。
- >>381
Cocoaの場合、インスタンス変数名が、そのままプロパティ名や、KVCのキーになったりするので、プリフィックスを付けずに、そのままの名前で書くのがよいと思います。
逆に、メソッドの引数や、ローカル変数側にプリフィックスを付けるのが、Cocoa流なのではないかと最近思ってます。
よくメソッドの引数名で、anObjectとか、aStringとか見かけます。
>>384の言ってる通り、_はアップルが予約してるので使えませんが、ローカル変数名なら使っても問題ないはず。
- >>394
眼からうろこ落ちた。おれも今日から引数やローカル変数の方にプリフィックス付ける!!
一応、ローカル変数はPowerPlantからの癖でtheを付けてるけど、引数の
方はinとかoutをつけるとメソッド名とかぶってむずがゆいです。
anとかaはいいね。複数だとobjectsとかObjectsArrayとかにしてますか?
- >>393
なるへそ
- >>35がすごすぎてへこんだorz
自分もがんばるぞ。
- Xcode 3.1を使用しています。
Safariの"Advanced"環境設定や、
iTunesの"General"環境設定などで見かける、横線を表示したいのですが、
どのようにしたら良いのでしょうか。
- ごめんなさい、IBのLayout Viewsのところにありましたorz
- >>389
指摘のメソッドに変えたらうまくいきました、ありがとうございます。
- なんだかんだいってもCocoaでプログラミングするのは楽しいな
ハマル事も多し、標準フレームワークの実装には文句もあるけどね
超高速NSTableViewとか作ってみたけど公開してみようかな
- >>401
dictionaryを展開させるやつならぜひ
- 15万件でもサクサクですか?
- mac miniで多重スレッドでのプログラム処理は大丈夫ですか?
- >>401
1万件のCocoaBindingで、PBG4だと1分待たされました。
是非高速版がほしいですw。
- でもそれはアレイコントローラーが高速にならないと。
余談だけど、NSTableViewでサムネ画像など表示させた場合、
描画領域内にある行だけ画像表示させるのって簡単なんですかね?
- >>406
ふつうに datasource メソッドを実装すれば
描画領域にある列、行のサムネイル画像を NSTabelView が要求してくるから、
その場でサムネイルつくって返せばいいだけだけど。
NSTableView って配列を先に全部与えて表示するものと勘違いしてない?
- アレイコントローラーの配列にNSImageで持たせるか、
画像のパスだけ持たせておいて
データソースで描画内だけNSImageを作成するかの
違いってことかな?
- >>405
1万行あるテーブルなんて、特定の行を探すのが大変そう。
ユーザーインターフェースの設計を考え直した方がいいと思う。
- 文字列オブジェクトは日本語でも全く問題ないよね。
でもそれをC言語のchar型の文字列ポインタにUTF8stringで代入しようとしたら文字化けするんですが、
なぜなんでしょうか?
- >>410
文字化けしているかしていないかはその char* をどう使ったかによります。
どうやって char* を表示させたのか書いてくれないとわかりません。
- >>390
[[NSGarbageCollector defaultCollector] disableCollectorForPointer:myMutableArray]
では駄目なの?(それか、グローバル変数として作るとか)
- NSWindowをsetLevelでNSNormalWindowLevel以外にするとExposeの時消えてしまいます。
Exposeの対象にする方法はないでしょうか?
- NSAppleScriptのexecuteAndReturnErrorで
スクリプトファイルからスクリプトを実行する時に
引数を渡す方法ってありますでしょうか…
- >>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];
とするのは?
- マックから異なるサーバに
メッセージを書き込みに行くときに
日本語が含まれていると、かなり酷い文字化けして格納されるよね。
windowsからxコードで記述したプログラムを見てみると同様に文字化けするし・・・・
一応環境設定でデフォルトのエンコードは「Shift JISS」にはなっているんですが。
- >>416
>マックから異なるサーバに
>メッセージを書き込みに行くときに
>日本語が含まれていると、かなり酷い文字化けして格納されるよね。
異なるサーバってどういう意味?
ファイルサーバ? それとも HTTPサーバにポストする場合のこと?
ここにいるひとだってエスパーじゃないんだから、もうちょっと
他のひとが読んでも判るように心がけて書き込みしたらいいんじゃない?
ファイルサーバだったら書き込む際に文字コード指定して
書き込めばいいだけだし、
POST とか URL のエンコードがうまくいかないのは
html の form で文字コードをちゃんと
指定してないからで Mac のせいじゃないよね。
Google で検索するときは windows からでも mac からでも
日本語で検索出来るわけでさ。
まあそれはともかく、悪い事は言わないから Windows だけで済まない場合は
もう Shift-JIS を使うのは止めて全部 Unicode ベースにしたほうがいいと思う。
- >>417
返信ありがとうございます。
サーバはデータベースサーバのことです
言葉足らずで申し訳ございません。
そのUnicodeベースにしたほうがいいって言うのは
どういうことでしょうか?
環境設定でそうしろってことですか?
- 申し訳ございませんと丁寧に謝っていただくより、
もっと細かい状況をおしえてもらったほうがいいんだけど...
データベースサーバのことです。ってたって何種類もあるでしょ。
データベースサーバとはどうやって通信してるの?
Mac 用のクライアントソフトがある?それとも http 経由?
データベース側では文字列は文字コードは何を使うと決めてある?
Mac 側から送る文字コードはデータベースサーバ側が期待している
文字コードになるようにしてますか?
そのあたりはいろいろな設定が関わってくる問題で、
あなた独自の暗黙の了解が通じるところではないです。
Windows な人なら Shift-JIS が好きかもしれないし、
Linux ベースのサーバなひとなら当然 EUC かもしれないし、
Unicode で XML つかってるひとなのかもしれない。
あなたがそのうちどれなのかは説明してもらわないとわからんです。
単に「マックから書き込むと文字化けするよね」という問題じゃ
ないと思いますが...
Windows サーバに Windows のクライアントソフト/ブラウザから
書き込むばあいでも、IE じゃ文字化けしないけど Firefox だと化けるとか
そんなこともあるでしょ。
よく判らない場合は Windows + IE に閉じこもっていたほうが
安全だと思います。
全部 Unicode ベースというのは、XCode もユニコード、
データベースサーバもユニコード、Windows でもユニコードということです。
そうできる権限があるなら、そうしたほうがあとあと楽だと思いますが。
- データベースサーバはPostgresQLをつかっています。
通信方法はそこで用意されている
libpqというC言語用のAPIを使っています。
ですからUTF8StringでC言語用の文字コードにエンコーディングしてから
Posgreで用意されている関数に渡すことでデータベースに書き込みに行っています。
その時に表のセルに日本語の文字列を書き込みにいくと文字化けして格納されてしまいます。
ただ同じようにWindowsのエディッタで作成したプログラムで書き込みに行くと
文字化けを起こしません。
まったく同じプログラムなのですが・・・・・・
後、再度返信ありがとうございます。
- >>420
それはちゃんと表のセルに入力した文字列が
UTF8 の文字列に変換されてないんだと思います。
お礼をいただくよりも、暗黙の仮定を減らしていただいたほうがいいんですが、
GUI のプログラムは何のフレームワーク使って書いているんですか?
あなたの >>420 の書き込みを僕が読んで、
どういう言語でどういう GUI ライブラリをつかってプログラムしているか
僕が読みとれると思いますか?思いませんよね。
自分以外のひとが読んで判らないところがないだろうか、
考えて書き込んでくださると助かります。
ですから、「GUI のフレームワークはこれこれで、
文字列クラスは std::string なり NSString なり QString なりを使っていまして、
これこれこのように GUI から渡ってきた文字列を
C の char* に変換しているのだがうまくいきません。
どうすればいいですか?」
というふうに聞いてくれるといいんですけど。
あとこれは Mac のせいじゃなくてあなたのプログラミングのせいでしょう。
- >>421
僕も自分のプログラムのせいなのかなと考え
実はC言語だけでCUIプログラムを作成して送信したんです。
char command[250];
sprintf(command,"insert into table (id,name)values('101','田中康夫');");
PQexec (conn,command): //PQexec(接続先データベースサーバ情報を格納した構造体ポインタ,実効命令)
これと同様にWindowsのエディッタで作成し実行したところ、こちら側では
田中康夫が文字化けせずに格納できました。
- あとまた言葉足らずになってしまっていたので、
ですからXコードの文字エンコードの問題かなと考えるにいたったんです。
環境設定ではShift-JISSにしています。
以前マックのターミナルで
データベースサーバからの情報を受け取ったとき
同じように日本語が文字化けを起こしていたので、
環境設定でShift-JISSにしたところ問題が解決されたことがあります。
ですが今回、データベースサーバに日本語の文字列を格納する際に
すでに文字化けを起こして格納しているみたいです。
なんども言うようですが、windowsのエディッタで作成すれば、全く問題ありません。
- なんか Cocoa じゃないですね、皆様失礼しました。Mac でプログラミングスレ
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
に移動しましょう。以下返信はそちらにします。
- 低スキルが間違いをOSのせいにする典型例だな。
- unsinged char data = 0xaa;
はできますが
unsinged char data = 0b10101010;
は出来ないのですね。
2進数を使いたい部分があるのですが、どう扱えば良いのでしょうか?
- #define b00000000 0x00
...
#define b10101010 0xaa
...
#define b11111111 0xff
- ぬはは、なんという発想の転換
- >>427
それって、なんの意味があるんだ?
2進数を使いたいっていう話なのに、それだと実質上16進数だろ
- データタイプにbitがある言語使うとか。
まあ、普通は10進なり16進なりで処理するべ
- 基数変換はプログラミングの初歩だぞ。自分で作れ。
- gcc拡張で無かったっけ?
- Cの仕様には含まれてないんですよね。
私は「計算機」のプログラマモードで16進と変換したりしてます。
- >>414
NSAppleScriptは最低機能のラッパだからできない。
OSAを直接使えばパラメータ与えてハンドラ呼び出したりとかできる。
探すべきキーワードはOSADoEvent kASSubroutineEventあたり。
さらに言えば、パラメータ必要になる様なことやるなら、Scripting Bridge
使うかAppleEvent使う方が良い。AppleScript介すると遅いし不安定なだけ。
- if([self なんたら]){
if([self こうたら]){
if([self どうたら]){
if([self ふんたら]){
if([self ちんたら]){
// OK牧場
}
}
}
}
}
こういう書き方って一般的なんですかね?
- 好み。
おれは深いインデント嫌いなので、
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牧場
}
だね。
- >>436
>if([self なんたら]
>&& [self こうたら]
>&& [self どうたら]
>&& [self ふんたら]
>&& [self ちんたら]){
>// OK牧場
>}
これに一票。Cの&&は前方から順番評価なので、これでOK。
- >437にもう一票だが、それ以前に5重の&&をもっと簡略化できないかに頭を捻るな、自分なら。
(どうしても回避しきれない場合とか、無駄に凝るより素直にまとめて書いたほうが良い場合が
あるのはもちろん承知だが、それでも)。
- 順番評価ってことは、一度否定が出たら以降は無視されるんだよね?
- 仕事で3000行のforループとか300行オーバーのif文とか
悶絶するコードの改修を体験しことがある。
- >>438
switch文が数値以外の値も評価できるようになればいいのかもしれんね。
...別に簡略化にできてないか
- ちょっと違うかもだが、
>>436の前の方の用な感じで、
全体を@try{}で囲み、
否定が来たら、returnするのではなく、理由付きの例外を発生させる。
んで、@catch{}で、何故否定されたのか見れるようにする。
こうしとくと、後々検証に便利。
- 俺は条件に合わない時は
早々に退場願いたいので
if(!([self なんたら]
&& [self こうたら]
&& [self どうたら]
&& [self ふんたら]
&& [self ちんたら])){
return booooo;
}
// OK牧場
>>442
例外使う意味が分からん。
NSLog()で十分な気がするんだが。
- >>442
そういうことをしたいなら、NSAssertを使った方が、ソースが綺麗になると思う。
- 悶絶するようなコード笑ったw
昔書いてたから余計にw
- あれ、>>435は、実際にはそれぞれの if の中には多少の処理があるんじゃないの?
それともそれは [self どうたら] とかの中に入ってるの?
>>436
return したくないときもあるわね。
>>442
ifの条件が別に例外じゃない場合はよくないよね。まあ「何が例外か」問題があるわけだが。
>>444
>>442 に引きずられているのかもしれないが、
assertは本来事前条件の検証をするためだけのもので、プログラムの条件分岐に使うものでは
ないと思う。
- >>443
ちょっと待ってw
それ途中でぬけます?
処理時間が微妙に増える恐怖が襲ってきました
理屈じゃないですw
- 条件で除外して行く様な処理はdo while(0)で書くね。
単純なif文では間に処理が挟まると書けなくなる。
スコープ明示して可読性上げる目的でも有効な手法
do {
if (除外条件1) break;
:
if (除外条件2) break;
:
if (除外条件3) break;
// 全条件を満たした
}while(0);
- >>448
なるへそ!
- >>448
do while(0) は目から鱗。
今まで goto で頑張ってたのが必要が無くなった。
これで gotoを全廃できそうだ……
- >>448はCなんかのバッチ処理のmain関数でよく使う手ですね。
途中の処理で落ちたらbreakで抜けて異常終了とか。
- XCodeでentityを追加する時に押すボタンのように、
スライダーの左にボタンを起きたいのですが、
どうやればいいのでしょうか?
- ごめん。なんで while( 1 ) や for ( ; ; ) でなく do while(0); なの?
do while() 句は、長文になったとき抜け出す while 条件の見通し(今回は while(0) だけど)が悪くなってしまうから、ループでの使用順位として低い位置にあるとおもう。普通に while(1) {}; でいいと思うのだけど。
- while(1) や for(;;) は無限ループだけど、
do{ ...} while(0); は一回だけ実行。
{ ... } とほとんどかわらないけど、break で脱出出来るということを使っている。
- >>454
>do{ ...} while(0);
複数行のマクロでよくみるけどこんな使い方もあるんだな
- >>454
なるほど、それは便利かも。今度使ってみよう。
しかしほとんどCocoaと関係ないww
- Cocoaからアプリケーションの「パッケージ内容を表示」するには?
NSWorkspaceだとアプリケーション自体が表示されて
パッケージ内を開いてくれません。
- 多分用意されてないと思う
ちなみにパッケージ内を見せる別の方法として NSSavePanel で setTreatsFilePackagesAsDirectories:YES するってのはある
- 質問です。
cocoaの隠しAPI、NSBoomって何に使うのですか?
- >>459
BoomというSteveの声にあわせてExposeが動く。
- >>457
NSString *path = @"/Applications/Safari.app/Contents/Info.plist";
BOOL flag = [[NSWorkspace sharedWorkspace] selectFile:path
inFileViewerRootedAtPath:nil];
無理矢理だけど、これで/Safari.app/Contents/が開く。
- >>458
ないですか、残念。
>>461
パッケージ内にあるフォルダなら普通に開けるんですよね
NSString *path = @"/Applications/Safari.app/Contents";
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:path];
- >>450
gotoの替わりに使ったりしないで、使いたい時はgotoでいいんじゃない?
はっきりラベルで行き先が明示されている方が可読性も良いと思うし。
breakで抜けるループが1重ならいいけど多重になってたりするとわけ解らなく
なりやすいよ。
- NSTableViewで40行程度の表示をしようとしています。
Tableの大きさは8行程度でその部分は表示できているのですが、
縦スクロールバーが機能してくれません。
どのように設定すれば、スクロールバーとTableの中身が同期するのでしょうか?
- >>464
インターフェースビルダーで作ったら何もしなくても
自動でスクロールがきくはずだけど。
配置したところでインスペクタを開いて、
何回かクリックしていたら順に
スクロールビュー、テーブルビュー、テーブルカラムの順に設定出来るので
そのへん確認してください。
- >>464
スクロールをOFFにしてない?
TableViewを作り直した方が早いかもしれない。
- TableViewを作り直しても、うまく行きません。。。
どこかの僕が勝手にいじってしまう可能性もあるので、今回設定したのは
Scroll View AttributeのShow Horizontal Scrollerのチェックを外した。
Table Headerに文字を入れた。
Table Column attributeで各Columnのidentifierを設定した。
だけなのですが、まず縦のスクロールバー自体が表示されません。
(Automatically Hide Scrollerはチェックしていないのに、Hide状態になっています)。
一体何がどうなっているのでしょう?
- >>467
それは面妖な。
IBで実行した時点でスクロールバーが消えてますか?
- >>468さん
IBの時点でバーの矢印と青い丸は表示されていません。
そこで縦スクロールバーをクリックして、
Scroller attributeをEnableにすると、矢印は出ますがやはり青丸は出ません。
その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
さらにアプリ起動中にスクロールバーをクリックすると青丸が出現します。
しかしその青丸をスライドさせても、TableViewの中身は変わりません。
現状こんな具合でさっぱりです orz
- - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
の実装はどうよ??
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 8;
}
とかって事はないだお??
- あるいはデータソースを呼び出すメソッド名を間違えてるとか。
デリゲートとか、非形式プロトコルだとそーゆー場合はエラーでないよ。
- すいません、訂正です。
>その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
この行は、「矢印有り青丸無し」の間違いでした。
>>470さん
TableViewをいっぱいに広げると下の方まで表示されているので、
その二つのメソッドに問題は無いと思います。
データソースを呼び出すメソッドとは何でしょうか?
僕はIBでTableViewからdataSourceに青線を繋ぐ方法で呼び出してるつもりです。
- >>470
データソースが空でもスクロールバーは表示されると思うけどね。
こんな症状は初めて聞いたかも知れない。
- これからCocoaアプリに初挑戦する者です。
アプリケーションを設計前ってところなんですが・・・
MVCモデルに照らすとコントローラの数と言うのはひとつのアプリにひとつに
するべきなんでしょうか?
それとも、スレッド数分とする方が良いのか、いくつあろうと構わないもの
なんでしょうか?
- >>474
コントローラの数は、1アプリにつき1つにする必要もないし、スレッドに関係する訳でもありません。
コントローラの数は、アプリケーションの規模によります。
小規模なアプリなら、1つで足りるかもしれません。大規模なアプリなら、複数必要になるでしょう。
- 端的に言うと山盛り一杯?
一口にコントローラって言っても色々有ったりします。
これどうぞ。
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/AppArchitecture/
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/
「Cocoaのデザインパターン」の「Model-View-Controllerデザインパターン」
- お、デベロッパページの日本語化がだいぶ進んできた?
て、フレーム内の「リファレンス」が全部リンク切れw
- >>472
XCode のバージョンと OS のバージョンは?
とりあえず XCode の最新版を再インストールしてみるのはどうでしょう。
それはあきらかに IB の挙動がおかしいとおもう。
最低限症状が出るプロジェクトをかためてアップローダにおいてください。
こっちでチェックできるので。
- nibファイルが壊れてるとかね
挙動がおかしいときは別フォーマットで保存で治ることもある
- ファイルやフォルダのアクセス権の変更ってできますでしょうか…
AppleScriptからUNIXコマンド実行しないと無理?
- あ、てかNSTaskで実行すればいいのかw
- NSFileManagerでなんかなかったっけ?
- >>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 です。
よろしくお願いします。
- >>483
listManagerが無いのにdataSource繋げるからいかんのか
IBのdataSourceリンクを外して、
listManager = [[ListManager alloc] init];
のあとに
setDataSource
すればおk
- こんばんは。
>>452
ですがクラス名など分かりましたら教えてほしいです
- >>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メソッドが呼ばれるタイミングの問題じゃないかな。
- >>486
ていうか IB で listManager を実体化して
(Objectのアイコンをライブラリからドラッグ&ドロップして、
インスペクタでクラスを ListManager に変更)
しまえば、awakeFromNib とのタイミングとの問題もなくなると思うし、
コードも二三行短くなるかな...
- おお、あっという間に様々な解答が!
タイミングの問題だったのですね。自分だけで考えてたらわからなかったと思います。
皆さんありがとうございました。
今は484さんのコードにして、ちゃんと動いております。
- >>488
listManagerは、そのアプリケーションの中で、モデルという位置づけにあるように見えるので、>>486の言う通りinitの中で生成するのが正攻法だと思います。
awakeFromNibは、基本的にnib内のオブジェクトを初期化するコードを書きます。
nibファイル内には、通常モデルは配置しません。
- データソースはコントローラだとおもうんだけど。
だから nib 内で作っても問題ない... と言ってみる
- >>490
ソースを見ると分かる通り、AppControllerがNSTableViewのデータソースです。
もちろんこのプロジェクトは単なるサンプルでしょうから、本来の構造がどうあるべきかは分かりませんが、
どっちかというとlistManagerはモデルだと思われます。
コードを短くしたいならこの場合、AppControllerとlistManagerを合体させてしまえばいいんですが、それが目的ではないでしょう。
- -(void)mouseDown:(NSEvent*)evを実装したいんですが、
ただXコードで書いただけではなにも反応がありませんでした。・・・当たり前ですけど。
で該当するViewのデリゲートにコントローラを登録してみたのですが、
これもだめでした。
どうすればいいのでしょうか?
- >>492
NSViewから派生させたクラスで、mouseDownメソッドをオーバライドしたってこと?
なら、IBで、ウインドウにCustomView貼って、クラス名を変更すれば動くはず。
カスタムコントロールについては、
ttp://www.stripe-net.jp/cocoa/documents/chapter2/chapter2-1.html
が分かりやすかったです。
- Cocoa applicationのテンプレートで作成されたMainMenu.xibの
File's owrnerとapplicationの違いは何ですか?
どちらのdelegateにクラスを接続してもNSApplicationのデリゲートとして動く。
優先度がapplicationの方が高いだけで同じ?
- 意味は違うけど、ものは同じ。
両方に違うオブジェクトをdelegateにすると多分、
File's Ownerが最後にsetDelegate:されると思うから、
File's OwnerのDelegateが最終的にNSAppのdelegateになるんじゃないかな?
あれ?
File's Ownerが一番最後と決まってるのはawakeFromNibだけだったっけ?
- 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の呼び出され順序が入れ替わった
- >>494
MainMenu.xibに限っていうならば、ApplicationとFile's Ownerは、同一のオブジェクトです。
- >>493
返信非常に遅くなり申し訳ございません。
何とかNSViewに貼り付けることで右クリック操作によるコンテキストメニューの
表示に成功させることが出来ました。
ここで気になるのはこれは、レスポンダーチェーンが関わっているのでしょうか?
またそこで今度はNSTableViewで選択行を右クリック→コンテキストメニュー→削除
を実現させようとトライしたのですが、
この際NSTableViewコントローラにmyTableViewを貼り付けました。
右クリックでコンテキストメニューは表示させることができるのですが、
行が選択できません。
データソースは別のモデルmyTableViewDataSourceで用意しています。
myTableViewを貼り付けなければ行が選択できるのですが・・・・
それだと右クリックしたときコンテキストビューを表示させるのに
どうしたらいいのか分からないので・・・・
- >>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];
}
こんな感じで、右クリックした行を選択範囲に追加する。
- >>499
最終的な目的は選択した行を削除することにあります。
そこでコンテキストメニューの項目で「削除」をクリックすれば
選択されている行を削除しようとがんばっています。
IBでMenuをコネクトすればいいとのことですが、
menuとコントローラを接続できずに断念しました。
- >>499
右クリックしたときに
選択できるようになりました。
これを左クリックしたときに選択できるように自分でやってみます。
- >>499
できました。
ありがとうございます。
- 質問です。
XMLの解析で
<entry>
<title>TITLE</title>
<link rel="REL" type="TYPE" href="HREF"/>
</entry>
の場合、linkのrel,type,hrefの値を取るにはどうすればよろしいでしょうか?
titleの取り方はわかったのですが。
- うは、前にネタ書いた時の名前が残ってるw
すいません、ネタではなく真面目な質問です。
お恥ずかしい限りで・・・
- >>499
selectRow:byExtendingSelection:はもうダメだべ。
selectRowIndexes:byExtendingSelectionに換えるべ。
- どこがネタなんだろうと悩んでしまったじゃないか...w
- >>503
>>459の人かw
- >>503
titleはどうやって取り出しましたか?
- >>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"]);
}
}
- cocoa事始めで
ボタンクリックで、Hellow Worldウィンドウを出すことすらできない。
どこかで似たようなチュートリアルありませんか?
- Cocoa事始めってどこ?
- 事始めて→今年初めて
じゃない?
- ・・・
- たのCocoLeopardじゃないか?
あの本最初ボタンクリックでHello World出すところから始まるし。
永遠にHellow Worldウィンドウは出ないと思うけどな。
- 揚げ足を取りたくてたまらない私
- 意味の無い書き込みは見てて不快
発言するなら書く、そうでないならROMっててください
勘違いなレスを見かけた時もそうです
- そうですね。
>>510さん、ボタンを押すと新たに画面を表示させたいのでしょうか?
- 返事を待つのもだるいので、そうだとして仮定して質問に答えると
まずIBのほうで
NSWindowのVisibleのチェックをはずしてください。
そこで新たにモデルのほうで
IBOutlet NSWindow* newWindow; //こいつはIBで該当Windowと結ぶ
- (IBAction)openWindow:(id)sender
{
[newWindow makeKeyAndOrderFront:self];
}
これで一発ででるはず。
- >>516
オマエモナー
- >>519
王道なんだが、ちょっとは自重しろw
- >>519
私のレスはあなたに対する明確な意志表示があります
あなたとは違うんです
- キモチワルイ
- >>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にキャストって大丈夫なんですかね?
エラーもワーニングも出なかったもので。
- あ、重ねてすみません。
attrHref = [[elemLink attributeForName:@"href"] stringValue];
はゴミです。
- 初歩的なことかもしれないのですが
日本語が含まれるNSArrayをNSLogで表示させたときに
ユニコード値が出てくるのはどうにもならないのですか?
- >>522
お前のレスが一番キモチワルイよw
>>525
過去ログにあるよ
- Safariのダウンロード画面に出てくるインジケータみたいに
後ろに流れて行くようなインジケータバーを表示させたいのですが、
NSIndicatorではその「後ろに流れて行く」表示が設定できませんでした。
なにか他のクラスがあったりするのですか?
それともNSIndicatorの設定の問題でしょうか?
- >>527
後ろに流れていくというのがアニメーションのことなら、startAnimation:とstopAnimation:を使う。
Binding使うと自動でやってくれたと思う。
- すいません、NSIndicatorじゃなくてNSProgressIndicatorでした。
やりたいのはdeterminate progress barを増やしつつ、後ろに流れて行く表示なんです。
startAnimationはIndeterminateだけですよね?
Safariのダウンロード表示なんかはそうなっているので、出来なくはないと思っているのですが
どうなのでしょう?
- >>529
Determinateなら値が設定されていれば勝手にアニメーションしてると思うけど。
あれ、これ10.5だけなのかな?
- こだわる必要性をさほど感じない部分ではあるな
- NSTimerの
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
メソッドを別のスレッドを建てて、そのスレッドで起動させようとしたら撃沈されました。
上記のメソッドは呼び出されると実行ループに登録してすぐに終了しちゃうんですね。
そのおかげで子スレッドも終了しちゃいます。
まぁわざわざ別スレッド上で起動させる必要もないんですが、
解決策ってありますか?
- >>532
timerWith...のほうで作ってNSRunLoopのmainRunLoopにaddTimer…したら駄目だってリファレンスに書いてあった。
- >>532
ん、ひょっとしてスレッド内でTimerを使うってことかな。なら自分でRunLoop作ればいいよ。
- >>526
過去ログ漁って
NSLog(@"%@", [NSString stringWithCString:[[array description] UTF8String] encoding:NSNonLossyASCIIStringEncoding]);
でいけました。
- >>533-534
すばやい回答ありがとうございます。
>>スレッド内でTimerを使うってことかな
子スレッド上でTimerを使おうと画策しました。
ただこいつは時期が来るまで眠っていてくれるから
そんな必要性はほとんどないんですけどね。
自分でRunLoopを作ってそこに登録せよってことでしょうか?
- >>536
うん。そもそもscheduledTimerなんちゃらって、Timer作ってカレントのRunLoopに登録するものだから。
でもTimer使うためだけにRunLoop回すくらいなら、NSThreadでsleepUntilDateすればいいんじゃないかな。
- >>537
なるほど休眠させるという手もありますね。
実はその辺悩ましいところなんです。
ただプログラムは同じ動作が得られるなら簡単な方でという原則に従うなら
まちがいなく休眠させておいたほうがいいですよね。
わざわざ実行ループをみずから作成するよりは・・・・・・
- むしろスレッド内でNSTimerを使う意味は何も無い気がする。
- 自分が作成しているのはシュミレーションモデルなんですよね。
だから
その部分はメインと切り離して、動作させないとモデルに忠実にならないっていうジレンマがあるんです。
ただプログラム内部でそんなことをする必要性があるのかっていうと
僕には分からないです。
ありますかね?一応大学の卒論なんですが・・・・教授に相談するべきなんでしょうか?
- 卒論でCocoaで提出していいのか...羨ましいな。
- そんなわけがない・・・・・。
- setUsesThreadedAnimation:
じゃダメなの?
- Cocoaで
「マウスカーソルを任意の座標に持って行き」
「そこで右クリックする」
ということをソフトウェアからコントロールすることは可能でしょうか?
NSEvent あたりのリファレンスを調べましたが,それらしいメソッドが見つかりませんでした。
Leopard の Automator で「操作の記録」をして再生すると,このようなマウスイベントの再現ができているので,
方法がないわけではないと思うのですが…。Automator はどうやって実現しているのでしょうか…。
- >>540
>>541,542を見て「え、だめなんですか」とか言う前に
学校で使っているパソコンのOSがMacOS Xであることを確認しといて。
それ以外だったらだめ。
- それ以外でもだめなことないだろ。
プレゼンできればいいし、プログラムそのものを提出するんじゃなくてそれについての卒論でしょうよ。
- >>544
プログラムで「自動的に」
マウスを任意の位置まで持って行き右クリックさせるプログラムを作ろうとしているのですか?
イベント処理はNSResponderで定義されているとか・・・そんなことは聞いてないんですよね。?
- まさか>>544は>>492,498と同一人物じゃあるまいな。
- >>492,498は>>547です・・・・・私です。
えーそれならって思って・・・
- >>549
目的は>>500なんでしょ?
もはややり方が回りくどすぎて意味不明になってるよ。
世の中のCocoaアプリがコンテクストメニュー一つ出すのにそんな回りくどいコード書いてるわけないのは分かるでしょ。
だったら方法が間違ってることも分かるでしょ。
そこで方法を質問しないで、自分が考えたトンデモ解決法を実現しようとして、その過程で行き詰まって質問したところで
まともなアプリは出来ないよ。
- んで>>500ね。
menuとコントローラを繋げない…とあるけどコントローラにはすでに削除の処理を実装したアクションメソッドがあるのね?
ならNSMenuItemからコントローラにアクションを繋げればいいよ。コントロールキー押しながらドラッグね。
- >>544
void rightClicOn(CGPoint mouseLocationFromTopLeft)
{
CGWarpMouseCursorPosition(mouseLocationFromTopLeft);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, true);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, false);
}
こんなんで逝けるハズ・・・。
- うはっ、関数名の綴り間違ってる。
- >>550
勘違いされています。
544さんは私ではありません。
自分もイベント処理で苦しんだので、もしかて544さんも
同じように右クリックしたいのかなと思っただけです。
- 参考にと今見させていただいたんですが、
QuartzのAPIですか・・・・
どうやったらそんな所まで扱えるようになるんですか?
cocoaでアップアップです。
- >>552
なんでCocoaは左下でCoreGrapchics?は左上なんだろ。統一してくれりゃいいのに。
変換関数とかってあるのかな?
- ビットマップ画像扱う場合必然的にCoreGraphics使う事になるよ
- >>552
ありがとうございます!
ID:2N5XkSrD0 さんの質問内容と似ていたために,混乱させてしまった人がいたようですみません。
私がやりたかったのは,AppleScript からの右クリックなのですが,これで可能になりました。
AppleScript では,tell application "System Events" で,キーストロークや左クリックのイベントは送信できるのですが,
右クリックだけは手段が用意されておらず,control + 左クリック を送信しても再現できずに困っていたのです。
CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これで,右クリックからしか呼び出せないアプリの機能を使用する,アプリ操作自動化スクリプトが作れそうです。
- つうかそもそもコンテクストメニューからしか呼び出せないコマンドを持った
アプリなんてそんなにないんじゃ...
- >>540
とりあえず、趣味レーションじゃなくて、シミュレーション、な。
- >>558
>CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
>それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これってなんか面白いプロセス間通信じゃない?
もしかしてマウスイベントってこうやって外のプロセスから勝手に発生できる?
ログインしているユーザと同じユーザIDである必要はあるのかな。
- >>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 を扱ってどうにかなるものでしょうか?
- >>559
iTunesにはコンテクストメニューからしか呼べないコマンドかなりあるぞ。
- >>556
描画環境については原点左下で統一されてます。
>>552はデバイス上での座標です。ややこしいですな。
それよりも、CocoaとCoreGraphicsとで
微妙に挙動が違うとか、マジ勘弁。
- >>562
Coral使えばいいじゃん。
http://hmdt.jp/coral/index.html
- 荻原剛志さんの『詳解 Objective-C 2.0』を購入したのですが、
手元にある同じ荻原さんの『Objective-C Mac OS X プログラミング』は
処分してしまっても大丈夫ですか?
- 好きにするがよろし
- >>558
AppleScriptでdo shell scriptするならNSTask使えば良くね?
てかコマンドラインツール作らなくてもCGPostMouseEvent()って普通にカーボン?ならそのままコード書けば良くね?
と思った。
あんまちゃんと読んでないんで的外れだったらスマソ。
- >>566
新しい奴では分散オブジェクトのとことか前のものから省略されてる部分が
あるけど、それでもいいなら捨てればよろし。
- >>565
そんな便利なものがあったとは……!
>>568
いえ,そういうことではなくて,元々AppleScriptがメインで,AppleScriptで色んなアプリを自動操作しているスクリプト中において,
右クリックを自動化したい場合に,do shell script で CGPostMouseEvent() を呼び出すコマンドラインツールを呼び出す,という話です。
- >>570
AppleScriptがメインなわけね
>>544でCocoaでって書いてあるから勘違いした
- >>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から呼び出す方法をとったわけです。
- >>569
ありがとうございます。
自分で判断がつくまではおいておくことにします。
- Objective-C / Cocoaで、
http://mac.hitobashira.org/up/src/maka0123.png
このように、非同期の処理が終わる間、呼び出し元のメソッドAを待機させたいのですが、
方法はあるのでしょうか…
- performSelectorOnMainThread:withObject:waitUntilDone:を使う。
- >>574
メソッドの実行に同期・非同期はあるけど(分散オブジェクトかマルチスレッド(>>575)の場合)
メソッドが他の処理をトリガーして、その処理が非同期の場合はもちろん方法はない。
クラスによっては、同期処理と非同期処理のメソッドを分けているものもある。NSURLConnectionの
sendSynchronousRequest:returningResponse:error:と
connectionWithRequest:delegate:のように。
だから実際に何をやりたいのか書くと調べられるかも。
- メソッドを分けたり条件式を足したりすることで実現できそうだけどなぁ
引数の問題はあるけど例えばメソッドAを分けたり、
待機の部分をなんらかのループにしておいて別スレッドのやつにループを抜ける条件を成立させたり
まぁ後者はうまいことやらないとループの間パワー使いまくるからアレだけど
(false)でスレッドをスリープさせて起きたらgotoとかで戻ってまた条件式をチェックして
(true)なら以降の処理へ、とかだったらいけるんじゃない?
で、やはり>>576さんの言う通り、もうちょっと具体的な話しがないとみんな答えにくいと思う
- >>577
それってフツーに条件付きロックじゃないの?
- >>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:]を行っても表示に反映されないみたいで…
- >>579
>確かに負荷が心配ですね。
うーん、リアルで条件付きロックを知らないのか? じゃあちょっとコードを書いてみる。
実は pthread しか使ったことがなかったのだが、インターネットのヤホーで検索したら
ココアにはコソディショソロックというのがあることを発見したのでちょっと調べてみました。
初めて使うので間違ってたらごめんね。
なお、ココアのUIまわりは基本、スレッドセーフじゃないみたいなので、それは別途注意。
うーん、でもなんかちょっと違う気がする。まあいいや。
- 改行が多いと言われるので、ほんとは一個のファイルなんだけど分けます。
#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
- 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 でよろしく。
- >>580-582
ありがとうございますm(_ _)m
こんな便利なのがあったんですか…、助かりました。
- >>579
もしかしてtableView:willDisplayCell:forTableColumn:row:で指定されたNSCellをそのまま保持して、
後で画像を設定しようとしたのではないですか?
NSTableViewのCellはしょっちゅうコピーされるので、このメソッドで渡されたCellと実際に表示に使われるCellが
同じインスタンスとは限らないんです。
私だったら、そもそもそういう戦略をとりません。NSImageをインスタンス変数に持つモデルを作成し、
それを格納したNSArrayをNSTableViewにBindingします。
webView:didFinishLoadForFrame:が呼ばれたら該当するモデルのNSImageをsetしてやれば自動で表示も変わります。
表示が必要な部分だけ読み込みを行いたいならば、この場合もtableView:willDisplayCell:forTableColumn:row:を
受け取って該当するモデルのみ読み込ませる必要はあるかと思いますけどね。
WebVIewの読み込みが極端に遅かったりした場合にフリーズ同然の状態になるようでは使ってられません。
- メモリーリークーを静的解析するツールはないのでしょうか?
メモリーリークーだけまともにできない静的解析ツールならあるらしいのですが
- >>585
解析しなくてもコード書くときに気づけ
- >>585
http://clang.llvm.org/StaticAnalysis.html
使ったこと無いので、詳細不明。
エロイ人のレポ期待。
- >>579
NSTableViewの行に指定したURLから取ってきた画像を表示させたいのですかね?
でしたら、>>584で指摘されているやり方でWebViewを使わずに、NSURLConnectionで
非同期にデータを取得してNSImageを作成することもできます。
NSURLConnection (非同期) [1]
http://www.geekpage.jp/programming/macosX-network/NSURLConnection-async-1.php
- >>584
Cellではなく、TableViewにbindingですか…、なるほど。
>>588
画像そのものでしたら、それで良いのですが、
WebViewで表示したhtmlのスクリーンショット(dataWithPDFInsideRect)を表示させたいと考えています。
- 知り合いのソースコード見てたら
NSLogデバッグで告白文が書かれていて笑ってしまった。
- >>590
で、付き合うの?付き合わないの?
え?違うって?
- ウホッ
- >>585
チャラララン♪
ドラえもん「メモリーリークー」
- よく見ておくがいい、プログラマが告白(confess)をするというのは、こういうことだ!
NSLog(@"Error at %s line %d", __FILE__, __LINE___);
笑っていただけたでしょうか。
- UNIX板でその手のスレッドがいつもそれなりの頻度で立ってるな。
確認してないけどクリスマスに向けてまた立ったんじゃないかな?w
- >>595
クリスマス前はビンビンだな
- たのココ読んで頑張っています。
質問させてください。
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
どのように解決していけばよいでしょうか?
宜しければ教えてください。
- ___
/_ノ ::::ヽ、_\
ミ ミ ミ o゚<●>:::::::<●>゚o ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) マカがwwww
| / / / |r┬-| | (⌒)/ / / //
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||l
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
- >>597
IBはどこもいじってないわけだよね?
後、たのココのどの部分を読んでいるのかとか、Xコードのバージョンとかも書いてもらえないですか?
もしかしたら再度インストールしたほうがいいかもしれない。
- >>597
検索で
/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings
そしたらあなたと同じように最初にビルドした際にこんなエラーが出たって言う悩みがいっぱい出てあったよ。
- レスありがとうございます。
IBは思い当たるような設定変更はしていません。
ただ、気になるのは以前にiPhoneのSDKをインストールしているので、
デフォルトとは言い切れません。
たのココはRSS Readerのサンプルを作っています。
本に載っていたサンプルコードを一気に書き上げて、
ビルドしたら上記のエラーが発生しました。
おかしいな、と思って切り分けのために
全く新規に空のプロジェクトを作って見ても同じエラーが
発生したので、異常を感じて調べていたところです。
バージョンは3.1.1 です
コンポーネントのバージョン
Xcode IDE: 1115.0
Xcode Core: 1114.0
ToolSupport: 1102.0
- そうですか。とりあえず、自分でも調べるけど、
2ちゃんねるに投げておけば、誰かが調べてくれる。ということで
書いていたんですね。
- >>597
全く同じ質問がされている。
http://www.mailinglistarchive.com/xcode-users@lists.apple.com/msg13520.html
2番目の回答ではインストールし直せとかかいてあるけど、
一度全部読んでみて。
- >>600
ありがとうございます。
copystrings などで検索してたので上手く引っかけれてませんでした。
しばらく読んでみます。
- 完全に私の検索スキルの低さが原因だったようです。
あっという間に解決しました。
簡単に説明しますとエラーが発生している copystrings でrubyが
使用されているのですがそのパスが /usr/bin/ruby 固定でした。
私は macports でrubyをインストールしていたので パスが違うのが
原因でした。
シンボリックリンクを /usr/bin/ruby において解決です。
なんだか皆さんの気分を害されたら申し訳ないです。
- >>605
http://www.digitalsanctum.com/2008/10/04/xcode-cant-exec-developerlibraryxcodeplug-inscorebuildtasksxcplugincontentsresourcescopystrings-no-such-file-or-directory/
上記のサイトですね。
最初コレを見つけたんですけど、rubyなんて使ってないだろうと思って・・
解決してよかったです。
- macports って ruby をいれると /usr/bin/ruby が削除されるの?
そんな無茶苦茶な。
- 世の中にはPATH環境変数ってのがあってだなry)
- う~ん、でも、copystrings のスクリプトの先頭は #!/usr/bin/ruby に
なっているので、PATH 環境変数の問題では無い気が...
わかってなくてすみません。
- この場合、PATHは関係ないね。
それよりも、/usr/bin/rubyが無いのが異常に気になる。
macportsの所為では無いと思うんだけど・・・。
- MacPorts で Ruby 入れる
↓
$PATHの関係で /usr/bin 以下のRubyが起動される
↓
むきー
↓
sudo rm /usr/bin/ruby
と予測
- >>612
オヤスミ…
<⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
- x-codeで
printf("\n")で改行させたいんですが、どうすればいいですか?
一応エンコーディングはshift_jissでコトエリで バックスラッシュを¥になるように設定しています。
バックスラッシュ+n では改行できるんですよね・・・・・・。
- バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
あくまで C の規格的には、バックスラッシュ+n が改行。
Shift-JIS でそれが円記号+n に見えるのは、
Shift-JIS ではバックスラッシュの「値」をもつ記号が
円記号のように「表示される」というきまり。
日本語ウィンドウズだとパス名に円記号がいっぱいはいってるけど、
英語ウィンドウズだとそれが全部バックスラッシュになります。
しかしユニコードではバックスラッシュと円記号はちがう文字です。
日本語 Mac で昔標準だった MacJapanese もバックスラッシュと
円記号はちがう文字です。というわけで、悪い事は言わないから
バックスラッシュと円記号を混同するのはやめたほうがいいです。
まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
円記号に見えないのはなんか変な気がしますね
- Cocoaでprintfなんぞ使った事は無いが。
- >>614
>まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
>円記号に見えないのはなんか変な気がしますね
え? 円記号に見えるでしょ。
もしかして CP932 (日本語 (Windows, DOS)) と勘違いしてない?
>バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
- >>614
ものすごく参考になりました。
その辺、ちょっと調べてみます。
ただwikiをみると何のことかさっぱりで・・・:・・。
- >>617
OS 9時代、7ビットASCIIの一部は表示文字を各国が自由に指定できた。
バックスラッシュがその一例で、日本のフォントやPCメーカーは
バックスラッシュの代わりによく使う円マークを表示するように設計した。
データ的にはバックスラッシュと同じなんで¥nでも問題がなかった。
OS XになってからはUnicodeを使うようになった。
こいつはバックスラッシュと半角円が別々に定義された。
ゆえにデータ的に見ても別物だから¥nは使えなくなった。
こんな感じでおk?
- OS 9時代と表現に違和感が。
つーか、MacJapaneseではちゃんと区別してたよ。
- >>618
本当にありがとうございます。
wikiしかりいろんなサイトを見回ってunicode等調べたのですが、
なかなかバックスラッシュが使えたり、使えなかったり
¥マークが制御文字になったりならなかったりする理由を見つけることができませんでした。
でもおかげさまで明確に理由がわかりました。ありがとうございます!
- >>616
XCode 3.1.2 で Shift-JIS (Windows, DOS でなくて) にしても
円記号にみえないよ... むむむ。
- つまり日本が悪いってことだね?
- >>621
MacにMSゴシックやメイリオを入れても円マークはバックスラッシュになっちゃうんだよね。
- 0x5Cの字形がバックスラッシュか円記号かはフォント依存の問題。
Unicodeではバックスラッシュ(U+005C)と円記号(0+00A5)は別。
- >>613
option+\でよい?
- >>624
>0x5Cの字形が
フォントのグリフを語る際に、
文字コードを指定せずに 0x5C の字形が、っていっても意味がなくない?
ユニコードでひとつコードを決めると、
グリフは(芸術性をのぞいて)決まってるべきだけど。
あと、シフトJIS の規格って、よく知らないんですが、
各コードのグリフ形状まで指定してないんですか?
指定してるとすると、 0x5C をシフトJIS で表示するときは、
どんなフォントをつかってるにしても、グリフはバックスラッシュでなくて
円記号のグリフを使うべきだと思うんだけど。
- >>621
1. 0x5cを含むファイルを作成。
2. Xcode の環境設定でフォントのデフォルトを全てMonaco、エンコーディングのデフォルトを
「日本語(Shift JIS)」にする。
3. Xcode の「開く...」で1.で作ったファイルを開く。
で、円記号が見えるけどな、自分とこでは。
>>623
Vistaから(ピー)してきたメイリオではU+005Cを円記号で表示するけど。自分のとこでは。
MSゴシックは確かMacのOfficeに付いてくるのとWindows純正ので違ったような気が。
- >>626
そもそも1Bbyteコードって
シフトJISの定義域ではない。
シフトJISを使用するときに
1Byteコード領域は概ねJIS X0201を使う事が多いだけ。
X0201には標準字形は定義されているが
ビットマップ時代の制定だから、グリフの概念がない。
大体、漢字を16Dotで表現するのにグリフなんて考えすらないよ。
- NSString→NSStringへの文字コード変換ってどうんな感じでやればいいんでしょうか…
- >>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 はバックスラッシュのグリフで表示されて(ことが多い)、
こっちの方が純粋というか素直なような。
- >>629
NSString は(実装はともかくとして)
常に Unicode で文字列を格納していると思うべきです。
そこから char* として取り出すときに encoding を指定して取り出す、
そこに char* からデータをいれるときに encoding を指定して入れる。
+[NSString stringWithCString: encoding:]
と
-[NSString cStringUsingEncoding:]
を参照。
- ふんふん。
やっぱ、間に一発C文字列への変換が必要という事か…
ほいでまたNSStringに戻すと。
- >>632
> やっぱ、間に一発C文字列への変換が必要という事か…
> ほいでまたNSStringに戻すと。
ようするに、NSStringからNSStringへの文字コード変換は、無意味という事なのだが。
629はその辺、分かってるのかな?
- 多分
>そこに char* からデータをいれるときに encoding を指定して入れる。
で指定したエンコーディングになると思ってるんだろう。
俺もわかってないんだが要するにcStringUsingEncoding:
でC文字列が何でエンコードされているかを判断するってことだろ?
- なんか勘違いしてる…
NSStringに入れた時点で内部的にはUnicodeに統一される
だからNSStringとして操作する上では、
char型に取り出したり、ファイルと入出力するような場面以外に
文字コードを意識することはないし、
NSString間の文字コード変換ってのもできない(ありえない)よ
- そういうならまずはcStringUsingEncoding:の正しい使い方から教えてくれや
- ドキュメント読め。
何のためのドキュメントなんだ。
http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFStrings/introCFStrings.html
http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/introStrings.html
- Objective-Cってもっとシンプルに書けるようにならないかな
Dictionaryも dic[key] = value; とか書ければなぁ
KVCの場合は若干気持ち悪いかもしれん
C++でWrapしてみるか...
- >>638
C++だったら連想配列といわず、行列の積なんかもシンプルに書けるよね。C++万歳!
そのぶん言語自体が激しくシンプルじゃないのは皆さんご存知の通りですがw
C++で wrap って、key や value には Objective-C のオブジェクトを入れるの?
だったら You 最初から STL 使っちゃいなよw
- .netを趣味でやっていたものとして言わせていただければ
Objective-cは最高だと思う。
なんたって無料で全ての機能を提供してくれているし。
知れば知るほど奥の深さに魅了されてしまう。
- objcつかcocoaはコードがだらだら長くなって見づらくなるのが難点。
入力も面倒になってくる。
- 確かに名前空間を使用したプログラミング言語に比べてそこが一番の欠点だよな。
覚えきれん・・・・・・・。
それに一字でも間違ってたらもうアウトなわけだから
デリゲートメソッドとか悲惨。
エラーどころか警告すら出ないんだから。
- delegate method は確かに悲惨だよね。
でもそれ以外は XCode なら入力補助があるから
別に長くても問題なくない?
長いメソッド名だから半分強制的にコメントかかされているみたいなものなのも
半年後に自分のプログラムを読むときに案外役に立ってる気がする。
最近はすっかり汚染されてしまって、
自前のオブジェクトのメソッド名もすごい長くして
英語の文章として読めるようにしている。
- でもVisual.NETしていた人間にとってはX-codeの入力補助なんて糞。
まぁ僕みたいな凡人でトーシローのことですけど・・・・
皆さんは満足ですか?
あの入力補助で・・・・・。
ものすごく邪魔になることも多いんですが。
- VCの入力補完も糞じゃね?
C#やVBなららくちんだろうけど。
- 入力補完なんてふつうOFFだろ。鬱陶しい。
>>640
Objective-cに限らずgccは普通に全ての機能を無料で提供だろ。
- こんぱいらはね
- >>639
もちろんメインはSTLやboostで書いているけどUI周りがねー。
- >>648
だったら UI は PowerPlant でしょ。え、Cocoa Binding? Core なんちゃら? 何のことですか?
ソースがあるから頑張ればこれからも Mac OS X に追随できる (かも)。
ま、CodeWarrior に付いていたコードは Leopard でコンパイルすると deprecated 警告の嵐で引くけどw
オープンになった方はそこら辺改良されてたり... しないか。
- 弘法は筆を選ばず
- ん?
誰か俺を呼んだ?
- 工房は筆を下ろさず
- 俺のアプリは「made with simple text」のロゴが入ってるよ。
- SimpleTextじゃぁ自慢にならんよ。
自慢したいんならedでコーディングしてなんぼ
- そんなの何の自慢にもならんだろ。
自己満足以外の何ものでもない。
- WebKitを使ったプログラムでFlashプレイヤーのプラグインを使用すると
コンソールに「Debugger() was called!」と出力されますね。
Flashプレイヤー9の時は出なかったのですが、10に上げたら出るようになった感じ。
非常にうざったいです。
- 若干スレチ気味だけどデータの型からサンプルコードではない正式な使い方を記した文章を知る事は出来ないの?
使いたいAPIの引数にHogeHogeRefみたいのがあったときに、
どうやったらそれを作れるのかがsee alsoで書いてくれたり
HogeHogeRef自身が詳細へのリンクになってたりすると楽なのに。
例えばリファレンスでAPIの引数にCodecTypeって見つけて、
確かにリンクにはなってるんだけど、飛んでも
typedef OSType CodecType;
とだけしか書かれてないとか。
型の詳細もだけど、どんな値を入れたらいいのか知りたいんだよ!と。
- ReferenceじゃなくてProgramming Guideを読めばおk
- QT関連は複雑な上にドキュメント不足は否めん。
QT7で追加されたAPIとかになると悲惨。
- ココア(←なぜか変換できない)
- Xcode3.1.2なんですがボタン上の文字のフォントを変えるにはInterface Builderのどこをいじればいいんでしょうか。設定が見つからないですorz
- >>661
IBでボタンを選択して、FontメニューからShow Fonts。
普通のアプリと同じ。
- >>661
ていうかフォントを変えるな。
ほかに非標準のフォントをつかったボタンがあるソフトがありますか?
独自性とかいってかえれば良いってもんじゃありません。
- >>662
ありがとございます。
ボタンはできましたが、NSBoxのラベル部分が変わらないなあ。
>>663
やっぱり変えないほうがMacらしいんですかね。Cocoaの本読んでるんですがLeopardになってからかNSBoxのラベル部分の文字が薄くて読みにくい感じがしてBoldにしてみようかなと。
- >>664
NSBoxはIBからじゃ変えられないですね。
setTitleFont:するしかなさそうです。
- >>665
ありがとございます。試してみます。
- つうか、GUIのフォントってデフォルトから変えていいのか?
ガイドライン的に。
- スマソ、スクロール足りてなかったorz
- 自分で使う分には構わないだろ。
人様に使わせるのはどうかと思うが。
- >>667
システム環境設定→ユニバーサルアクセス
- 萩原剛志さんの本はプログラミング初心者には難しいと聞いたのですが
C言語の基礎を知ってる程度では、やはり難しいでしょうか?
「詳解 Objective-C 2.0」を買おうかと思っています
- >>671
メモリ管理の話とか、オブジェクト指向の話とか、例外処理とかある程度知ってな
いと読むのつらいと思う。
でもまあ齧った程度でも知ってるのならばなんとかなる。
つーかおれはなった。
- >>672
C言語のこと以外は全く知らないのでやめときます
別の本を探します
- Objective-Cに他の本はあるの?
- >>671
その本は、Objective-Cを多少知ってないと辛いと思うよ
たのCocoあたりから読むと良いと思います。
- たのココは語尾がムカツク
- あの口調はネットだから許される。
紙媒体では無理。
- >>676
それは、確かにw
内容は良いのに残念なんだぜ!
- 日本語前提でHMDT系じゃない本で情報がup-to-dateなものはこれくらいしか思いつかないなあ...
作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全
http://www.amazon.co.jp/exec/obidos/ASIN/4048676075/
執筆はPeopleに連載持ってる柴田さん。
- 参考書無しのネットだけでここまで来たぜ!
で、自作の電卓が動かないんですけど。
- >>680
デバッグしる。
- sourceforgeに上げようぜ
- 質問です。
入力された文字列が数字のみかどうかのチェックをしたいのですが、
よろしいのでしょうか?
NSTextField上でも入力された後の処理でもかまいません。
よろしくお願いします。
- formatterを使えばいいのではないか。
- お手軽な入力フィルタだったら
NSTextFieldのサブクラスで
textView:shouldChangeTextInRanges:replacementStrings:
を実装すれば逝けると思います。
- 具体的にプログラムを作るって話になると木下本読まないと厳しいが、
Obj-Cについてもう少し知ろうとすると、萩原本は必須になるとおもうよ。
柴田本は昔のはあれだった印象があるが、今のは使えるのか>詳しい人
- >>683
よろしいのでしょうか?
でふいた
- >>686
本屋で立ち読みした限りでは買う価値は依然としてない。
>>679の本はわからんが、多分、アレだろう。
柴田って古いMac OSとか絶滅したAppleIIとか古い話ばかりでいい加減消えて欲しい。
昔はBeOSの本とか出してたな。もう新しい技術についていけないお払い箱ライター。
- 俺の同僚がcocoaアプリケーションチュートリアルだけで
目的とするプログラムを書き上げていた。
そいつは、
プロパティどころか、アクセッサメソッドすら理解していなかったけど・・・・・。
それどころかメソッドの書き方も分かってなかった。
もちろん起動しなかったけど、あれだけであそこまで完成させていたのには
ちょっと驚いた。
- >>689
起動しないのに完成させたとは?
- >>689
チュートリアルだけ呼んで、動きもしないプログラムを書くぐらいなら君にも出来るさ
- >>691
さすがに芸人を呼ぶのは難しいだろw
- >>689の言いたいことはわかるぞ。わかる。
- >>689
起動しなきゃ理解してないってことじゃん。
それって単にオブジェクト指向プログラミングのテクニックを知ってるってだけじゃないの?
- >>692
お前キングコング並みに寒いぞ
- >>695
ザ・パンチに失礼
- ウンコ連中によるM-1敗者イジリがスタートしたな
- ↑西野乙
- Appleのサンプルコードに下のような方法で値を返してるのがあるんだけど、
xxxRef系って実装はObj-Cのオブジェクトなの?
ていうかCから扱うためにあるんだろうに、勝手にGCされちゃうわけ?
HogeHogeRef func() {
HogeHogeRef r;
// ... rの作成
return (HogeHogeRef)[(id)r autorelease];
}
- トールフリーブリッジ(toll-free bridge)といいます。
クラスによってはキャストだけでどっちにも使えます。
GCは使ってないから分かりません。
- >>699
逆で、Obj-Cのオブジェクトの実装がxxxRef。…の場合が多い。
http://journal.mycom.co.jp/column/objc/038/index.html
- 「勝手に」GCされたりはしないだろ。
- CoreFoundationのCF~RefとFoundationのNS~ではtoll-free bridgeのものが多くあります。
しかしだからといって、それ以外の~Refも同等のObj-Cのオブジェクトがあるとは思うべきではありません。
基本的にはそれぞれの適切な関数で解放すべきです。
- CFなんたらって何ですか?
怖くてNSなんたらしか使ったことないんですが。
ネットで拾って参考にしてるコードでもコピペでしか使ったことないですw
- >>704
>CFなんたら
Core Foundationでそ
- >>703
CFTypeRefの関数が使えるものならNSCFTypeRefが面倒見てくれますよ。
- NSって何の略でそか?
- NextStep
- >>707
No Skin
- 500とかRとか付いたり
- >>710
中古でしか手に入らん上にえらい高いんじゃw
あと50も思い出してあげて。
- ありがとうございました。
Toll-Free Bridgeというものがあって、いくつかそれに準拠しているわけですね。
ある型がToll-Free Bridgeかというかどいうのはどこかに明記されているのでしょうか。
それとも調べるしかないのでしょうか。
- >>711
確かに、50が一番最後まで残ってたわけだし、一番いろんなモデルがあったしね。
- >>714
リファレンスの最初の方に載ってる。例えばNsStringの項目をみると、CFStringとキャストするだけでおk、と書いてある。
toll-freeで検索するといいよ。
- アンカーミス、>>711です
- NSStringにclassnameかけるとNSCFStringが返ってきたりするね。
- そんなことわざわざしてみたりするんだ・・・・
でもNSArrayとかに最後にnil入れ忘れたりすると、
NSCFArrayエラーとかになるよね。
やっぱりnilはCFとの互換性のために必要なんだろうか。
- nil無いと個数が判らんだろ。
- >717
可変引数の使い方知らない?
- NSほげが実際にはCFほげを呼んでたりする、というのはそれでいいとして
おもしろいことにCFのフレームワークの中にNSほげのメソッドの実体が入ってたりする(Leoprad 限定)。
なんでそんなことをしているのか興味深いし、そもそも中の人がフレームワークをビルドするときに
どうやって依存性を解決しているのかもちょっと不思議だったりする。
- あー可変引数の関係か。
そうかメソッドだもんな。あんまりメッソドって意識がなくなっていた。そっか。
文字列定数とかだったら最後にnullを書く必要とかないでしょ。とか言う感覚でいってしまった・・・ORZ。
- 「たのしいCocoa」読みました
なんていうか、ラーメンズが出てたMacのCM思い出しました
レスくれた方ありがとうございました
- NSArrayControllerが持ってるcontentArrayの追加/削除された差分が欲しいんだけど、
arrangedObjectsやcontentへのbind:/addObserver:だと配列丸ごとしか受け取れないっす。
差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
それとbind:するしか無いですか?
というか何故NSArrayControllerは差分(NSKeyValueChangeInsertionとか)を
送ってくれないですか?
- >>723
間にNSArrayControllerを入れずに、ViewとModelを直接バインドする。
- >>724
どうもです。
ModelがNSMutableArrayを持ってるわけじゃなくて、
そのModelがNSMutableArrayの中に入ってて、その数の増減をobserveしたいんです。
要するに
> 差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
> それとbind:するしか無いですか?
ですよね?(カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装)
このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしか
いないので、こいつがNSKeyValueChangeInsertionを通知してくれれば助かるんですが、
してくれないんですよね?
- >>725
MVCパターンにおいては、Modelコンポーネントは1つです。たとえ、それが複数のクラスで構成されていたとしても。
今回のケースは、Modelの内部に配列を含んでいるという話なのでは?
> このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしかいない
NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?
> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
これをModelとして実装すればよいのではないかと思います。
まあ、あえてこの機能をControler側に実装するなら、NSArrayControllerのサブクラスを作ることになりそうですが。
- >>683です。
>>684-685
ありがとうございます。自己解決できたのでお役にたてればと。
// 数字以外のキャラクターセット
NSCharacterSet *decimalInvertSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
// 上記セットがあるか
NSRange rng = [string rangeOfCharacterFromSet:decimalInvertSet];
if(rng.length > 0){
// 数字以外が含まれている
}else{
// 数字のみ
}
- >>723
NSArrayControllerのcontextがCoreDataなら
NSManagedObjectContextObjectsDidChangeNotificationで
NSInsertedObjectsKey、NSUpdatedObjectsKey、NSDeletedObjectsKey等でわかるかもしれません。
NSArrayControllerのみでもいけるのかな?
詳しくはググって見て下さい。
- 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 の使い方に何かこつがあるのでしょうか?
どなたかご存知の方いらっしゃいましたらどうかお教え下さい。
- >>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ではないです。
- 連投すいません。>>723です。
例えばNSTableColumnは NSArrayController.arrangedObjects.modelKeyとbindすると
model.modelKeyをその分だけ表示しますが...
このNSTableColumnのようにmodelの数だけ何かを表示する
カスタムビューを作るのを想定してくれると、やりたいことをわかってもらえるでしょうか?
この時NSArrayControllerは差分を送って来ないので、
カスタムビューは自分で差分取らなきゃいけない、これが差分だけ追加/削除できたら
ありがたいのに、