- 前スレ
Cocoaはさっぱり!!! version.11
http://pc11.2ch.net/test/read.cgi/mac/1224960170/
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/
- 関連追加
iPod touch/iPhone ネイティブアプリ製作 ver.8
http://pc11.2ch.net/test/read.cgi/mac/1231156968/
Objective-C [ObjC part:3];
http://pc11.2ch.net/test/read.cgi/tech/1186543111/
- Web
Cocoa wiki
http://cocoawiki.aerial.st/index.php?FrontPage
ADC
http://developer.apple.com/jp/
CocoaDevCentral
http://cocoadevcentral.com/
CocoaDev
http://cocoadev.com/
Cocoa Blogs
http://cocoablogs.com/
Cocoaはやっぱり!
http://www.big.or.jp/~crane/cocoa/
HMDT
http://homepage.mac.com/mkino2/
OOMORI.com - Cocoaリファレンス
http://www.oomori.com/cocoafw/
Cocoa Study Blog
http://blog.cocoa-study.com/
Cocoa Break!
http://park15.wakwak.com/~concordia/cocoa_break/index.html
Cocoa Bindings Examples and Hints
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html
Cocoaで遊ぼう!!
http://homepage.mac.com/t_yamane/prog/index.html
itok's Lab
http://110k.net/
Vacuous Virtuoso
http://lipidity.com/
MOSA テクニカルドキュメント
http://www.mosa.gr.jp/?page_id=19
- >>1
(・ω・`)乙 これは乙じゃなくてポニーテールなんだからね!
- >>1
ポニーテール!
- ,,,,,,_
,,,,,iiiilllllllllllllliii,,,,
,,,,,_ .,,,,,,,,,,iiiiiiillllllllllllllllllllllllllllllllllll丶
゙llllllllliiillllllllllllllllllllllll!!!!llllllllllllllllllllllll!!゙
゙!llllllllllllllllllll!!!゙゙゙° ,,illllllllllllllllllll!゙゜
゙!lllllll!!l゙゙’ .,,illlllllllllllllll!!゙゜
^ .,,illllllll 山
,,illlllll iiiiiiiiiiiir
,,illllllllヽoOOO''o_-
,,illlllllll( <:::::::乙::::::::>ヽ
,,illllllllll!/ ,|:::::::::::::::::|ヽ ゝ
,,illllllllll!゙ ,< )ヽ,━━./ ( / liiii,,
,,illllllll!゙゜ ,lヽ i /::::::::::::::ヽ i .r 'llllllli,,
,,illllllll!゙ !!|;;;;;;;;;;;;;;;;;;;;| !!, lllllllllli,,
,illlllllll゙ |::::::::∧::::::::| ,lllllllllllllii,
llllllllllli,_ .|::::::::| |::::::::| ,,,,illlllllllllllllllli, こ、これは>>1乙じゃなくて
!llllllllllllllliiiiiiiiiiiiii,,,|::::::::| |::::::::|llllllllllllllllllllllllllll 瞬獄殺なんだから
゙゙!!llllllllllllllllllllllllll|::::::::|. |::::::::|lllllllllllllllllllllllll 変な勘違いしないでよね!
゙゙゙゙!!!!!!llllll_ ノ;;;;;;;;r. |::::::::レ_lll!!!!!!!l゙゙゙゜
'ーー" "ーー'
あと、ヘボい質問なんですがcocoaアプリから別のアプリを実行した時にそのアプリがアクティブになりますよね?
その後、元のcocoaアプリをアクティブにしたいのですがどうしたらよいのでしょうか…
- 自己解決しました(´・ω・`)
スレ汚してすんません…
- 解決方法はどんなときでも晒しといた方が
同じ問題にぶち当たった人のためになると思う
- そろそろ確定申告の事を考えないといかん時期だな。
- 盛大に誤爆ったorz
- MORINAGAの人?
- ここにいる方々は、普段どんな仕事をしてるんですか?
- 底辺プログラマ
- 他人の書いたプログラムの虫取り(´;ω;`)
- ぶっちゃけ今はiPhoneぐらいだもんね。飯の種は。
cocoaで便利なアプリを作っても金を出してまで買ってくれる人はそんなにいなさそう。
- Cocoaでエロゲつくればドザが釣れるかも試練
- あんなもん画像に合わせて音とテキスト流してるだけだから
作ろうと思えばすぐに作れるだろうな。
- CoreAnimationまわりのフレームワーク使ったらかなり楽に作れる気はする。
紙芝居的なシロモノだが。
- >>19
Flashでええやん、紙芝居ならw
もうすっかり忘れちまったよObjC
- >>20
よく考えたら、Windowsのエロゲ程度ならFlashで
作れそうだよな。
- Cocoaで書けばAppstoreで金儲け
- 日本のエロゲー文化が世界に進出する瞬間だな。
- >>22,23
エロが入るかどうかは知らんが
MOONSTONEがiPod touch/iPhone版Giftを開発中らしい。
が、去年の最初の発表以降情報がないようで(´・ω・`)
- あなたの時は止まったままですか?
とっくに出てるみたいだけど>Gift
- http://www.moon-stone.jp/index2.html
2009.01.13 Gift iPhone/iPod touch版発売!!
- >>25,26
なんと!
MOONSTONEは積極的だな。
そのうち冗談抜きでMac版が来そうだw
でもその前にGiftの製品ページ更新しようよ(´・ω・`)
- iPhoneアプリをマックアプリに移植なんて簡単でしょ
- なら、Macに移植する仕事すれば儲かるんじゃね?
- アップルがMacAppStoreを始めればいいのに
- 携帯以外のプラットフォームで
ぽっと出の会社が出しても赤字にならないソフトって
そもそもあるか?
- MoonStoneなんて、25年待ったって出やしねぇよ!
- なぜ25年なのか気になる
- 石の上にも25年
- XcodeでVisual Studioみたいに例外が投げられた時点で自動的にブレークするにはどうしたらいいですか?
- スルー&キャッチ
- スルーじゃなくてスローですよね。
でもそれだと、どこから飛んできたかが分からないのですが。
- スローで投げるオブジェクトで区別したら良いじゃん。
- それって大きなプログラムのどこで飛ばしているか、誰が飛ばしているか(自分が発行していない場合もあり得る)
が、分からない状態だと手当たり次第にprintfを挟むのと大して違いがないと思うのですが。
質問の答えとしては「自動的にはブレークできない」ということなんですかね。
- スローしたら自動的にキャッチに飛ぶわけだから・・・
キャッチがループ外にあれば、自動的にブレイクするでしょ。
まぁキャッチそのものの定義がループ内にあったらブレイクしないけどね。
明示的にブレイクする必要はある。
- 40だけど、自分で言っててなんだけど、
キャッチをループ内に定義するなんてありえないよね・・・・?やるの?
それにどこから飛んできたか分からないっていうなら
dictionaryを放り投げれば良いじゃん。
キーでどこから投げたのかとかいろいろ情報を区別できるんだから。
- んーと、イベントとか読み書きとか不確定要素が多くて
どこで起きてるか、何が飛んでくるか分からない場合に
少ない手順で発生源を知る方法はないという事ですよね?
極端な話、存在しうる全ての例外を知っていたところで
main()
{
try{
func();
}catch(e_a & e){
}catch(e_b & e){
}catch(e_c & e){
...
...
...
}
}
って全部羅列してられないですし、補足できてもbad_allocみたいな一般的なものだったら
どこで起きてるか全く分からないですし、
例外が起きる行を絞り込んでいって、その行にブレークポイントを置かないと
例外が起きている状態のコールスタックと変数は分からないわけで。
- 連投すみません。
dictionaryをどこに設置するかをどうやって決めるのですか?
-
http://wwwa.dcns.ne.jp/~nito/CocoaClub/article05.html
例外の生成
Objective-Cにおける例外の生成は、NSExceptionのオブジェクトにより行われます。
以下の例では、resultが-1だった時に、@"FooException"という名前を持つ例外をあげています。
- (void)foo
{
if (result == -1) {
[[NSException exceptionWithName:@"FooException"
reason:@"Result returned -1.."
userInfo:nil]
raise];
}
}
この例から類推できるように、CocoaのObjective-C環境における例外クラスはNSExceptionだけで、
Javaがさまざまなサブクラスによって例外を区別しているのとは、趣が違います。
どの例外があがったかを知るには、NSExceptionに設定された例外名などの情報を判定する必要があります。
システムであらかじめ定義された例外名には、以下のものをはじめいろいろあるので、
判定にはそれを使うこともできます。また、自分で例外名を定義する場合は、
頭に"NS"をつけるのは止めましょう。
- >>42
44でuserInfoにdictionaryを設置する。
-
45は全然、43の答えではないな。
43は具体的にどういうこと?
- dictionaryの設置箇所が分かっているなら既に当たりを付けた後じゃないかなと。
無論、最初から全ての箇所でdictionaryを投げるように書いておけばいいんでしょうけど。
あと、C++を使う事の方が多いので42ではbad_allocと書きましたが
NSExceptionにしたってシステムが出す例外は場所の特定がしづらいですよね。
-
システム自体が出す例外ってかなり特殊ですよね・・・・。
僕もこいつらがどんな例外情報を送ってれるのかしらないけど、
nameとかresonとかだけでは特定できないのかな?
- 流れがよく分からんが、-[NSException raise]にブレークポイントを設定するんじゃ駄目なの?
- !!
- >>49
そんなクラスメソッドなんてあったけ?
raiseって例外を明示的に発生させるインスタンスメソッドだよね。
+ raise:format:
+ raise:format:arguments:
どちらかと勘違いされているのですか?
- >>51
…シンボリックブレークポイント使ったことないのかな?
(特定のクラスの)特定のメソッドが呼ばれたときにブレークするには、シンボリックブレークポイントの追加でこういう風に入力するの。
インスタンスメソッドなら-、クラスメソッドなら+。
- 今更過ぎですが>>49を呼んで試してみたらNSExceptionはobjc_exception_throwを呼んでいて、
こいつは__TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__を呼んでいて、
その中でint3(ブレーク)してますね。
つ、ついでにC++で自動的にブレークする方法も分かったりしないでしょうか?
スレ違いかな。
- メニューの[実行]->[ブレークポイントを管理]->[C++ 例外のブレークポイントを追加]ダイアログで
[すべての例外]というチェックボックスがありました。
大変お騒がせし、スレを汚してしまい申し訳ありませんでした。
でもこの一連の流れのおかげでNSExceptionとXcodeの理解が深まりました。
- >>52
へぇー、今度試してみます。
cocoa referenceで
breakはインスタンスメソッドで例外にジャンプするってあったから
なんでクラスに対してメッセージを送信するんだろうって思いました。
それならクラスメソッドの以下のメソッドじゃないのかって・・・・。
- 55、breakじゃなくてraiseですね。
これクラスにいっぺん送ってみます・・・・。
質問主さんは解決されたみたいだけど、僕は?????状態っす。
- >>55,56
あ、いやこれメソッドの実行じゃないのよ。
特定の関数とか特定のメソッドを呼び出したところでブレークするために、
自分で書いたソースコードの行とかじゃなくて、関数名やメソッド名そのものをブレークポイントとして使うの。
「実行」>「ブレークポイントを管理」>「シンボリックブレークポイントを追加」して、ダイアログに入れる内容が>>49。
デバッガとしては多分そのメソッドの名前、クラス、クラスメソッドかインスタンスメソッドかどうか、の情報があればいい。
それを指定するための文法が>>49みたいになってるってだけで、Obj-Cの文法とは別。
ていうかXcodeのマニュアルちゃんと読もうぜ皆。
- >>57さん、ありがとう。
そうなのか。
結構ブレイクポイント使用するけど、そこまで考えたこと無いわ。
で、その回答で質問主さんが解決された意図がわかりました。
デバック目的で例外処理を利用しようとしていたんですね。?
それで、スローで投げてきても「発生源がわからない」、これなんとかならんのか?
42のように細かく書かんといかんのか?ってことになっていって
で、>>49で「いやブレークポイントを設定すれば、エラー発生時にどこでエラー発生しているか
わかるでしょって」ことで
>>50で解決したのか・・・・・・・・・・・・・・・・。
そうですよね?
- いえ、多分最初の理解で合ってるんじゃないかと思います。
デバッグのために今から例外投げるプログラムを書くのであれば
printfを挟むのに感覚が近いですがそうではなくて、
もともとあるプログラムのどこからか例外が投げられた時に
そこで止まってくれないかな、というのが元々の発想です。
で、NSExceptionは特別な事をしなくても勝手に止まってくれるようになっていましたので
多分-[NSException raise]をブレークポイントに追加しなくてもいいはずです。
C++は>>54をONにする事で勝手に止まるように出来ました。
- >>58が発生源が分からないエラーの発生場所を特定するという理解
をしていただいたのであれば、その通りです。
- なんだこのグダグダな流れ...
>>57
>ていうかXcodeのマニュアルちゃんと読もうぜ皆。
そういう自分も Leopard 上のマニュアル(リリースノート)を読んだ方がいいな。
Leopard を使ってないなら仕方ないかもしれんが。
- >>61
-[NSException raise]だと@throwで投げた例外はキャッチされないからobjc_exception_throw使えってことか。
サンクス。
- 久しぶりにCocoaを触ってCoreDataとか新しく追加されたAppkitとか触ったら
昔何日も徹夜して作ったようなものがコード一行もなしに動いて
秋葉原で涙する元KGBスパイみたいな気分になった。
- Key pathとかkey-value observing面白そうだけど何しているのかいまいちしっくりこない。
これあえて自分で使う事ってあるのかな?
- 同じようなことを実現するだけなら自前でももっと簡単なやり方があるだろうけど
大枠をbindingで作ってる場合、細かくいじる必要がある自作クラスを
key-value-coding準拠で作っておけば、全体のbindingの連携に組み込めるという話
- なんとなく分かったような気がします。でも自分の書いているどんな処理をあえてそれに
当てはめた方がよいかと考えるとあまり思いつきませんけど。理解しなければCocoa
プログラミングできないというものでもなさそうなのでしばらくはスルーしておいても
良さそうですね。
- bindingで一番効果が発揮するのはtableViewかな。
ぶっちゃけIBだけでコーディングできるし。
これを知ったとき、あのデータソースをつかって、
どうやって目的のセルに値を表示させることが出来るのか格闘していた自分が
惨めにおもえた。
このときの経験は、後々すごく役にたったけど。
- 便利だけど確かBinding、ていうかNSArrayControllerがスレッドセーフじゃないから困ったこともあるなぁ
あと、いろいろ自動でやってくれる新しいAPIって便利だけど重いんだよなぁ
- たしかに、間に余分な物をはさむ分遅くなるしね。
- ところでみんなNSArrayとSTL、どういう使い分けしてる?
STL一切使わずNSArrayをサブクラス化して使ってるとか参考までに色々言ってみて。
- >>70
STLってなに?
- >>71
リーゼントのorz
- S: すばらしきかな
T: テンプレート
L: ライブラリーよ!
- >>70
>STL一切使わずNSArrayをサブクラス化して使ってるとか参考までに色々言ってみて。
NSArray をサブクラス、とか言っている時点で Objective-C の素人さんですね。
http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_9.html
の Class Cluster の説明を読みましょう。
NSArray は配列の性質によって alloc init の結果が違うクラスになるのを
隠蔽しているので、知らずにサブクラスをするとおかしくなります。
だから機能を追加したいときはカテゴリを使います。
http://journal.mycom.co.jp/column/objc/032/index.html
http://jay.tuley.name/archives/2006/03/08/Class-Clusters
http://borkware.com/rants/agentm/collection-subclassing/
あたり参照。
Cocoa の Foundation のコレクションクラス一般の C++ 等との違いは
http://ridiculousfish.com/blog/?p=27
が詳しい。STL と NSArray の比較もあるよ。
- >>74
機能というより異なるインスタンス変数をそれぞれ持たせたければサブクラス化するしかないんでないの?
↓以下Aを持つArrayA Class , Bを持つArrayB Class というように。
//A
typedef struct {
float y;
float x;
float z;
} float3;
//B
typedef struct {
int vert0,vert1,vert2;
}
カテゴリで追加する手法ならうちもfirstObject程度はやってるけど、それだともちろんNSArrayとしか振る舞わないからね。
NeXTやってた頃はBigNumberとかExtentとかST80近似に作ってprimitiveもNSArrayに入れるようにしてたけど、今はSTLあるからね・・
みんなどう工夫してるのか知りたかったのさ。
- >>75
NSArrayはid型のものを入れるのにしか使わないから、どうしてもそういう構造体とか基本型入れるんなら
NSValue使って入れてる。この場合NSArrayのサブクラスは必要ないよね。
NSArrayを使わないんならCの配列やそのSTLとかいうので間に合うでしょ。
どっちの場合もNSArrayのサブクラスは必要ないと思うんだけど。
- それは失礼。こちらは日曜プログラマなので
C / C++ のオブジェクトなら STL,
Obj-C のオブジェクトなら NSArray で済ませてました。
そういう純粋 struct を NSArray (もしくはそのサブクラス)
にいれる利点はほとんどないんでは?
逆に id を STL にいれると retain カウントがおかしくなるのでどうしようと
おもっていて、これを機にしらべてみたら
http://lists.apple.com/archives/cocoa-dev/2008/Mar/msg01649.html
なんてのがありました。賢い。
- >>76-77
>NSArrayのサブクラスは必要ないと思うんだけど
もちろん大抵はそうだよね。
ただtraverseでパフォーマンスを得なければならない場合が極稀にあるもので・・
そういう場合はid型じゃ困るんよ。
id型で済むのであればNSValueなりNSNumber、あるいはNSObjectから派生させたものを突っ込めばいいし、機能はカテゴリで増やせばいいってことなんだけどさ。
STLはvector<set<int> >とかとっても有り難いんだけど、set間の論理演算がないから書かなきゃいけないとか不満な所はそれなりにあるよ。
NSArray系は集合を扱うものがなかったと思うのでこれらもちょっと。
ま・・問題点とかというよりも普段みんなどんな使い分けをしてるか参考にしてみたい。
- >>78
集合は普通NSArrayじゃなくてNSSetを使うよね?
パフォーマンスを得たい場合には直接配列をいじればいい。使い分けつってもそれくらいしか思いつかないな。
- >>79
NSSetがあるとは知らなかった
あとでちょっと使ってみる。
ただ集合扱うのにNSArrayをset的に~って話ではないんだよ、もちろん。
- おれもどうしてもパフォーマンスが欲しけりゃCで書くよ。
たとえば>>75にあるようなのはCで書くし、Cocoaでもシビアなところはそうしてる。
たとえばNSFontのgetBoundingRects:forGlyphs:count:は構造体配列を渡すようになってるでしょ。
- NSCodingプロトコルのencodeWithCoderっていつ呼び出されるんですか?
- >>82
NSCoderが何をする物かを理解すれば分かると思うよ。
- >>83
その回答でわかりました。
- NSNotification と KVO についての質問です。単純にある値を監視したい
とき、どっちの方が軽い処理なんでしょう?例えば単純に、Hoge の
インスタンス変数 BOOL foo を監視するような場合です。
Notification 使う場合は NSNotification を作ったり、通知対象を探すのに
時間かかりそうかなぁ?と思っているので、KVOの方が軽そうな印象を
持っているのですが。詳しい方、お教えください。
- setterをトラップするだけだから、observingに一票。
- >>86
あ、やっぱりそう思われます?こんな場面でパフォーマンス稼ごうという気に
なっている訳ではないのですが…何か気になって(笑
どうもありがとうございました。
- NSMutableDictionaryのsetValueとsetObjectってどう違うのでしょうか?
自作のPGではsetValueとvalueForKey、setObjectとobjectForKeyのペアで
どちらを使用してもうまく動くのですが。
- >>88
両方同じとリファレンスに書いてある。
以前は、setObjectとobjectForKeyしかなかったが、10.3でKVCのサポートが強化されたときにsetValueとvalueForKeyが追加された。
- >>88
>どちらを使用してもうまく動く
100%同じ挙動と思うと落とし穴あるぞ。NS(Mutable)Dictinaryのドキュメントよく読んだ方がいい度
- >>89
>両方同じ
[hoge setObject:nil forKey:@"uge"];→例外発生
[hoge setValue:nil forKey:@"uge"];→[hoge removeObjectForKey:@"uge"];
- setNilValueForKey:
setValueForUndefinedKey:
とかもみるといいも。
- >>88です。
大変良くわかりました。ありがとうございます。
nilが入る可能性がある場合はとりあえずsetValueの方が良いのですね。
- >>93
>nilが入る可能性がある場合はとりあえずsetValueの方が良いのですね。
違います。それだと値として nil を設定したい場合に setValue では、エントリが
削除されてしまうので、できないでしょ。ドキュメントではこの場合には
NSNullを使え、とあります。その辺りもちゃんと理解した方が良いかと。
nil が入る可能性うんぬん、ではなくエントリを削除したい場合に、
removeObjectForKey: のつもりで setValue:nil forKey:key を使うのです。
とりあえず NSMutableDictionry を理解し、そのKVCを理解するまでは、
setObject:forKey:を使う事をお勧めします。
- なるほど、それではsetObjectを使うことにします。
- receiver となる instance の変数名を文字列で得てNSLogに表示したいのですが、
ivar_getName というのを使うのでしょうか? どうやるのでしょうか?
- >>96
やったことはないけど、objc2.0のリファレンスを見た感じでは。
Class class = [receiver class];
で、クラスオブジェクトを取得してから、
unsigned int outCount;
IVar* ivars = class_copyIvarList(class, &outCount);
で、インスタンス変数の配列を取得して、
char* name = ivar_getName(ivars[0]);
で、C文字列形式の変数名を取得する。
といったところかな。
- >>88
>>93
でもいい質問だよ。
時間あったらKeyValueCodingについても調べてみてね。いずれsetValue:forKey:、valueForKey:をがんがん使うことになると思うよ
- reference見れば,同じことがマンマ書かれているぞ。
- >>99
書いてあってもどうせ見る気ないんだろうから
レスしてやるだけ無駄だと思うぞ。
リファレンスに書いてあるような事をわざわざ質問してくるような馬鹿は
放置でいいと思うんだが、みんな優しいなぁと。
- おまえもおれもな
- じゃあおれも
- いやいや。俺も入れてくれよ。
- みんな最初は馬鹿だった
- 最初は人に聞く前に調べるもんだ
- >1
今気付いたけど、次が抜けてるな。
>初心者は教えてくれる方への感謝を忘れずに。
>上級者も初心者だった頃の気持ちを忘れずに。
- >>97 さん ありがとうございます。
[receiver receiverName] とやると'receiver'が得られる様な簡単な方法あると便利なんですが。
- >>105
最近は自分で調べるのがマンドクセー時代なんだよきっと
- 同時に人を育てようとしない時代とも言える。
>>106の気持ちが大切。
- >>107
それって、receiverのクラス名が欲しいってこと?
NSStringFromClass([receiver class]);
- >>110
>>107はローカル変数名が欲しいんじゃないかという悪寒がする。
デバッガ使えってことじゃね?
- 何のためにどのように使うのかワカンネから誰も的確な答えは出来ないでしょ
自分のインスタンス変数とかなら
#define HOGE_NAME(v) ##v
printf("%s --> %d\n", HOGE_NAME(foo) , foo);
でもいいし。
- >>107 です。すみません。ローカルなインスタンス変数をデバッグの一環として
リストアップしてモニタしたいという時に、その変数の値と同時に、その名前も表示
できたら便利だと思ったのです。>>111 >>112 さんのおっしゃる意図です。>>112
の方法を知りませんでした。試してみます。必要なヘッダファイル等あるのでしょうか?
- 普通にデバッガで見られるじゃん。
- どうやるのでしょうか?参考になるキーワードは何でひくと良いでしょう。
初歩的な問題なんですね。すみません。
- >>115
まさかXcodeで「デバッガ」を使ったことがないというのか?
デバッガだぞ。デパ地下じゃなくてデバッガ。
- Cプリプロセッサの#だな。
char* rn=#変数名;
まあ、デバッガの使い方覚えたほうが百倍有益だが。
- >>106
私も初心者です
- 僕は小心者です
- 僕は小遊三です。
- 僕は小鳥遊です
- 僕は小円遊です
- 僕は円形ハゲです
- 僕はハゲです http://www.computerworld.jp/images/_main/200807/1143291.jpg
- /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
- 25にして前髪が気になりだした・・・・・
もう禿げを笑えない。
俺の前では誰も禿を馬鹿にさせない!
プログラマーって若禿の割合ってどれくらいなのかな?
皆さんの周りは大丈夫っすか?
- QTKitについて初学者なのですが,質問です。
勉強のため,コマンドラインから音楽ファイルを再生したいのですが,うまくいきません。
ttp://developer.apple.com/jp/technotes/tn2004/tn2138.htmlや
ttp://developer.apple.com/samplecode/QTKitCommandLine/index.htmlを
参考にこのようなものを書きました。
#import <QTKit/QTKit.h>
int main ()
{
NSError* movieError = nil;
QTMovie* movie;
NSString* filePath = nil;
filePath = @"/Users/mini/Desktop/sample.mp3";
NSLog(@"path = %@", filePath);
movie = [[QTMovie alloc] movieWithFile:filePath error:&movieError];
[movie setVolume:1.0];
[movie play];
[movie release];
}
でgcc -o study -g study.m -framework QTKit -framework Foundationのコンパイルは問題ありませんが,
./studyとしてもエラーを出して再生されません。
*** _NSAutoreleaseNoPool(): Object 0x11b500 of class __NSCFDate autoreleased with no pool in place - just leaking
Stack: (0x95bf665c 0x95b23810 0x95b67524 0x92d4e120 0x92d4e008 0x91ccaab4 0x91cc9010 0x91cdb0c8)
が10ぐらいでます。
*** -[QTMovie movieWithFile:error:]: unrecognized selector sent to instance 0x11cd60というのもあります。
よろしくおねがいします。
環境は10.5.6です
- [ movie release]を外せ
- #import <QTKit/QTKit.h>
BOOL didFinished = NO;
@interface Hoge : NSObject
@end
int main () {
NSError* movieError = nil;
QTMovie* movie;
NSString* filePath = nil;
filePath = @"/Users/mini/Desktop/sample.mp3";
NSLog(@"path = %@", filePath);
id pool = [[NSAutoreleasePool alloc] init];
id hoge = [[Hoge alloc] init];
movie = [QTMovie movieWithFile:filePath error:&movieError];
id nc = [NSNotificationCenter defaultCenter];
[nc addObserver:hoge selector:@selector(hoge:) name:QTMovieDidEndNotification object:movie];
[movie setVolume:1.0];
[movie play];
id ct = [NSThread currentThread];
while(!didFinished) [ct sleepForTimeInterval:0.1];
[pool release];
}
@implementation Hoge
- (id)hoge:(id)notification{ didFinished = YES;}
@end
コンパイルも何にもしてません。ランループ回してないからちゃんと動くかは不明。
- >127 のおかしな点
movie = [[QTMovie alloc] movieWithFile:filePath error:&movieError];
movieWithFile:error: はクラスメソッド。
さらにこのメソッドはNSAutoreleasePoolが居ないとだめです。
[movie release];
鳴らすためのものを捨てちゃダメでしょ。
鳴らしてる途中でツール自体を終了しちゃダメでしょ。
- あれ?
ごめん。
sleepForTimeInterval: はクラスメソッドだったわw
人の事言えねえwww
- >>128~131
どうもありがとうございます。
そもそも別のスレッドで再生する仕組みになっているとは知りませんでした。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSError* movieError = nil;
QTMovie* movie;
[pool addObject: movie];
NSString* filePath = nil;
filePath = @"sample.mp3";
movie = [[QTMovie alloc] initWithFile:filePath error:&movieError];
QTTime theTime = [movie duration];
NSValue* qtValue = [NSValue valueWithQTTime: theTime];
NSLog(@"%@", QTStringFromTime([qtValue QTTimeValue]));
[movie setVolume:1.0];
[movie play];
sleep(15);// 15秒程のサウンドファイルなので
[pool release];
と書き換えてみたところエラーがでなくなりました。
とはいえ再生が完全でない(初めの数秒しか再生されない)ので,
もう少し調べてから,お知恵を拝借したいと存じます。
- Movieの読み込みは非同期です。
再生前に、Movieがきちんと読み込み終わるまで待つ必要があります。
- [pool addObject:movie];
はおかしいですよ。その時点では movie にはいってるのはガラクタなので、
そんなのを登録してもだめです。alloc init のあとでしないと。
さらに、pool には普通自分で addObject しちゃだめです。
movie = [[QTMovie alloc] init...]
のあとに、
[movie autorelease]
とすると自動で適切な autorelease pool に登録してくれます。
あと、
QTTime theTime = [movie duration];
NSValue* qtValue = [NSValue valueWithQTTime: theTime];
NSLog(@"%@", QTStringFromTime([qtValue QTTimeValue]));
はなんか無駄な気がする。なんで NSValue につめてからまた取り出してるの?
単に QTStringFromTime(theTime) でいいのでは。
- #import <Cocoa/Cocoa.h>
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *path = @"/test.aif";
NSSound *sound = [[[NSSound alloc] initWithContentsOfFile:path byReference:YES] autorelease];
[sound play];
[NSThread sleepForTimeInterval:[sound duration]];
[pool drain];
と思ったらQTKitの勉強だったか、、吊ってくる
- QTKitってrunLoop回さなくていいの?
- NSMedataItemからファイルパスを取り出すのってどうやればいいの?
attributesの中にそれっぽいのがないんだけど
- int main () {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *path = @"/test.aif";
QTMovie *movie = [QTMovie movieWithFile:path error:nil];
[movie play];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:15]];
[pool drain];
return 0;
}
これでおk。くそ、コマンドラインってとこでハマったわ。
- >>137
ファイルのメタデータにファイルパスは入ってない
- >>139
どうもです。
じゃあNSMetadataQueryを使って検索した結果からファイルパスは得られないのかな?
- あれ、kMDItemPathってのがあるかも
それかQueryの方から得られると思う
昔作ったサンプルプロジェクトが見当たらなくて明確な回答ができません
- このへん読んで
http://developer.apple.com/technotes/tn2007/tn2192.html
- >>141-142
どうもありがとうございます。kMDItemPathで得ることができました。
-attributesで得られるキーの配列のなかにkMDItemPathは入ってなかったので・・・
- すみません。
このようなケースの場合、どのように組めば(調べれば)いいのか教えて下さい
(1) 2つのウィンドウA、Bがあり、それぞれ共通のアクションがある(例えばNSTableViewで選択したリストの情報を見るなど)
(2) メインメニューで(1)のアクションを起動するメニューアイテムを定義する(例えば「Show Info」など)
(3) (2)のメニューアイテムからアクティブなウィンドウの方のアクションを起動したい
(4) (2)のメニューアイテムでアクティブなウィンドウの方の状態((NSTableViewで選択されているかなど)から
enable/disableを設定したい
(1)でA、Bのウィンドウに対してコントロールするクラスA、Bを記述してインスタンス化、
それぞれのインスタンスA、Bにアクションが定義されています。
- とりあえずResponderChainとFirstResponderと調べてみ
- C の実数配列を4次元ベクトルと見立て、インスタンス変数として持ち、簡単なベクトル演算をメソッドに定義した
クラス V をNSObject を継承して作り、別途、ベクトル計算をするクラスを作ってクラス V インスタンス生成し利用
した後、このベクトルのインスタンス解放をする段でクラス V の dealloc が呼ばれると思います。
この クラス V での dealloc の実装は [super dealloc]; のみで良いのでしょうか?
- >>146
前レスでも話題になったけど、
基本的にはVクラスでallocして作成したインスタンスは
deallocで明示的にreleaseしておく。
- >>147は正確ではないな。
他のクラスを参照しているインスタンス変数をdeallocで明示的にreleaseだな。
なぜならVクラスが解放されても、参照されている他のクラス自身は分からないからね。
必要がなくなったにもかかわらず、ずっと保持されてしまうことになる。
そうすることでリークを起こす可能性もあるわけだし・・・・・今はそんなことは無いかな?
- V クラスでは、基本演算(四則演算等)メソッドのみなので、計算結果をVクラスインスタンで使うのは、
メソッドの引数と返り値のみです。実際の演算は、別途のクラス(Wとします)で、Vクラスのインスタンス
をallocで生成して行います。この場合、Wクラスで生成したVのインスタンスはreleaseするのは分かるん
ですが、そのとき呼ばれる V の dealloc は、演算メソッドで引数に使った自分自身のインスタンス変数や
メソッド返り値のみです。これらも [aVector release]; [rVector release]; みたいにして V の dealloc 中
に記述するのでしょうか? という意味です。
- >そのとき呼ばれる V の dealloc は、
>>演算メソッドで引数に使った自分自身のインスタンス変数やメソッド返り値のみです。
WクラスでVクラスをreleaseしたからってVクラスのdeallocが呼び出されるってわけでないけど、
Vクラスで他のクラスを参照しているインスタンス変数がないならば、
わざわざdeallocをオーバーライドして定義しておく必要なんてないんじゃない?
まぁ前スレでは基本的にはallocもしくはretainされたインスタンス変数はそこでreleaseして
参照カウンタを1減らしておくとかいう結論だったはず。
- >>146
クラスVはインスタンス変数に他のオブジェクトを持っていないんだから、dealloc時にreleaseするものがそもそもない。
可変長配列をmallocなんかで作ってるんならfreeとかを入れるだろうけどね。
- 皆さんありがとうございます。
クラスVは、インスタンス変数として、Cの実数変数だけしか持っておらず、他のクラスのオブジェクトは
無いし、メソッド実装に使われている引数、変数、返り値もやはりクラスV 以外のモノも無いので、dealloc
をオーバーライドする必要がないから、dealloc の記述は不要、という理解で良いのですね。
あと、ベクトルを表現するクラスVのような場合、メソッドの返り値はインスタンスのコピーを返す(渡す)
というのが適切という事でよいのでしょうか?
- C言語では配列を返す関数はないからね。
オブジェクティブ指向から考えても、それでいいと思う。
- ていうか4次元ベクトル固定なら構造体使えばいいじゃん。
俺は詳しくないけど、物理シミュレーションかなんかに使うならそういうベクトル演算のライブラリあるよね。
- ソース無いとなんのこっちゃなのかよくわからん
- >あと、ベクトルを表現するクラスVのような場合、メソッドの返り値はインスタンスのコピーを返す(渡す)
>というのが適切という事でよいのでしょうか?
ここいらがよく理解できてません。一応動くソースではあるのですが、心得がないせいで時折全く不明な
停止状態になります。もう少し勉強して出直します。ありがとうございました。少し頭が整理されました。
- Cocoaのクラスというかフレムーワークにはシェルのgetoptやrubyのoptparseみたいな
コマンドライン(オプション)パーサってありますか?
それともwhileつかって、従来通りがしがし書いていくしか無いのですか?
- getopt使えば良いじゃん
- >>157
NSArgumentDomain
が役に立つかな?
- >>147
その辺いまだに分からないんでリーク上等、autoreleaseに全部おまかせで作ってる。
newを発行したら+alloc , -initと呼ばれるよね。
alloc以外で領域確保する手段ってNSObject見ても書いてないし
それぞれのクラスがインスタンス生成用に作ってる+stringWithFormatとか
内部ではどうしてんだろね。
結局必ずalloc , initと通るなら同じ事なんだけどさ。
- >>160
+stringWithFormatとかの中身
+ (id)hoge
{
id result = [[Hoge alloc] init];
return [result autorelease];
}
- >>158
Cのgetopt_longを使ったコードに#import <Cocoa/Cocoa.h>
を書き足すだけで,コンパイル時にエラーになってしまうので,
なにかCocoa用のものがあるのかと思っていたのです。
structがいけないのか
- >>162
ヒントが足らんか?
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *dict = [[[NSUserDefaults standardUserDefaults] volatileDomainForName:NSArgumentDomain] mutableCopy];
NSLog(@"args are %@", dict);
[dict release];
[pool drain];
return 0;
}
./args -a foo -b bar -option myOption
2009-01-25 17:30:44.241 args[2303:10b] args are {
a = foo;
b = bar;
option = myOption;
}
- >>163
サンクス
ロングオプション(--)とオプション以外の引数は別処理なんですね
- スレを見始めた頃はチンプンカンプンだったのに
いつの間にか質問も回答も理解できるようになってて、ちょっと感激
日々の積み重ねって大事よね
- >>162
>Cのgetopt_longを使ったコードに#import <Cocoa/Cocoa.h>
>を書き足すだけで,コンパイル時にエラーになってしまうので,
うちでは Obj-C で getopt_long つかえるけど?
興味が有るのでどんなエラーがでるのか、
Cでは通るけど Obj-C ではとおらない最小限のソースを教えてください
- >>165
質問に回答して返事がなかったら萎えるよね
もう答えるの無駄だしやめよ、と何度思ったか
- まぁ自分の勉強だと思えば・・・・。
他人に解説する際に気づくこともあるし。
- >>166
#import <Cocoa/Cocoa.h>
#include <stdio.h>
#include <unistd.h>
#include <getopt.h>
extern char *optarg;
extern int optind, opterr, optopt;
int main(int argc, char *argv[]) {
int ch;
float time;
static struct option longopts[] = {
{"begin", no_argument, NULL, 'b'},
{0, 0, 0, 0}
};
opterr = 0;
while(( ch = getopt_long(argc, argv, "b:e:l:h", longopts, NULL)) != -1 ){
switch( ch ){
case 'b':
printf("Begin the begin\n");
break;
}
optarg = NULL;
}
}
です。
gcc -o test test.c -framework Cocoa
でコンパイル
- 168が良い事を言った
- >>169
それは #import のあとに、空白(0x20) だけでなくて
なぜか Unicode の no-break space (0xc2 0xa0) が入ってるからだと思う。
(テキストファイルをバイナリエディタで開いてみたら
何か変なことがわかるとおもいます。)
も一度 #import の行を消して書きなおしてみたらコンパイル通ると思うよ。
すくなくともうちの 10.5.6 の gcc では通った。
- >>169
mv test.c test.m
- >>807
http://pc11.2ch.net/test/read.cgi/mac/1231853172/
こっちで再度質問して。
- 173はゴバクっす。ごめんね。(≧ε≦)
- ごめん ちょっと教えて
WindowsからSocketプログラム移植する時って
Cocoaで書き直した方が良い?
BDSソケットでもOK?
BDSソケットって移植性重視の低効率実装な可能性があるから心配
ちなみに元のPGは 独自プロトコルのTCPでスレッドで受信しているタイプです
- >>175
OS X の BSD socket は移植性のためのインターフェースじゃなくて
カーネルがはじめに実際に実装してるインターフェースです。
というか OS X は mach + BSD のハイブリッドなので。
というわけで心配せず BSD socket をそのまま使ってください。
Cocoa/CoreFoundation の socket インターフェースも
結局は BSD socket のうえに実装されてます。
- ありがとうございます
カーネルがmach なので期待はしていましたが
何ぶんWindows生活が長くて
- >> 173
誘導どうもです。
最近、Cocoaプログラミング始めた初心者です。
会社のMacで簡単な工数計算のアプリを組んでみたんですが…
数値入力用のTextFieldに全角で数字を打ち込む人間がいて困っています。
そこで、特定のTextFieldにフォーカスが移った時に、
半角英数入力に強制的に替えるにはどうすればいいのでしょうか?
環境は、MacOS X 10.4.11 & Xcode 2.0 です。
- "Only Roman Characters"が怪しい
- >>178
mouseDownとか適当なイベント拾ってAppleScriptで半角切り替えかな。
でも強制切り替えはどうだろね。
運用でカバーした方がいい問題のような希ガス
- >>178
NSNumberFormatter 使えば済むのでは?
全角で入力されても内部で変換してしまえば良いし、他の文字が入ってたら
アラートも出せるし。って事ではないのかな???
- >>180 181
やはり強制切替は難しいですか;
ちょうどNSNumberFormatterを調べてたので、
全角→半角変換で対応してみます。
どうもありがとうございます。
- >>182
検証してないけど、
http://lists.apple.com/archives/cocoa-dev/2008/Mar/msg00556.html
にText Input Sourceを使えばできるかもしれないってある
- >>183
やりたい事はその質問と同じく、IME入力モードの切り替えなんですが…
Cocoa APIにはIMEの切り替え手段がないような事が書かれてますね;
うちの環境は10.4.11なので、「Text Input Source Services」の方はダメっぽいですか…
英語が不得意なので、ちょっと敷居が高そうですけど、
「Keyboard Layout Services Functions」の方を調べてみます。
ありがとうございました。
- 素人が一言
キー入力せずにコピペで張る場合もあるぜ?
かな漢いじるよりNSNumberFormatter?で入力後の文字成型した方が現実には効果的だよ
まあかな漢制御したりキーボードイベント横取りしたりの方が
プログラマの征服感は満たされるけどね
- ただ、自動で英数モードに切り替わるほうがUI設計として適切な場合もある(例えばNSSecureTextField)。
両方行うのが最適解。
- 半角モードに切り替わるテキストフィールド見た事あるけど
どうやってるかは知らん
- 同じMac上で、FileMaker Proを使っているんですが、
そこのTextFieldの『フィールド選択時の動作』設定では
『IMEモードの切り替え:Romanモードに固定』というのがあるので、
てっきりAPIで提供されていると思っていたんですよね;
- >>188
Carbon + Control Managerにはあったなぁ。
遠い昔(4,5年前か?)なのでなんと言うやつだったか、さっぱり思い出せないけど。
すまないがCocoaの同等の機能は知らんなぁ。
NSControlから ControlRefでも取り出せればできるんだろうがね。
- script manager だったと思う。
- >>189 >>190
Carbonにはあったんですか…
フィールドをタブで移動する時に、
備考入力欄なら全角に、数値や商品コード入力欄なら半角に…って感じで、
いちいち手作業で入力モードを変えなくていいので、
作業効率が全然違うんですよね;
いまさらCarbonで作り直す気力も時間もないし、
とりあえずは入力後変換で対応するようにしてみます。
ただ、お偉さんや同僚達は CocoaとCarbonの区別なんてつかないし、
説明しても理解できないので、
「何でFileMakerでは出来てるのに出来ないんだ?」とか
言われるのは悔しいですがw
皆さんありがとうございました。
- http://cocoawiki.aerial.st/index.php?NSTextField%2F半角英数TextField
これ参考にならんか?
- >>191
数字を入れるtextに全角で入力する馬鹿のために
なんでここまで苦しまなくちゃいけないんだって感じだよな。
- >>191
TextView サブクラス
- (BOOL)becomeFirstResponder
{
KeyScript( smKeyRoman );
return [super becomeFirstResponder];
}
と、NSNumberFormatterで半角のみに...
- ごめん、TextFieldのサブクラスだった...
- そっかfield editorか・・・
- >>192 >>194
おー!ありがとうございます!
なんかいけそうな感じですね。
今は、もう帰宅してしまってるので明日会社で試してみます!
感謝感謝です!!
>>193
自分もまさか全角数字を入力するやつはいないだろうと思ってたんですが、
「出来たから使ってね」って配布したその30分後、
「ちゃんと計算してくれないんだけど!」って言われましたw
- 気になって調べちゃったよ
10.5以降になってしまうが、
-[NSTextFieldCell setAllowedInputSourceLocales:]
ってのがあるな。NSAllRomanInputSourcesLocaleIdentifierで secure fieldと同じくromanに保てるようだ。
- ごめん、よく読んだら 10.4だったね。
ちなみに Control Managerのも思い出した。
kControlEditTextKeyScriptBehaviorTagだった。これが198のと同じ動作だろうね。
こっちは PerefersRomanと RequiresRomanと指定できて便利なんだな。
まぁControlRefが無いとダメだけど。
このくらい用意して欲しいよな。。。
- 入力された文字列が数字以外ならエラーを返す関数なら
自作ので持ってるよ。
- >>198
お手数かけます;
会社の環境では試せませんけど、今後の参考&勉強になります!
本当にありがとうございます!!
プログラマーとして入社した訳でないのに、
通常業務とは別の空き時間に、AccessVBAで事務処理プログラムを作らされてて
今回初めてMacのアプリを作ってみたんですけど、Cocoa楽しいっす!
- >>200
勉強したいので、差し支えなければコードをお教え願えますか?
すみません;
- 例えば、NSTextViewのサブクラスで
- (BOOL)conformsToProtocol:(Protocol *)aProtocol
{
return NO;
}
とかってやると、NSTextInputプロトコルを実装してないことになり、OSから仮名漢字変換のサポートが受けられなくなるので、
結果的に、入力モードは切り替わらないけど、半角英数字しか入力できないフィールドエディターが出来上がります。
もし、「勝手に入力モードが切り替わるのがウザイ」とか言われたときは、こういう手もあります。
- >> 200
もしかして、こんな感じ?
BOOL isInt(NSString* text)
{
return [[NSScanner scannerWithString:text] scanInt:NULL];
}
- >>202
VBAを使ったExcelのアプリは泥縄式で貧弱のだったらなんとか作れるんですが、
Macのアプリも同じような感じで作れますかね?
- >179のでオケーじゃないの?
IBでTextFieldの設定のAllows only roman charactersにチェックするだけじゃ?
加えてNumberFormatterでアルファベットをはじけば望む動作だと思うけど。
- あ、>206は>>178へのレスです。
- こういうのはなんでもOgreKitに任せてしまうな。めんどくさいから。
- >>206-207
>>178
>環境は、MacOS X 10.4.11 & Xcode 2.0
- NumberFormatterでいいと思うけどなー
すいません、質問なのですが
環境は10.5 Xcode3.1です
シグナルのキャッチってどう書くのが良いのでしょうか?
具体的にはSIGABRTをキャッチしてエラーメッセージを表示したいです。
その際、可能ならアプリが終了しない様にしたいと思っております。
よろしくお願い致します。
- http://developer.apple.com/samplecode/PreLoginAgents/listing2.html
が参考になると思います。
signal ハンドラ内では Cocoa みたいな大げさなものは呼べないので、
なんとかして signal を Cocoa のレベルまで持ってこないといけないですが、
その部分は上のサンプルコードからそのまま取ってこれるでしょう。
ていうかなんで Cocoa の GUI app にシグナルが飛んでくるの?
そっちのほうに興味があるな。
Apple メニューから再起動のばあいは quit の AppleEvent だし。
- >>211
ありがとうございます。
一度、拝見させて頂きます。
Cで作ったライブラリ内の関数を呼んでるんですけど、
その引数に特定の値を与えるとデバッガに「シグナルを受信しました:"SIGABRT"」
が表示されるんです。
ライブラリ側でエラーが出てるんですけど、こっちで処理できそうだったので…
- NSIndexPathを使ってNSTreeControllerにある目的のオブジェクトを一発で取得ってできないのね
- >>213
[[[treeController arrangedObjects] descendantNodeAtIndexPath:path] representedObject]
- >>214
なるほど、ツリーノード経由でアクセスすればいいのか
ありがとう!
- >>212
>ライブラリ側でエラーが出てるんですけど、こっちで処理できそうだったので…
SIGINT/SIGTERM と違って、SIGABRT はキャッチできるが復帰出来なかった
気がしてきた。というわけでライブラリ側を直さないと仕方ないんじゃないかな。
http://en.wikipedia.org/wiki/SIGABRT
- >>216
うげー、まじっすか!
うっすらとそんな気はしてたんですが…
windowsのC++から同じライブラリを使用する時は
try~catchで例外に飛んでくれるのに、macはtry~catchだと落ちてしまう…
それで、シグナルのキャッチをしないといけないのかと思ったんですが、
復帰が無理ならキャッチしてもアラートを表示するのが精一杯って事か…
- もうちょっと状況を説明してください。
使っているライブラリは C++ のもので、C++ の例外を送出してるんですか?
それなら mac でも捉えられない筈はないです。
try ... catch は C++ のものを使ってますか?
Obj-C の例外と C++ の例外は別だから、
@try ブロックでは C++ の例外は捉えられなかった... とおもいます。
Obj-C++ をつかう (ファイルの拡張子を .mm にする)とかして、
ふつうに try{ ...} catch で捕まるはず。
SIGABRT がでているのは、多分 C++ の例外が捉えられずに標準の
terminate() が呼ばれて、それの標準の実装であるところの abort() が
呼ばれてるからでしょう。
- >>217
>復帰が無理ならキャッチしてもアラートを表示するのが精一杯って事か…
あと、この文脈で復帰というのはシグナルハンドラから抜けたらという
ことだから、SIGABRT がでた時点で GUI をいじってる暇はないです。
- むーーっちゃ参考になりました!!
解決致しました!!
>@try ブロックでは C++ の例外は捉えられなかった... とおもいます。
まさにこれでした…
ライブラリはC++でC++の例外を送出しておりました。
それを@tryで捉えようとしていた為に今回の様な事になっていたようです。
普通のtry~catchを使用した所、例外処理に飛びました。
ホントにどうもありがとうございました。
…今回のは自分の中でかなり勉強になった。w
- 解決して良かったです。今後は
「A というのを解決するために B をしたい。しかし B の仕方が分からない。」
とい う構造のときは、B を質問するんじゃなくて A を質問してくださいね。
(今回は A: C++例外を取り損ねていた B: SIGABRT をキャッチしたい)
- あ、ホントですね…
改めて見ると質問おかしいですね(/▽*\)
以後気をつけます。。。
- 今objective-cのアクセッサメソッドを勉強中なんですが、
NSArray* gooに対するアクセッサを例に質問させていただきます。
このgooのアクセッサメソッドの定義についてなんです
- (void)setGoo:(NSArray*)aGoo
{
// ①goo = [[NSArray alloc] initWithArray:aGoo];
// ②goo = aGoo;
}
①は新たにメモリ領域を確保しています
②はそのまんまポインタを代入しているのですが、
こういうのはそれぞれ使い分けていけばいいのでしょうか?
それとも・・・こうだという書き方があるのでしょうか?
- 書き方は色々あるけど、渡されたオブジェクトをretainするのが普通。
- (void)setFoo:(id)bar
{
if(foo != bar) {
[foo release];
foo = [bar retain];
}
}
みたいな感じかな
- うむ。いずれ (2) だと release しすぎでクラッシュするよ。
retain/release/autorelease はきちんと理解しましょう。
- retain, release, autoreleaseの話題はそろそろテンプレ化してもいいんじゃねぇの?
- >>224
いろいろ参照していると
確かにそんな書き方をいくつか見かけました。
ただfooのメモリ領域を新たに確保したい場合はそれでは駄目ですよね。
そのときの書き方とかもありますか?
あとゲッターについてもなんですが、
普通に
-(NSArray*)foo
{
return foo;
}
でいいですか?
- >>225
なるほど。確かにそうですよね。
- >>227
興味本位で聞くけど、なんでそんな事をしたいの?
- Thread safeを考慮しなくていいという前提で行くけど
Setterは
- (void)setHogehoge:(id)newHogehoge
{
if(hogehoge != newHogehoge) {
[hogehoge autorelease];
hogehoge = [newHogehoge copy];
}
}
Getterは
- (hogehoge*)hogehoge
{
return [hogehoge copy] autorelease];
}
とか、copyでやるのが遅いが安全かなと思った。
- 整合性を保つために俺はオブジェクトをコピーしないようにしてるけど。
どうしても必要なら、アクセッサに渡す前に複製すればいいわけだし。
- NSArrayとかNSDictionaryとかだとdeep copyするかどうか
と考え込みすぎてしまいます
- 返信レス遅くなってすみません。
いろいろな意見を聞かせて頂けて本当にありがとうございます。
みなさんがどの辺を意識しながらプログラムしているのか、ちょっと分かった気がします。
- ターゲットが10.5以上ならしっかりとしたメモリ管理を覚えるのは後回しにしてもとりあえずプロパティを学べばおk
- >>230
確かにこれはパフォーマンスが気になるような場合はちょっときついかな。
それに getter で autorelease してるなら setter の方は release でいいんじゃないの?
- copy するかしないかは場合によるでしょう、
安全性のもんだいだけじゃないよ。
GUI のクラスが渡されたときにそれを copy しても仕方なかったりするし。
NSString とか NSArray ならともかく。
- くそっ、昨日いけたと思っていtry~catchでSIGABRT捉える問題なんですが、
Releaseでビルドすると捉えれずに落ちてしまう…
debugだとデバッガがアタッチされてるからうまい事いってたのかなぁ…
- >>237
ビルド条件で挙動が変わるってのはなんかポインタの扱いが間違ってるとか
そんなバグがあるんだとおもいます。
うまく動いてるときでも偶然うまくいってたとおもったほうがいいとおもう。
あと、いっとくけど SIGABRT を捉えられてるんじゃないよ。
C++ の例外は、だれもキャッチしないで main 関数の外に抜けると
ランタイムが abort() に変換して、それが結局 SIGABRT になる。
だから、あなたが捉えてるのはあくまで C++ の例外のはずです。
set_terminate とか使って例外が底抜けているか調べたら?
- >>231
>整合性を保つために俺はオブジェクトをコピーしないようにしてるけど。
>どうしても必要なら、アクセッサに渡す前に複製すればいいわけだし。
って具体的に書くとどういう操作ですか?
- 231じゃないが、
オブジェクトは>224にあるようなsetterのコードを使っていて、
呼び出し元は、setterに渡す前にcopyしてから渡すってことだとおもう。
copyを使うかどうかは、外部と内部とで共有するオブジェクトを
排除したいかどうかだろうね。
- >>223
http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/chapter_5_section_6.html
この辺の@propertyによるsetter/getterの実装と、その選択を考えれば
どういう風にするのがいいか解ると思う。
- >>240
>copyを使うかどうかは、外部と内部とで共有するオブジェクトを
>排除したいかどうかだろうね。
もっと現実に即した説明で言うなら、オブジェクトのそのときの値に用があるのか、
オブジェクトを参照したいのか、みたいな感じかと。
例えば NS(Mutable)Number や NS(Mutable)String を setter に渡して何かの最後の値を
記憶しておくようなクラスを作ったら、copy しておかないとおかしなことになりうる。
そうでなく、例えば NSWindow とか、値に用があるのなくそのオブジェクトを参照したい場合
は retain と。
-copy に答えるオブジェクト(NSCopying 準拠)かどうかというのもある。
- しまった、NSMutableNumber って何だよ俺。
- >>243
多倍長整数同士の演算を実装したクラスだな。
俺も持ってる
- >NSMutableNumber
NSNumber を継承して、値に意味の中心があるクラスとして、NSCopying protocol 準拠で
copyWithZone:(NSZone) の実装をされたんでしょうか?
- そんなにいじめるなよ
- それとも、NSMutableCopying protocol 準拠
- (id)mutableCopyWithZone:(NSZone *)zone
の方でしょうか?
- あれ?タイポだって事?それなら失礼。
でも、実際、そういうクラス作るとしたら、準拠でしょうか?
- NSNumber を単純に継承しても動かんよ、クラスクラスタだから…という話は
置いておいて。NSMutableCopying Protocol のリファレンスには、
> Only classes that define an “immutable vs. mutable” distinction should
> adopt this protocol. Classes that don’t define such a distinction should
> adopt NSCopying instead.
とあるので、不変クラスが無ければ、NSCopyingだけで良いんじゃない?
- >>244
>多倍長整数同士の演算を実装したクラスだな。
そうそうw
逆に、immutable で演算もないのは「基本、数値のラッパーでしかないクラスなのでよろしく」
ということなのかな。
- よろしく。。。何なのでしょう?
- >>251
Yorosiku Protocolを知らんのか?
- Bonjourなら知ってる。
- Bonjourが出たついでなんだけどさぁ、NSSocketを使用して
リモート間のコンピュータ制御を行なった人います?
BonjourがCFSocketを使用しているせいか、こちらのAPIを使用する人がいないよね。
別にBSDSocketを使用しているからあまり問題ないんだけど・・・・・・
こいつの使い方が終に分からなくて、悔しい思いをしたので。
- NSSocketPort じゃなかったっけ?これは Distributed Objects 用でしょ。
だから一般的なソケット操作にはつかえません。
でも DO はやってみると案外面白いよ。
単一マシン内の二つの app でやっても充分面白いです。
他のプロセスの Obj-C クラスをまるで自分のプロセス内の
クラスであるかのように自在に操れるからね。
AppleEvent より全然つかいやすいとおもうのだが...
- [me fuck]
- >>254
Bounjour でサーバのサービスを発見して NSSocketPort 経由で繋いで後の通信は DO、
みたいな、なんちゃって分散システムを作ってる & 使ってる。
セキュリティは気にしてないのでw Bonjour で見えたら自動的に接続。処理は DO のメソッド
呼び出し投げる。サーバが消えたらやめる。サーバのリストは Binding を使って表示&管理。
かなり楽ちん。
まあ実際にはエラー処理とかいろいろあるが... あとこれっていんちき Xgrid? という説もあるw
- >>257
heartbeatの処理とか入れてる?
処理投げてなかなか帰ってこないサービス内容とかもあるんで
うちは接続したら定期的にheartbeat返すようにしてる
- ハートビート...
いい響きだね
- エターナルフォースハートビートモーターズ!
- 質問というかただの興味ですが、
メソッドを書く時の書式は通常
- (NSString *)hoge:(NSString *)string;
とオブジェクト名とアスタリスクは離しますが、C的に書く必要がある場合どうでしょう?
NSString * getHoge(NSString *string);
この場合最初のアスタリスクの両側が空いているのに違和感を覚えるのですが、みなさんどう書いてます?
Apple公式でこういった書式のコードが見られるといいんですけど。
- リモート人間接続をするにはどうすれば
- 普通に話せよw
- たとえば、InDesignなどのDTPソフトだと、フォントフォルダ(たとえば、/Library/Fonts)に、
フォントをFinderで追加すると、すぐに使用できるようになるのですが、
自作アプリでコピーをすると、いつまでたっても、フォント情報が更新されません。
InDesignが、フォントフォルダに変更があったよ~、的ななんらかのシグナルを
キャッチしていて、Finderはそのシグナルを発してるのでは、
と想像しているのですが、そのシグナルを発生させる方法はあるのでしょうか。
- >>264
むしろ自作アプリで直接コピーするんじゃなくて、Finderにコピーをさせればどうだろう。
- >>264
http://developer.apple.com/documentation/Carbon/Conceptual/ATS_Concepts/atsfonts_concepts/chapter_2_section_5.html
http://developer.apple.com/documentation/Carbon/Conceptual/ATS_Concepts/atsfonts_tasks/chapter_3_section_6.html
- >>261
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html
関数の場合は * の両側をあける、ivar の場合は左側だけあけるんだと思う。
- FSEvent使うってのは??
- >>267
おお、すっきりしました。ありがとうございます。
- カスタムのビューとスクローラーとそのイベント対応について質問させて下さい。
NSViewとそれをスクロールするNSScrollViewを、共にサブクラス化し、
共にacceptsFirstResponderをオーバーライドしてYESを返すようにしました。
これで、page up/downキーが押された場合は、NSViewのサブクラスで
オーバーライドした pageUp: と pageDown: が呼ばれます。
で、homeキー、endキーが押された場合を取りたいのですが、
NSResponderのスクロール関連のどのメソッドをオーバーライドしても
呼ばれないのですが、keyDown:から自分で判別するしかないのでしょうか?
- >>270
scrollToBeginningOfDocument:とscrollToEndOfDocument:
NSResponderで定義されているメソッドでは、ありませんが。
- >>257
>セキュリティは気にしてないのでw Bonjour で見えたら自動的に接続。処理は DO のメソッド
>呼び出し投げる。サーバが消えたらやめる。サーバのリストは Binding を使って表示&管理。
この方法、凄く気になります。どこかにサンプルコードありませんか?
- http://www.borkware.com/corebook/second-edition-source-code
の Chap. 18, 19 を解読してみたら。本も買ったら勉強になります。
- サンプルプロジェクトを、プロジェクト名は同じですが改造して、アプリを試作しました(A)。
(アイコン入替え、クラス追加等含め)
更に、それを少しだけ改変した別バージョン(B)を、別個に作ろうと、上記元の改造版を Finder
でフォルダごと複製して、プロジェクト名は同じで、ビルド作業もできておりました。
ところが、その際、(恐らく)Default.png か、Icon.png を更新して、ターゲットのクリーニング後、
ビルドは出来ても、アプリ起動した後、または途中で止まってしまう様になりました。
コードを、修正前の状態になるまで、コメントアウトしても、状況が変わりません。
こういう場合原因は何でしょう?
- エラーがデバッガ画面に出てるはずだからそれを説明しろ。
ここ読んでる人だってエスパーじゃないよ。
とりあえず Default.png / Icon.png ももとに戻して動くかみてみたら?
- 実機上でBundle ID同じアプリが2つ出来て混乱しているとか。変えてみ。
- >>276
ありえる。お前エスパーだろ?
- NSTableDataSouceプロトコルの
-(id)tableView:(NSTableView*)tb objectValueForTableColumn:row:
メソッドの引数tbを使用して
テーブルのラインナップを行う行為は常識はずれですか?
ただこのメソッドは何度も呼び出されるので、
一度呼び出されたときだけこのメソッドないでテーブルのラインナップを
する関数を呼び出しています。
簡単に用法をしめすと
-(id)tableView:(NSTableView*)tb objectValueForTableColumn:row:
{
if(count == 1)
{
/*
tbを使用してテーブルのラインナップ
カラムを追加したりセルをセットしたり。
*/
}
// 以下はreturnでセルに値を代入していくプログラム・・・
}
- 普通はnibで既にカラムもセルもセットしておく。
どうしても動的に変えたいときはawakeFromNib:でやるかな。
- 確かにほとんどの参考プログラムはそうですよね。
ただテーブル数が多い&動的
ということもあって、別に動くには動くしで・・・・
でも皆さんから見てどうなんかな?って思ったんで質問させてもらったんですが・・
- 動的に変更したいにしてもなんらかのトリガーはあるんだろうから
そこから別途カラムを設定するメソッドを呼んだ方がいいと思う
実際の動作から変数を作ってどうこう、とやり出すと
予想外なところでif文に該当してバグの元になる
- iPhoneアプリ作成を始めた初心者です。Hello World! から勉強してます。
TableViewは作れましたが、TabelViewからタッチして別の画面
(別のcontroller)に飛びたいときはどうすればいいですか?
小さな複数のアプリをTabelViewでまとめたいのですが。
- >>282
iPod touch/iPhone ネイティブアプリ製作 ver.8
http://pc11.2ch.net/test/read.cgi/mac/1231156968/
- わかりました。そちらのスレでもう一度聞いてみます。ありがとうございました。
- >>284
そしたらこっちでの質問を取り下げた方がいいよ。
- >>271
NSViewのサブクラスにそれらを実装してみましたが、呼ばれませんでした。
少しググってみましたが、それらはNSTextViewで可能な方法ではないでしょうか。
何であれありがとうございました。
- テキストフィールドのあるモーダルダイアログを表示し、
テキストフィールドに日本語を入力し確定する前(下線が付いたまま)に
ダイアログを閉じるとクラッシュしてしまう…
これはなんなのでしょうか…
- >>287
ダイアログを破棄した後にUIを参照しようとしてない?
フォーカス関係の問題なら、フォーカス外してから閉じるとか。
- >>287
クラッシュログはなんていってるの?
つかってるのはことえり?ATOK?
それとは別問題として、モーダルダイアログは多用しないほうが...
せめてモーダルシートにしましょう
- レスありがとうございます!
>>288
モーダルダイログを閉じる前にモーダルダイアログContorllerクラス内のメンバ変数に
UIから取得した値を保持しretainしております…
その後にモーダルダイアログを閉じ
→モーダルContorllerクラスからget○○で呼び出し元ウィンドウでモーダルのUIの値を取得
→モーダルContorllerクラスを破棄
これマズイでしょうか。。。
フォーカスを手動で外してモーダルダイアログを閉じた場合はクラッシュしませんでした。
プログラム内からmakeFirstResponderで別のコントロールにフォーカスを移動してから閉じたらクラッシュしました…
>>289
つかってるのはことえりです。
ログは長いので最後の辺りを…
Thread 0 Crashed:
0 libobjc.A.dylib 0x90a59387 objc_msgSend + 23
1 com.apple.AppKit 0x93356003 -[NSApplication runModalForWindow:] + 227
ホントはシートを使いたいのですが、要望でダイアログになりました…
言い忘れたのですが、10.5では正常に動作致します。
10.4の場合のみ現象が起こってしまいます。。。
- すみません、自力で解決できなかったので教えて下さい。
NSViewのサブクラスを作り、NSBezierPath *contentPath(矩形)を持たせて
います。で、NSMutableArray に矩形ベジェを持たせていて NSArrayController で
前述のビューのcontentPathを入れ替えて再描画させる、というものを作りました。
制御自体はうまくいって、Arrayの中身を描けるのですが、パスのライン幅が一部
太くなってしまいます。挙動としては、矩形は幅または高さだけ変えたもの
(originは一緒)を描かせたときに古い矩形とオーバーラップする領域のみ線幅が
太くなります。
で、クリッピングが関係しているのかなと思い、wantsDefaultClipping をオーバー
ライドして NO を返すようにしてみたら、線幅は一定にはなったものの、今度は
設定した線幅 1.0 よりも太く書かれてしまいます。
どうすれば解決できますでしょうか、お知恵をお貸しください。
- >>290
それは retain/release がどっかでおかしくなってるんだとおもうけど。
ちゃんとやればもんだいないはず。NSZombie とかつかって
誰が二重 release してるかしらべてみては。
あと、僕の実経験では、Interface Builder でよく
Window のインスペクタで "release when closed" をチェックしてしまって
それのせいで release しすぎになりますが...
- >291 です……自己解決しました。原因は drawRect:[contentPath bounds] と
やったせいで、パスの線幅分のオフセットをやっていなかった為のようです。
とほほ…
- >>290
パネルがrelease when closedになってるとか?
- release when closedになってたので、チェックを外すと今度は10.5でおかしくなったw
日本語入力したテキストフィールドにmakeFirstResponderでフォーカス移動して
postEventでreturnキーを送ってテキストフィールドを完全に確定(?)させてから
モーダルを閉じたら10.4でいけた…
一応NSZombieだと、やっぱreleaseしたものにアクセスしてるって出た…(10.4のみ)
わけわかめだ…
- >>286
よく見たら、keyDown:をオーバーライドせずに、pageUp:とかだけをオーバーライドしてたんですね。
そうじゃなくて、
- (void)keyDown:(NSEvent *)theEvent
{
[self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
}
- (void)doCommandBySelector:(SEL)aSelector
{
if([self respondsToSelector:aSelector])
{
[self performSelector:aSelector withObject:self];
}
}
とやると、
page up → scrollPageUp:
page down → scrollPageDown:
home → scrollToBeginningOfDocument:
end → scrollToEndOfDocument:
となります。
- >>295
それはあきらかにメモリ管理のバグなので、対処療法的に
こういう閉じ方ならクラッシュしない、という解決法ではなくて
どっかで retain/release のミスがあるのでそれをみつけてください。
まあ納入期限とかなければのはなしだけど。
clang static analyzer は
http://clang.llvm.org/StaticAnalysis.html
強力なのでいちどつかってみたら?
- NSColorでも同じだと思うんですが、UIColorでalloc initでオブジェクト付くってラベルのtextColorに代入したときUIColorオブジェクトはどっかでreleaseしなくていいんでしょうか?
self.lbl_kekka.textColor = [[UIColor alloc] initWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];
- 当然allocしたオブジェクトは、自分が責任を持ってreleaseする。
UILabelのtextColorプロパティは
@property(nonatomic,retain) UIColor *textColor;
となっていてretainされるので、代入した直後にreleaseしてかまわない。
self.lbl_kekka.textColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0];
とすればautoreleaseされているのでreleaseする必要はなく、おそらくそのメソッドが終われば
releaseされる。
allocで生成するオブジェクトは、主にインスタンス変数などに長く保持したい場合などに使う。
- 後で気がついたが、releaseする場合は
self.lbl_kekka.textColor = [[UIColor alloc] initWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0];
[self.lbl_kekka.textColor release];
ではなく、
UIColor *color = [[UIColor alloc] initWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0];
self.lbl_kekka.textColor = color;
[color release];
な。
NSArrayやNSDictionaryにオブジェクトを追加したり
UIViewにaddSubview:したオブジェクトもretainされるので、直後にreleaseしてよい。
- self.label.textColor = [UIColor colorWith~~]; でおk
- なるほど!ありがとうございます。よくわかりました。
autoreleaseされるcolorWithメソッドもあったんですね。
- シンガポールの9歳少年がiphoneアプリの開発。
しかもこの少年2歳のときからコンピュータ使って
いまやすでに6言語をしようできるとか・・・・・。
スレッド間通信で悩んでいる俺もこんな英才教育受けてたら
いまや天才ハッカーだったのに・・・・・。
- まあ、その子の父親がそっち系の人だからね。
しょうがないよ
- 実はオネェ系。
- そっち系ってどっち系か気になる
- はぐれ刑事情熱系
- >>303
アジアには1ヶ月飲まず食わずの少年も居るよ。
鵜呑みにしない方がいい。
- 父親が作ってるだろ、実際は。
話題性があれば、無駄に売れる。
- 以前、10歳でアセンブラバリバリ使いこなす小学生に会ったことがある。
子供は物覚えが速いから、3Dとかの複雑な数学の必要なもの以外は余裕だよ。
- まあ、ポケモン数百匹のデータと対戦法すべて覚えてるガキなんかも多いしな。
- >>310
それかつての俺だ
まだ覚えてるかな
21 がLD HL
EDがIXのプレフィクスだっけかな
ハンドアセンブルは今にして思えば無駄な作業だったな・・
当時はセクションの考えもなかったし
>>311
そういうことだねw
- ちなみに、いまハンドアセンブル用のシート売ってるのかな?ニモニック書けるやつ
8080,Z80時代はばりばり書いてたなあ
- アセンブラ買う金が無かったから、ハンドアセンブルしてました。
- 逆アセンブラは面倒だったんで、自分で書きました。
- >>296 それでできました!
レスポンダーチェーンは知っていましたがキーバインドは単語だけ聞いた事ある、という感じでしたが勉強になりました。
ありがとうございました。
- Mac OS X だと gas 以外に nasm も付いてくるし、逆アセンブルもできる (otool か gdb)。
なんて恵まれた環境(w しかし Mach-O がマイナー(w
x86 の ObjC のメソッドでは、self が 8(%ebp)、SELが 12(%ebp)、第一引数が 16(%ebp)。
これ豆知識。
と無理矢理 Cocoa に結びつけてみる。
- ttp://sourceforge.jp/magazine/09/02/09/0131209
QtもCocoa対応になるのか
あれ、前ってCarbonだったけ?中までチェックしてなかったなぁ
- 藤子不二雄で育った世代が集まってるな。
- >>318
レパード発売直前に 64 bit Carbon GUI の廃止が発表されて
クロスプラットホームのひとはみんな慌てて Cocoa になってますよ。
Qt しかり、Open Office しかり。
Qt の開発者のブログはこのあたり
http://labs.trolltech.com/blogs/2007/06/21/wwdc-qt-carbon-64-bit-and-other-buzzwords/
http://labs.trolltech.com/blogs/2008/03/03/qtmac-cocoa-port-alpha-released/
もっと最近のポストもあるけど、初期のほうがおもろい。
- >>319
残念、テッカマンとサンダーバードで育ちますた。
あと日曜のliving tomorrow
あの番組によればとっくに核融合炉稼働、電車はすべてリニア、衛星軌道の太陽電池発電などが現実のものになってなければいけないのだが・・
21世紀にもなって相変わらず石油依存だったり雇用不安真っ盛りだったり
あげくの果てにハゲもダウンするしなんだかなもう。
- テレ東と閣下で育った俺が来ましたよ。
>>320
MSのOfficeはどうなんだろうって思って2008でotoolしてみたけどいまいちどうなってるんだかよくわからん。
Carbon.frameworkあるから普通にCarbonだとは思うがPowerPlant.frameworkがあるのが気になる。
Xcode移行したんじゃなかったのか?
>>321
ひとまずAppleには雇用不安も不景気も無縁だと思う。
あとJobsの後継者探しも問題ないだろう。
ここにいる連中を見る限り。
http://www.apple.com/pr/bios/
- >>322
PowerPlant は XCode で使えるユニバーサル版が公開されてるよ。
MS がつかってるのは彼らなりの手の加わったバージョンだと思うが。
http://sourceforge.net/projects/open-powerplant
まあ Office は 64 bit にする必要もないから Carbon GUI のままでいいのでは...
Adobe はがんばって Cocoa に書きなおしているらしい。
- >>323
Freescaleがオープンソースで公開してたのか。知らなかった。
Win側のOfficeは次のバージョンの14はWeb志向らしいし64bit化はないかもな。
Adobeが書き直し中で、MSは64bit対応予定無しだとすると、後残った大手ベンダーはどこだ?
- >>324
Mozilla Firefox も Firefox 3 を期に Cocoa になったらしいよ。
http://boomswaggerboom.wordpress.com/2008/06/10/firefox-3-for-mac-os-x-under-the-hood/
Java GUI も Swing は Apple 自身が Cocoa 化したはず。SWT はいまがんばって書き換え中。
- int型の数字をNSDictionaryに格納するにあたって
dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:5],
@"id",nil];
ってしたんだけど、取り出したときに
int student_id = [dict objectForKey:@"id"];
printf("student_id = %d",student_id);
するととんでもない値が出力されます。。
一応キャストしてみても駄目でした。
int student_id = (int)[dict objectForKey:@"id"];
正しく取り出せていないのでしょうか?
- >>326
>int student_id = [dict objectForKey:@"id"];
それNSNumberのオブジェクトのまま
int student_id = [[dict objectForKey:@"id"] intValue];
でないの?
- objectForKey:で取り出せるのはint型ではなく、格納したときのNSNumberオブジェクト
int student_id = [[dict objectForKey: @"id"] intValue];
- かぶったすまん
- >>328
即レス
ありがとう。
上手くいきました。!!!!!!!!!!!!!!!!!!1
- >>327-328さんにです。本当にありがとうございました。
- Finderで既に存在するファイルと同名ファイルをwriteTo系のメソッドで保存しようとした時に、上書きせずに自動で別名ファイルにする方法はありますか?
もしくは自動で変更された作られる予定の別名ファイルのパスを取得するようなメソッドはありませんか?
title → title 2 みたいな感じのです。
今はディレクトリの中をループで回して同名ファイルのチェックと保存先のファイルパスの変更をしているのですが、一発でパスを取得できる方法があるのかなと思いまして。
- [[NSFileManager defaultManager] fileExistsAtPath:@"..."] で出来るよ。
NSFileManager / NSWorkspace のメソッドを確認してみてください。
- それはファイルがあるかどうかの確認だけですよね;
今それをforループの中で使ってファイルがあればファイルパスに文字列を足して新しいファイルパスを自分で生成しているのですが、それを一発で教えてくれるメソッドはないでしょうか?
- >>334
それはプログラム側で指定するべきなわけで。
メソッドが用意されていないのではなく、プログラマの裁量で決められると考えるべき。
- う~ん、Finder から Trash に移動させるばあいの API は 10.5 になって公開されましたがね。FSPathMoveObjectToTrashSync とか。
このあたりの API は Carbon に 10.4 / 10.5 になって
何を今更追加しているのかという。
しかも char* と CFStringRef が混在していて意味がよう分からん。
- >>335
今はFinder準拠でファイル名+半角スペース+数字で連番ファイルを作成してるのですが、
使ってるメソッドがNSStringのstringWithFormatやstringByAppendingStringあたりなので、
"もし"将来的にFinderの挙動が変わるようなことがあった時のことを考えて提供されるAPIがあればそちらを使いたいと思ったわけです。
なぜFinder準拠にしたいかというとnamesOfPromisedFilesあたりを触っていたからです。
- hetimaさんとこで重複しないファイル名を返す隠しメソッドが紹介されてるよ。
http://d.hatena.ne.jp/hetima/20080224/1203794038
- >>338
試してみました、こんなのあるんですね。情報ありがとうございます。
- WebViewを勉強中なのですが、現在表示中のhtmlのリンクをクリックされた時に
それをトラップしてアプリケーション側で独自の動作をさせることは可能でしょうか?
マニュアルのdelegateやnotificationの部分を見てもそれらしいものが見あたらないの
ですがオーバーライド?すればできるようになるのでしょうか?
- >>340
webView:decidePolicyForNavigationAction:request:frame:decisionListener:
を調べてください。 WebView は高機能なので delegate が何種類もあります。
downloadDelegate, frameLoadDelegate, policyDelegate,
resourceLoadDelegate, UIDelegate とこんなけ。
- >>341
ありがとうございました。
- >>339
目的が >>337 なのだったら隠しメソッドじゃ駄目だよね。それが今後も使われる保証はないし。
公開された API がないなら、それこそ AppleEvent で Finder を駆動してみるとかしか
なかったりして。
ってゆうか数字を付けてくれるのって Finder ではどういう処理をしたときだっけ?
- Privateなメソッドは使いませんでしたが、中でやっぱりこういうの使ってるんだよなというので納得しました。
Finderだとoption+ドラッグで同じディレクトリにファイルをコピーするか、当該ファイルのコピーペーストで"スペース+数字"の連番ファイルが作成されます。
Finder意外だとQTの録画やcommand+shift+3のスクリーンキャプチャなんかも同じように連番ファイルができます。
ちなみにファイルを選択してcommand+Dだと"スペース+のコピー"が付加されます。"名称未設定フォルダ"を2回duplicateすると"名称未設定フォルダ のコピー のコピー"になります。
参考までに、Safariのダウンロードだと"ハイフン+数字"が付加されます。NSURLDownloadのメソッドを利用して得られる連番ファイルパスはこれと同じ形式でした。
てことで公開されたメソッドがないので今のところ自力で実装しています。
- NSUserDefaultsControllerってIB上で作ることができるみたいですけどこれってIBでやる意味
何かあるんでしょうか?
ソースコード上で[NSUserDefaults standardUserDefaults]を呼ぶのと何か違うんでしょうか?
- standardUserDefaults以外のNSUserDefaultsが使えるので複数のNSUserDefaultsを
使い分けたりできるとこに意味があるのかな?
関係ないけどIDがBSDだw
- NSUserDefaultsControllerはNSUserDefaultsにバインディングするためのコントローラ
- WebViewを使ったアプリを作っているのですが、
Flashを使用したサイトを[webView setMainFrameURL:~];
で開くと、SIGINTでアプリが落ちてしまいます。
NibのほうでPlug-Inを無効にすれば落ちないのですが、
Flashを使用したサイトにも対応したいと考えています。
どなたか対処法等についての情報お持ちのかたいますでしょうか。
よろしくお願いします。
- シフトキーを単独で押したときにもkeyDownを呼んでほしいんだが、だめだね。
cocoaじゃ無理なんかね?
誰かやりかた知ってる?
- イベントで拾えないか?
- >>349
知ってますが何か?
- >>348
フラッシュプレイヤーの方に問題があるかも。
バージョン10は動画によっては頻繁にシークするとよく落ちます。
- >>352
ありがとうございますm(_ _)m
Flash Playerを9にダウングレードしたら解決しました。
【まとめ】
・実行するクライアントのFlash Playerは9でも10でもOK
・コンパイルする時の環境は必ず9
- >>353
なんでそんな「まとめ」になったの?
コンパイル時にプラグインが 9 か 10 かなんか関係ないんでは...
ユーザーが Flash 10 をつかってたら実行時に死ぬこともあるだろうし。
- 俺もそのまとめには疑問符だな
WebKit使ってるだけだろ?
- >>354
Flash 9の時に作成したソフトは、10を入れていた時にも動作しました…
何故だかはわからないですorz
- 現実
ttp://www.atmarkit.co.jp/news/200902/13/wp.html
- ていうか理想は何なんだ?
- AとBの2種類のWindowControllerがあってそれぞれが複数のウィンドを開いているとして
その中からAのWindowControllerで現在一番上にあるものを判定するにはどうしたらいいで
しょうか?[NSApp windows]だとすべてのウィンドの配列が得られますが作られた順番は
わかるものの現在の重なっている順番はわからないみたいです
- 自己解決しました
[NSApp windows]じゃなくて[NSApp orderedWindows]を呼べばいいみたいですね
- 並び順は NSWindowList で取得できると思う
- 自作のUIViewクラスの位置を変えたいと思い
[myview setOrigin:CGPointMake(100.0f, 100.0f)];
とやっています。一応、正しく動作するのですがXcodeが
warning: MyView may not respond to '-setOrigin:'
というwarningを出してきます。ヘルプでもUIViewにはoriginというプロパティはないのですが、位置を変えるときはsetOrigin:を使ってよいのでしょうか?
- すみません、自己解決しました。
UIViewの拡張仕様らしく
@interface UIView (Extended)
- (void)setOrigin:(CGPoint)aPoint;
@end
を追加したらWarningは消えました。
- カテゴリでメソッドの宣言を追加したら、
メソッドの実体が無くても警告はでなくなるよ。
だから、それやって警告がでなくなったというのは
使っていいかどうかの印ではないです。
動くということは Apple がメソッドを実装してるってことですが、
レファレンスにのってないってことは公開されてないわけで、
iPhone OS のバージョンがあがると突然うごかなくなるかもしれません。
だから、そういうやばいことをしていることをキチンと理解して、
次のバージョンがでたら思い出してチェックしないといけないと覚えておく。
でもそういうヤバいことはすごい有用な機能をつかうときだけにしておいて、
origin に関してはそのかわりに公開されてる
frame.origin か center をつかっておけばいいんじゃないかと思いますが。
そんなところで危ない橋をわたることはないです
- インストールされてるアプリのリストを得ようとしたら
やっぱりSpotlightしかない?
- システムプロファイラ
- >>365
ほんとに無差別に全部の app がほしいんでしょうか、
特定のファイルを開けるソフトを探したいとかいう場合は
LaunchServices をつかったほうがいいです。
http://developer.apple.com/DOCUMENTATION/Carbon/Conceptual/LaunchServicesConcepts/
http://developer.apple.com/DOCUMENTATION/Carbon/Reference/LaunchServicesReference/Reference/
- 無差別に他のアプリを見つけてremoveとか。
- Core Graphicsに指定したピクセルのRGB値を抽出するような関数はないでしょうか?
- NSBitmapImageRepにはあるけど、どうにかNSBitmapImageRepに変換してそれをうまく使えないですかねぇ
自分も最近CoreGraphics興味あるんですけど、参考になるサイトとかありませんか?Apple以外で
- あ、どうやらNSBitmapImageRepはCGImageRefから生成できるようですよ
This page was generated by Dat2HTML Rev.