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

このエントリーをはてなブックマークに追加
1sage
前スレ
Cocoaはさっぱり!!! version.13
http://pc11.2ch.net/test/read.cgi/mac/1241407525/

Cocoaはさっぱり!!! version.12
http://pc11.2ch.net/test/read.cgi/mac/1231853172/
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/
2名称未設定:2009/11/15(日) 10:42:07 ID:wlCzXFdR0
関連スレ
Macでプログラミング{10}
http://pc11.2ch.net/test/read.cgi/mac/1248682344/
Mac OS XをUnixとして使ってる人の為のスレ その15
http://pc11.2ch.net/test/read.cgi/mac/1247059597/
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 アップルスクリプト 質問、発表 4
http://pc11.2ch.net/test/read.cgi/mac/1256127156/
iPod touch/iPhone ネイティブアプリ製作 ver.13
http://pc11.2ch.net/test/read.cgi/mac/1254335278/
[SDK]iPhoneアプリ開発初心者質問箱3[touch]
http://pc11.2ch.net/test/read.cgi/mac/1254325417/

関連スレ(ム)
Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/
【マック】Macintoshプログラミング質問箱
http://pc12.2ch.net/test/read.cgi/tech/1113058054/
関連スレ(マ)
【Cocoa】Macプログラマのスレ【Objective-C】
http://pc11.2ch.net/test/read.cgi/prog/1214208397/
3名称未設定:2009/11/15(日) 10:43:17 ID:wlCzXFdR0
4名称未設定:2009/11/15(日) 10:44:58 ID:wlCzXFdR0
書籍
【Objective-C】
詳解 Objective-C 2.0「荻原本」(ソフトバンククリエイティブ 、08/5)荻原剛志
Dynamic Objective-C「ダイナミック本」(BNN新社、09/3)木下誠
【Cocoa全般】
HappyMacintoshDevelopinTime 2nd Edition「黒本」(BNN新社、04/6)木下誠
HappyMacintoshDevlopingTime 3rd Edition「赤本」(BNN新社、06/5)木下誠
たのしいCocoaプログラミング「たのここ」(BNN新社、08/8)木下誠
CocoaではじめようMac/ iPhoneプログラミング入門(秀和システム、09/3)中野洋一
Mac OS X Cocoaプログラミング第3版「ヒレガス本」(ピアソンエデュケーション、09/11)アーロン・ヒレガス
【iPhone】
iPhone デベロッパーズ クックブック「エリカ本」(ソフトバンククリエイティブ 、09/2)エリカ・サドゥン
iPhoneアプリケーションプログラミング(技術評論社、09/6)新居雅行
iPhone SDK アプリケーション開発ガイド(オライリージャパン、09/9)Jonathan Zdziarski
iPhone SDK 3 プログラミング大全(アスキー・メディアワークス、09/9)木下誠
基礎からのiPhone SDK 改訂版(ソフトバンククリエイティブ 、09/10)鶴薗謙吾
ほか山ほど
5名称未設定:2009/11/16(月) 00:08:47 ID:+m+gAOi60
関連スレ追加(新)
GCD グランドセントラルディスパッチ GCD
http://pc11.2ch.net/test/read.cgi/mac/1251622811/
関連スレ追加(ム)
言語ってObjective-Cだけでよくね
http://pc12.2ch.net/test/read.cgi/tech/1221406846/
Mac OS Xでの開発環境はどれがイイ?
http://pc12.2ch.net/test/read.cgi/tech/1163314891/
6名称未設定:2009/11/16(月) 04:42:03 ID:GyEChZGO0
NSSplitView の縦分割と横分割が切り替わりません。
もともと縦分割の NSSplitView に対して、

[mySplitView setVertical:NO];
[mySplitView display];

とやっても何の反応もありません。ところが、この後に

[mySplitView setDividerStyle:NSSplitViewDividerStylePaneSplitter];

のように白いつまみのモードにしてあげると、何故かきちんと
横分割に変わります。これはどういうことでしょうか?

よろしくお願いします。
7名称未設定:2009/11/16(月) 09:36:02 ID:Cac5KJ3nP
しかし前スレにもあるけどtable view/outline viewって扱いにくいなあ
ドキュメントにも大して書いてないし
8名称未設定:2009/11/16(月) 10:01:19 ID:Pn7lUGrL0
>>6
adjustSubviews が必要?
96:2009/11/16(月) 22:58:52 ID:NRV/cw+x0
>>8
adjustSubviews でいけました。ありがとうございます。
10名称未設定:2009/11/17(火) 10:10:58 ID:tLLBTS+9P
NSTextFieldCellで表示したテキストをコピーできんもんかな・・・。
マウスイベントをいちいち拾わないとだめなんだろうか。
11名称未設定:2009/11/17(火) 10:37:38 ID:6O7rv9u7i
ここはあなたの日記帳ですか?
12名称未設定:2009/11/17(火) 10:51:54 ID:aHwJnnCu0
ここはCocoa
13名称未設定:2009/11/18(水) 19:57:36 ID:fozb+Kme0
テーブルビューのコラムが調整されると、
tableViewColumnDidResize っていうデリゲートが呼ばれるんですが、
コラム調整中に呼ばれるデリゲートってないんでしょうか?

前回のスレの終わりで話題になっていたテーブルビューの行の高さの
調整で、コラムのリサイズ中に表示がおかしくなるのを防ぎたいです。

よろしくお願いします。
14名称未設定:2009/11/19(木) 09:59:45 ID:VUzU/zXD0
NSTableHeaderView の子クラス作って resizedColumn をオーバーライドして、
Notificationを飛ばせば良いのでは?
15名称未設定:2009/11/19(木) 11:02:11 ID:qFJQLZ/CP
>>13
viewの- (void) drawRect:あたりをオーバーライドするのはどうなのん
1613:2009/11/20(金) 08:17:31 ID:vgsgI1K10
>>14,15
なるほど、試してみます。ありがとうございます。
17名称未設定:2009/11/20(金) 17:37:24 ID:vGShuqUB0
それにしても、いじればいじるほどNSTableView 扱いにくいorz
AppKit の中でも古いクラスだしなぁ。

NSCollectionView の一つ一つのビューの中でカラムを作って、
NSTableView のヘッダーっぽいカスタムビューを作って
並び替えやらを実装したほうが良いような気がしてきた。

NSCollectionView なら Cell じゃなくて View なので自由度も
高いし、並び替えや検索で CoreAnimation の滑らかなアニメーション
もかかるし、良い事ずくめだと思うんだけど・・・

パフォーマンス的にはどうなのかな。
18名称未設定:2009/11/21(土) 03:31:42 ID:IcOjr8tO0
つ メモリリークか大漁メモリ消費。
19名称未設定:2009/11/21(土) 04:24:36 ID:AMZqLSaO0
メモリリークするのはお前の単にお前のせいだろ。
20名称未設定:2009/11/23(月) 16:01:00 ID:YxoRQh/m0
NSView のサブクラスになっているカスタムビューの
バインディングについてお尋ねします。

ググるといろんな情報があって10.3のころと今でも状況違う
みたいなので...

・IB でバインドさせることは可能?
 カスタムビューを選択してインスペクタのバインディングペインで
 Value を出させることはできますか。
 exposeBinding: だけでは無理でした。
 現状でもコードでbind:toObject:withKeyPath:options:
 を呼ぶしかないでしょうか?
21名称未設定:2009/11/23(月) 16:45:20 ID:KodRk5tN0
>>20
IBライブラリを作らなければできません。今も昔も
22名称未設定:2009/11/23(月) 17:02:29 ID:YxoRQh/m0
>>21
分かりました。コードでやります。

ありがとうございました。
23名称未設定:2009/11/24(火) 23:20:22 ID:DP2GXTtj0
バインディングがよく分からないんです。
たとえば  NSArrayController を使って myModelClass の myArray と
ビューをバインドします。

ところが、myArray にオブジェクトを追加してもビューには変化がなく、
代わりに NSArrayController に addObject するとはじめてビューに
反映されます。

これはどういう事なのでしょうか?
NSArrayController に追加して反映させるのなら、そもそも myArray と
バインドした意味がないように思えるんですが。

24名称未設定:2009/11/24(火) 23:33:29 ID:kHx4nX/70
[(instance of myModelClass) willChangeForKey:@"myArray];
[myArray addObject:hoge];
[(instance of myModelClass) didChangeForKey:@"myArray];

(instance of myModelClass)は通常たぶんself。

NSKeyValueObserving.h参照。
というか、日本語訳版で良いから
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueObserving/
これ読む。
25名称未設定:2009/11/25(水) 00:05:44 ID:xtUJjRjs0
>>23
KVO準拠のメソッドを使わないといけません。
mutableArrayValueForKey:
あるいは、indexed accessorを実装して、それを使う。

ここで質問する前に、Cocoa Bindings Programming Topicsの
Troubleshooting Cocoa Bindingsとかを読むと、より早く
回答にたどり着けることも多いですよ。
26名称未設定:2009/11/25(水) 00:12:52 ID:LyIoGjho0
>>24,25
的確なご回答、ありがとうございました。

基礎の理解があやふやなまま問題に対峙しててもダメですね。
ご指摘のドキュメントで勉強します。
27名称未設定:2009/11/25(水) 02:52:11 ID:ul6QAdGH0
ココアのプログラマ募集してたな。月額30マンぐらい。需要有るのが驚きw
28名称未設定:2009/11/25(水) 09:14:54 ID:yrBqv6rHP
Macの開発やってるところはじみにあるよ。
Mac版ソフトを添付してるカメラメーカーとか。
29名称未設定:2009/11/25(水) 12:52:52 ID:d2woxV7p0
デッバグビルドで問題なく動くのに、リソースビルドで
EXC_BAD_ACCESS のようクラッシュするというのは、
どのような種類のバグでしょうか?

「デッバグビルドなら動くのにリソースビルドで動かない」
っていう条件から類推されるバグとは?

30名称未設定:2009/11/25(水) 13:06:38 ID:aXU3tEkL0
リリースビルドだべ。

そりゃ、アンタ。バグがあるからに決まってるだろうが。
多分、メモリ関係。
31名称未設定:2009/11/25(水) 13:08:22 ID:DeK5tzDM0
「パフォーマンスツールを使って実行」 >「 Leaks」 をやるとたんまりとリークが発見されるだろう。
32名称未設定:2009/11/25(水) 14:49:37 ID:d2woxV7p0
>>30,31
ありがとうございます。
なんでリソースなんて書き間違えたのか分かりませんが、
単なるうっかりですorz

Leaksやってみます。
33名称未設定:2009/11/25(水) 14:55:59 ID:kM67ICXa0
デッバグにも突っ込めよw
あと別にリリースビルドでもデバッグできるからクラッシュしたコード見られるでしょ。
俺もデバッグで動くのにリリースでクラッシュする例にはあったことあるよ。
確かにメモリ関連だった気がするけど、結局そういうの元のコードが行儀悪くて、デバッグビルドでは運良く動いただけだった。
34名称未設定:2009/11/25(水) 15:49:17 ID:/K/HP7RB0
nibからオブジェクトが作られるとき
特定の順番でないとうまくいかないように
なっちゃってるとか
35名称未設定:2009/11/25(水) 16:47:28 ID:yrBqv6rHP
>>17
だよな。もうちょっと整理してほしい所だ。
ちょっとデフォルトと違う事をやろうとすると作業数が倍増する。
36名称未設定:2009/11/25(水) 18:49:16 ID:D7mS2ZYz0
>>17
>それにしても、いじればいじるほどNSTableView 扱いにくいorz
>AppKit の中でも古いクラスだしなぁ。

NeXTstep 的には後続の部類だったりするが... もともとは AppKit 本体でなく
DBKit の一部だった。

http://www.kevra.org/TheBestOfNext/BooksArticlesWhitePapers/WhitePapers/files/page646_4.pdf

でこの後 EOF というのが出てきて... っていまさらどうでもいいかw
37名称未設定:2009/11/25(水) 20:00:44 ID:MYDQDAxV0
3829:2009/11/25(水) 21:18:09 ID:d2woxV7p0
>>33
バグがバッグになるのが妙でいっつも間違えるんですorz

>>34
デバッグビルドでたまに挙動がおかしいので、それもあるかも
しれないです。

>>37
なるほど、こんな方法もあるんですね。

結局、GCに頼りすぎてメモリ管理を適当に流していたので
こういうことになったと思います。
39名称未設定:2009/11/26(木) 05:10:46 ID:j0OhJIRv0
>>29
不正な範囲/寿命の変数(オブジェクト)の参照をしているが、ローレベルなメモリ上の
配置とかデータの寿命の加減で、コケたりコケなかったりしている、
あるいは未初期化な変数をアクセスしているが、そのゴミの値によってコケたり
コケなかったりしている、とか。

>>38
>バグがバッグになるのが妙でいっつも間違えるんです

本当は「ディバグ」ぐらいの方が英語のの発音に近いけどね。
まあカタカナ表記では「デバッグ」がメジャーということで。

>結局、GCに頼りすぎてメモリ管理を適当に流していたので

GC を使っているかどうかはあまり関係ないかも。
4029:2009/11/26(木) 13:17:26 ID:rcYQi6ua0
>>39
>不正な範囲/寿命の変数(オブジェクト)の参照をしているが...

Leopard で GC が導入されたぐらいの時期から Cocoa を始めたもので、
retain とか release とか変数の寿命とか全く理解してないんですけど、
知っておかないとまずいですかね。


>未初期化な変数をアクセスしているが

変数を宣言した後、nil を入れるべきかどうかもよく分かってないので
勉強しつつ確認してみます。
41名称未設定:2009/11/26(木) 13:24:14 ID:8SKHNHSl0
>>40
Core Foundation をつかってなければ問題ないと思うけど。
CoreFoundation 系の関数をつかうときは、CFRetain / CFRelease
と GC が絡んでややこしくなります。判ってないと死亡するとおもいます。

とりあえず、XCode でビルド→ Build & Analyze やってみたら?
4229:2009/11/26(木) 13:57:54 ID:rcYQi6ua0
>>41
>XCode でビルド→ Build & Analyze

5件も引っかかりましたorz
Build&Analyzeの存在は知りませんでした。ありがとうございます。
43名称未設定:2009/11/26(木) 19:11:07 ID:JLYfKMhq0
ちょうどリークの話でNSWorkspaceのopenURL:を使うとNSCFDictionaryがリークする?
OS 10.5.8
Xcode 3.1.4
Leaksで確認
44名称未設定:2009/11/26(木) 22:12:48 ID:PX81cXLf0
>>27
遅レスだけどどこでしょう?ヒントだけでも。
45名称未設定:2009/11/26(木) 22:29:49 ID:GA47uETz0
>>38,39
むかしは「デバグ」という表記をしているところもあったなあ
46名称未設定:2009/11/27(金) 01:59:27 ID:Ppm37KGf0
まあObjCはautoreleseを呼び忘れるとメモリリークしてくれて、一回でも多く呼ぶとクラッシュしてくれるポンコツ言語だしな。しょうがない。
GCが自動で行われる高級言語に比べたら雲泥の差。
47名称未設定:2009/11/27(金) 02:50:02 ID:LQqZUj0N0
それは言語とは関係ないな。
48名称未設定:2009/11/27(金) 03:28:01 ID:6W/TFxR/0
ポンコツ言語つか継接ぎ言語?
49名称未設定:2009/11/27(金) 07:04:55 ID:0TFJWMvq0
>>46
基礎学習がきちんと出来てないやつはこういうこと言うんだよな。
専門学校卒業とか、そんな感じだろ?
50名称未設定:2009/11/27(金) 08:16:07 ID:UcavHhFi0
>>46
貴様、C と C++ を敵に回したな!
51名称未設定:2009/11/27(金) 08:38:52 ID:5eqvsdnV0
まあでもObjective-Cランタイムの動的指向を知れば知るほどこれでシステムのかなりの部分を組んでた
NeXTSTEPに対する畏敬の念が強まるよね。アランケイも草葉の陰で喜んでくれていることだろうよ。
52名称未設定:2009/11/27(金) 09:33:31 ID:PWeDb+LxP
見た目のUIやらIBでの開発やらメッセージセンドの仕組みを通して、
そのまま統合環境の層にまで直感的に落とし込んでるのが凄いわ。
smalltalkでやろうとしてたのはこういうことなんだろうなっておぼろげにわかる。
53名称未設定:2009/11/27(金) 11:12:10 ID:fZH3Df1V0
>>46
まあ、GCでもポインタを残したままにしとけば際限なくメモりリークするし
同じオブジェクトの解放を1回でも必要以上に行ってしまうのは設計ミスかバグだけどね。
54名称未設定:2009/11/27(金) 12:27:58 ID:LQqZUj0N0
アラン・ケイ死んでたのかよ……ってまだ生きてんじゃん。
55名称未設定:2009/11/29(日) 08:06:53 ID:g2Q4JLms0
任意のCGContextRefに対して日本語文字列を描画する方法を教えてください。
CGContextSelectFont,CGContextShowTextを使うと文字列が化けてしまいます。
Tigerにも対応させたいのでCore Textは使わない方法でお願いします。
56名称未設定:2009/11/29(日) 09:09:52 ID:JmPR0BeA0
NSString の drawAtPoint とかつかうと日本語もでるよ。
57名称未設定:2009/11/29(日) 14:50:49 ID:g2Q4JLms0
>>56
それでは可能でしたがカレントビューに表示されてしまいます。
オフスクリーンに描画したいので、任意のCGContextRefに描画する
指定方法があれば教えてください。
58名称未設定:2009/11/29(日) 15:08:26 ID:JmPR0BeA0
NSGraphicsContext に graphicsContextWithGraphicsPort:flipped:
というメソッドがあります。
それで得た NSGraphicsContext を setCurrentContext してください。
59名称未設定:2009/11/29(日) 16:05:40 ID:GzcPw/5D0
>>55
CGContextShowGlyphs()?

>Tigerにも対応させたいのでCore Textは使わない方法でお願いします。

文字描画APIだとATSUIというのもあったな。Core Textも実体はあった気がする。
60名称未設定:2009/11/30(月) 09:06:26 ID:diNsjUj70
<ちらしの裏>
前スレ 716 あたりで CoreData つかった iTunes みたいなソフトの
起動が遅くて困っているという話をかいたものですが、週末に思い切って改良して
起動時間が半減ぐらいしたので方法を書いて置きます。

つくってるのは pdf 管理ソフトで、iTunes で mp3 のかわりに pdf を管理、
左側の NSOutlineView にライブラリ、プレイリストがあって、
右側にメインの NSTableView があります。
TableView → ArrayController → OutlineView → TreeController → MOC
という標準的な構造ですが、件数が3万件ぐらいになると
上記構造を含んだ nib を起動時に読み込む段階で激しく SQL のフェッチが
発生して起動に非常に時間がかかるというのが問題でした。
(pdf はパスだけ CoreData 内に格納)

やったことは三つです。
0. nib の binding は、最後の MOC につなぐところだけは
applicationDidFinishLaunching: の中でする。これだけで、
実質の起動時間はかわってませんが Dock でぽこぽこ跳ねなくなります。
(つづく)
61名称未設定:2009/11/30(月) 09:07:16 ID:diNsjUj70

1. 前スレ 715 さんのアドバイスにしたがって、
entity 内で table view のソートに関係しないものを
別 entity に分割しました。(もとの entity には relationship でつなげておく)
これで、MOC につないだ際もソートに関係する情報だけ読み込まれます。

2. さらに、別スレッドで、ソートに必要な entity を全部 prefetch
しておくことにしました。通常は別スレッドでは
同じ persistent store coordinator につながった別な MOC を使わないと
死亡しますが、それではあまり prefetch の意味がない (なくはないですが)。
で、別スレッドをなるべく早く (main 関数の NSApplicationMain を呼ぶ前)
たちあげて、そこから main thread 用の MOC に prefetch をしてみました。
prefetch 中は main thread はいろいろ MainMenu.nib よみこんだり
他の仕事をしてます。あとは、0. で nib に MOC をつなぐ際に、
prefetch が終了したのを確認してからにすればいいです。

1. と 2. の効果がおなじぐらいずつあって、
結局起動時間が半分ぐらいになりました。

あと、Instruments で CoreData の動作をみながら、
fetch のあとの無駄な fault が起こらないように等、
FetchRequest の設定をいろいろ調整するのも地味に効果があります。

これで3万件でも気分よく使えるようになりました。
まあまた6万件ぐらいになると問題が出るでしょうが...
</ちらしの裏>
62名称未設定:2009/11/30(月) 13:52:02 ID:tHk4aHE1O
日本語文章ばかりでさっぱり役に立たない。
ここはあなたのオナノートですね。

百聞は一見にしかず。
すなわち、役に立てたいならコードをあげろと。
63名称未設定:2009/11/30(月) 15:02:16 ID:IpxlqZ4+0
>>60


>>62
馬鹿ですか?
これ、日本語文章で説明しないでどうやって説明するの?
それともコードをどっかのサーバーにあげて、今後ずっと
保守できるの?
64名称未設定:2009/11/30(月) 15:36:29 ID:SuR5eQBK0
役に立たないとは言わないが、もう少し簡潔に書けると思う。
65名称未設定:2009/11/30(月) 17:50:08 ID:q+b73Wxb0
>>62
携帯の奴は馬鹿
チラシの裏ってわざわざ書いてあるものに対してオナノートですねとかコードをあげろとか頭は大丈夫かいな
66名称未設定:2009/11/30(月) 18:05:15 ID:FkhoGBr10
そもそも携帯から「コードをあげろ」つってる時点で釣りだろ
携帯で読めやしねえんだからさw
67名称未設定:2009/11/30(月) 19:59:14 ID:o4HxcAFu0
68名称未設定:2009/11/30(月) 21:26:54 ID:tHk4aHE1O
お、やたら噛み付くやつがいるね。
プログラミングスレで日本語でダラダラと大量に説明されても
相手には伝わらないと言いたかったんだけど。

まあ、いいや。
69名称未設定:2009/11/30(月) 21:29:40 ID:FkhoGBr10
>>68
コードでおk
70名称未設定:2009/11/30(月) 21:55:06 ID:GPb/Ydld0
今日の1行プログラミング。お題は>>62>>68です。

「俺も真似したいからソースよこせ」

どうだろう?
71名称未設定:2009/11/30(月) 22:02:10 ID:SuR5eQBK0
みんなスルーしてるが、「百聞は一見にしかず」が突っ込み所じゃないのか?
72名称未設定:2009/12/01(火) 05:02:08 ID:oTYjsxjb0
Ω < つまりスクリーンショット上げろってことだったんだよ!
73名称未設定:2009/12/01(火) 09:07:18 ID:rHYb4yO/0
>>68
本当に伝わらないと思ってる?

>まあ、いいや。

これだけ流れを乱しておいて「まあ、いいや」ですか。
君のようなレスによって、今後こういう有益になるかもしれないレスを
書き込みにくくしたことに気づいてほしい。
74名称未設定:2009/12/01(火) 09:33:38 ID:HwkycTtD0
>>72
Ω Ω Ω < な なんだってー!!
75名称未設定:2009/12/01(火) 10:12:02 ID:OBAU8bPhO
間髪入れずにレス、そしてそこから急に連投、
しかも全て単発IDなんて、自演っぽいね。

76名称未設定:2009/12/01(火) 10:15:58 ID:rHYb4yO/0
>>75
追い込まれると自演扱いですか。おつかれさまです。
77名称未設定:2009/12/01(火) 10:20:06 ID:trCeX1Qg0
先日の >60 です、なんか内容以外で盛りあがっててびっくりです(汗)
ソースコードはさがせばどっかの bzr レポジトリに上がってます、
スクリーンショットも自作ソフトのページにあがってるので
知ってるひともいるかも... 名前を出すのは勘弁してください :p
78名称未設定:2009/12/01(火) 10:36:59 ID:XsE/Cwo30
日付の文字列からNSDateオブジェクトを初期化する際に、
日本時間じゃなくUTCにしたくて下のようにやったんですが、なぜか日本時間で出力されてちゃいます。

// NSDateFormatterの初期化
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

// NSTimeZoneの初期化
NSTimeZone *timeZoneEST = [NSTimeZone timeZoneWithName:@"UTC"];
[inputFormatter setTimeZone:timeZoneEST];

// NSDateの初期化
NSDate *aDate = [inputFormatter dateFromString:@"2009-12-01 10:30:13"];

// 結果の出力
NSLog(@"%@", aDate);

##結果
# 2009-12-01 10:30:13 +0900


なぜですか???
79名称未設定:2009/12/01(火) 11:18:10 ID:4qPHm1iC0
>>78
結果の出力は
2009-12-01 19:30:13 +0900
となって正しいでしょ
UTCで出力なら stringFromDate: を使いましょう。
80名称未設定:2009/12/01(火) 11:53:28 ID:+zlY195I0
C文字列でマルチバイトを扱いたい時はどうすればいいのでしょう?
wchar_t moji[255] = _T("日本語");
_TマクロとかLに相当するようなものはありますか?
wchar_t *moji = "日本語";
NSLog(@"%s", [[NSString alloc] initWithCString: moji encoding:NSUTF8StringEncoding]);
wchar_tに"日本語"はだめだろうしinitWithCString: mojiも型というかサイズが違うのでだめなのはわかるのですが・・・
CFString系のなにか関数をつかうのでしょうか?

おねがいします
81LANG=kansai_jp.UTF-8:2009/12/01(火) 12:21:31 ID:2+2x02R+0
基本的にソースコードにはいわゆるASCII以外は使わないほうがいいです。

簡単なのは NSLocalizedString()を使う方法です。

NSString *hoge = NSLocalizedString(@"hoge",@"hoge");
としておいて
Japanese.lproj/Localizeble.strings(UTF-16が標準。xcodeで指定すれば他でも可)

"hoge" = "なんでやねん!";
て書いとくとhogeに @"なんでやねん!"が代入される。
ビルド後でも、ユーザが
"hoge" = "なぜですか?";
って書き換えればhogeに代入されるNSStringも変わる。


って書いたけど希望してるものとずれてる気がしてきたw
82名称未設定:2009/12/01(火) 15:40:55 ID:8nKHZiOV0
>>80
>wchar_t *moji = "日本語";

何これ? ワイド文字列とC文字列を混ぜないように。 コンパイラに文句言われたでしょ?

>NSLog(@"%s", [[NSString alloc] initWithCString: moji encoding:NSUTF8StringEncoding]);

NSString は %s じゃなくて %@。

Snow Leopard でちょろっと試した感じではデフォで UTF-8 の文字リテラルは
通るっぽいけど。ワイド文字もC文字列もNSStringも。
83名称未設定:2009/12/01(火) 16:28:47 ID:XsE/Cwo30
>>79
ありがとうございます。

自分のやりたい事としては
タイムゾーンがUTCのNSDateオブジェクトを作りたいんですが

例えば
NSLog(@"%@", aDate);

とした際に
# 2009-12-01 10:30:13 +0000

という感じにしたいですが、これって可能ですか?
84名称未設定:2009/12/01(火) 16:35:05 ID:oTYjsxjb0
NSTimeZoneなんて初めて触ったけど

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

[NSTimeZone setDefaultTimeZone : [NSTimeZone timeZoneWithName:@"UTC"]];
NSDate *aDate = [inputFormatter dateFromString:@"2009-12-01 10:30:13"];

NSLog(@"%@", aDate);

ってしたら、
2009-12-01 16:33:43.155 Test[2797:a0f] 2009-12-01 01:30:13 +0000
と出たぞ。
85名称未設定:2009/12/01(火) 16:55:48 ID:trCeX1Qg0
NSDate は時刻と時間帯の組を保持してるんじゃないよ、抽象的な、時間帯とは独立した時刻を表してるので。
だから、UTCでのNSDate とか、JSTでのNSDateとかいうものは
ありません。あくまで、ある歴史上の時刻を
特定の時間帯であらわして文字列に
する際に時間帯がからんでくるので、
上の人がかいてるように、同じNSDateオブジェクトでも
デフォルトタイムゾーンが違えば
%@で文字に変えたときの見栄えはかわります。
でもどの表示も同じ時刻でしょ?
86名称未設定:2009/12/01(火) 17:05:07 ID:7618+0oe0
>>83
NSDate には TimeZone の属性はない。メソッドとしてrefに載ってないでしょ。
NSDate = CFDate の中を見れば分かるけど中身はdoubleのみ。
ttp://opensource.apple.com/source/CF/CF-550.13/CFDate.c

なのでどうしてもTimeZone属性が必要なら、NSTimeZone と NSDate を
インスタンス変数にもつ MyDate でも作りなされ。

また、NSLog(@"%@", date); は、NSLog(@"%@", [date description]); なので、
NSDateの-(id)description;を見れば何やってるか分かる。
87名称未設定:2009/12/01(火) 17:31:58 ID:0vlzU1P60
おいおい・・NSCalendarDate使えよ。
88名称未設定:2009/12/01(火) 17:38:04 ID:/PN9YtWH0
>>87
10.6でdeprecatedにされました
iPhoneでは確か元々無い
89名称未設定:2009/12/01(火) 17:45:53 ID:7618+0oe0
- dateWithCalendarFormat:timeZone: に、
Important: NSCalendarDate is slated for deprecation, and its use is strongly discouraged. とある。やめた方が良いんじゃないかなぁ。
90名称未設定:2009/12/01(火) 20:11:22 ID:XsE/Cwo30
ありがとうございます。

アプリ外部からUTC形式の文字列の日付を頻繁に取得する必要があったので
全てUTCで統一したNSDateにしとこうってのが発端だったんですが、
自分の考え方が間違ってたみたいです。。

さっき海外のサイトググってたら奇跡的に下記のソース見つけたんで、
こんな感じでUTCからJST(?)に変換したNSDateを使おうと思います。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[df setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDate *date = [df dateFromString:@"2009-12-01 10:30:13"];
NSLog(@"%@", date);

# 結果
# 2009-12-01 19:30:13 +0900
91名称未設定:2009/12/02(水) 00:27:20 ID:7mPbRuZs0
いや、それでいいんだけど、なんかまだ勘違いしてるよ。
環境設定で timezone かえてから (たとえば +8 の国)
まったく同じコードを実行してみたら?
結果は 2009-12-01 18:30:13 +0800 になる。
だから、NSDate の中身が JST になってるわけじゃないです。

あくまで NSDate の中身は、timezone から独立した、「時刻」で、
文字列に変えるときに、パソコンの設定の timezone にあわせて
その時刻を表示するように日付文字列が計算されるわけだけど...

NSDate の時刻は 「時計の文字とtimezone 」なんじゃなくて、
いってみれば「あなたが生まれた時刻から何秒」とかいう
timezone に無関係なデータになっているんだが。
92名称未設定:2009/12/02(水) 09:06:19 ID:mloFY/Pa0
>>88
何でNSCalendarDateを廃止してしまったのか知らんけど、今までNSCalendarDate
で出来てたことが、NSDate, NSCalendar, NSDateComponents, を使わなきゃ
ならないから不便極まりない。相当のクラスを作れば済むことではあるが。
93名称未設定:2009/12/02(水) 09:55:33 ID:zvmoBQrP0
Depられてたのか知らなかったよ。

自作ソフト10.6でビルドし直したんだけど、NSCalenderDate
とか普通に使ってる。今は動いているからいいが、次は切られる
かも知れないのか。
94名称未設定:2009/12/02(水) 11:10:54 ID:OficT8Z+0
NSCollectionView にアイテムを追加する際、アニメーションが
かかりますが、そのせいでパフォーマンスが最悪になります。

2つ3つの追加なら問題ないですが100を越えるアイテムを追加すると
軽くフリーズ状態になります。

アニメーションをオフにする方法や、スムーズに追加する方法は
ないでしょうか。

よろしくお願いします。
95名称未設定:2009/12/02(水) 11:31:22 ID:+QwWGBTd0
取り敢えず
[collectionView _setAnimationDuration : 0.0];
したらどうよ?
96名称未設定:2009/12/02(水) 12:08:50 ID:2ktnE2nE0
>>94
アイテムをModelに逐次追加しているのではないですか?

IconCollectionやCollection View Programming Guideでアイテムを
Modelに追加している方法をチェックしましたか?
97名称未設定:2009/12/02(水) 12:55:08 ID:7mPbRuZs0
Snow Leopard になって GCD が追加されたので、
(単に別メソッドにしなくていいのでコードが読みやすいというだけの理由で)
performSelectorOnMainThread のかわりに喜んでつかっていたのですが、
ふたつ不注意に混ぜると危険だということがわかりました。

dispatch_async(dispatch_get_main_queue(),ブロック1)
dispatch_async(dispatch_get_main_queue(),ブロック2)

だとブロック1は必ずブロック2より先に、

performSelectorOnMainThread:メソッド1 waitUntilDone:NO
performSelectorOnMainThread:メソッド2 waitUntilDone:NO

だとメソッド1は必ずメソッド2より先に実行されますが、

dispatch_async(dispatch_get_main_queue(),ブロック1)
performSelectorOnMainThread:メソッド2 waitUntilDone:NO

とすると、ブロック1 とメソッド2 の実行される順番は
決まっていないようです。ふつうブロック1が先に実行されますが、
なんかときどきメソッド2が先に実行されるので
意味不明なバグの原因になってたのが最近わかりました。

というわけで皆さんも気をつけてね
98名称未設定:2009/12/02(水) 14:16:33 ID:OficT8Z+0
>>95
そんなメソッド無かったですorz

>>96
ありがとうございます。IconCollection を参考に、あらかじめ
配列を作っておいて、一気に追加したら劇的に速くなりました。

ですが、未だに2秒ぐらいのタイムラグがあります。
おそらく大量のアイテムを同時追加するとアニメーション処理に
時間がかかるみたいで、アニメーション処理自体をやめさせたいの
ですが、お知恵をお貸しください。
99名称未設定:2009/12/02(水) 14:23:56 ID:+QwWGBTd0
>>98
非公開なだけ、やってみろ。10.6以前は知らんけど。
100名称未設定:2009/12/02(水) 14:34:09 ID:OficT8Z+0
>>99
できました。わざわざありがとうございました。
101名称未設定:2009/12/02(水) 15:47:13 ID:nCNVq4z60
XCode でリリースビルドを作成しました。
ビルドした環境だと起動するのですが、ほかのMacにコピーすると
起動しません。
どういう原因が考えられますか?

よろしくお願いします。
102名称未設定:2009/12/02(水) 15:51:38 ID:nCNVq4z60
XCode → Xcode でした。すみません。
103名称未設定:2009/12/02(水) 15:57:43 ID:WLqyAHuO0
>>102
律儀だなw
たぶんDebug→Releaseにしてビルドし直せば良いと思われ。
104名称未設定:2009/12/02(水) 16:44:00 ID:OficT8Z+0
>>103
すみません、「リリースビルドを作成しました。」
というのはDebug→Release に変えた状態で ビルドした
という事でした。

Releaseでビルドしたら他のMacでも起動すると思うんですが、
何でだろうorz
105名称未設定:2009/12/02(水) 17:02:18 ID:JcVqdOxR0
>>104
他のMacで起動したとき、console.log のメッセージは?
106名称未設定:2009/12/02(水) 18:55:34 ID:OficT8Z+0
>>105

com.apple.launchd.peruser.501[81] ([0x0-0x188188].com.yourcompany.myApp[6990]) posix_spawn("/Users/myName/Downloads/myApp.app/Contents/MacOS/myApp", ...): Permission denied


com.apple.launchd.peruser.501[81] ([0x0-0x188188].com.yourcompany.myApp[6990]) Exited with exit code: 1

と出ました
107名称未設定:2009/12/02(水) 21:01:50 ID:XV60IRWm0
エラーがどこかで発生してるってことだな。
108名称未設定:2009/12/02(水) 21:39:26 ID:3N7uZUlWO
バンドルしてるファイルのバーミッションが切られてない?
109名称未設定:2009/12/03(木) 01:26:55 ID:z9Saq9n40
XCode Version 3.2です。
プロジェクトを作ったら、.nibが出来ます。
.xibで出来るようにしたいです。
110名称未設定:2009/12/03(木) 02:40:57 ID:rjD8/Q350
>>97
>dispatch_async(dispatch_get_main_queue(),ブロック1)
>dispatch_async(dispatch_get_main_queue(),ブロック2)
>
>だとブロック1は必ずブロック2より先に、
>
>performSelectorOnMainThread:メソッド1 waitUntilDone:NO
>performSelectorOnMainThread:メソッド2 waitUntilDone:NO
>
>だとメソッド1は必ずメソッド2より先に実行されますが、

通りすがりの疑問だがこれらは保証されてるの? たまたまそうなってるだけじゃなくて?
111名称未設定:2009/12/03(木) 06:49:39 ID:cocZSkXK0
>>108
なるほど、ありがとうございました。
112名称未設定:2009/12/03(木) 09:07:30 ID:acocEssc0
>>109
なんだこれ
113名称未設定:2009/12/03(木) 09:08:44 ID:Jd8+JAOU0
>>110
GCD のほうは main_queue は serial queue なので保証されてます。
http://developer.apple.com/mac/library/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html

performSelectorOnMainThread: のほうも、
http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Classs
をみると queue されるとあります。もうすこし詳しくは、
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html
をみると、各スレッド毎に NSRunLoop が cocoa perform selector source
という runloop source をもっていて、そこに queue されているようです。

両者は互いにはシンクロしていないようです。
114名称未設定:2009/12/03(木) 09:50:06 ID:VmUtjCjC0
>>113
別の通りすがりですがちょうど知りたい部分だったのでありがとう。
115名称未設定:2009/12/03(木) 15:13:21 ID:3SHli0iO0
NSTextView を表示されている文章にあわせて伸縮させたい
(スクロールバーを表示させずに常に全ての文章が表示されている
ように)と思っています。

NSTextView のサブクラスで、
[self setVerticallyResizable:YES];
[self setHorizontallyResizable:YES];
[self sizeToFit];

とやってみてもピクリともしません。念のため self の代わりに
レシーバを super にしてもだめでした。

もしやと思い NSTextView を包んでいるスクロールビューに
[_scrollView setFrameSize:[_scrollView contentSize]];
とやってみてもだめでしたorz
お知恵をお貸しください。よろしくお願いします。
116名称未設定:2009/12/03(木) 15:16:24 ID:Jd8+JAOU0
>>115
そんな非標準の挙動を実装しない。

ていうか文字数がどんどん増えて、view もどんどん大きくなって
ウインドウからはみ出したらどうするつもりなの?
117名称未設定:2009/12/03(木) 15:22:14 ID:3SHli0iO0
>>116
具体的は、NSCollectionView のアイテムのビューの中での話です。

NSCollectionView で、縦一列にビューを並べています。
この一つ一つのアイテムの中にNSTextView があり、表示する文章の
長さはまちまちです。長い文章が入ったときに、スクロールせずに
全体が表示されるようにしたいです。

NSCollectionView の中なので、ビューが大きくなればNSCollectionView
自体にスクロールバーがあるので問題ないと思っています。

drawRect: でやる事も考えましたが、ユーザーに文字列を選択させる
必要があるので却下しました。

118名称未設定:2009/12/03(木) 15:25:16 ID:a0CiGxYt0
>>115
正直正気を疑うが、
[self setFrameSize : NSMakeSize([[self attributedStringValue] size].width + δ, [self frame].size.height)];
とかか?
119名称未設定:2009/12/03(木) 15:27:49 ID:rjD8/Q350
>>113
110 ですがおお、なるほど。サンクスです。

で、さらに細かい疑問が... シリアルなのはあくまでディスパッチだけかな?
タスク自体は普通のスレッド同様、並列に走る...?? 変なこと聞いてるかな。
120名称未設定:2009/12/03(木) 15:33:52 ID:3SHli0iO0
>>118
え、私そんな変なことやってますかねorz

一応、文字列は折り返すようにしてあるんで、縦にのびていきます。
iChat のチャットウィンドウみたいなものを想像していただけると
良いんですが、それぞれの発言ごとに文章が長ったり短かったり
するのに応じて、吹き出しの大きさが変わります。
あれと似た事をNSCollectionViewでやりたいだけなんですが。
121名称未設定:2009/12/03(木) 15:36:05 ID:a0CiGxYt0
117読む前に118書いたんだが、というか NSCollectionView の item って個別にサイズ調節できたっけ?
昔やろうとして失敗した記憶が。
122名称未設定:2009/12/03(木) 17:59:17 ID:qgAIMSjF0
>>106
プロジェクトを保存してるディレクトリにsetuidが設定されてるんだと思うけど、どうでもいいや。
マルチはウザイから。
123名称未設定:2009/12/03(木) 22:06:16 ID:z9DHEBM90
>>115
NSTextViewは、最初から文字数に応じて伸縮するようになっています。
InterfaceBuilderのライブラリにあるTextViewは、正確には、NSTextView & NSScrollViewです。
内部の文字数が増えて、NSTextViewのサイズがNSScrollViewのサイズを超えたときに、スクロールバーが表示されます。
124名称未設定:2009/12/03(木) 23:23:50 ID:Jd8+JAOU0
>>119

>110 に引用してある GCD のドキュメントに書いてますが、
シリアルキュー内のタスクは並列には走りません。
シリアルキュー = 1 thread だと思えば判りやすいとおもいます。
(実際には違いますが。)
だから、シリアルキューを沢山つくると、各シリアルキュー内では
順番に走りますが、シリアルキュー相互は同時にはしります。
125名称未設定:2009/12/04(金) 10:33:25 ID:cy4mCVz1P
>>123
すいません、横からですが相乗りで質問したいんですけど、
NSAttributedStringでNSTextFieldCell内に表示してる時も
IBの設定だけでスクロールバーを出したりってできます?
なんか巧くいかないんですよね・・・。
126名称未設定:2009/12/04(金) 13:00:16 ID:5ieIVjab0
>>115
使ってるのはNSTextViewなの?
sizeToFitは自分で実装したの?

>>125
>123はNSTextViewの話
127名称未設定:2009/12/04(金) 20:24:06 ID:6/GlzSk/0
こんにちわ

XCode Version 3.2です。
たのしいCocoaプラグミングという本を見ながら学習し始めています。
OSはスノーレパードです。

Xcodeを起動して、プロジェクトを作成したら、Ver3.0シリーズは.nib(ニブ)ファイルではなく、xib(ジブ)ファイルが出来ると書いてありました。
そのとおり、プロジェクトをデスクトップに作ってみたのですが、.nib(ニブ)ファイルが作られています。
どうやったら、.xib(ジブ)ファイルにできるようになりますか?
128名称未設定:2009/12/04(金) 20:55:25 ID:Uo29ogOC0
>>127
>>109
お前プログラミングに向いてないと思う
129名称未設定:2009/12/05(土) 00:02:28 ID:3VPPUuLN0
>>125
それは、できません。
そういう物が欲しいなら、NSViewのサブクラスを実装してください。

↓これ参照
ttp://www.stripe-net.jp/cocoa/documents/chapter3/chapter3-6.html
130名称未設定:2009/12/05(土) 00:30:39 ID:8o0ekf7D0
>>127
うちでは xib になりますので、なんか気になるけど、
xib と nib は出来る事に全く違いがないので、
とりあえず気にせずに勧めたら良いとおもいます。

xib は nib よりソースコードマネジメントシステムと
相性がいいというのがほとんど唯一の違いですが、
このソースコードマネジメントシステムというのは、
かなり上級者むけなので、それが問題になってから
きにすればいいとおもいます。
131名称未設定:2009/12/05(土) 02:44:22 ID:ejmlN5EK0
>>124
どうも詳しい説明ありがとうございます。
お陰さまでなんとなく GCD のモデルのイメージがわいてきた気がします。

>シリアルキュー = 1 thread だと思えば判りやすいとおもいます。
>(実際には違いますが。)

タスク一個内で複数のスレッドが走るんですかね。ただしタスク同士はブロックと。
そうじゃないとパフォーマンス重視の場合にはコアの数だけキューが必要ということに
なってしまうかなと... あれ、もしかしてそうするんだったりして?

ああ、もういい加減ちゃんとドキュメントを読まないとまずいw
132名称未設定:2009/12/05(土) 09:05:43 ID:8o0ekf7D0
124ですが、もしかしてタスクって process のこと言ってますか?
GCD のドキュメント内での task というのは、dispatch_async 等で
投入されたひとつのブロックのことです。

「キュー」というのは pthread とは別物で、単に GCD が
処理を順番にこなす単位で、いくらでもつくれますし、
main thread に結びついたキューもあります。

GCD はいくつも worker threadをもっていまして、
GCD はキューの一覧をながめて、実行を待っているブロックを取り出して、
暇そうな worker thread をみつけてそこでブロックを実行します。
(main queue にあるブロックの場合は main thread で実行します。)

CPU コアがあいてるときは新たな worker thread をつくったりします。
GCD はカーネルと通信して、システム全体が忙しいときには
あまりひとつのプロセス内に worker thread をつくり過ぎないように
してるそうです。

だから、システムのパフォーマンスにあわせていくつの thread で
同時実行するかというのは GCD がほぼ勝手に決めてしまいます。
キューはあくまで順次実行させるための補助的なものです。
133名称未設定:2009/12/05(土) 15:43:44 ID:S0nFDRc40
アジェンダの宛名職人や
ttp://www.atenasyokunin.com/products/ver16/design.html
アクト2のHydra
ttp://www.act2.com/products/hydra.html#tab3
とかって多分 System/Library/PrivateFrameworks の iLifeMediaBrowser.framework を使っているようなのですが、
商用ソフトでアンドキュメントなところを触って良いのでしょうか?
特にAppleからの制限はなくてそれぞれの at your own risk で構わないのでしょうか。
134名称未設定:2009/12/05(土) 17:36:45 ID:bNBaKYJM0
そもそもドキュメント化されていないフレームワークをどうやって使うんだ?
しかもハイリスク・ローリターンで。そんな無謀なことはしないだろう。
君の勘違いじゃないのか?
135名称未設定:2009/12/05(土) 19:16:49 ID:V74ebiWP0
>>133
そのソフトを使った事は無いけど、
iPhotoの写真にアクセスするという意味なら、普通に出来るぞ。
データそのものは普通にファイルとして存在しているんだし。
136名称未設定:2009/12/05(土) 20:30:47 ID:3bFTtiF40
>>134
俺は商用アプリ作ってるわけじゃないけど、Undocumentedなフレームワーク使うこともあるよ
ダンプすれば大体使い方はわかるし
137名称未設定:2009/12/05(土) 20:51:16 ID:t8qpAQo80
Cover Flow とか自分で見よう見まねで作るよりは IKImageFlowView 使う罠。まだ公開されてないよな?
138名称未設定:2009/12/05(土) 20:54:52 ID:3bFTtiF40
されてないね
139名称未設定:2009/12/06(日) 00:17:32 ID:bjEV4mMB0
140名称未設定:2009/12/06(日) 00:18:41 ID:bjEV4mMB0
>>139
あ、表示させたら左右矢印(iPhoneならフリック)してみてね。
141名称未設定:2009/12/06(日) 07:24:02 ID:zO63KeIq0
>>139
リンク先のカバーフロウも、挙動がちょっと違うでしょ。
「Cover Flow とか自分で見よう見まねで作るよりは」
っていうのはそういうことを言ってるの。

下手に再現しようとして挙動がちょっとでも違うと、
ユーザー体験がおかしなことになる。
142133:2009/12/08(火) 00:30:16 ID:gVkp6BJ20
>>134
体験版を落としてバイナリを調べてみたところ宛名職人に関しては見た目を模してそれらしく作っているようですね。Hydraは体験版ないので分からないですが。
>>135
すみません。そういう意味ではありません。
聞きたかったのは最後の2行です。例が悪かったですね。

他の方もおっしゃってますが、まさしくIKImageFlowViewなんか使えるなら使いたいところなのです。
Appleに置いてあったCoverFlowもどきのサンプルなんかもだいぶ挙動違いますし、模倣するのはなかな手間です。
(ただし手を抜いたパチものだとユーザの印象が、、と>>141さんと同意見ですね。)
143名称未設定:2009/12/08(火) 01:34:49 ID:9MiTgLEhP
OSのアップデートでそのAPI無くなっても文句言えないけどね。
144名称未設定:2009/12/08(火) 01:37:51 ID:nneksJ1h0
別の方法を考えた方が良いんじゃないか?
絶対CoverFlowじゃないとダメという事でもあるまい。
145名称未設定:2009/12/08(火) 02:25:00 ID:eSDMhVkL0
すみません、
NSMutableArrayとかNSArrayに入れたエレメントが持つプロパティへのアクセスってどうやってやるんでしょうか。
[array objectAtIndex:0].property=ほにゃ
とかだと鬼のようにエラー吐かれて若干傷ついてます。
146名称未設定:2009/12/08(火) 04:00:23 ID:gTfcUURr0
Nsarray から取り出すと型の情報がなくなって
id になってます、だからエラーが出ます。
一度 Hoge* hoge=[array objectAtIndex:0]
とかしてください。
147名称未設定:2009/12/08(火) 06:48:53 ID:bSCTQSVt0
>>143
しいて言うと、もしそれが発生すると iLife とかも動かなくなって非難ごうごうの
可能性が。なので「多少」安全かもw
まあ、新しい OS 用のアップデータが出るような場合は要注意か。

なお /Applications とかの標準アプリは OS と共に入れ替わるので、こいつらが
参照しているものは、iLife とかより危険。
148名称未設定:2009/12/08(火) 08:17:24 ID:C3KAL/vD0
>>146
(Hoge *)[objectAtIndex:0].property=ほにゃ でも可
繰り返し呼び出すなら>>147の方が微妙に早いかも
149148:2009/12/08(火) 08:20:15 ID:C3KAL/vD0
アンカミスった
×>>146 → ○>>145
×>>147 → ○>>146
150名称未設定:2009/12/08(火) 09:22:03 ID:rvjaBj7v0
>>147
さらに強いて言うと、iLifeと言えどもすべてのバージョンがすべてのMac OS Xの
バージョンで動くわけじゃないから、そんなの保険にならないよ。
151145:2009/12/08(火) 09:58:29 ID:lnuBQOTX0
>>146 , >>148
ありがとうございます!
152名称未設定:2009/12/08(火) 10:23:30 ID:PDhgKU9B0
>>148
. の結合ってキャストより弱かったっけ ...
153名称未設定:2009/12/08(火) 12:11:25 ID:49DEz9RQ0
>>152
うん。
154名称未設定:2009/12/08(火) 12:55:13 ID:qKMYW+zsP
カバーフロウなんて開発者の自己満足以外何物でもないよ。
利用者は2秒で飽きて、その後はウザく感じるようになる。
155名称未設定:2009/12/08(火) 15:30:32 ID:YLBQHzjV0
>>154
iPhoneのようなタッチパネルインターフェースではいいUIだよ。
マウス向きではないね。
156名称未設定:2009/12/08(火) 16:50:29 ID:+zUBZTnjP
沢山の書類や画像の中からマウスホイールで目的のを探すのに便利だしな。
157名称未設定:2009/12/08(火) 16:59:27 ID:49DEz9RQ0
NSTableView や IKImageBrowserView で表示するならついでに Cover Flow も無いと画竜点睛を欠くというか。
158名称未設定:2009/12/08(火) 17:18:07 ID:NS163ltI0
確かに、狭い画面でパラパラ探せるタッチインターフェイスには便利だね。
159名称未設定:2009/12/08(火) 22:24:59 ID:UicPY5KI0
coverflowなんて使ったこと無いよ
160名称未設定:2009/12/08(火) 22:26:25 ID:KKFaUoP60
>>150
>>147 は保険というより、どこまで綱渡りが可能かを見定める話。

てゆうか「すべてのバージョンがすべての Mac OS X のバージョン」って、意味ある?
そんなこと言ったら公開されてる API だって「保険」にはならないよ。
161名称未設定:2009/12/09(水) 00:38:33 ID:VzRIdIa+0
deprecatedされるAPIは大抵替わりのAPIがある。そこを間違えないで欲しいな。
162名称未設定:2009/12/09(水) 01:08:16 ID:/2hkQIcR0
>>161
「大抵」とか書いちゃってる時点で説得力ゼロだな
163名称未設定:2009/12/09(水) 02:26:27 ID:GtVMIiKe0
実際10.5でQuickLook のUIの非公開APIつかってたら、10.6になって公開されたAPIは全然違ってて案外書き直すはめになったよ
164名称未設定:2009/12/09(水) 11:50:47 ID:aB/4P5gc0
あー確かに。
165名称未設定:2009/12/09(水) 12:38:58 ID:SFZdtUZ8P
Wifiも。
166名称未設定:2009/12/09(水) 15:27:56 ID:PKquZB3+P
snow leopard/XCode 3.2 + cocoaで使える正規表現フレームワークってないもんですかね
OgreKitはフレームワークのビルド時にエラーになるし
cocoaonigurumaもインポートしていざ実行しようとするとfatalエラーになるし
167名称未設定:2009/12/09(水) 15:59:50 ID:sbQ+fGvT0
うちではどちらも使えるので問題ありません。
168名称未設定:2009/12/09(水) 16:26:25 ID:PKquZB3+P
あれ?
インポートの仕方が悪かったのかな。
こっちでは__dyld_dyld_fatal_errorになる。
169名称未設定:2009/12/09(水) 16:49:30 ID:8v+wEM8p0
RegexkitLite で僕は満足してるけど。
170名称未設定:2009/12/10(木) 12:51:41 ID:xivzNiDH0
俺は本家の鬼車をそのまま使ってる。NSStringで処理してるわけじゃないから。
171名称未設定:2009/12/11(金) 16:41:32 ID:MHrYeI5d0
僕もRegexkitLite使ってる。
鬼車より扱いやすい。
172名称未設定:2009/12/11(金) 19:32:58 ID:E0NiVxqx0
僕も僕も
173名称未設定:2009/12/11(金) 19:48:05 ID:kX0D5eyG0
どうぞどうぞ
174名称未設定:2009/12/12(土) 01:24:15 ID:ymqlhDPr0
自力では原因が特定できない状況に陥っているで、すみませんが質問
させてください。

最初、NSTableView + NSArrayController でデータの表示を実装しました。
ひとつのセルに表示させたい値が複数あったので、NSDictionary の辞書に
値を入れて伝え、 objectValue で取り出して表示していました。これは正常に
動作しました。

次に、これを NSOutlineView + NSTreeController による表示に変更し
ようと思いました(階層にしたいわけではなく、 item に対応するオブジェクトを
直接取得できる点でNSOutlineView が便利なため)。
なお、NSTableView → NSOutlineView に、
NSArrayController → NSTreeController に 変更しただけで、バインディング
のキー、その他もろもろは変更していません。NSTreeController の
childrenKeyPath にはきちんと入力しました。

ところが、objectValue でさきほどと同じようにデータを取得したのですが、
いっさいデータがセルまで届いていないのか、データが一切表示されません。
NSLog ([ [self objectValue] description]); でも何も出力されませんでした。

一応、配列の数だけ NSOutlineView の行が作られているようなので、
配列の要素の数はきちんと NSTreeController を通してTableColumn
まで届いているようなんですが...

「配列の要素の数」はうまく伝わっているのに、データの内容が伝わっていない
という状況から、どんな原因が推測できるでしょうか。
お力添えを頂けると幸いです。
175名称未設定:2009/12/12(土) 02:04:21 ID:1aO+18ST0
実際に cell のクラスは何にしてるわけ?
outlineView:willDisplayCelll:forTableColumn:item:
をつかって何が起こってるかちょっと調べてみては。
176名称未設定:2009/12/14(月) 17:14:47 ID:bvLMbHXS0
>>175
週末いろいろやってみましたが、原因特定できませんでしたorz
Cell のクラスは setDataCell でカスタムセルをセットしてます。

まぁ、頭を冷やしてゆっくり原因を考えてみます。
177名称未設定:2009/12/14(月) 17:51:56 ID:yfJ5j3vuP
アイテムの親はnilにしてますか?
親なしで単に表示されないとか。
178名称未設定:2009/12/14(月) 23:50:25 ID:76MZJRO40
>>176
NSTextFieldCellのsetObjectValue:を上書きしたcustom cellを数年来使っていますが
NSOutlineView, NSTableViewともに問題なく動いています。
setObjectValue:はどういう実装をしているのでしょうか?
179名称未設定:2009/12/15(火) 12:43:31 ID:E8y3E7BN0
いろいろとありがとうございます。

>>177
アイテムの親は nil にすべきということですか?

>>178
setObjectValue メソッドの中で

NSLog ( [obj description] ); を試したところ、
 
<NSTreeControllerTreeNode: 0x2002e4c40>, child nodes {}

が出力されました。
180名称未設定:2009/12/15(火) 13:04:54 ID:aBH8H2it0
>>179
arrangedObjects.propertyではなくてarrangedObjectsとbindしているわけですね。
其の場合、objではなくてobj.representedObjectとしないといけません。

arrangedObjects.propertyでdictionaryを渡すほうが良いと思います。
bindingだけではなく、dataSourceを使う場合でも同じでしょう。
181名称未設定:2009/12/17(木) 01:09:13 ID:dlIxSTmp0
>>180
ありがとうございます。

representObject とするのは、セルに渡されたオブジェクトを取得するときに
[[self objectValue] representedObject];

のようにすれば良いのでしょうか。こうしてみましたが、やはりデータが
表示されませんでした。

バインド時にプロパティを空欄にして arrangedObjects に バインドする
のは、某ブログの記事を参考(他人のブログなのでURLは控えます)
にしましたが、プロパティを空欄というのはあまりよろしくないの
でしょうか。
182名称未設定:2009/12/17(木) 12:17:31 ID:khs+rI3G0
>>181
arrangedObjectsとかselectionでbindしていると渡されるのは
オブジェクトそのものではなくてproxy objectの場合があります。
あなたの場合もこれでしょう。
試していませんが、arrangedObjets.selfでいけるかもしれません。

参考にomni frameworkのOATextWithIconCellの該当部をコピーします。

- (void)setObjectValue:(id <NSObject, NSCopying>)obj;
{
if ([obj isKindOfClass:[NSString class]] || [obj isKindOfClass:[NSAttributedString class]]) {
[super setObjectValue:obj];
return;
} else if ([obj isKindOfClass:[NSDictionary class]]) {
NSDictionary *dictionary = (NSDictionary *)obj;

[super setObjectValue:[dictionary objectForKey:OATextWithIconCellStringKey]];
[self setIcon:[dictionary objectForKey:OATextWithIconCellImageKey]];
}
}
この方法でbindingでもdata sourceでも、うまくいきます。
183名称未設定:2009/12/17(木) 17:14:28 ID:hHUlKpgw0
>>182
proxy object は初めて聴いたので、大変勉強になりました。
ご指摘の通り proparty にバインドし、無事表示され、解決しました。

サンプルコードまで貼っていただいて、本当にありがとうございました。
184名称未設定:2009/12/20(日) 12:22:07 ID:ZEyCU9XR0
すみませんが質問させてください。
商品分類と商品名が格納されているArrayがあり(商品分類の順番にソート済み)、
そこから商品分類をキーとしたDictionaryを作成したいです。
以下のコードだと、最後の1件しか格納されません。
   ([_array removeAllObjects]の時に、_dictの内容まで削除されている?)
例えば、
 野菜(key)  きゃべつ、きゅうり、大根
 くだもの(key)  バナナ、いちご
の時、
 野菜(key)   いちご
 くだもの(key)  いちご
になります。
試しに、[_array removeAllObjects];をコメントアウトすると、
 野菜(key)   きゃべつ、きゅうり、大根、バナナ、いちご
 くだもの(key)  きゃべつ、きゅうり、大根、バナナ、いちご
になります。
185名称未設定:2009/12/20(日) 12:22:51 ID:ZEyCU9XR0
これがコード抜粋です。

NSString *_key = [[NSString alloc] initWithString:@""];
NSString *_string = [[NSString alloc] initWithString:@""];
NSString *_oldKey = [[NSString alloc] initWithString:@""];
NSMutableArray *_array = [[NSMutableArray alloc] initWithCapacity:0];
NSMutableDictionary* _dict = [[NSMutableDictionary alloc] initWithCapacity:0];

for( int i = 0 ; i < [別のArray count] ; i++ )
{
_key= 別のArrayの商品分類[i];
_string = 別のArrayの商品名[i];
if (![_key isEqualToString:@""] && ![_key isEqualToString:_oldKey]){
[_dict setObject:_array forKey:_oldKey];
[_array removeAllObjects];
_oldKey = _key;
}

[_array addObject:_string];
}
[_dict setObject:_array forKey:_key];

self.output = _dict;

[_key release];
[_string release];
[_oldKey release];
 [_array release];
[_dict release];
186名称未設定:2009/12/20(日) 12:52:17 ID:qiEClLC10
何をやりたいのか日本語が全く判らん。
まず、入力の例を書いて、どういう出力なら正しい出力なのか書いてください。
うまく行かないばあいの出力だけ書かれてもエスパーじゃないのでわかりません。

あと、retain / release が全然おかしいので、
その調子でプログラムかいてたらいずれクラッシュしまくりで
困った事になりますよ。
a = [[NSString alloc] init] ;
a = @"foo";
[a release];
だとはじめにつくった NSString がリークします。
2行目の代入は、一行目でつくったオブジェクトの中身を
書き換えてるんじゃなくて、a が差すオブジェクトを、
一行目でつくったものから @"foo" という別のオブジェクトに変える
ということなので、3行目の release ははじめに作ったオブジェクトには
送られないです。

http://developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html 
のあたり参照。

(わかってるひとへ:実際は NSPlaceholderString だからという
細かい話は今のところは無しね)

187名称未設定:2009/12/20(日) 13:13:46 ID:ZEyCU9XR0
希望の結果は、
 野菜(key)  きゃべつ
 野菜(key)  きゅうり
 野菜(key)  大根
 くだもの(key)  バナナ
 くだもの(key) いちご
の5件です。
188名称未設定:2009/12/20(日) 13:23:32 ID:eHWeSiku0
>>187
[NSDictionary dictionaryWithObjectsAndKeys:
[NSArray araryWithObjects: @"きゃべつ", @"きゅうり", @"大根", nil], @"野菜",
[NSArray araryWithObjects: @"ばなな", @"いちご", nil], @"くだもの",
nil];

したい分けじゃないのかよ。 あと「苺」は野菜だろjk
189名称未設定:2009/12/20(日) 13:44:39 ID:ZEyCU9XR0
お手数かけてすみません。

入力は、他からGetしてきます。
      商品分類   商品名
 -----------------------------------------------------
 1件目: 野菜    きゃべつ
 2件目: 野菜    きゅうり
 3件目: 野菜    大根
 4件目: くだもの  バナナ
 5件目: くだもの  いちご
の5件が順次降ってくるので、
  (当然、20件のこともあれば、30件のこともあります。)
for文でまわしながら、
 野菜の3種と、くだものの2種を
dictionaryに格納したいだけです。
for文で、毎回、商品名をarrayに格納して、
  [_array addObject: 商品名];
キーが野菜からくだものへチェンジした時に、dictへarrayをsetしています。
  [_dict setObject:_array forKey:商品分類のキー];
ここで、
  [_array removeAllObjects];
すると、_array の内容だけではなく、_dictの内容までクリアされてしまうのが問題です。

190名称未設定:2009/12/20(日) 13:45:34 ID:qiEClLC10
>>187
入力は何なのかがまだ分からん。
array1 に 野菜、野菜、野菜、くだもの、くだもの、
array2 に きゃべつ、きゅうり、大根、ばなな、苺
って入ってるの?

あなたじゃない人が
> 商品分類と商品名が格納されているArrayがあり(商品分類の順番にソート済み)、
というのを読んで入力が想像できると思う?
聞いているひとになったつもりになってみて、
何を言えば伝わるだろうか考えてください。
あなたのなかの暗黙の了解は伝わりませんよ。
191名称未設定:2009/12/20(日) 13:54:21 ID:qiEClLC10
>>189
あ、わかりました。入れ違いになりました。

ええと、厳しい事をいいますが、
あなたは Objective-C のオブジェクトって何かというのを
いちど一から勉強しないといけないと思います。
上の retain/release のところでも書いたのとおなじ問題ですが...

1: NSMutableArray* array=[NSMutableArray arrayWithObjects:@"foo",@"bar",nil];
2: NSMutableDictionary* dict=[NSMutableDictionary dictionary];
3: [dict setObject:array forKey:@"zot"];
4: NSArray* c=[dict valueForKey:@"zot"]
5: [array removeAllObjects];
というのを考えましょう。

1. では、array というポインタは +[NSMutableArray arrayWithObjects:] で作られたインスタンス (仮に A とする) を差します。
3. では、 dict の key @"zot" に A が関連付けられます。
4. では、 それを取り出すので、c は A を差します。
この時点で array も c も同じオブジェクト A を差している事に注意。
5. 「array の差しているインスタンス」に全部オブジェクトを取り除け、
といってます。すると、A が空になるので、array も c も空です。
というか array も c も相変わらず A を差してます。わかった?

だから、あなたのコードだと、@"やさい" も @"くだもの" も
NSMutableArray *_array = [[NSMutableArray alloc] initWithCapacity:0];
でつくられた同じ NSMutableArray のインスタンスを差してます。
当然、そのインスタンスに removeAllObjects を呼ぶと、空になるでしょ。
192名称未設定:2009/12/20(日) 14:13:44 ID:ZEyCU9XR0
ありがとうございます。

> いちど一から勉強しないといけないと思います。

はい、その点は同感です。

> というか array も c も相変わらず A を差してます。わかった?

はい、「同じものを差しているから、arrayのみならず、dictも一緒にクリアされるのだろう」ということは気づいていました。
どうすれば良いでしょうか?
193名称未設定:2009/12/20(日) 14:24:06 ID:2Gp9702M0
ここで一から聞くよりまず本を1冊買って勉強した方がいいよ。
194名称未設定:2009/12/20(日) 15:05:15 ID:ZEyCU9XR0
。。。。。。。
結構、難しいものでしょうか?
では、考え方としては、dictを確保するところが問題なのか?
_dictにsetObjectしているのが間違いなのか?
その辺のヒントだけでももらえませんか?

本は5冊くらい読んだのですが。。。

195名称未設定:2009/12/20(日) 15:26:53 ID:eHWeSiku0
超簡単。単に君の理解が人とはズレてるだけ。
keyArary:商品分類Arary
nameArary:商品名Arary
としよう。
以下一時オブジェクトではなくrelease を使う例。

NSString *key, *name;
NSMutableArray *arary;
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; // カウント1

for(int i = 0; i < [_keyArary count]; i+) {
key = [keyArary objectAtIndex : i];
name = [nameArary objectAtIndex : i];
arary = [dict objectForKey : key];

if (array != nil) {
[array addObject : name]
} else {
arary = [[NSMutableArray alloc] initWithObject : name]; // カウント1
[dict setObject : arary forKey : key]; // ここで array は retain されるので、カウント1→2。また、key はコピーされる。
[arary relese]; // カウント2→1
}
}
self.output = dict; // @property(retain) なら、カウント1→2

[keyArary release];
[nameArary release];
[dict release]; // カウント1→2
で終了。あと、removeAllObjects なんて意味不明なことする必要ない。
196名称未設定:2009/12/20(日) 15:39:01 ID:qiEClLC10
>>194
>本は5冊くらい読んだのですが。。。
プログラミングは理論だけでも実践だけでも駄目だよ。
勉強しながら実践していかないと、判ったつもりでも判ってない事が多いです。
いま実践をはじめたということですから、これから徐々に
判ってきますよ。頑張ってね!

とりあえず、あなたの場合は、あんまり一回作ったオブジェクトを
使い回ししようとしないほうがいいと思います。
言い換えれば、ソースコード上に NSArray* array; とあったばあい、
array が差しているオブジェクトはどんどん変わりうるし
変えていいということを理解してください。

key ごとに違う配列を突っ込みたいわけですから、
key ごとに違う NSMutableArray のインスタンスを作りましょう。
その場合、ソースコード上の一ヶ所の NSMutableArray*array が
実行に応じていくつものインスタンスを差しうるというのを
理解してください。

とすると >>195 さんのようなコードになります。

>>195
アレイがときどきアラレになってるべ。
197名称未設定:2009/12/20(日) 15:58:27 ID:eHWeSiku0
ホントだワロタ
198名称未設定:2009/12/20(日) 16:12:03 ID:imTMVJnu0
>>194
>本は5冊くらい読んだのですが。。。

お前のは読んでるんじゃねぇ!
眺めてるんだバーロー!
199名称未設定:2009/12/20(日) 16:29:16 ID:ttl7ev1I0
珍しく盛り上がってると思えばこれかよw
200名称未設定:2009/12/20(日) 16:46:09 ID:IZ8LIeHe0
横からROMってただけだけど勉強になりました。

インスタンスって本で読んで分かったつもりだけど
実践してみると難しい。俺も最近なんとなく分かってきた。
201名称未設定:2009/12/20(日) 16:50:03 ID:ZEyCU9XR0
>>195
動きました。ほんとに涙が出てきました。
ご親切にありがとうございました。本当に助かりました。

>>196
ご親切にありがとうございます。
説明よくわかりました。
今回の点を踏まえて本を読んでいきます。

みなさま、本当にありがうございました。
202名称未設定:2009/12/20(日) 17:02:10 ID:2Gp9702M0
>>194
>>本は5冊くらい
てマジかよ・・。理解が足らないのは読んだ数ではなくて読む順番がまずいかもね。
まずたのココで基礎を固めるのがいいと思うよ。
あと書籍のは読むだけじゃなくてちゃんとサンプルコードを実装して動作を試すこと。
203名称未設定:2009/12/20(日) 17:26:59 ID:ttl7ev1I0
受験勉強でもそうだよな。
参考書を何冊も買うより、1冊に集中した方が効率が良い。
当たり前だけどな。
204名称未設定:2009/12/22(火) 04:25:45 ID:0pgTZ5nP0
<ちらしの裏>
ある日、突然 NSSplitView の分割幅の autosave がうまくいかなくなって、
プログラムの起動、終了を繰り返すだけでなにもしていないのに
徐々に divider の位置がずれるようになったので数日頭を悩ませていたのですが、
意外な原因がわかりました。起動時間短縮その他のために、
その NSSplitView が入っている NSWindow の "Visible at launch" を外して
あとで表示するように変更したのですが、何故か window が表示されていないと、
NSSplitView が nib から読み込まれた段階で自分の分割幅を変えてしまうようでした。
(NSSplitView のメソッド呼び出しをがんばってデバッガで調べました)
結局 Visible at launch にチェックを入れると問題なくなったのですが、
同じ問題を再現する小さなプロジェクトをつくろうとしても
そんなバグは起きないので、何か他のところがおかしいのかもしれませんが...
同じことで悩む人がいるかもしれないので書いておきます。
</ちらしの裏>
205名称未設定:2009/12/22(火) 22:20:52 ID:ypCbcNsC0
>>204
たしか、NSSplitViewの分割幅って、2つのsubviewのframeRectから算出されるんじゃなかったっけ?
NSSplitViewだけじゃなく、subviewの動きにも注目してみては?
206名称未設定:2009/12/23(水) 08:50:47 ID:sg6hopIX0
Snow Leopardでマウスカーソルの下のテキストを取得するのは
Accessibilityを使えばできそうですが、
他に方法があるんでしょうか。
207名称未設定:2009/12/27(日) 16:36:11 ID:zcA7DrTN0
CoreData つかった pdf 管理ソフトを作ってるのですが、
いい加減データベースが(SQLite で)60MBこえて、
タイムマシンで毎回全体をバックアップしているのが馬鹿らしいです。
10.6 から Spotlight 用に、
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/SpotlightCoreData/Articles/recordLevel.html
という機能がついたそうなんですが、これを悪用して、
external records をタイムマシンにバックアップさせて、
データベース本体は CSBackupSetItemExcluded で
バックアップさせなくしようかと思うんですがやってみたひといますか?

ドキュメント読んでも、managed object model versioning とのかねあいが
よく判らないのでちょっと怖いです。
208名称未設定:2009/12/27(日) 17:34:38 ID:Edk56jSA0
pKizzy の中の人?
209名称未設定:2009/12/27(日) 22:16:33 ID:lOyzvHu40
SnowLeopard でウインドウに WebView をのっけてビルドすると、
SIGABRT シグナルが出てクラッシュするのはうちだけでしょうか。

Xcode でひな形生成直後にWebView を置いただけで出る症状なんですが。
210名称未設定:2009/12/28(月) 03:30:29 ID:5515N3rQ0
>>208
残念ながら違います。論文のコピーをオンラインデータベース、
プレプリントサーバーと同期しつつ管理するソフトを書いてます
211名称未設定:2009/12/28(月) 05:10:16 ID:5515N3rQ0
最近はやりの stackoverflow に行って質問してみたら、2ch より酷い絡み方をしてくるひとがいて困ったよ。しくしく
212名称未設定:2009/12/28(月) 17:34:19 ID:h/rACTt90
>>211
レベルアップのファンファーレが聞こえただろ?
213名称未設定:2009/12/31(木) 23:48:04 ID:q8xEGpcv0
CoreData を活用したプログラムを組みたいのだけど、
本格的にMacで開発するのも初めてで戸惑っています。
何か良い、CoreData用の入門サンプルってないですかね?
214名称未設定:2010/01/01(金) 00:41:38 ID:+D4L4BXR0
215名称未設定:2010/01/03(日) 08:30:11 ID:0VN3sOsl0
>>213
>>214 から抜粋だけど、

Prerequisites
Core Data is not an entry-level technology. It leverages many other Cocoa technologies
and design patterns. You must understand these technologies and patterns before you
can use Core Data effectively:

とある。

Mac すら初めてな状態で Core Data まで手を出すのは、無謀としか言いようが無い。

216名称未設定:2010/01/03(日) 09:21:38 ID:N2p+Txrb0
>>213
とりあえず、HMDTの2ndと3rdを読んでみては。
217名称未設定:2010/01/04(月) 14:06:11 ID:fPuW+5Rn0
<ちらしの裏>
CoreData つかっていて、delete rule 通りに to-many relationship を
nullify してくれなくて
object graph が invalid になってしまうので頭を悩ませていたんですが、
原因が分かりました。
entity A に、entity B への relationship hoges があったんですが、アクセッサを
-(NSSet*) hoges
{
対応する hoges を計算して [self setPrimitiveValue: forKey:hoges ]で設定
return [self primitiveValueForKey:@"hoges"];
}
ということをしていました。(fetched property よりちょっとややこしいことをしたかったので。)
そうすると、entity A の managed object が deleteObject: される際に、
CoreData が delete rule を辿る際に、primitiveValueForKey:@"hoges"
じゃなくて僕の定義したアクセッサ -hoges を何回も読んでしまうようです。
なので、CoreData が関連を削除中に、関連が復活してしまうということに
なって、CoreData を混乱させていたのでした。

10.6 からは prepareForDeletion というメソッドが削除前によばれるので、
そこで準備をすれば問題なくなりました。

以上、似たようなことでハマる人もいるかもしれないとおもって書いておきます。
</ちらしの裏>
218名称未設定:2010/01/04(月) 17:52:53 ID:t231n6Wi0
皆さん自分用のフレームワークを作る時、クラス名の接頭語はどのようにしていますか?
Shiiraのソースコードを覗いてみたところ、フレームワーク名はHMDTHoge、クラス名はHMHogeとなっていましたが、自分の使いたい2文字の接頭語は既存のCocoaのクラスで既に用いられているものでした。
そこで別の接頭語を考えようと思ったのですが、2文字の接頭語だと将来Appleが同じ者を使用する恐れがありますよね。
そうすると3文字や4文字の接頭語にした方が良いのか、しかし4文字ともなるとそれはそれで面倒だし読み辛い気もするし、皆さんどのようにしているのか気になったわけです。
プロジェクト内でのみ使用するクラス、プロジェクトのフレームワーク内のクラス、複数プロジェクトで使用する共通フレームワーク内のクラスと3通りあると思いますが、3つ目、一番最後のものに関してご意見よろしくお願いします。
219名称未設定:2010/01/04(月) 19:31:26 ID:CxwdjMRI0
>>218
Objective-Cには名前空間がなく、接頭語にも完璧な命名ルールはありません。
Shiiraの接頭語HMも、将来的にAppleが使用する可能性を考えて付けている訳ではないでしょう。

なので、将来的にも名前の衝突を避けようとするなら、プロジェクトことに、名前を変えられるようにしてみるというのはどうですか?
クラス名を自動的に書き換えてくれるコマンドラインツールでも作っておけば、クラス名の変更も苦にはならないでしょう。
220名称未設定:2010/01/04(月) 20:28:40 ID:KAymmBAJ0
クラス名の変更はXcodeのリファクタリングで一撃ですよ。
プロジェクトに含まれるnib,xib内までごっそり変更してくれます。
221名称未設定:2010/01/04(月) 21:51:45 ID:t231n6Wi0
>>219
名前空間という単語、初耳でした。勉強になります。
>>220
分かりました。今のところとりあえず、自分が分かりやすい接頭語を付けておくことにします。

やはり将来的に名前の衝突というのはあり得る、その時は名前を変える(メンテナンスをする)必要がある、ということが分かり大変助かりました。ありがとうございます。
/*詳しくないので適当な事を言いますが、runtime APIを用いて既に所定の文字列のクラスが(Appleによって)使用されていたら、動的に自分のクラス名を置き換えるなんてこともできるかも?知れませんね。*/
222名称未設定:2010/01/05(火) 01:51:29 ID:Y25F4foi0
ここ
http://rentzsch.github.com/mogenerator/
のキャラクターって可愛くね?名前なんて言うんだろう...
223名称未設定:2010/01/05(火) 02:10:25 ID:Y25F4foi0
>>221
自分で使い回すライブラリをつくってるんでない、
ひとつのアプリケーションだけのためのクラスの場合は、
いっそのこと大文字二文字で始まらないクラス名にしておくと
めったに衝突しないとおもいます。
224名称未設定:2010/01/05(火) 02:37:51 ID:ljbpmOGg0
とりあえずMyでおk
こっぱずかしいのは認める
225名称未設定:2010/01/06(水) 16:41:37 ID:y7iSdMri0
インスタンスについて理解がおぼつかないので教えてください。

myClass でインスタンスをいくつか作ります。
それぞれのインスタンスはインスタンス変数をいくつか持っています。

このときに、 myClass が持っている全てのインスタンスのインスタンス変数に
同じ値を設定したい場合は、どうすればいいのでしょうか?
226名称未設定:2010/01/06(水) 17:25:16 ID:YOsHJ+BKP
配列に入れとくとか、通知機能で一斉に通知を受けて処理とか。
227名称未設定:2010/01/06(水) 17:42:03 ID:H0LoRlFP0
通知機能を使うとオブジェクト指向っぽくて格好いい。Observerパターン。
228名称未設定:2010/01/06(水) 17:59:34 ID:C2cpjwgX0
>>225
同じクラスの全てのインスタンスで、同じ変数を共有したいなら、staticなクラス変数を定義するとか
229名称未設定:2010/01/06(水) 18:02:25 ID:jK8+pi7K0
クラス変数(いわゆる)ってこと? 例えば、MyClass のインスタンスは常に同じ
NSString を返すような namae 変数を持たせたいとか。この場合はクラス変数
(いわゆる)を返せば良い。GC使用コードでは、

@interface MyClass : NSObject // MyClass.h
+ (void) setMyName:(id)newName;
- (NSString*) namae;
@end

@implementation MyClass // MyClass.m
static NSString *myName;
+ (void) initialize {
 if (self != [MyClass class]) return;
 myName = [[NSString alloc] initWithString:@"my class dayo."]; // nil でも
}
+ (void) setMyName:(id)newName {
 myName = newName;
}
- (NSString *) namae {return myName;}
@end

あるタイミングでのみ、全てのインスタンス変数にある値を設定したい場合は、一つずつ
入れていくか(NSArray とかに入っていれば makeObjectsPerformSelector:withObject:
なども使える)、前の人たちが言っている通り NSNotification なり KVO なりで通知する
くらい。これもクラス変数をKVOするのが手っ取り早い気がするが。
230名称未設定:2010/01/06(水) 18:20:11 ID:jK8+pi7K0
>229の訂正。クラス変数のKVOは無理だったわ。ローカルなシングルトンでも
作って管理するんかな。それならNotificationのほうが楽か・・・
231225:2010/01/07(木) 10:24:04 ID:iftukNEb0
>>226-230 
なるほど、言語として簡単にできる仕組みがあるかと思ったんですが、
配列や通知で実装するしかないんですね。
参考になりました。ありがとうございました。
232名称未設定:2010/01/07(木) 12:45:03 ID:OBN10oXPP
言語として、と言うのがよくわからないけど、通知機能は簡単だし
便利なので覚えておいた方がいいね。
233名称未設定:2010/01/07(木) 13:03:11 ID:0qsdJ4460
ただ、class 変数をつくりたいというだけのときは、

A.h
@interface A
+(void)setHoge:(NSString*)s;
+(NSString*)hoge;
@end;

A.m
static NSString*_hoge=nil;
@implementation A
+(void)setHoge:(NSString*)s
{
[s retain];
[hoge release];
hoge=s;
}
-(NSString*)hoge;
{
return hoge;
}
@end;

でいいと思いますが。
234名称未設定:2010/01/07(木) 18:31:34 ID:UIAyFYoH0
>>233
疑似コードだとしてもひどいなこれ。
235名称未設定:2010/01/08(金) 00:47:57 ID:mondEjCH0
>>234
確かに最後の -(NSString*)hoge; は +(NSString*)hoge だな
ほかってなんか悪いの?GC 付きでしかプログラムしたことないからわかりません
236名称未設定:2010/01/09(土) 01:14:23 ID:uHnwsmda0
>>235
わからないなら書くなよ。
237名称未設定:2010/01/09(土) 01:35:30 ID:bVQZuYSL0
よく見たら過解放で即死するコードだね。おっかない。
238名称未設定:2010/01/09(土) 02:02:57 ID:L7iKaUHj0
>>237
なんで即死する?そこに書いてあるのは
セッターの三つの idiom のうちのひとつだと思うが...
-setA:(A*) a で インスタンス変数 _a に入れる際は、
1.
// まずインスタンス変数を解放するが、a==_a だったらやばいので autorelease
[_a autorelease];
// a を保持して _a にいれる
_a=[a retain];

2.
// _a と a が同じときはなにもしない、違うときは安直にやる
if(a != _a){
[_a release];
_a=[a retain];
}

3.
// とりあえず渡された変数 a を retain
[a retain];
// instance 変数を release。これで _a==a の場合も OK。
// [_a release]; [a retain] だと _a == a のとき死亡
[_a release];
// もう a は retain してあるので単に代入
_a=a;

のどれかだよね...
239名称未設定:2010/01/09(土) 02:15:11 ID:LxKTvEW00
>>209
遅レスだけど、WebKitフレームワークをプロジェクトに追加して無いのでは?

>>233のコードで、タイプミス以外に悪いところってなんですか?
日曜プログラマの俺には解らない。
240名称未設定:2010/01/09(土) 04:42:33 ID:xZmFvYny0
sと_hogeがnilの場合を考慮した方がいいと思う
241名称未設定:2010/01/09(土) 05:35:09 ID:L7iKaUHj0
>>240
Objective-C は nil には メッセージ送り放題なんだが。反応がないだけで。
http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjectiveC/Articles/ocObjectsClasses.html
とか参照。if 文で release/retain するまえに nil チェックしても、objc_msgSend (メッセージ送信の実体)で nil かどうかチェックするので無駄だよ。

Java のヌルポエクセプションとは挙動が違います
242名称未設定:2010/01/09(土) 08:32:37 ID:IGjPTc+Y0
nilチェックした方が動作は速いけどな
243名称未設定:2010/01/09(土) 09:15:43 ID:L7iKaUHj0
>>242
実データ興味があるので、どこかにありますか?ブログの記事とか。
速いというのは、レシーバーが nil の場合、それとも非 nil の場合?

bbum さんが objc_msgSend の解説を先月書いてたので貼っておきます。
http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/
244名称未設定:2010/01/09(土) 09:59:39 ID:93uZ62tw0
>>234ではないが>>233のひどいと思ったところを書くと
static変数の宣言ところでアスタリスクの前後どちらかにスペースがない。これじゃコンパイル通らないよ。
static変数をアンダーバー付きで定義してるのに、コード中では一切出て来ない。>>237はおそらくhogeの過解放のことを言ってるのだろうけどhogeは宣言すらされてないのでコンパイル通らないよ。
最後のhogeメソッドがインスタンスメソッドになっているけどこれはクラスメソッドね。
GC付きでしか書いた事ないって言うけど、だったらretain releaseいらないよね。GC無しにも対応させるために書いてるんだとしたら>>238あたりを参考に書かなければならない。
間違いではないが個人的にはsetHoge:で渡す変数名が"s"はねーよと思う。ここは"aHoge"とかにしとこうよ。
ということで、タイプミスもこれだけ連発すればひどいコードと言わざるを得ない。
245名称未設定:2010/01/09(土) 10:20:09 ID:aMqc40Yb0
結局本筋には関係ない訳ね。
246名称未設定:2010/01/09(土) 10:32:11 ID:L7iKaUHj0
233のコードが誤植だらけで酷いのは全く同意しますが、
>static変数の宣言ところでアスタリスクの前後どちらかにスペースがない。これじゃコンパイル通らないよ。

そんなのははじめて聞いた。
不安になったので手元でコンパイルしてみました。
a.m:
#import <Foundation/Foundation.h>
static NSString*a;

コンパイルは以下のとおり
gcc -c -o a.o a.m

何もエラーは出ませんでした。
まあスペース入れないのが良いコーディングスタイルかどうか知りませんが...


> >237はおそらくhogeの過解放のことを言ってるのだろうけどhogeは宣言すらされてないのでコンパイル通らない
> GC無しにも対応させるために書いてるんだとしたら>>238あたりを参考に書かなければならない。

>>233 で 過解放ってどこ?というか
>>238 のイディオム3 (というか僕はヒレガス本からコピーしただけです)
>>233 はやってることが同じだとおもうんだが。

あと、233 と 235 は別のひとじゃないの?どっちでもいいけど。
247名称未設定:2010/01/09(土) 10:36:56 ID:93uZ62tw0
>>246
おお、スペースは俺の間違いだった。
過解放は実際には起きていないから気にしなくて良いよ。
248名称未設定:2010/01/09(土) 11:27:13 ID:Mgi6nxlNP
かまってちゃんが、特に悪くもないソースに食い付いてるだけだよ。
相手にしない方が吉。
249名称未設定:2010/01/09(土) 16:30:27 ID:1//2dKGQ0
>>243
ブログを信用するタイプには見えないけどな。
自分で何億回でもループさせてタイムを測ってみればいい。
250名称未設定:2010/01/12(火) 01:27:19 ID:fpSfi1oH0
Widgetとプラグインに関して質問です

今Widgetを開発していて、一部処理をプラグイン(Objective-C)で書いてます
プラグインは内容でわけて2つ作成したんですがWidgetに2つのプラグインの読ませ方がわかりません
Info.plistに2つのプラグインを記述しても後に記述した方が読み込まれないようなのです

原因および解決方法わかるかた、よろしくお願いします
251名称未設定:2010/01/13(水) 03:45:20 ID:uzU57CAD0
http://developer.apple.com/mac/library/samplecode/WebKitPluginStarter/

がSnow Leopard (10.6)の環境で、test.htmlをSafariで開こうとすると
「〜〜このMIMEタイプに対応するプラグインがないため、〜」
といったダイアログが表示され正常に作動しません。

原因と対策方法を教えてください。
/Library/Internet Plug-Insには
WebKitPluginStarter.bundleを入れていて、10.5以下の環境では作動します。

252名称未設定:2010/01/13(水) 10:52:20 ID:iZyEKhM+0
WebView に自作の HTMLファイルを読み込ませて表示する
方法が見つかりません。
setMainFrameURL だとネット上のHTMLは読み込めるんですが、
自分で生成したHTMLを表示するにはどうしたら良いでしょうか。
よろしくお願いします。
253名称未設定:2010/01/13(水) 11:25:32 ID:svoT5tZG0
+[NSURL fileURLWithPath:]
NSTemporaryDirectory()
254252:2010/01/13(水) 11:54:39 ID:iZyEKhM+0
>>253
ありがとうございました。助かりました。
255名称未設定:2010/01/13(水) 13:20:46 ID:dpOdmxaoP
>>251
Safariが64bitで上がってて、プラグインを64bitでビルドしてないとか。
Netscapeスタイルのプラグインは32bitでも別プロセスで動くが、
WebKitスタイルのは64bit binaryが必要。
256251:2010/01/13(水) 23:11:23 ID:uzU57CAD0
>>255
アーキテクチャ:64-bit Intel
でプラグインをビルドしましたが、やはり動作しませんでした。
257名称未設定:2010/01/14(木) 15:12:54 ID:JaVKLetG0
Cocoa で ; (セミコロン)のエスケープシーケンスは何でしょうか?
¥; とやったところ Unkown escape sequence と怒られました。
258名称未設定:2010/01/14(木) 15:15:55 ID:JaVKLetG0
と思ったら ; でそのままいけるんですね。失礼しました。
259名称未設定:2010/01/14(木) 18:25:18 ID:0mUTU/p1P
>>256
手元のMacProで動いたけど、ほんとに64bitになってる?
% file Library/Internet\ Plug-Ins/WebKitPluginStarter.bundle/Contents/MacOS/WebKitPluginStarter
Library/Internet Plug-Ins/WebKitPluginStarter.bundle/Contents/MacOS/WebKitPluginStarter: Mach-O 64-bit bundle x86_64
260名称未設定:2010/01/14(木) 18:26:00 ID:0mUTU/p1P
>>256
Projectじゃなくて、Target Settingを確認。
261名称未設定:2010/01/15(金) 01:28:45 ID:8fvK20Iy0
Cocoa アプリケーションでは、iCal の左下のカレンダーや、
iTunes のカラムブラウザのように、普段は隠しておいて必要なときに
引き出しのように出てくるビューはどのように実装するのが筋でしょうか。

NSSplitView に入れて、それらのビューを表示していないときは
サイズを 0 にしておく、という事でしょうか。
これだとウィンドウ内に NSSplitView がたくさん置かれることになり、
動作が重くならないか心配です。
262251:2010/01/15(金) 02:22:04 ID:y5SfiHVd0
>>259
>>260
ありがとうございます。動作できました。

ところで、MethodSwizzleによるハッキング(主にruntime.hの命令を用いたもの)は、
10.6/64bit では対応していないのでしょうか?
ビルド時にエラーが出てしまいます。
263名称未設定:2010/01/15(金) 09:54:09 ID:nktS76FV0
>>261
iCalやiTunesが実際にNSSplitViewを使っているのかはわからんけど、
Cocoaで実装するとなるとNSSplitViewということになるだろうな。
必要な時にだけ出したいなら挙動は違うけど、NSDrawerを使う手もある。
264261:2010/01/15(金) 20:39:40 ID:8fvK20Iy0
>>263
やっぱり NSSplitViewですか。ありがとうございます。
265名称未設定:2010/01/15(金) 21:51:25 ID:FwckFJ5+P
iTunesのように左右上下(プレイリスト、サムネイル、カラム表示、リスト表示)の
アプリ作ったこと有りますが、それほど遅くはならないですよ。
ただ、非表示のViewは処理せず、表示された時に処理するなどの工夫をして
リサイズを軽快にしてますが。
266261:2010/01/15(金) 22:26:14 ID:8fvK20Iy0
>>265
実益な情報ありがとうございます。
遅くならないと聞き安心しました。工夫しながら実装してみます。
267名称未設定:2010/01/16(土) 02:21:54 ID:NA7z65Cf0
「実益な」って用法はじめて見た
268名称未設定:2010/01/16(土) 10:47:26 ID:pjAdUO5I0
実益なスレだ
269262:2010/01/16(土) 19:04:58 ID:4Ff00f0W0
>>262
ですが、MethodSwizzle(Method Swizzling)によるハッキングの手法は、
OSX 10.6/64bit では対応していないのでしょうか?
ビルド時にエラーが出てしまいます。
どうか実益な情報をよろしくおねがいします。
270名称未設定:2010/01/16(土) 19:56:08 ID:ASEpsPDb0
>>262
質問そのものの情報不足では無いでしょうか。method_exchangeImplementations() しか
調べてませんが、10.6/64で正常にビルド、動作しています。
実際のコードがどうなっているのか、どういうエラーが出ているのか、具体的に。
271名称未設定:2010/01/17(日) 06:19:47 ID:7s0tjx0K0
>>269
OS X の Objective-C ランタイム API は旧/新ふたつあります。
大体 Objective-C 1 と 2 の違いに対応してます。

が、backward compatibility のために、Objective-C 1, 2 に関わらず
32 bit では旧/新どちらでも使えるようになってます。

しかし 64 bit ではどうせ昔のことは気にしても仕方がないので、
新 API しか使えません。262 さんは旧 API つかってるんじゃないですか。

新 API の日本語での情報はあんまりありませんが、
旧 API より全然使いやすいので、そちらにしましょう。
新 API が使えるようになったのは 10.5 からなので、もう2年半ぐらいになります。

日本語ではこれぐらい?
http://xcatsan.blogspot.com/2009/10/objective-c-20.html
http://xcatsan.blogspot.com/2009/10/safari2-posing-method-swizzling.html

あとは Apple 本家を参照してください:
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjCRuntimeGuide
http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ObjCRuntimeRef
http://developer.apple.com/legacy/mac/library/documentation/Cocoa/Reference/ObjCRuntimeRef1
272名称未設定:2010/01/17(日) 12:25:43 ID:u61wxUEI0
NSOutlineView の子アイテムを持つアイテムで、
表示後に自動的に項目を展開したいです。

なので、表示後に呼ばれるデリゲートを調べましたが、
「表示されようとするときに」呼ばれる
outlineView:willDisplayCell:forTableColumn:item:
しか見つかりませんでした。
このため、ここてアイテムを展開しても無意味でした。

項目を表示直後、自動的に展開させるにはどうしたら
良いでしょうか。
273名称未設定:2010/01/17(日) 13:10:30 ID:7s0tjx0K0
かしこいやり方かどうかしらないが、
expandItem:expandChildren:
をオーバーライドして、
-expandItem:(id)item expandChildren:(BOOL)expandChildren
{
[super expandItem:item expandChildren:YES];
}
とするとなんとかなるんじゃないかな...
274名称未設定:2010/01/17(日) 13:24:36 ID:6eBaUCw00
NSTimer待ち時間0でダメかな
275名称未設定:2010/01/17(日) 13:41:16 ID:u61wxUEI0
>>273,274
レスありがとうございます。

いろいろなアプリで初期起動から開いている、みたいなのは
しょっちゅう目にするんで、普通に実装するやり方があると
思ってたんですけど、違うんですね。

Finder のサイドバーとかも開きっぱなしですよね。
これって予め開閉状態を開いた状態で保存しといて...って
ことなんでしょうか。
276名称未設定:2010/01/17(日) 14:41:57 ID:7s0tjx0K0
>>275
三角印をクリックしたときに、
自動で中を全部開きたいということかと思っていましたが、
あなたのいう「項目を表示直後」というのは、
単にアプリ起動時に開きたいということですか?

それなら単に applicationDidFinishLaunching とか、
windowDidLoad: とかで NSOutlineView の expandItem: を呼べばいいだけでは?
277名称未設定:2010/01/17(日) 14:51:53 ID:ny1eQRyjP
cocoadevにツリーの状態を復元するコードがあったはず。
単純にツリーの上から展開状態を見て開いていってるだけですが。
278269:2010/01/17(日) 15:59:03 ID:SmyQ13P50
>>271
ありがとうございます。
私が実装しているMethodSwizzleはOS10.4から対応しているもので
ご指摘のように、旧APIを用いているようです。
http://svn.textmate.org/trunk/Tools/TextMate%20Plugin/
ここにあるMethodSwizzle.h/mを使用しています。

OS X10.6/64bit対応に置き換えるには、method_exchangeImplementations()で
置き換えるしか方法がないでしょうか?



279名称未設定:2010/01/17(日) 18:25:21 ID:mgMoI2zS0
>>278
class_nextMethodList() がObjc2ではdeprecated。おそらく、ここでビルドエラーが
出ているはず。これを変えれば動くかも。代替関数はドキュメントに載っています。
あえて書きません、ご自分で探して下さい。またObjc2 runtimeRefを読めばどの関数が
該当するか、すぐ分かります。ですが、動いたとしてもObjc2としてはコードが冗長です。
Objc2のruntime関数を使えばもっと少ないコードで同等の事が可能。
理解せずにやるのは賛同しかねますので、きちんと勉強して作る事をお勧めします。
280275:2010/01/17(日) 20:00:21 ID:u61wxUEI0
レスありがとうございます。

>>276
「項目を表示直後」というのは、アプリ起動時に限らず、プログラムが
NSOutlineView に子持ちのアイテムを追加した直後のことです。
分かりにくくてすみません。

言い換えると、
「子を持つアイテムを、展開した状態でNSOutlineViewに追加する」
ということをしたいだけです。
とりえあず頂いたレスを参考に試してみます。
281名称未設定:2010/01/18(月) 13:05:44 ID:Ne4iBOrU0
NSArray に入ってる大量の NSDictionary の特定のキーの
中から特定の文字列を検索して、一致したNSDictionaryオブジェクトを
特定する、みたいなことはどうやるんでしょうか。

調べてみたんですが、

1.普通に for文で全て一致しているかどうかチェックする
2.NSEnumerator
3.高速列挙

という3種類の方法がある事が分かりました。
ですが、これらのうちどの手法を使うのが良いのかピンと来ません。

速度は 1<2<3 なのでしょうか。
とすれば、1,2 を使うのはどういうときなのでしょうか。

よろしくお願いします。
282名称未設定:2010/01/18(月) 14:23:21 ID:R7zLU2uh0
id aDict = nil;
for (NSDictionary *dict in array) {
for (NSString *key in [dict allKeys]){
if ([key isEqualString : aKey]){
aDict = dict;
break;
}
}
if (aDict != nil) break;
}

NSLog(@"result: %@", aDict);
283名称未設定:2010/01/18(月) 14:32:34 ID:Yw44VljN0
全部なめるとO(N)になるんじゃ? 開発速度は速いだろうけど。
キーがユニークなら配列やめて辞書にすればO(1)だし、
キーでソートすれば二分木検索(O(logN))も使えるよ。
284名称未設定:2010/01/18(月) 15:46:51 ID:gBxAdbIl0
複数のDictionaryが該当する(全部調べる必要がある)ならこんな感じか。
NSIndexSet *indexSet;
indexSet = [anArray indexesOfObjectsWithOptions:NSEnumerationConcurrent
   passingTest:^(id obj, NSUInteger idx, BOOL *stop){
    return (BOOL)[obj valueForKey:@"specialKey"];
   }]; // GCDで並列処理。場合によっては遅くなる
NSArray *subArray = [anArray objectsAtIndexes:indexSet];
で、該当する辞書の配列が得られる。
285名称未設定:2010/01/19(火) 15:52:04 ID:yDoFGh6Y0
>>282-283
for文を使うのも手段としては十分アリなんですね。
試行錯誤しながらやってみます。ありがとうございました。
286名称未設定:2010/01/19(火) 16:08:40 ID:yDoFGh6Y0
>>284
複数該当する場合も今後使ってみます。ありがとうございます。
287名称未設定:2010/01/23(土) 03:31:21 ID:xnBedMir0
http://macrabbit.com/espresso/images/screenshots-1.1/MainFind.jpg

この左の NSOutlineView みたいなことって、どうやって実現するのでしょうか。
NSOutlineView の中に テキストフィールドやサーチフィールドが組み込まれています。
みる限り、セルに NSView が組み込まれているとしか考えられないんですが、
調べてみたところ簡単ではなさそうでした。

何か方法があるんでしょうか。
288名称未設定:2010/01/23(土) 10:35:24 ID:DPug9J8Q0
ローカルやサーバに実在するVolumeではなくて
仮想のVolumeをマウントさせるにはどのあたりのAPIを使えば良いでしょうか?
289名称未設定:2010/01/23(土) 10:38:00 ID:bbtPB4UD0
mount_smb とか mount_webdav とか調べてください
290名称未設定:2010/01/23(土) 10:38:51 ID:DPug9J8Q0
>>289
ありがとうございます!
291名称未設定:2010/01/23(土) 10:45:25 ID:DPug9J8Q0
>>289
あれ、これってネットワーク上のボリュームではないですか?
自分でネットワークボリューム立てて自分でマウントすれば仮想ボリュームになるじゃんって意図ですかね?
292名称未設定:2010/01/23(土) 10:48:33 ID:bbtPB4UD0
>>291
すいません、読み間違えました、ネットワーク上のボリュームかと思いました。
仮想のボリュームってなに?disk image のこと?
293名称未設定:2010/01/23(土) 10:59:54 ID:DPug9J8Q0
>>292
そうです、Disk Imageのような感じで複数Volumeマウントさせて、
その中に任意のファイル情報を表示させたいということなのですが実現可能でしょうか?
294名称未設定:2010/01/23(土) 11:04:30 ID:J4r9YAiG0
>>287
左上のとこですか?

左側のすべてがひとつのNSOutlineViewになってるのではなくて
上部のFIND+REPLACEはViewと三角ボタン(Disclosure Triangle)の組み合わせで
その下の検索結果がNSOutlineViewになってるんじゃないかなあ。

そのアプリケーションを持っているならnibファイル開いてみれば
わかるんじゃないでしょうか。

295名称未設定:2010/01/23(土) 11:58:33 ID:bbtPB4UD0
>>293
もうちょっと何がやりたいのか、僕があなたの意図を何も知らないと思って
そんなひとがわかるように書いてください。

自作ソフトの中なのか、Finder に表示させたいのか、
とかすら僕にはわかりません。

他にも僕には判りそうにないけどあなたはやりたいことって一杯あるでしょう
296名称未設定:2010/01/23(土) 18:07:54 ID:FBujlxf30
>>294
なるほど。それが良さそうです。ありがとうございます。
297名称未設定:2010/01/23(土) 22:16:10 ID:DPug9J8Q0
>>295
説明が悪かったです、すみません。
自分のアプリで仮想のVolumeを作成、Finderにマウントさせる、
Finderにマウントさせた仮想Volumeの中身を好きな様にFinderに表示することはできないかなと。
模索してみます。
298名称未設定:2010/01/23(土) 22:26:50 ID:sWiP5/Zb0
>>297
hdiutilでも使ってみたらどうか。
299名称未設定:2010/01/23(土) 22:49:02 ID:zf7OnUJo0
設定の保存は
~/Library/Preference/appName/

とかデータは
~/Library/ApprecationSupport/appName/

とかって決まってるみたいですけど、それらの取り決めのドキュメントなどは
あるんでしょうか。
300名称未設定:2010/01/24(日) 00:34:14 ID:9mXQsdI50
>>297
一時的に diskimage をつくってマウントするのがいいでしょうね
もしくは MacFUSE つかってボリュームでっち上げるという方法もあります。
画面上の window のスクリーンショットが画像ファイルとして見えるという
とんでもない仮想ボリュームを作った人もいます:
http://osxbook.com/book/bonus/chapter11/grabfs/

>>299
設定の保存は、NSUserDefaults
http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/UserDefaults/UserDefaults.html
をつくったら、自動で ~/Library/Preferences/com.anatano.setteishita.bundleId.plist
にセーブされるので、なにも明示的にやる必要はないです。
bundleID を設定するところは XCode のプロジェクト設定にあります。
ちなみに Preference"s" です。

Application Support/appName のほうはApplication と Support のあいだに
スペースがあるので気をつけてください。こっちは自動ではやってくれません。
アプリの立上げ時に、フォルダがあるかチェックして、なかったら
NSFileManager の -createDirectoryAtPath:withIntermediateDirectories:attributes:error:
でつくってやればいいです。とりきめは
http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFileSystem/Articles/WhereToPutFiles.html
に書いてあります。
301299:2010/01/24(日) 01:57:58 ID:rbPa32Zb0
>>300
よく分かりました。丁寧にありがとうございました。
302名称未設定:2010/01/24(日) 03:24:29 ID:rbPa32Zb0
たびたびすみません。

一般的な質問なんですが、ClassA から ClassB のインスタンスメソッドを
呼び出す方法について質問です。

私の理解では、2つ方法があり(間違っていたらご指摘お願いします)、

1. ClassA 内で ClassB のヘッダをインポートしておき、
 [[ClassB alloc] method]; を実装する

2. ClassA のヘッダで IBOutlet ClassB *_classB;
 を宣言し、InterfaceBuilder で ClassB のオブジェクト
 (青い箱) にアウトレットをつなぐ。
 そして [_classB method]; を実装する。

この2つの方法は、どう違い、どう使い分けるのでしょうか。
よろしくお願いします。
303名称未設定:2010/01/24(日) 04:11:32 ID:yql9Z5U/0
ClassA に ClassB のメソッドを使いたいの?
邪道では?
304名称未設定:2010/01/24(日) 04:18:53 ID:rbPa32Zb0
>>303
ClassA から ClassB にメッセージを送る、というだけです。
「実装する」という表現が誤解を生んでしまったかもしれません。

「実装する」は「というコードを書く」と読み替えて下さい。
305名称未設定:2010/01/24(日) 05:24:33 ID:A7GDtSF10
1はローカル変数に対する実行で
2はインスタンス変数に対する実行でしょ。

2は別にUI使う必要が無ければIBOutletもnibでの設定もいらない。
306名称未設定:2010/01/24(日) 10:02:01 ID:ry0PydNmP
1だと毎回allocするから、classB内のクラス変数は保持されないよ?
単に共通処理みたいにどこからでも呼び出したいなら、カテゴリーを使うとか。
307302:2010/01/24(日) 13:58:57 ID:rbPa32Zb0

>>306 のおっしゃる通り、確かに 1 の方法だと毎回変数がリセット
されてしまいます。

となると、生成済みのインスタンスに対してメッセージを送信する
場合は、2のアウトレットを使うということになるんでしょうか。

>2は別にUI使う必要が無ければIBOutletもnibでの設定もいらない。

となると、アウトレット以外の方法はあるんでしょうか。
308302:2010/01/24(日) 14:11:57 ID:rbPa32Zb0
追記します。

もちろん、単一のクラスから、任意のインスタンスにアクセスするには、

id hoge = [[hogeClass alloc] init];

とやっておいて、これ以降は [hoge method];
とやればいいと思いますが、複数のクラスから、ある特定のインスタンスに
対してメッセージを送信したい場合もあると思います。
この場合はアウトレットという手段がありますが、たとえば動的に
生成されたインスタンスは InterfaceBuilder でアウトレットをつないでおく
ということができません。このような場合にアウトレット以外の方法が
あるのか、ということをお尋ねしたいです。
309名称未設定:2010/01/24(日) 15:44:51 ID:ry0PydNmP
ないんじゃないかな。
I.Bでインスタンス化して一つ一つ繋ぐか、
Notificationでメッセージを送れば繋ぐ必要はないよ。
310名称未設定:2010/01/24(日) 15:51:41 ID:DZohLdo00
>>308
ようするに、1つのインスタンスを複数のインスタンスで共有したという話?
これは、Cocoaの問題じゃなくて、一般的なオブジェクト指向の問題ですね。

やりかたは、いろいろある。
グローバル変数にインスタンスを入れるとか、
クラスメソッドとstaticな変数を使って、シングルトンオブジェクトを作ってみるとか、
複数のオブジェクトが一つのオブジェクトを参照できるような構造を作ってみるとか。

あと、InterfaceBuilderっぽい方法を取りたいなら、
http://www.apple.com/jp/downloads/macosx/tools/cocoadi.html
こんなのもあるよ。
311302:2010/01/24(日) 16:02:24 ID:rbPa32Zb0
>>309,310
なるほど、ありがとうございます。
通知、グローバル変数あたりはすぐにでもできそうです。

それにしても、
Cocoa でアプリケーションを作るときに1つのインスタンスを複数の
クラスでで共有したいっていうのは、結構よく起こることだと
思ってたんですが、こうやってやり方が特殊ということは、
あんまり一般的じゃないんですかね...

そもそも私の設計自体が Cocoa の流儀にあっていないのかもしれませんが。
312名称未設定:2010/01/24(日) 16:38:43 ID:DZohLdo00
>>311
いや、だから、これはCocoaとは関係のない話です。
1つのインスタンスを複数のクラスで共有するっていうのは、Cocoaに限らず、どこにでもあるような一般的な話です。
グローバル変数を使うやり方も、別に特殊ではありません。普通に使われる手段です。
Cocoaでも、Applicationオブジェクトを共有するために、NSAppというグローバル変数が用意されています。
313302:2010/01/24(日) 16:58:10 ID:rbPa32Zb0
>>312
> グローバル変数を使うやり方も、別に特殊ではありません。普通に使われる手段です。

はい、分かりました。
プログラミングを学んでいて壁になるのがここで、萩原さんのObjective-C2.0
などを読んでいるんですが、説明されている技術がどれぐらいの頻度で
(しょっちゅう使うものなのか、どうしても困ったような時たまに使うものなのか)
がよく分からず、いざ実装するときにどの手段を使えばいいかが
分からないんですよね。

グローバル関数での実装を試みます。シングルトンオブブジェクトっていうのも
あるんですね。奥が深くて大変です。
314名称未設定:2010/01/24(日) 18:15:58 ID:mXty9fh30
こういう開発技術って身につけるのすごく時間かかると思うんだけど、
Cocoa玄人の方々ってどうやって勉強したの?

学生時代から勉強してたのかな。もしくは違う言語や開発環境での
経験が豊富なもんだから、Cocoa もドキュメントさら〜って読んで
すいすいてきちゃう人達ですか?
315名称未設定:2010/01/24(日) 18:24:28 ID:DklqiIjb0
まあ学生時代からやってるけど、
他人のコード読みまくるのが一番だよ
316名称未設定:2010/01/24(日) 18:30:23 ID:q+MtchVCi
基本的に言語なんて文法よりもライブラリーの使い方学ぶだけだからな。
自分はBoost、J2SE、Dolphin Smalltalkのライブラリーのソースは読んだかな。
これらは入社して1~2年はやってた。
もちろんCocoaもね。(これは2年前からだけど)
ただ読むのではなくデザインパターンを意識したり何らかの目的は持ってた。
317名称未設定:2010/01/24(日) 18:37:15 ID:mXty9fh30
やっぱり他人のコード読むのが一番ですか。
Shiira あたりが良いですかね。
318名称未設定:2010/01/24(日) 18:57:38 ID:BwfIB4oT0
萩原本を読み終えたら、木下さんの「Dynamic Objective-C」も読んでみては。
後半のデザインパターンの箇所が参考になるかも。
319名称未設定:2010/01/24(日) 19:21:50 ID:DZohLdo00
僕は、他人のコードを読むよりも、ひたすらコードを書きまくるタイプですね。
小2のころからBASICでプログラムの基本を覚えて、中1からアセンブラでパソコンのハードウエア周りを覚えて、
就職してからC/C++やって、10年ほど前からCocoaとJavaでオブジェクト指向を覚えた感じかな。

よく読む本は、↓これ
ttp://www.stripe-net.jp/cocoa/program/blog20080602.html
320名称未設定:2010/01/24(日) 19:33:47 ID:9Oi6YpiX0
AppKit の実装が公開されたらすごく勉強になるんだろうけどなあ。
321名称未設定:2010/01/24(日) 20:41:51 ID:SanRVlVL0
>>320
10.4あたりから中身はCF~だから参考にならん。
322名称未設定:2010/01/24(日) 20:58:39 ID:18l7gFv90
>>316
>Dolphin Smalltalk

どうみても普通の会社じゃないな
日本で数社しか思い浮かばんw
323名称未設定:2010/01/24(日) 21:41:21 ID:9Oi6YpiX0
>>321
それ Foundation のことだろ???
324名称未設定:2010/01/25(月) 14:08:34 ID:BXsOUJmd0
>>318
まずはヒレガス本しっかりやったほうがよさそうな気がするが・・・
325名称未設定:2010/01/25(月) 14:27:21 ID:1CbnIzp50
とにかくアプリケーションを作ってみたい -> ヒレガス
Objective-Cを極めたい -> ダイナミック

かな?
326名称未設定:2010/01/25(月) 14:35:56 ID:olEHFy+X0
昔はNeXT Answersとか公開されている少ないソースを必死で読むしかなかったけど
今は豊富だからいいよね。
327名称未設定:2010/01/25(月) 16:33:18 ID:00f/JHvm0
dynamic objcはある程度理解していないときついよ
328名称未設定:2010/01/25(月) 20:46:10 ID:nanQqXZF0
>>300
ありがとうございます。MacFUSEならファイルの容量や種類を好きな様にでっちあげてユーザに見せることができそうですね。
見た感じ難しそうですけど。
329名称未設定:2010/01/25(月) 21:39:36 ID:HSa8AdCJ0
32bitと64bitの両方のアーキテクチャと10.4 SDKと10.5 SDKの両方に対応するコードを書くには
NSIntegerやCGFloatなどを使わないと、コンパイルが通りませんよね?
しかし10.4SDKでNSIntegerは定義されていないので

#ifdef 現在のSDKのバージョン==10.4
typedef int NSInteger;
typedef float CGFloat;
#endif

などと定義しておかなければいけないのかな?と思いました。考え方は正しいですか?
330名称未設定:2010/01/25(月) 21:51:23 ID:RyUX8Yp50
共存できるのか?
331329:2010/01/25(月) 22:44:28 ID:HSa8AdCJ0
追記:
#ifdef __LP64__
のほうがいいのかなと。

>>330
是非できたらいいな♪と。
332名称未設定:2010/01/26(火) 03:44:13 ID:V9PmfHZD0
一回 Cocoa Application テンプレートをもとに作った
プロジェクトを Document based Application にしたいんですが、
具体的に通常の CocoaApplication と Document based Application
では、どこに違いがあるんでしょうか。

一度 Document based で作り直そうと思いましたが、あまりに
規模が大きすぎて構築し直すだけでも大変です...
333名称未設定:2010/01/26(火) 07:48:24 ID:P9e4nJUz0
>>329
#ifndef CGFLOAT_DEFINED
typedef float CGFloat;
#endif
#ifndef NSINTEGER_DEFINED
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
334名称未設定:2010/01/26(火) 18:43:16 ID:Q1saREQy0
__LP64__ だと NSInt は long だってばよ。
335名称未設定:2010/01/26(火) 19:53:47 ID:jR5hhztJ0
#if !defined(MY_INTEGER)
 #if __MAC_OS_X_VERSION_MAX_ALLOWED > 1050
  typedef NSInteger MyInteger;
 #else
  #ifdef __LP64__ || NS_BUILD_32_LIKE_64
   typedef long MyInteger;
  #else
   typedef int MyInteger;
  #endif
 #endif
#define MY_INTEGER
#endif
336名称未設定:2010/01/26(火) 20:41:43 ID:qt0j8O2J0
>>334
10.4 SDK専用お助け定義だから32bit決め打ちで構わない。
__LP64__ではどの道ビルドできない。
337名称未設定:2010/01/27(水) 11:11:14 ID:ai1ktCXe0
すいません、Cocoa初心者です。教えてください。
Macのドライブ中にある全*.appの名前(フルパス)を高速に列挙して
取得したいのですが、どのようにやるのが高速かつ低負荷でしょうか?
よろしくお願いします。
338名称未設定:2010/01/27(水) 11:25:12 ID:PwD2SiN/0
339名称未設定:2010/01/27(水) 13:12:47 ID:ef00bSVV0
同じ奴じゃないのか?
340名称未設定:2010/01/27(水) 13:14:20 ID:NoYMl7Px0
ごちゃごちゃ言わずにコード出せよ
使えない奴だな
341名称未設定:2010/01/27(水) 13:17:55 ID:PAyKiytpP
サーセンww
342名称未設定:2010/01/27(水) 13:46:14 ID:LrVxZmvHi
>>339
トリップ付けてないので証明はできないけど別人です。
ちなみにあっちに質問したのが私です。
343名称未設定:2010/01/27(水) 14:08:24 ID:ef00bSVV0
Launch Survice使えって結論じゃなかったか?
344名称未設定:2010/01/27(水) 19:23:58 ID:PwD2SiN/0
別人なのか、同一人物なのか、どっちなんだよw
345329:2010/01/27(水) 19:31:09 ID:Id46C7UW0
>>333-336
みなさん、どうもありがとうございました!
これでうまく共存できそうです。
346名称未設定:2010/01/27(水) 22:18:04 ID:b4K5Ymp5i
>>344
あーごめんなさい。

>>337はあっちのスレに質問した人間では無いと言う事です。
347名称未設定:2010/01/28(木) 01:47:08 ID:kZs83SQt0
cocoaの勉強始めたばっかりの初心者ですが、
教科書を見ると、日本語は
NSString* str = [NSString stringWithUTF8String:"新宿"];
としろと書いてありました。でも、
NSString* str = @"新宿";
と書いてやっても、特に文字化けなどはしないでちゃんと表示されるみたいです。
ちなみにソースコードはUTF-8に設定されています。
後者のようにstrを作っても、文字化けしなければ別に問題はないでしょうか??
OSは10.5.8。XCodeは3.1.2です。
348名称未設定:2010/01/28(木) 01:50:23 ID:wfbSXBmY0
10.5 から OK になりました。
いつの教科書つかってますか?古いのはよくないよ。
あと、そもそも昔でも
NSString* str = [NSString stringWithUTF8String:"新宿"];
とやりたいときは、きちんとソースコードを UTF8 にしないといけなかったです。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocLanguageSummary.html

の下のほう @"string" のところに歴史がのってます。
349名称未設定:2010/01/28(木) 02:08:24 ID:kZs83SQt0
おおー、さっそく返答ありがとうございます。
そうだったんですね!助かりました。
では、これでビルドしたappを10.4.xのマシンに持って行った場合は
やはり文字化けしてしまうのですかね?
350名称未設定:2010/01/28(木) 03:07:32 ID:f3s2T9f/0
そのやり方はやめた方がいい。
Localizable.stringsファイル使ったやり方の方がいい。
351名称未設定:2010/01/28(木) 03:25:46 ID:wfbSXBmY0
>>349
そもそも、10.5 で開発したのを10.4でも動くようにする
ってのはあんがいややこしいので、初心者なら気にしない方がいいです
352名称未設定:2010/01/28(木) 03:33:23 ID:kZs83SQt0
>>351
おわ!そうなんですか・・
今頼まれてツール作ってるんですが、使ったツールを動かすのは、
10.4のマシン上なんですよね・・・
その場合は、やっぱりstringWithUTF8Stringを使わないと駄目ですか?
353名称未設定:2010/01/28(木) 06:40:31 ID:Dma41m4O0
>>352
駄目かどうか聞いてる暇があるなら、素直にアドバイスに従えよ。
>>350 に書いてあるだろ。
354名称未設定:2010/01/28(木) 10:27:19 ID:4FFWNT0pi
特に公開もしない、急ぐ必要がある、個人的なツール等なら
直書きでもいいんじゃないか。
355名称未設定:2010/01/28(木) 10:40:46 ID:wfbSXBmY0
>>352
悪い事は言わないから、相手に OS をアップグレードするように言ってください。
10.4 で動かせるようにするのは難しいんだよ〜とか知ったふりしておけばいいです
356名称未設定:2010/01/28(木) 16:44:27 ID:NdQbxXvJ0
便乗ですが、
テスト用に、
次のように直接日本語をNSStringに代入したい場合、

NSString* str = @"新宿";

ソースファイルはUTF-16に設定しないといけないのでしょうか?
357名称未設定:2010/01/28(木) 17:34:19 ID:Osx2mpe+i
いけません。
エラーかワーニング出たような。
358名称未設定:2010/01/28(木) 17:35:35 ID:Osx2mpe+i
間違えた。直接代入はわかりません。
359名称未設定:2010/01/28(木) 18:15:18 ID:Dma41m4O0
>>356
試してみればいいのに。
360名称未設定:2010/01/28(木) 18:35:14 ID:0t6hmlpH0
教えて君としては立派なものです。
361名称未設定:2010/01/28(木) 19:00:38 ID:NdQbxXvJ0
>>359
やってみたんですが、UTF-8でも文字化けしませんでした。ということは、UTF-8からUTF-16への変換をコンパイル時に自動で行っているでしょうかね。

で、ソースを「UTF-16」へ変換してからビルドすると、「Stray ¥377 in program」といったエラーになってしまいます。
362名称未設定:2010/01/28(木) 19:01:41 ID:grpOrLIF0
なんでUTF8をUTF16に変換せにゃならんの?
363名称未設定:2010/01/28(木) 19:08:01 ID:NdQbxXvJ0
すみません。gccはデフォルトUTF16ダメだったですね。

いや、ここに@"string"は、10.5以降UTF16エンコーデット文字列をサポートしたとあるもので...

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocLanguageSummary.html

364名称未設定:2010/01/28(木) 21:02:19 ID:ioyRO6IT0
>>348
便乗の教えてくんで申し訳ない
今からマックなりiPadなりの開発をしてみようする者に
「こっから入れ」という本をお教えください m(_._)m
365名称未設定:2010/01/28(木) 22:00:01 ID:YyJjkjY50
>>364
>3, 4 を参照。
ヒレガス-> HMDT 2+3, 荻原。ディープな楽しみ、ダイナミック(マイコミで読めるけど)。
初学なら、たのここ? iPhoneはあんまり知らないけど、エリカ本?
366名称未設定:2010/01/28(木) 22:56:41 ID:T9kLlM5C0
>>365
今でもHMDT 2+3って読んだ方がいい?
Leopard、Snow Leopardに対応していないだろう?
367名称未設定:2010/01/28(木) 23:12:49 ID:Dma41m4O0
エリカ本は初心者向けじゃないぞ
368名称未設定:2010/01/28(木) 23:23:27 ID:ioyRO6IT0
>>4の「ほか山ほど」に笑いましたw
アマゾン行ったらほんとに沢山出てるんでもう何が何やらです

Tiger以前とLeopard以降で大きく違うってことですか?
369名称未設定:2010/01/29(金) 01:38:09 ID:683lD8pj0
>>362,363

NSString の内部は、概念的には、UTF16 文字列になってます。
(実際は ascii 文字だけのばあいは効率のため ascii 文字列だったりするのですが、
外部からは関係ないのでいまのところ忘れてください。)

で、10.5 以上の gcc/clang では、ソースコード中の @"..." は、
自動的に UTF16 に変換して、NSString のインスタンスをつくってくれます。
ちょっとその辺 Apple の Obj-C の解説は分かりにくいですね。

問題は、gcc/clang だってもとのソースコードのエンコーディングが
わからないとUTF16に変換しようがないということです。
デフォルトでは元ファイルは UTF8 だと仮定していると思います。

gcc にはそのあたりを設定するオプションがあります。
http://developer.apple.com/mac/library/documentation/DeveloperTools/gcc-4.2.1/gcc/Preprocessor-Options.html
の -finput-charset とかみてください。
370名称未設定:2010/01/29(金) 01:41:52 ID:683lD8pj0
>>364,368
iPhone 本は簡単に儲けることをもくろんだ経験のない著者が
やまほど書いてるので、とんでもないのが多いです。

Objective-C は基本は一緒ですが、Tiger 以前と Leopard 以降は
あんがい違わなくもないので、古い情報読むと混乱するかもしれません。
ネット上の日本語情報はえてして古いので、
いつ書かれた web ページか気をつけてください。

とりあえず Mac OS X 上で Cocoa をはじめる、というなら、
僕は断然ヒレガスの第三版をおすすめします。
371名称未設定:2010/01/29(金) 02:15:00 ID:bD9THfYk0
>369

ありがとうございます!
UTF8 → UTF16への自動変換が行われているということですね。
これで、疑問が解決しました。
372名称未設定:2010/01/29(金) 03:19:18 ID:92cwASY2i
WebView 上でマウスオーバーしている要素を取得する場合、

- (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(NSUInteger)modifierFlags

を実装し、

NSString *DOMNode = [ element objectForKey : WebElementDOMNodeKey ];

によって DOMNode を取得できます。
しかし、この方法だと、マウスオーバーしているテキストと、
それが画像であるかリンクであるか、ぐらいの情報しか
分かりません。

マウスオーバーしている要素がどのHTML要素で、さらには
HTML の class や id が何か、を取得する方法はあるでしょうか。
よろしくお願いします。
373名称未設定:2010/01/29(金) 10:27:45 ID:T9mSOEn/0
>>366
どうかなぁ?ヒレガス本から荻原本へはちょっとキツいかなと思って。
自分は翻訳ヒレガス本1edで入ってCocoaBindingが無かったからHMDT2ndが助かった。
翻訳ヒレガス本3rdは持ってないから(早く買え>自分)、どうなってるのか知らんのよね。
Cocoaにある程度慣れればAppleのドキュメントやWeb上の記事で済むんで、必要ないかも。

>>367
いや、iPhoneなら、って意味。分かり難かったらすまん。

>>368
IBの操作がXcode2.xまでとXcode3.0以降で違うことに混乱するかな。開発経験あるなら
それ以外はたいして問題にならない気が。Objc1 -> 2 では、GC導入が一番かな?その他、
こまごまとした事で扱い易くなっているが、その都度覚えられると思う。当時の記事。

Leopardで刷新されたMac OS X対応開発言語「Objective-C 2.0」の真価を探る
ttp://journal.mycom.co.jp/special/2007/objectivec/menu.html
Mac OS X Leopardの開発環境
ttp://journal.mycom.co.jp/special/2007/leopard/menu.html
374名称未設定:2010/01/29(金) 10:45:00 ID:I0I2qwVLP
QuickTIme Playerで動画のインペクタを開いた時の情報の中に、
任意の注釈とか動画に埋め込んでおいてインスペクタ上で表示出来るよう、
付け加えたいんだけどそういうのってquick time/carbonかQTMovieのAPIでできますか?
atomとかいじくんないとだめ?
375374:2010/01/29(金) 10:57:20 ID:I0I2qwVLP
っと。atomはフィルタ設定だから関係無いのか。
どーしよ。
376名称未設定:2010/01/29(金) 11:05:49 ID:POf2e/Dq0
まず、Quick Time Player の開発者になります

次に↓
377名称未設定:2010/01/29(金) 11:33:34 ID:ai0j/+VRi
そんなウイルスみたいな事しちゃダメだよ。
378名称未設定:2010/01/29(金) 11:56:30 ID:TasIU5UE0
>>374
QTMetadataEditor
http://developer.apple.com/mac/library/samplecode/QTMetadataEditor/index.html
Demonstrates how to retreive and store QuickTime Metadata from QuickTime files using a Core Data document based Cocoa application
379名称未設定:2010/01/29(金) 13:23:39 ID:683lD8pj0
>>372
> NSString *DOMNode = [ element objectForKey : WebElementDOMNodeKey ];
じゃなくて
DOMNode * node = [ element objectForKey : WebElementDOMNodeKey ];
だと思いますが、その後 isKindOfClass: で
DOMHTMLElement であることを確認してキャストしたら欲しい情報とれますよ。
if([node isKindOfClass:[DOMHTMLElement class]]){
DOMHTMLElement*htmlElement=(DOMHTMLElement*)node;
NSLog(@"id:%@, class:%@",node.idName,node.className);
}
380名称未設定:2010/01/29(金) 23:25:32 ID:kyWGu7TK0
cocotronってすごくないですか
ほんとにそのまんまWindowsで動くよ
日本語入力できなくなるのが日本人にとっては致命的だけど
381名称未設定:2010/01/30(土) 01:17:29 ID:/BIjF1zf0
「こっから入れ」を質問した者です
ヒレガス3版、たのここあたりから入ってみたいと思います
皆様ありがとうございました
382名称未設定:2010/02/02(火) 23:57:15 ID:n3FtoT8U0
すいません、質問です。
管理者ユーザーと標準ユーザーでファイル内容の情報を共有したいのですが、
すべてのユーザーで同じファイルの読み書きが可能なフォルダの場所って
ありますか?
383名称未設定:2010/02/03(水) 00:05:45 ID:SVNGY2Jl0
「共有」フォルダ
384名称未設定:2010/02/03(水) 02:53:51 ID:8kqFg8hi0
ハードウェアUUID(「このMacについて」の「詳しい情報」で見れるやつ)を
取得するAPIってありますか?
ハードウェア固有のUUIDが取得したいのですが・・・
385名称未設定:2010/02/03(水) 09:24:18 ID:wpACYq06P
386384:2010/02/04(木) 04:36:09 ID:a8Eexmi90
>>385
いただいた情報がカギとなって、なんとかUUIDを取得することができました!!
ありがとうございました。
387名称未設定:2010/02/04(木) 08:10:35 ID:ebuO2Nbs0
>>386
そんな「できました」とだけ書かれてもどうできたか気になるじゃないか。
でちょっと調べてしまったじゃないかw
gethostuuid(2) か。

ちなみにカーネルのコードを読むとこの syscall は確かに IOKit を呼んでるが
当然それはユーザ空間に公開された API ではない。
そこであえて kext を作って syscall 以外で実現してみるとかw
388名称未設定:2010/02/06(土) 23:53:19 ID:+eDEDh0W0
>>387
なんだか凄い人ですね
ところでkextってなんですか?
389名称未設定:2010/02/07(日) 00:12:13 ID:bBW6Hf3H0
かーねるえくすてんしょんじゃね?
390名称未設定:2010/02/07(日) 05:10:52 ID:sJrUJoRI0
NSArrayController でバインドしてるモデルをキー値監視で自動監視する場合、
NSArray のインスタンスに setValue:forKey でバインド先に変化が伝わるんですが、
これをやるとテーブルビューにどんどん値が追加されていきます。
値の remove はどうやってバインド先に伝えるんでしょうか...

よろしくおねがいします。
391名称未設定:2010/02/07(日) 08:03:45 ID:tOxXYLzO0
willChange:valuesAtIndexes:forKey:
[hoge removeAt...]
didChange:valuesAtIndexes:forKey:
392名称未設定:2010/02/07(日) 20:01:35 ID:581OQgvN0
セットバリュー:にる フォーキー:@”ほげ”
はどうかね。
393390:2010/02/07(日) 23:30:45 ID:L4hB6ycv0
レスありがとうございます。

>>391
自動監視していてもそこは手動で通知すべきでしょうか?

>>392
わたしのコードでは setValue をすると値が追加されていくので、
(ここからしておかしいですか?)
nil を渡すと たんに nil が追加される、つまり何も変化なし、
ってことになってしまいました。
394名称未設定:2010/02/08(月) 00:46:24 ID:8v39oSTU0
removeObject: ではいかんの?
395名称未設定:2010/02/08(月) 01:42:16 ID:9zeS/QiU0
>>390
そもそもどんな結果が欲しいの?
setValue:forKey:で要素が増えるから、removeで相殺しようというやり方は違うと思う。
396390:2010/02/08(月) 02:09:22 ID:YLvHn2w20
何度もすみません。

テーブルビューに
a
b
c

と表示されていたものを

d
e
f

と変えたいんですが、setValue で 「d,e,f」を含む Array を
セットすると a,b,c が消えずに d,e,f の行が追加されてしまいます。
d,e,f をセットする前に Array に removeAllObjects をやったんですが
何も変わりませんでした。
397名称未設定:2010/02/08(月) 03:36:10 ID:P33idnUX0
まずNSLog()でArrayのdescripyionでもチェックしてみた方がいい。
arrayが望みの動作をしているか、チェック!
398名称未設定:2010/02/08(月) 10:58:32 ID:D1dZxTpg0
NSArrayController の remove メソッド使えばいい。
399名称未設定:2010/02/08(月) 11:39:54 ID:/ESyucRx0
何処から突っ込んでいいか分からない。


>setValue で 「d,e,f」を含む Array を
>セットすると

ここ?

[[[arraycontroller arrangedObject] objectAtIndex:0] setValue:d forKey:key];
[[[arraycontroller arrangedObject] objectAtIndex:1] setValue:e forKey:key];
[[[arraycontroller arrangedObject] objectAtIndex:2] setValue:f forKey:key];
とかだよね。プログラムで書くなら。
400390:2010/02/08(月) 15:15:04 ID:YLvHn2w20
お騒がせしてすみません。

一般的にバインディングというのは、
myClass で実装した NSArray のインスタンスに対して値を設定したり消去したり
するという方法と、
arrayController に対して設定したり消去したりするっていう方法がある
みたいんなんですが、どうやって使い分けるのでしょうか。

とりあえず私は 前者の方法で実装していたのですが、後者の実装に変えて
>>398 のように remove したらうまくいきました。
401名称未設定:2010/02/08(月) 16:48:40 ID:XxMjX3pk0
うーむ…NSArrayController の contents が何になっているのかって所からの話っぽい気が。
[arrayCtrl content] == [myClass array] の結果はどうなる?違ってないか?
それと、回答者にうまく伝わってない感じのときには、実際のコードを出した方が伝わる。
402名称未設定:2010/02/08(月) 17:04:52 ID:/ESyucRx0
あ、そうか。
>setValue で 「d,e,f」を含む Array を
>セットすると

てことは新しいNSArrayは用意できるんだから、
[arraycontroller setContent:newArray];
でいいじゃん。


binding使うんならKVO発動するようにNSArray自体を挿げ替える。
403名称未設定:2010/02/08(月) 23:32:18 ID:9zeS/QiU0
>>400
実装は前者の方法で問題ないはずです。
念のため確認しておくと、

@interface MyModel : NSObject {
NSArray* items;
}
@property(readwrite,retain) NSArray* items;
@end

NSArray* newItems = [NSArray arrayWithObjects:d, e, f, nil];
[myModel setValue:newItems forKey:@"items"];

こんな感じのコードなんだよね?
もしこれで、Arrayの要素が増えるなら、Arrayの生成のしかたに問題があるはずです。
NSLog(@"%@", newItems);
で確認して見てください。
404名称未設定:2010/02/09(火) 01:43:08 ID:om4hDZRw0
流れぶった切ってすいません。質問させてください。
自作のアプリAとBがあって、AからBに文字列を送信したいんですが、
その場合どんな方法使うのが定石なんでしょうか?
405名称未設定:2010/02/09(火) 02:02:49 ID:ZfVZH94a0
ぷろせすかんつうしん
406名称未設定:2010/02/09(火) 02:24:18 ID:vbymxy7p0
Xcodeスレって落ちたん?
407名称未設定:2010/02/09(火) 02:53:27 ID:om4hDZRw0
>>405
ありがとうございます。調べたところではってやつ
使うみたいですね。で、FinderやMailにAppleEvent送信するのは
わかったんですが、受け取り側のAppleEventの実装って
どう記述したらいいですか?
408名称未設定:2010/02/09(火) 02:57:54 ID:om4hDZRw0
すいません。脱字です
× 調べたところではってやつ
◎ 調べたところではAppleEventってやつ
409名称未設定:2010/02/09(火) 05:23:29 ID:om4hDZRw0
setEventHandlerで受け取りも実装できました。
お騒がせしました。
410名称未設定:2010/02/10(水) 01:29:24 ID:6iqPGULi0
質問です。
自分とは別のアプリのplistって、簡単に読み込むことできますか?
411名称未設定:2010/02/10(水) 02:03:11 ID:7A03ck+C0
>>410
[NSDictionary dictionaryWithContentsOfFile:(NSString *)path]
412名称未設定:2010/02/10(水) 02:45:09 ID:6iqPGULi0
>>411
ありがとうございました!いけました。
413390:2010/02/10(水) 04:52:14 ID:smQB655u0
>>401
>それと、回答者にうまく伝わってない感じのときには、実際のコードを出した方が伝わる。

早いうちにコード出すべきだったと思います。すみません。

> [arraycontroller setContent:newArray];

これでも良かったですorz

>>403
そうです、そういうコードで Array の要素が増えたので、
Array の実装を見直したいと思います。

いろいろとありがとうございました。
414名称未設定:2010/02/10(水) 22:49:25 ID:xdvm3gui0
Core Data で、

[managedObject setValue: hoge
forKey: @"hoge"];

とすると、iPhone では普通に OK なんだが、なぜか Mac だと
managedObject が持つ関連が壊れてしまう‥

なんなんだ?
415名称未設定:2010/02/10(水) 22:50:53 ID:s5/Z40Qj0
一般的な質問というか、Cocoaの問題じゃないかもしれないんですが。
インスタンス変数は私の理解では3カ所に書くことができます。

1.ヘッダファイルの
@interface myClass : NSObject { ここ } 

2.実装ファイルの
@implementation myClass の前

3.メソッド内

です。調べた所では基本的には1、他のクラスに公開しない場合は 2、メソッド内
のみでしか使わない場合は3ということでした。

疑問なのは 1 と 2の使い分けです。そもそも 1 のように宣言したとしても、
アクセッサーを実装しない限り他クラスからのアクセスはできないので、
2 のように「公開しない」意味がないと思うのですが...
また public や static は Cocoa ではどういう状況で使うんでしょうか
(アクセッサーを実装すれば実現できると思いますが)
よろしくお願いします。

416名称未設定:2010/02/10(水) 22:53:54 ID:uJY7TtOo0
>>415
2.と3.はインスタンス変数じゃない。
417名称未設定:2010/02/10(水) 23:22:46 ID:Vm/CNwOC0
節子それグローバル変数やで
418名称未設定:2010/02/10(水) 23:26:34 ID:EQtXzNwf0
節子それローカル変数やで
419名称未設定:2010/02/10(水) 23:30:40 ID:qPYCyiBo0
げっ、壮大な勘違いをしていました。
1.インスタンス変数
2.グローバル変数
3.ローカル変数
なんですね、吊ってきます。

ってことは public や static は基本的には使わないということでいいんでしょうか。
420名称未設定:2010/02/10(水) 23:48:58 ID:d8wI/igb0
>>419
2.はexternすればグローバル変数だけど
staticならクラス変数じゃない?

public指定は使う必要があったことはない。
変数に直接アクセスするよりもアクッセッサ(またはプロパティ)を実装するのがCocoaかなと思う。
421名称未設定:2010/02/11(木) 01:21:15 ID:tuZEcZwR0
>>415
> そもそも 1 のように宣言したとしても、
> アクセッサーを実装しない限り他クラスからのアクセスはできないので

CocoaにはKVCという恐ろしい仕組みがあって、
@interface MyClass : NSObject
{
@private // たとえプライベートであっても
id hoge;
}
@end
@implementation MyClass
// 実装なんてありません。
@end
てなクラスがあれば、
id myClassObject = [[MyClass alloc] init];
id hoge = [myClassObject valueForKey:@"hoge"];
とやると、取得でき、
[myClassObject setValue:@"foo" forKey:@"hoge"];
とやるとセット出来ます。

@privateなんてコンパイラしか見てないし、コンパイラはKVC知らないから全然問題なしです。
setValue:forKey:の方は検証かセッタがあってそこではねられたら無理ですが。
CocoaBindingsもKVC使ってるので同じ事ができます。
422名称未設定:2010/02/11(木) 01:53:22 ID:qtBrn9Fm0
どっちにしろランタイム関数でアクセス出来るし。
423名称未設定:2010/02/11(木) 03:02:17 ID:lyFHHzRE0
ローカルとかグローバルとか変数の有効範囲とそのメモリー管理って関係ありますよね?でも話としては別の話。 どうもこの辺で混乱してくる。
424名称未設定:2010/02/11(木) 05:40:15 ID:NQIxmcls0
>>415,421
@public インスタンス変数には C と同様
obj->var
でアクセスできるのだが... var にセッタ/ゲッタがあれば、
obj->var

obj.var
と両方できる。前者は直接アクセス、後者はセッタ/ゲッタでアクセス。

とにかく、@public とか @private で明示的にコンパイラが強制するんでなくて、
ドキュメントに載っているメソッド、変数だけ使いましょうということです
425名称未設定:2010/02/11(木) 09:29:23 ID:olRTFPQk0
>>424
-> ってC++じゃね?
どうでも良いけど。
426名称未設定:2010/02/11(木) 10:12:59 ID:+KixA3CF0
まずはC言語の変数の記憶クラス(外部、静的、自動、レジスタ)と
スコープ(グローバル、ローカル)の理解が第一。

その後、Objective-C 1.0のクラスとインスタンス、Cocoaの参照
カウント方式のメモリ管理をやって、2.0のプロパティやガベージ
コレクションは最後でいいと思う。

>>420
Objective-Cにはクラス変数の仕組みがないから、C言語のstaticで
代用している、と言えるのでは。
427名称未設定:2010/02/11(木) 12:23:01 ID:i3s7zfFR0
>>421
>setValue:forKey:の方は検証かセッタがあってそこではねられたら無理ですが。
setNilValueForKeyはあるけど、他何かありましたっけ?
KeyValueValidation のこと?毎回 validate してるんでしたっけ?
428名称未設定:2010/02/11(木) 20:25:03 ID:3v7oPDMc0
>>425
> -> ってC++じゃね?

Cだよ。ポインタによる構造体へのアクセス
どうでも良いけど。
429名称未設定:2010/02/13(土) 06:24:50 ID:01yDwyuW0
時間のかかるループなどの最中にアクティビティモニタで(応答なし)にならないように
したくて、ループ中にシステムに定期的に制御を返せばいいのかと思うんですが、そのた
めにはどのAPIを呼んだらいいんでしょうか?
430名称未設定:2010/02/13(土) 06:51:05 ID:Jf+JFefe0
>>429
そういうのはメインスレッド以外にスレッドを立上げて、
そちらでやってください。10.5 以上なら NSOperation をつかうのが簡単です。
http://developer.apple.com/mac/library/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html
のあたり参照。
431名称未設定:2010/02/13(土) 08:24:12 ID:01yDwyuW0
ありがとうございます
勉強してみます
432名称未設定:2010/02/14(日) 11:45:23 ID:wqH61GrQ0
init 直後のWebView は背景が白く塗られてますが、これを任意の色に
変える方法はないんでしょうか。
setBackGroundColor などを探してみたんですがなさそうなので...
433名称未設定:2010/02/14(日) 12:14:34 ID:wvmrSoFoP
背景黒のHTMLコード書いて表示。
434名称未設定:2010/02/14(日) 18:04:27 ID:wqH61GrQ0
>>433
質問の書き方が足りなくてすみません。
背景色を指定した HTML を表示すると、
initWithFrame と setMainFrame の間に 一瞬だけ白く表示されてしまい、
画面がチラついてしまうんです。
これを避けるには、WebView そのものの色を変えるしかないと思ったんですが。
setNeedDisplay:No をやっておいてから、というのも試しましたが
変わりませんでした。
435名称未設定:2010/02/14(日) 18:09:33 ID:wvmrSoFoP
そうだね。同じ悩みで>>433は私の解決策だったけど、
ブリンクは気にしない方向にしたよ。
436434:2010/02/14(日) 18:33:01 ID:wqH61GrQ0
適切なメソッドはないみたいですね。
とりあえず、気持ちの良い方法ではないですが、最初は initWithFrame
するだけで表示せず、 HTML の読み込みが終わる
デリゲートが呼ばれた時点で WebView を表示 することにします。
レスありがとうございました。
437名称未設定:2010/02/16(火) 17:47:26 ID:USeonOVCP
プログラム自体ど初心者なのですが、どうしても行き詰ったので質問です。
Xcode3.1.2です。

ウィンドウの透明化とタイトルバーを無しにするべく、NSWindowのサブクラスを作り、
その実装部で-(id)initWithContentRectを上書きし、同時に透明化の設定をしました。

インターフェイスビルダーでクラスの設定もしたのですが、ビルドしてみてもこの部分を読み込んでくれません…
(printfも入れてみましたが出力されませんでした。)

どのようにすれば起動時に読み込んでもらえるのでしょうか…?
438名称未設定:2010/02/16(火) 18:13:53 ID:ul1LfPvr0
お前のようなど初心者をいいわけに勉強を怠るようなやつはなあ・・・

printfを一体どこに書いたのかもっと情報を出せの刑に処す
439名称未設定:2010/02/16(火) 18:36:35 ID:DDfHHFYG0
nib xib はメインメニュー用に設定してあるもの以外は自動ではロードされません。
440名称未設定:2010/02/16(火) 18:38:23 ID:DDfHHFYG0
色々書こうと思ったのに書き込みしてもた。

対象がウインドウの場合は NSWindowControllerを使うのが楽です。
441名称未設定:2010/02/16(火) 18:57:00 ID:qqo94+v+P
サンプルのtransparency windowを参考にしたのかな。
442名称未設定:2010/02/16(火) 19:05:15 ID:lOHt7C4h0
・@interface CustomWindowClass : NSWindow { ←継承し忘れ
・IBでウインドウのクラス設定し忘れ
・IBのwindowのvisible at launchのチェックが外れてる
・追加したnibファイルならロードし忘れ

それだけの情報では思いつくのはこれぐらい
443名称未設定:2010/02/16(火) 20:25:35 ID:nO6S+SzR0
awakeFromNib に NSLog();入れてみ。
444名称未設定:2010/02/16(火) 21:43:13 ID:TYPEsVBC0
>>437
とりあえず、タイトルバー無しのウインドウは、InterfaceBuilderでは作れません。
445名称未設定:2010/02/16(火) 23:13:06 ID:eUmRgwP10
iPhone の UIDevice みたいな感じで、Mac のハードウエアの情報を
とる Cocoa のクラスってありますか?
446名称未設定:2010/02/16(火) 23:42:44 ID:TYPEsVBC0
>>445
Cocoaにはない。そういうのは、IOKitフレームワークでやる
447名称未設定:2010/02/17(水) 01:27:46 ID:zdeqwKvK0
プリンタドライバの開発をしたいのですが何から手をつければ
よいでしょうか。
参考になるページ、サンプルのURLがあれば教えてください。
448名称未設定:2010/02/17(水) 01:36:47 ID:M4eMwoHU0
449名称未設定:2010/02/17(水) 07:37:54 ID:TJiOBmdi0
>>437
IB だけでは作れないから、コードで NSWindow を init する。

多分ビューのレイアウトを IB でしたい、ってことなんだよね。
なら別にカスタムビューを作ってそこにレイアウトして、
プログラムでそのカスタムビューを NSWindows の ContentView に
割り当てればいいんじゃない。
450名称未設定:2010/02/17(水) 09:50:38 ID:TJiOBmdi0
私からも質問させてください。
たとえば自作の TabView みたいなビューを作るときに、
タブは最初に表示した状態からユーザーによって並び替えられる場合
があります。

このときに、タブを特定するためにそれぞれのタブに識別子をつけたいのですが、
こういうユニークな識別子ってどうやってつければいいんでしょうか。
乱数じゃ、ダブる可能性が0%とはいえないし、時刻も同時に処理が
発生する可能性が0%とはいえないし...
451名称未設定:2010/02/17(水) 10:24:28 ID:rwt7PIur0
-hash; じゃだめなの?
452名称未設定:2010/02/17(水) 10:39:07 ID:L9FMCB960
tableViewなんかはidentifierをNSStringでユーザに設定させてるけど
453名称未設定:2010/02/17(水) 10:50:40 ID:npXd0PKiP
カウンタでも持ってりゃいいんじゃない?
454名称未設定:2010/02/17(水) 11:44:59 ID:TJiOBmdi0
レスありがとうございます

>>451
えっと、それはメソッド名でしょうか?

>>452
タブはユーザーの操作によっていくつでも増える可能性があるので、
特定の文字列、だと対応できないんですよね。

>>453
適当に int 型の変数を作って、数字をどんどん増やしていき、
それを 識別子にするということですよね。

タブが追加、削除されたりするので数字だと混乱がおきそうで
怖いです... 何かこういう場合のうまい実装(識別子以外でも)
があるんでしょうか。
455名称未設定:2010/02/17(水) 11:46:08 ID:8g6yoEPe0
>>451
hash は被る可能性を排除できないのでは?

>>450
スレッドセーフなシングルトンをタブクラスのファクトリークラスにして、タブクラスの
クラスクラスタを作る。シングルトン内でNSSet / NSHashTableでを識別子の管理、
割り振り(カウンタ / String)をやればいいんでないか。面倒なら table view 方式かねぇ。
456名称未設定:2010/02/17(水) 11:46:55 ID:L9FMCB960
-(unsigned)hash;はNSObjectのメソッド
457名称未設定:2010/02/17(水) 12:03:46 ID:npXd0PKiP
UUIDだと混乱せずに数字の(増加するだけの)カウンタだと混乱するという根拠がわからないが。
まさかint値の限界を越えるまでタブ開かれるからとか?
458名称未設定:2010/02/17(水) 13:12:37 ID:2BLRjt+X0
>>457
いや、なんか気持ちがスッキリしないだけで、プログラム的に混乱する
というわけではありませんでした。カウンタでやるのが良いみたいですね。
ありがとうございました。

>>455
なるほど、これも使えそうです。

>>456
hash も参考になりました。
459437:2010/02/17(水) 14:34:59 ID:qb/ksFw8P
規制で携帯からで申し訳無いです。

>>438
大体こんな感じです。
>>440
ありがとうございます、見てみます。
>>441
Appleから落としたサンプル、RoundTrasparentWindowを真似しました。
>>442
そのあたりは大丈夫そうです。
>>443
やっぱりそれが必要でしょうか…


以下簡単ですが実装部です。
シンタックスエラー等は無いです。
いかんせん携帯なので略ですみません…

#import 略
@implementation 略

-(id)initWithContentRect:略:略:略:略
{
self = [super initWithContentRect:略:略:略:略];
//↑ここでボーダーレスを設定してます
printf();
if (self != nil) {略}
return self;
}

@end
460名称未設定:2010/02/17(水) 15:25:09 ID:npXd0PKiP
参考にしたサンプルがうまく動いているなら、確実に実装漏れだよ。
その漏れを他人に探させるのはダメ。自分で目を皿のようにして見直そう。
461名称未設定:2010/02/17(水) 16:05:49 ID:8g6yoEPe0
>>459
やろうとしている事の最低限は、RoundTrasparentWindow の CustomWindow だけでできる。
initWithContentRect... のなかで、[self setAlfaValue:<#好きな値, 0~1.0#>]; にして
あとはIBでwindowのクラスを設定して、nibをセーブ。戻って、ビルドしたらよい。
ここまで書き込んだ事が全て本当なら、nibファイルのセーブをしてないんでねーか?
462名称未設定:2010/02/17(水) 17:50:47 ID:tOrz1zq00
>>459
nibファイル内のNSWindowが初期化されるときは、initWithContentRect:styleMask:backing:defer:は呼ばれないよ。
代わりにinitWithCoder:が呼ばれます。
initWithCoder:内では、スーパークラスのinitWithCoder:を呼ばなければならないので、ここでボーダーレスの設定はできないと思う。
463名称未設定:2010/02/17(水) 17:55:55 ID:L9FMCB960
いや、それでできるよ。
464名称未設定:2010/02/17(水) 17:56:15 ID:L9FMCB960
initWithContentRect〜のオーバーライドの方ね
465名称未設定:2010/02/17(水) 18:20:16 ID:QDOavdCH0
>>459
>>443
>やっぱりそれが必要でしょうか…

こいつ何も分かってないんじゃまいか?
466名称未設定:2010/02/18(木) 06:01:45 ID:redB8DZq0
自分で作ったtest.appを、Macのログイン時に自動的に起動するように
したいのですが、app側からその設定のON/OFFってどうしたら
実現できますかね?
467名称未設定:2010/02/18(木) 06:47:09 ID:redB8DZq0
すいません、自己解決しました。ここに書いてありました
ttp://xcatsan.blogspot.com/2009/11/launchserviceshared-file-listsw.html
468449:2010/02/18(木) 09:58:34 ID:XNStTuOA0
>>459
僕のはシカトかいw
469名称未設定:2010/02/18(木) 12:52:25 ID:AYaEw0sM0
どーしてallocやnewしたのは自動でautorelease呼ばれないんですかね?
470名称未設定:2010/02/18(木) 12:54:55 ID:oRLlCzgo0
勝手に autorelease されたら困るだろ。
471名称未設定:2010/02/18(木) 13:01:28 ID:Z2o56y760
>>469
Objective-Cなんて捨てて、Javaやったらどうだ?
472名称未設定:2010/02/18(木) 13:02:21 ID:OZyuvitK0
Cocoa-Javaブリッジはもはや消滅したわけですが
473名称未設定:2010/02/18(木) 13:12:29 ID:Z2o56y760
Cocoaも捨てちまえよ
474名称未設定:2010/02/18(木) 13:19:15 ID:QNvO0V/vP
人生もだ
475名称未設定:2010/02/18(木) 14:54:41 ID:e4Ad7iTx0
オレは捨てないでください
476名称未設定:2010/02/18(木) 14:58:40 ID:pBjRf2M30
ワシは捨てられた
477名称未設定:2010/02/18(木) 21:36:44 ID:FkOEvlBo0
俺は拾った
478名称未設定:2010/02/18(木) 22:12:48 ID:FJvM8EvH0
それよりCocoaの話ししようぜ!
479名称未設定:2010/02/18(木) 22:49:06 ID:LQcLEerF0
Cocoaって10回言って
480名称未設定:2010/02/18(木) 23:33:05 ID:aS2rhknzP
おなかの上で貝を割って食べる動物は?
481名称未設定:2010/02/18(木) 23:35:02 ID:3LjOmiyw0
NSStreamEventEndEncountered って、どんなときに発生するの?
482名称未設定:2010/02/19(金) 00:03:19 ID:+G9mMNUt0
>>480
コアラ!
483名称未設定:2010/02/19(金) 02:27:04 ID:4bDkpUO+0
>>480
コアラだろwww
それがどうしたwwww
484名称未設定:2010/02/19(金) 03:35:07 ID:rVWq/Yro0
ワラビーでは?
485名称未設定:2010/02/19(金) 10:16:10 ID:PP7LysEt0
Cocoa アプリで、完成したリリースビルドの「パッケージを表示」しても
見せなくないリソース(画像とか)を見せないようにする方法ってあるんでしょうか?
486名称未設定:2010/02/19(金) 10:32:15 ID:W9gxJHG/0
>>485
独自のフォーマットに復号化してりゃいいじゃん。
487名称未設定:2010/02/19(金) 10:33:25 ID:nexkVNOu0
>>470
勝手にAutoreleaseされて困るのはNSAutoreleasePoolを確保する時ぐらいだと思いますけど…
どんな関数でもrefcount=0、必要ならretain、のほうがわかりやすくていいなあ。
というかautoreleaseプール自体が嫌いなんだな、たぶん。
488名称未設定:2010/02/19(金) 10:37:12 ID:W9gxJHG/0
>>487
分かりやすい、分かりにくいとか以前に、キミは果たしてObjective-Cの参照カウンタ方式をちゃんと理解し、
使いこなせているのか疑問だよ。
489名称未設定:2010/02/19(金) 10:39:00 ID:G9v3V8bfP
クロスカウンターで同時解放。
490名称未設定:2010/02/19(金) 10:49:38 ID:W1rSDiaX0
objc2なら、放っとくか意図的にnil代入すれば開放されるみたいだが。
491名称未設定:2010/02/19(金) 11:02:18 ID:MzpKXmDTP
いらなくなったときに確実にリリースするなりautoreleaseにしてオブジェクトごと破棄させときゃ
そうそう問題は起こらんよ
毎度破棄させるのをめんどくさがるからややこしくなる
492名称未設定:2010/02/19(金) 16:05:18 ID:nexkVNOu0
>>488
OLEから(というかCOMからだな)入ってるからautoreleaseプールが付け焼刃っぽくて嫌いなんだと思う。
#COMにはautoreleaseはなくて、必ずaddref/releaseする必要がある。
どうせそういう便利で適当なもの使うのなら、最初から全部その形態にしとけ、という思考。
493名称未設定:2010/02/19(金) 19:13:08 ID:E6/Txct+0
他力本願スマソ

タブブラウザで使われるような
追加・排除・並び替え等できる
タブビューの作り方を教えてください

並べかえは大して必要じゃないが
出来ればソース&nib/xibのセットで伝授頂きたい

厨房的要望スマソ
494名称未設定:2010/02/19(金) 19:23:53 ID:G9v3V8bfP
つシイラ
495名称未設定:2010/02/19(金) 19:33:15 ID:E6/Txct+0
>>494
その手があったですか
早速醤油を見てみます
あ、醤油じゃなくて
ソースだった!

(´∀`)
496493:2010/02/19(金) 19:56:20 ID:E6/Txct+0
シイラ見てきたが
ちと思ってたのと違うね。
ウェブページのプレビューイラネ。
もっとこうSfとかChとかFFとかみたいな
一般的なタブビューを誰か教えてー
497名称未設定:2010/02/19(金) 19:57:27 ID:onxIq3Cp0
ここあオヤジギャグのスレですか?
498名称未設定:2010/02/19(金) 20:00:21 ID:G9v3V8bfP
つthousand
499名称未設定:2010/02/19(金) 20:03:49 ID:37ljxqdt0
ビュー切り替えはNSTabViewを使って、タブ部分はNSSegmentedControlをオーバーライドして使ってみるとかどうかね
500493:2010/02/19(金) 20:40:56 ID:E6/Txct+0
>>498 , >>499
ありがとうございました。>>499さんの方法を試してみますです。

>>497
そういうあなたもナカナカの腕前じゃナイデスカ
501493:2010/02/19(金) 21:19:32 ID:E6/Txct+0
下を使うことにしましたです
http://www.positivespinmedia.com/dev/PSMTabBarControl.html
502493:2010/02/19(金) 21:47:57 ID:E6/Txct+0
お世話んなってます
早速PSMT(中略)trolをダウンロード->xcodeprojを開いて
build&go したものの、
なにやらコヤツは InterfaceBuilder.framework というのを使ってるらしいんだが
そんなものは無いわけで
解決方法ご伝授お願いします。
503名称未設定:2010/02/19(金) 22:29:08 ID:W+9+P50P0
>>502
ん? InterfaceBuilderKit.frameworkのこと?
/Developer/Library/Frameworksにない?
504名称未設定:2010/02/20(土) 01:39:24 ID:B3h5YtKp0
相手すんのめんどくさくなってきた。
505名称未設定:2010/02/20(土) 08:54:07 ID:BubhMNm30
カントリーマアム予備軍の口調だな
506名称未設定:2010/02/20(土) 11:42:17 ID:JSSsR/xT0
任意のアプリファイル(app)から、バージョン情報や作成日時を取得するにはどうしたらいいですかね?
507名称未設定:2010/02/20(土) 11:54:54 ID:BubhMNm30
>>506
あと5分考えれば分かると思うよ
508名称未設定:2010/02/20(土) 12:02:26 ID:km2qizTcP
作者に問い合わせればいいんじゃない?
509名称未設定:2010/02/20(土) 14:41:01 ID:XIyWVftC0
>>502
余談だがどうやってこのライブラリ見つけたんだ?
この手の物(マック用)を出してる会社ってなかなかうまく探せないんで
ググるコツとか他の情報源とか教えてほしいっす
510名称未設定:2010/02/20(土) 16:04:58 ID:QceZeLkA0
511名称未設定:2010/02/20(土) 16:05:16 ID:JSSsR/xT0
>>507
5時間考えたけど、わかりませんでした・・
教えてください。お願いします。
512名称未設定:2010/02/20(土) 16:29:21 ID:Y0iNQik60
>>511
どう考えた?
どこまで考えた?
何を調べた?
513名称未設定:2010/02/20(土) 16:38:08 ID:hH+ASyXF0
NSBundle
514名称未設定:2010/02/20(土) 16:39:02 ID:+2mBG/s+0
>>511
1、あなたのアプリのそれらが何処を見れば分かるかを調べる
2、プログラムを書く
515名称未設定:2010/02/20(土) 17:06:10 ID:BubhMNm30
>>511
ADCのSelectメンバーシップに加入しろ。
たった56800円で、どんな低レベルな質問にも2回まで答えてくれる。
http://developer.apple.com/jp/products/select.html
516名称未設定:2010/02/20(土) 18:39:43 ID:IuagChNPP
シェンロンみたいだな
517名称未設定:2010/02/20(土) 19:20:58 ID:XIyWVftC0
>>510
thousandが使ってるってことですか
ありがとさんです
518名称未設定:2010/02/20(土) 19:56:21 ID:4WDvGxr00
かと言って、あんまり高度なこと聞くと・・・
519名称未設定:2010/02/20(土) 20:34:07 ID:OI1UZYVa0
シングルトンパターンって Cocoa でもよく使いますか?
CocoaフレームワークではNotificationCenterがシングルトンらしいですが、
自分で実装するときも頻繁に使うものなのか分からなくて...

アプリ内でインスタンスが1個しか存在しないと判断すれば、軽いノリで使って
弊害ないでしょうか。
520名称未設定:2010/02/20(土) 20:59:03 ID:1y3du44h0
521名称未設定:2010/02/20(土) 21:01:55 ID:OI1UZYVa0
>>520
感謝です。読んできます。ありがとうございます!
522名称未設定:2010/02/20(土) 21:36:03 ID:31n3lJSm0
>>515
確かに低レベルな質問なら答えてくれるな
523名称未設定:2010/02/21(日) 00:12:37 ID:Y4Zc4Kfo0
メンバーシップ加入したことないけど、CarbonとかQuickTime3あたりとか、IOKit周りの質問でも答えてくれるの?
524名称未設定:2010/02/21(日) 00:52:56 ID:ga8QT5dq0
低レベルな質問なら
525名称未設定:2010/02/21(日) 01:02:03 ID:Y4Zc4Kfo0
低レベルな内容の質問なのか
低レベルなAPIの質問なのか
526名称未設定:2010/02/21(日) 02:15:58 ID:v3RKTF6e0
じゃあまずそこから聞いてみよう
527名称未設定:2010/02/21(日) 03:10:47 ID:Z/2xshz40
>>519
+(id)shared〜とか+(id)default〜で初期化するのは大抵シングルトンだよ
528名称未設定:2010/02/21(日) 10:27:25 ID:qmlqoa5/0
+(id)default...
はシングルトンじゃないよ。
普通にalloc initすれば別のインスタンスを得れる。
使いどころはそんなにないと思うけど。

>519
なので、本当のシングルトンでもいいけど、シングルトンのように見える実装でも良いと思うよ。
サンプルの
+ (MyGizmoClass*)sharedManager
だけ実装すればそれになる。
sharedじゃないから名前を変えた方が良いけど。
529名称未設定:2010/02/21(日) 10:53:06 ID:Y4Zc4Kfo0
例えば
NSWorkspaceの場合インスタンスの作成は +sharedWorkspace のみ
NSFileManagerの場合、+defaultManager と -init メソッドが実装されてる。

NSFileManagerはてっきりシングルトンだと思ってたけど、ドキュメントを見ると10.5からはシングルトンじゃなくなってんのね。
完全に見落としてた。
530名称未設定:2010/02/21(日) 11:47:35 ID:Q90zyGEn0
>>529
NSFileManager を alloc init すると裏スレッドでも使えます
531名称未設定:2010/02/21(日) 13:57:07 ID:Y4Zc4Kfo0
そうとは知らず普通に裏スレッドでがんがん使ってました。
ファイルのアトリビュートを取得したりファイルを消したり移動したりする際には-changeCurrentDirectoryPath:を使わず
常に絶対パスを指定してたから問題なく使えてたのだろうか、、。
532名称未設定:2010/02/21(日) 15:09:21 ID:QeBC5hjT0
一般的な質問なんですが、静的で変化しないオブジェクトやビューは Interface Builder で、
動的で変化するオブジェクトやビューはコードで、っていう考え方で
良いんでしょうか。

だとすると、プログラムで動的に生成したオブジェクトから、
Interface Builder で配置した View や、Inteface Builder で インスタンス化した
モデルを参照するにはどうしたらよいでしょうか。
IBOutlet でつなぐことができず不便に感じています。

アドバイスをよろしくお願いします。
533名称未設定:2010/02/21(日) 20:28:29 ID:Q90zyGEn0
NSWindowController/NSViewControllerをサブクラスするのが普通ではないかと。
そうして、File's owner にそのサブクラスを設定したら、IBOutlet で繋げます。
534名称未設定:2010/02/21(日) 21:49:31 ID:KP8WRwwRP
I.Bでサブクラスを右クリックしてインスタンス化すれば、つなげられなかったっけ?

535名称未設定:2010/02/21(日) 22:14:50 ID:cliN3ztI0
>>532
プログラムで動的に生成したオブジェクトなら、その時点でオブジェクトへの参照を持っているはず。
IBOutletでつなぐ必要性はないと思うが。
536名称未設定:2010/02/21(日) 22:40:51 ID:QeBC5hjT0
>>535
プログラムで動的に生成したオブジェクト「へ」の参照ではなく、
プログラムで動的に生成したオブジェクト「から」 IB でインスタンス化済みの
オブジェクトへの参照についての話です。

>>534
それだと静的なインスタンスしかできませんよね...

>>533
基本的にオブジェクトを作る場合というか、myClass は NSObject から
継承することしか考えてなかったので、NSWindowController/NSViewController
のサブクラスを File's owner にする方向で考えてみます。
IBOutlet を出したい myClass が複数ある場合はどうするか、など
不明な点はありますが。

レスありがとうございました。
537名称未設定:2010/02/21(日) 23:16:00 ID:pV47txI/0
IBOutletを理解していないようだね
IBOutletは参照を渡してるだけだよ
538名称未設定:2010/02/21(日) 23:56:51 ID:UXiy2gWr0
自分がバカでわかってないだけなのになぜか偉そうなやつっているよな
539名称未設定:2010/02/21(日) 23:59:49 ID:pV47txI/0
偉そうに見えたか。ごめん。
540名称未設定:2010/02/22(月) 00:24:28 ID:mPDmOffb0
>>536
> プログラムで動的に生成したオブジェクト「から」 IB でインスタンス化済みの
> オブジェクトへの参照についての話です。

それなら、IB でインスタンス化済みのオブジェクトの参照をIBOutletで取得すればいいだけだ。

@interface MyWindowController : NSWindowController {
IBOutlet id ibObject;
}

- (id)createMyObject {
return [[MyObject alloc] initWithIBObject: ibObject];
}
541名称未設定:2010/02/22(月) 22:12:14 ID:+H/J22b70
NSMutableArrayに値を格納しようとしていますが
tableArrayViewがnilではないにもかかわらず、オブジェクトを追加できません。
init後にcreateNewItemを実行させているのですが、どこが問題なのでしょうか?
addObjectをコメントアウトすると、stringの文字列がコンソール出力されます。

環境は、Xcode3.2をSnowLeopard上で使用しています。
Cocoaプログラミング第3版を教科書にしているですが、6章まで来て止まってしまいました。

@implementation AppController
- (id)init
{
NSLog(@"init1");
tableArrayView = [NSMutableArray arrayWithCapacity:10];
NSLog(@"init2");
return self;
}
- (void) createNewItem:(id)sender
{
NSLog(@"createNewItem: 1");
NSString *string = [newItem stringValue];
NSLog(@"createNewItem: 2");
[tableArrayView addObject:string];
NSLog(@"createNewItem: 3");
NSLog(@"createNewItem: newItem stringValue:[%@]", string);

NSLog(@"%d", [tableArrayView count]);

}
@end
542名称未設定:2010/02/22(月) 22:27:52 ID:fe0S3fN50
>>541
とりあえずは
tableArrayView = [[NSMutableArray arrayWithCapacity:10] retain];

で、newItemはどこから出てきた?
543541:2010/02/22(月) 22:33:52 ID:+H/J22b70
>>542
>で、newItemはどこから出てきた?
ヘッダーに定義してました。
@interface AppController : NSObject {
IBOutlet NSTextField *newItem;
NSMutableArray *tableArrayView;
}
- (IBAction) createNewItem:(id)sender;
@end

>とりあえずは
>tableArrayView = [[NSMutableArray arrayWithCapacity:10] retain];
初期化部分を書き換えたところ、addObjectやcountがエラー無しで実行できるようになりました。
retainは使ったことがなかったので、ドキュメントを漁ってみます。
ありがとうございました。
544名称未設定:2010/02/22(月) 22:41:25 ID:Qtq1dt2G0
arrayWithCapacityはautoreleaseかかってるから、
インスタンス内で使い回す場合はretainする必要がある
retainしたら、deallocをオーバーライドしてそこでreleaseしておけばいい
545名称未設定:2010/02/22(月) 23:06:10 ID:fe0S3fN50
GCを勧めるべきなのかまようけど、
オーナーシップについて書かれた古い日本語のドキュメントはこれ。
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html
最新のは翻訳されてない
546名称未設定:2010/02/22(月) 23:07:22 ID:fe0S3fN50
「オブジェクトの所有権」ってところね。
547名称未設定:2010/02/22(月) 23:11:56 ID:iXDugmQx0
最近のObjective-Cは-(id)initで
self=[super init];イディオムいらなくなったのか?
なんだか
>>541の返却値のselfの中身が気になるんだが。

548名称未設定:2010/02/22(月) 23:31:24 ID:4AHQLhV80
>>547
ヒレガスの第六章読んだら、-init内で[super init];はしてる。541は何故かカットしてるけど。

しかしこういうのって、
self = [super init];
if (self != nil) {

}
やるのが流儀じゃないのかね?
549541:2010/02/22(月) 23:44:22 ID:+H/J22b70
>>545-546
詳解Objective-C 2.0と併せて参考にしてみます。
基礎からきっちりやりたいので助かります。

>>547-548
おお、抜けてました。
6章のチャレンジ二つ目をやっていたのですが、勉強したそばから抜けてますね……。
さっそく修正してみました。

ご教示ありがとうございます。
550名称未設定:2010/02/23(火) 09:19:12 ID:nFWZsWPs0
>>545
これじゃないの?
http://developer.apple.com/jp/iphone/library/documentation/MemoryMgmt.pdf

iPhoneが売れたので基本iPhone向けはせっせと翻訳してるようです。
http://developer.apple.com/jp/iphone/library/japanese.html
551名称未設定:2010/02/23(火) 09:21:35 ID:nFWZsWPs0
('A`) 所有権、という言葉は所有者が1人しかいないような印象あたえてよくないなあ…
552名称未設定:2010/02/23(火) 10:59:05 ID:K8Dgfrpd0
>>551
ownership という英語とはニュアンスが違うと?
553名称未設定:2010/02/23(火) 11:47:42 ID:nFWZsWPs0
ネイティブじゃないから英語圏の人がownershipにどういう感情もつか知らんけど。
554名称未設定:2010/02/23(火) 11:49:38 ID:MjjFZ3crP
「金持ち欲張らず」じゃない?
555名称未設定:2010/02/23(火) 12:11:49 ID:4owDUqNv0
>>550
酷い!
今度からiPhoneDevも漁ることにする。
556名称未設定:2010/02/24(水) 04:27:59 ID:FnwwxocT0
Welcome to Capitalism!

単に社内的に翻訳者を雇う余裕が出ただけかもしれんが、
好意的に見れば日本の開発者をより視野に入れてくれたということかも。
557名称未設定:2010/02/24(水) 09:11:07 ID:xCZ/00raP
翻訳ミスのリスクを考えたら英語のまま読み下すのが一番だと思うけどな
558名称未設定:2010/02/24(水) 10:18:35 ID:tEoNPNwk0
>557
英語力による。
正直、自分で読む方が大量にミスが入るし、最後まで意味不明の部分も残る。
559名称未設定:2010/02/24(水) 12:49:35 ID:iEGDGL0EP
iPhone前にはあり得なかった高待遇だな。
560名称未設定:2010/02/24(水) 21:50:13 ID:Z0SgE0qR0
翻訳の質は正直かなりいいと思うよ。まあInside Macから綿々続いてる、っていえば続いてるしね。
561名称未設定:2010/02/24(水) 22:54:45 ID:cLo06cDI0
さっぱり分からない事に遭遇したのですが、何かヒントをお願いします。
struct _aStruct {
 CFStringRef str __attribute__((aligned(8)));
  double xy[2];
} aStruct;
#define PREFIX @"prefix_"
aStruct.str = (CFStringRef) [[PREFIX stringByAppendingFormat:@"lu", 10] copy];
printf("%s %s %p¥n",
 CFStringGetCStringPtr(aStruct.str, kCFStringEncodingUTF8),
 [(NSString*)aStruct.str UTF8String], &aStruct.str);

をやると、なぜかCFStringGetCStringPtr が NULL を返してくるのです。NSString* に
キャスト+UTF8String は設定した文字列を返してくれます。NSLogでも同じことが
起こります。これって、何が起こっているのでしょうか?データは入っているようなので、
実害は無いのですが、すっごい気持ち悪くて…よろしくお願いします。
562561:2010/02/24(水) 23:00:50 ID:cLo06cDI0
訂正です。NULL が返ってきたと書きましたが、"(NULL)" が返ってきたのまちがいです。
563561:2010/02/24(水) 23:05:49 ID:cLo06cDI0
いや、NULLが返ってきた、であってた…もういや…orz
564532:2010/02/24(水) 23:11:29 ID:UQ2TlJ/r0
>>532 ですが、いまいち理解がおぼつかないので、自分の疑問点をもう一度整理して、
Googleのディスカッションに投稿しました。
念のためマルチポストにならないように報告しておきます。

http://groups.google.com/group/cocoa-dev-japan/browse_thread/thread/abd0fd36ed546094
565名称未設定:2010/02/24(水) 23:37:14 ID:6G4ylecF0
>>561
リファレンスを見るとわかるがCFStringGetCharactersPtrやCFStringGetCStringPtrは状況によっては
NULLを返すとされている(クラスクラスタのうちどれが実際に使われているかなどだろう)。
CFStringGetCStringでデータをコピーする方は必ず有意なデータが得られるはず。
566名称未設定:2010/02/25(木) 00:45:55 ID:HYezL4ce0
すいません。テキストファイルに文字を追記する処理ってCocoaでできますか?
今はテキスト全体をNSStringで受け取って、文字を足してファイル上書き保存と
いう効率の悪そうなことやってます。何か良い方法があればご指導ください。
567名称未設定:2010/02/25(木) 00:51:36 ID:5IM/nW7/0
>>561
CFString.hの最初に解説してある。
CFStringの内部実装はダイナミックに変化する。
 CFStringGetPascalStringPtr()
 CFStringGetCStringPtr()
 CFStringGetCharactersPtr()
は「運良く」内部表現が一致した時にバッファを覗けるAPI
568名称未設定:2010/02/25(木) 01:51:47 ID:Da6CCYGL0
>>566
[NSOutputStream outputStreamToFileAtPath:append:]
569566:2010/02/25(木) 03:39:10 ID:HYezL4ce0
>>568
ありがとうございました!
570名称未設定:2010/02/25(木) 09:31:25 ID:YzweYJ1T0
>>565, 567
さらっと読み落としていました(汗、恥ずかしい。
おかげで納得できました。どうもありがとうございます。
571名称未設定:2010/02/25(木) 19:58:31 ID:nND47VU20
うろ覚えだけどMac OS RomanかASCIIじゃないとNULLを返すんじゃなかったっけ?
572名称未設定:2010/02/25(木) 23:33:10 ID:dp8c/gP30
>>571
>>565 >>567 をおおざっぱに言い直す意味は?
573名称未設定:2010/02/25(木) 23:57:03 ID:nVCJ2Lr90
>>571
全く違う。例えば内部表現がUTF-16の場合、CFStringGetCharactersPtr()は
内部バッファへのポインタを返すが、他の形式やエンコーディングでの呼出しに
対しては全てNULLが返る。
574名称未設定:2010/02/26(金) 01:16:42 ID:03q7alg10
アドレスブック.app の右上や iTunes.app の右上にあるような NSSerchField に入力することで、
NSTableView の表示を絞り込むような実装についての解説ページ などがありましたら
教えてください。
575名称未設定:2010/02/26(金) 01:38:16 ID:MAPbzXGC0
ttp://kirika.la.coocan.jp/acts/cocoastudy/200604/tunesbrowser.html

coredataとxcodeのエンティティ作るツール使えば自動的にやってくれる
576名称未設定:2010/02/26(金) 02:03:07 ID:03q7alg10
>>575
ありがとうございます。NSPredicate っていうクラスもあるんですね。
577名称未設定:2010/02/26(金) 04:59:12 ID:Tfn92iBk0
Apple 本家の
http://developer.apple.com/cocoa/coredatatutorial/index.html
もあるでよ。英語だけど。

あと、iTunes は多分 Cocoa じゃない
578名称未設定:2010/02/26(金) 11:14:09 ID:EXIQtUhZ0
NSOpenPanelの
「beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo」
が10.6でDeprecatedになり、
「beginSheetModalForWindow:completionHandler:」
を使えってなってるけど数回使用すると固まります。

AppleのサンプルTextSizingExample - /Controller.m
でも固まります。

回避策を教えて下さい。

579名称未設定:2010/02/26(金) 11:23:44 ID:r8bS0KJ3P
「固まる」と言う表現は雑談では良いが、質問では相手に伝わらない表現。
アプリの応答がなくなるのか、OSの応答がなくなるのか、はたまた強制終了なのか、
コンソールのエラーログに何か出力されていないかなどを書かないと。
580名称未設定:2010/02/26(金) 11:47:10 ID:bIgtkdby0
beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo:
Presents an Open panel as a sheet with the directory specified by absoluteDirectoryPath
and optionally the file specified by filename selected. (Deprecated in Mac OS X v10.6.
Use beginSheetModalForWindow:completionHandler: instead. You can set
absoluteDirectoryPath using setDirectoryURL:, and you can set fileTypes using
setAllowedFileTypes:.)
とありますので、beginSheetModalForWindow:completionHandler:を使っては?
581名称未設定:2010/02/26(金) 11:56:01 ID:EXIQtUhZ0
>>579
アプリの応答がなくなります。
コンソールにエラーログの出力はありません。

AppleのサンプルTextSizingExampleのController.mでは
おおよそ8回ぐらいOpenPanelを開く閉じるを繰り返すと
アプリが無反応になります。
レインボーカーソルにすらなりません。

ただただ固まったように無反応になり、強制終了以外の事
が出来なくなります。

>>580
beginSheetModalForWindow:completionHandler
これを使うと無反応になります。
beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo
だと問題なのですが、一応Deprecatedと言う事で、新たにコードを書いてみたら固まったという訳です。
582名称未設定:2010/02/26(金) 13:33:02 ID:bIgtkdby0
>beginSheetModalForWindow:completionHandlerを…(略)…固まります。
の意味を取り違えてました。ごめんなさい。
さて、こちらでTextSizingExampleそのものを実行した限りでは、NSOpenPanelを
何回開いても問題なく動作してますよ、ターゲットのウィンドーがある限り。
>581 を読むと、Controller.m だけを切り出しているように読めますが、
TextSizingExampleそのものでも駄目ですか?
正しく動けばNSOpenPanelに問題はないと思われます。
情報が少ないので確認ですが、ターゲットは正しく存在してます?
または、ハンドラの中身が間違ってないですか?
[self application:NSApp openFile:[openPanel filename]];をコメントアウトしたら
動作しませんか?まずは、NSOpenPanel の問題なのかどうか、切り分ける必要があるかと。
583名称未設定:2010/02/26(金) 14:26:17 ID:EXIQtUhZ0
>>582
どうも書き方が悪くてすみません。
TextSizingExampleそのものを実行しても固まります。

さっきテストしていてわかったのですが、固まる条件らしいものがあるみたいです。

OpenPanelの上の検索窓で検索を行うと、下にフォルダー等の階層が表示されますが、
表示された階層を選択したりしている内に固まります。
最初の内は問題なく動作していますが、この動作を数回繰り返していると固まるようです。

とりあえず
beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo
で10.6でも問題無さそうなんで、
beginSheetModalForWindow:completionHandler
は使わない事にしてみます。

何か情報があればお教え下さい。
584583:2010/02/26(金) 15:44:28 ID:EXIQtUhZ0
ごめん、上げてた orz
今日は調子が悪いみたい・・・

583で書いた下にフォルダー等の階層が表示されますがのとこ、
OpenPanelの検索窓で検索した後に「項目を選択するとパスが表示されます」
って出るとこに表示される横長の階層の事です。

もう今日は帰ろう・・・
585名称未設定:2010/02/26(金) 17:11:05 ID:MAPbzXGC0
別にsageるルールなんてないけどな
586名称未設定:2010/02/26(金) 18:50:24 ID:03q7alg10
複数の NSView のインスタンスを NSArray に入れて管理しようと思ったのですが、
ビルドして実行すると「割り込まれました」となってしまいます。
NSView は NSArrray に入れることはできないのでしょうか。

NSMutableArray* myArray = [NSMutableArray array];

MyView *_myView = [[MyView alloc] initWithFrame:frame];

[myArray addObject: _myView ];  // ここでダメ

よろしくお願いします。
587586:2010/02/26(金) 19:21:45 ID:03q7alg10
すいません、別の部分の問題だったみたいです。失礼しました。
588名称未設定:2010/02/27(土) 00:45:34 ID:C1G/nJ5o0
#import <Cocoa/Cocoa.h>
int main() {
  NSObject *obj = [[NSObject alloc] init];
  [obj release];

  if(obj) { NSLog(@"%@", [obj class]); }
  else { puts("dead already."); }

}

オブジェクトが解放されているかを調べたいのですが、↑このコードを実行すると
NSObject と表示されます。[obj class] の代わりに [obj retainCount] 等とすると
segmentation fault になります。つまり obj は NULL ではなく、クラス情報も
保持していますが、さりとて完全に動作する状態でもないようです。
obj が解放されている事を知るにはどうしたら良いでしょうか?
589名称未設定:2010/02/27(土) 00:55:07 ID:IRiiJzGm0
>>583

つdealloc
590名称未設定:2010/02/27(土) 00:55:52 ID:IRiiJzGm0
まちがえたw
>>589>>588あて
591名称未設定:2010/02/27(土) 01:13:21 ID:C1G/nJ5o0
>>589-590
if(obj == nil) で行けました。済みません…
592名称未設定:2010/02/27(土) 01:14:11 ID:3WhVKmTr0
くだらないことだけど、テンポラリレクト
っていうインスタンスを持つ場合
tmpRect, tempRect, temporaryRect
どれを使いますか?
質問っていうかアンケートですが。変数名、メソッド名などいつも凄く迷うんですよね。
593名称未設定:2010/02/27(土) 01:14:35 ID:vvBUSU3B0
>>588
開放されていることを知りたい理由にもよろけどNSZombieEnabledで例外でるかどうか
594名称未設定:2010/02/27(土) 01:17:15 ID:3WhVKmTr0
>>591
if (obj != nil)
でしょ。
595名称未設定:2010/02/27(土) 01:36:15 ID:C1G/nJ5o0
>>593
obj 変数を安全に再利用したいと思っています。

>>594
済みません。うっかりしてました…
nil かどうかではオブジェクトが解放されているか判別出来ないみたいですね。
596名称未設定:2010/02/27(土) 01:44:36 ID:C1G/nJ5o0
勿論 release したら obj = nil するとか、オブジェクトのステートを管理する為のフラグを
別途用意すれば一応目的は達成出来るのですが、もっと奇麗な方法が無いかなと思いまして…
597名称未設定:2010/02/27(土) 03:17:22 ID:10DjY2Ek0
>>596
あるオブジェクトが release/dealloc されてるかどうか調べたくなるというのは
プログラムのかきかたがおかしい
598名称未設定:2010/02/27(土) 03:37:44 ID:ioYBv6iY0
>>592
テンポラリがテンポラリだと明示されていたところで、
ほとんどの場合、何の助けにもならないからtempという接頭辞は付けない。

10行に満たないような処理が自明な関数なら、変数名はrectとか適当に付ける。
それ以上ならばその役割、責任に準じた名前を付ける。
「何のために」という点を、後で見た人が名前だけで分かるのがベスト。

とはいえ、マーティン•ファウラーも言うように命名は最も難しい点だなぁ。
599名称未設定:2010/02/27(土) 03:42:42 ID:bJiqZUiK0
誘導
クラス名・変数名に迷ったら書き込むスレ。Part16
http://pc12.2ch.net/test/read.cgi/tech/1258777686/
600名称未設定:2010/02/27(土) 04:12:09 ID:wD1dKNLU0
>>595
>obj 変数を安全に再利用したいと思っています。

「再利用」って、具体的に何をするんですか。後でまた使うなら release しなきゃ
いいのでは。
あと、解放されたオブジェクトのメモリの再利用は普通は言語やOSがやってくれる。
601名称未設定:2010/02/27(土) 11:38:21 ID:3WhVKmTr0
>>598
変数ではなくてインスタンス名で迷ってるんですね。なのでrectとかは避けたいです。
でもそのインスタンスは外部からは参照されないから実際そんなに考えるところでもないです。でも決められない。
>>599
ありがとうございます。いってきます。
602名称未設定:2010/02/27(土) 12:21:10 ID:vvBUSU3B0
>>592

Coding Guidelines for Cocoa: Acceptable Abbreviations and Acronyms
ttp://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/APIAbbreviations.html

ここに例示されてるものについては合わせておけばいいと思います
603名称未設定:2010/02/27(土) 13:36:40 ID:C1G/nJ5o0
>>597
validation が目的なので、それほどおかしいとは思いません。
release が obj = nil してくれれば良かったんですけど、結局
release する前に参照数が 1 だったら自前で obj = nil する事に
しました。

>>600
変数に新しいオブジェクトを再アサインしたいという事です。
604名称未設定:2010/02/27(土) 13:46:23 ID:3WhVKmTr0
>>602
テンポラリはtempだったのか!ありがとう。
>>603
イニシャライズした時点でretainCountが2とか3のものもあるからその方法だとリークするよ。
また解放しようと勝手に複数回releaseしたりdeallocしたりするとクラッシュするよ。
生成されたオブジェクトはあなただけが管理してるわけじゃないってこと。
605名称未設定:2010/02/27(土) 13:47:32 ID:N9WOcERG0
>>603
あきらかにおかしい
606名称未設定:2010/02/27(土) 14:03:37 ID:C1G/nJ5o0
>>604
>イニシャライズした時点でretainCountが2とか3のものもあるからその方法だとリークするよ。

なるほど。一応、テストして問題ない事は確認していますが、
ライブラリの実装が変わったら破綻しますね…
やっぱりフラグで管理する事にします。
607名称未設定:2010/02/27(土) 14:23:50 ID:8Lrdy8JV0
>>606
> 603 「変数に新しいオブジェクトを再アサインしたいという事です。」なら、素直に
if (new != obj) { [obj release]; obj = [new retain]; }
すれば良いだけの話なんだが・・・>>550 に本家日本語訳メモリ管理ガイドがあるんで、
しっかり理解する事を進める。@property (readwrite, retain) obj; で @synthesize obj;
して、[self setObj:new]; だけでもいい。もし分からないなら、GC 使えば良い。

ついでに、>589 も理解してないようなんで、同上(dealloc は自前で呼ぶものではない)
608名称未設定:2010/02/27(土) 14:49:19 ID:C1G/nJ5o0
>>607
リリースして直ぐアサインするならそれで良いのですが、
リリースしたけど新しくアサインもされていない状態や
リリースされていないからアサインしないという状況も
存在するので、安全の為に状態確認が必要なのです。
今回はフラグを立てて対応する事にしました。
609名称未設定:2010/02/27(土) 15:02:28 ID:+fI55s5S0
>>608
そういう場合は nil を代入しておくのが常道だと思う

普通は変数をそんなに使い回さないとおもうが...
610名称未設定:2010/02/27(土) 15:03:24 ID:DIt+cfV/0
>>603
>release する前に参照数が 1 だったら自前で obj = nil する

リークへ一直線。わるいこと言わないからガベコレonでビルドをお勧めする。
611名称未設定:2010/02/27(土) 15:07:14 ID:8Lrdy8JV0
>>608
うん、まぁその、なんだ・・・がんばれ。
# 俺の頭が悪いんか?>608の内容を理解できん。>603 の「参照数が 1 だったら自前で
# obj = nil する」 って所を見ると、シングルトンを作りたいのかな?そんな気がしてきた。
612名称未設定:2010/02/27(土) 15:18:25 ID:C1G/nJ5o0
>>609
そうですね。ちょっと参照数を気にし過ぎでした。
613名称未設定:2010/02/27(土) 15:35:41 ID:iB1XEAZvP
obj-cの長ったらしいメソッド名に慣れてしまって
仕事でもコメントまんまな関数名とか付けるようになってしまった。
614名称未設定:2010/02/27(土) 19:24:40 ID:1/NFsJ0i0
羨ましい限りだな
全部大文字でアンダースコアもない
マクロ定数やconstとの格闘は嫌だお
615名称未設定:2010/02/27(土) 20:33:08 ID:bZ3ZsIGu0
変に短いかくて、何か分からん前よりより良い
616589:2010/02/27(土) 22:13:36 ID:bH5ZDtpG0
>>607

すまん、書きかた悪かった。
releaseしたときにdeallocにログを貼っておくとか、
デバッガでとめてみれば分かるかと思ったんで。
617名称未設定:2010/02/27(土) 22:52:37 ID:C1G/nJ5o0
たびたび済みません。↓このプログラムを実行して作成される /tmp/foo.gif は
ベジェパスの繋ぎ目の所で 1 dot 下に線が飛び出してしまいます。
(100,251),(300,250),(500,250) という座標を変えずに、線が飛び出す事無く
奇麗な折れ線を描く方法は無いでしょうか?

#import <Cocoa/Cocoa.h>
int main() {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSSize size = NSMakeSize(600, 480);
  NSImage *img = [[NSImage alloc] initWithSize: size];
  [img lockFocus];
  [[NSColor whiteColor] set];
  NSRectFill(NSMakeRect(0,0,size.width,size.height));
  [[NSGraphicsContext currentContext] setShouldAntialias: NO];
  [[NSColor blackColor] set];
  NSBezierPath *aPath = [NSBezierPath bezierPath];
  [aPath moveToPoint: NSMakePoint(100, 251)];
  [aPath lineToPoint: NSMakePoint(300, 250)];
  [aPath lineToPoint: NSMakePoint(500, 250)];
  [aPath stroke];
  NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:
   NSMakeRect(0,0,size.width, size.height)];
  [img unlockFocus];
  NSData *dat = [rep representationUsingType: NSGIFFileType properties: nil];
  [dat writeToFile: @"/tmp/foo.gif" atomically: YES];
  exit(0);
}
618名称未設定:2010/02/28(日) 03:58:27 ID:0KWSZyDd0
>>611
># 俺の頭が悪いんか?>608の内容を理解できん。

>>608 のコードで、obj を new が代入されるもっと前でリリースしておきたかったり、
そうじゃなかったりするということかな。逆に言うと >>608 で obj をリリースすべき
かどうか簡単には分からないという... でフラグとか用意しちゃう。

もしかして、ひょっとすると、obj を何らかの理由で、超素早く解放したいのかな?
ならば >>608 のコードの時点で obj をリリースする必要がないことが保証されんと。


>うん、まぁその、なんだ・・・がんばれ。

定番の方法があるにもかかわらずそれを理解せずに「自分独自」の方法を
編み出そうとするタイプの匂いがw
619名称未設定:2010/02/28(日) 07:22:03 ID:P8ncb16v0
>>617
 [[NSGraphicsContext currentContext] setShouldAntialias:YES];
620名称未設定:2010/02/28(日) 07:37:20 ID:P8ncb16v0
>>613
ObjCに慣れると他の言語のメソッドのオーバーロードの存在意義を疑ってしまう
なんであんな機能があるんだか
621名称未設定:2010/02/28(日) 08:17:34 ID:YD4H1wZt0
>>617
>   NSBezierPath *aPath = [NSBezierPath bezierPath];

の直後に
NSAffineTransform *trans = [NSAffineTransform transform];
[trans translateXBy:0.5f yBy:0.5f];
[trans set];
を入れる。
622名称未設定:2010/02/28(日) 14:19:00 ID:3WguHl9v0
>>616
そういう意味だったのか、誤解してた、ごめんなさい。

>>618
>定番の方法があるにもかかわらずそれを理解せずに「自分独自」の方法を(略
(俺だけかもしれんがw)一度は通る道。そこで失敗して、定番の定番たる所以を
実感すると。良いステップアップだと思うので、とりあえず応援しておいた。
623名称未設定:2010/02/28(日) 14:46:08 ID:n4yBqfJr0
>>621
座標を変えずにというおかしな指定をして済みません。0.5 ずつずらすのは
ad hoc な感じがして嫌だなと思ったのですが、むしろ座標を変えるのが
常道なんですね。どうもありがとうございます。

http://www.mail-archive.com/[email protected]/msg04627.html
http://www.cocoabuilder.com/archive/cocoa/120812-1-pixel-wide-lines.html
624名称未設定:2010/02/28(日) 15:30:31 ID:YD4H1wZt0
ピクセルの矩形は(0,0)から(1,1)を示してるわけで、ピクセルの境界上を走る幅1のラインは、ちょっと予期せぬ動作をするわな。
625名称未設定:2010/03/02(火) 22:33:45 ID:7RzbEFfL0
テスト
626名称未設定:2010/03/04(木) 16:54:34 ID:hp170w9i0
Image Well(NSImageView)にサブビュー(NSView)を作りたいのだが、
IBでどうやるのでしょう?「Embed Objects In」とちょうど逆さまのことをやりたいのです。
「Embed Objects In」の後,親ビューのアトリビュートはNSImageView用に変化しないし、
IBからでは無理なのでしょうか?
627名称未設定:2010/03/04(木) 17:03:21 ID:F76vZ2eq0
上に乗っける
628名称未設定:2010/03/05(金) 13:39:57 ID://ryS+NE0
ウィンドウ貼り付けたカスタムビューのクラスの中で、
同じウィンドウに貼り付けてある、チェックボックスのstateを
取得したいのだけど、どうしたらいいのかがわからない。。。。
629名称未設定:2010/03/05(金) 13:45:15 ID:akVcX7Ei0
>>628
両方を知ってる人(インスタンス)にやらせる。
いなければ作る。

それはカスタムビューの仕事ではない。
630名称未設定:2010/03/05(金) 13:45:53 ID:JIXNKqyxP
IBでつなげる
値をUserDefaultsにバインドする
631名称未設定:2010/03/05(金) 14:39:23 ID://ryS+NE0
>>629-630
コントローラー的クラスをわざわざ作るのがいやだったので、
NSUserDefaultsをバインドしてできましたー。
同じウィンドウのNSCheckBoxのインスタンスをさくっと取得する方法が
あるのかなぁ、って思ってました。。。。
632名称未設定:2010/03/05(金) 15:58:24 ID:C321hsGT0
>NSUserDefaultsをバインドしてできましたー。
ヲイヲイ。まあ動きゃいいか。
633名称未設定:2010/03/05(金) 21:42:23 ID:2MfH7Vwd0
>NSUserDefaultsをバインドしてできましたー。
それなら、IBでコネクションした方がマシだ。

カスタムビューのソースコードに
IBOutlet NSButton* checkbox;
と書いておけば、IBで普通にコネクションできる
634名称未設定:2010/03/05(金) 21:47:35 ID:TNHNNuke0
環境設定に保存する項目ならそのままでいいんじゃん?
そうでないならやっぱコントローラクラス作ってバインドしときなよ。
635名称未設定:2010/03/07(日) 21:03:31 ID:nSEdxDOn0
たとえば、ICalみたいにアプリケーションは各ユーザ毎ごとに単一、永続的なドキュメントを保持・管理したいのだけど、どうすれば良いか迷っている。

通常はNSUserDefaultsを使えば良いのは分かっているのだけど、ドキュメントをSQLiteなど、独自にファイル形式で持ちたい場合、適切なパスをどうして得たらよいだろうか?
636名称未設定:2010/03/07(日) 21:05:43 ID:fhSyn6nQ0
~/Library/Application Support/YourAppName/YourFuckingFilename
637名称未設定:2010/03/07(日) 21:13:15 ID:nSEdxDOn0
>>636
それはそうなんだけど、ハードコーディングを避ける方向でないのかな?
638名称未設定:2010/03/07(日) 21:20:36 ID:bv1mGxKp0
>>637
それ言い出したら何にもできなくなる罠
639名称未設定:2010/03/07(日) 21:24:00 ID:nSEdxDOn0
>>638
ごめん、実際自分はもっと初心者だった。

質問をあらためて、ユーザのホームデレクトリをとるAPIを教えてほしい。
640名称未設定:2010/03/07(日) 21:27:20 ID:8OBQ37BO0
Foundation/NSPathUtilities.h の下の方。
NSHomeDirectory()

NSSearchPathForDirectoriesInDomains()の方が便利。
641名称未設定:2010/03/07(日) 21:30:55 ID:i3mxILIv0
>>635
つ NSApplicationSupportDirectory
642名称未設定:2010/03/07(日) 21:31:26 ID:kpNJi7mUP
ググるで一発ヒットするべ。
cocoa ホームディレクトリの取得
643名称未設定:2010/03/07(日) 21:48:13 ID:nSEdxDOn0
みんな、回答ありがとう。
無事、ホームデレクトリを取得できました。 Thanks.
644名称未設定:2010/03/07(日) 23:11:34 ID:5pCffKIy0
質問です。
URLをデフォルト以外(FirefoxとかOperaなど)のブラウザで開く方法はありますでしょうか?
考えたのはシェルスクリプトをバンドルしてNSTaskで起動しています。
こんな感じ。
#!/bin/sh
open -a $1 $2
645名称未設定:2010/03/07(日) 23:16:14 ID:w9vMNACI0
>>644
-[NSWorkspace openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers:]
が使えます。
646名称未設定:2010/03/08(月) 12:45:46 ID:U8BlXR4+0
Viewに文字列を描くプログラムを作ってるんだが、
どうも動かすマシンによってフォントが汚くなる。
コードはこんな感じで、NSTexturedBackgroundWindowMaskな
NSWindowのcontentViewにカスタムViewをセットしてる。

- (void)drawRect:(NSRect)dirtyRect {
[[[NSColor blackColor] colorWithAlphaComponent:0.5f] set];
NSRectFill(dirtyRect);

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[NSFont systemFontOfSize:25.0f] forKey:NSFontAttributeName];
[dict setObject:[NSColor whiteColor] forKey:NSForegroundColorAttributeName];

NSAttributedString *astr = [[NSAttributedString alloc] initWithString:@"12345" attributes:dict];
[astr drawAtPoint:NSMakePoint(10, 10)];

[astr release];
[dict release];
}

Mac miniではアンチエリアスの効いた綺麗な表示なんだが、
Airで動かすと全体的にどのフォントも太くなって汚い。
(OSはともに10.6.2でXcodeのバージョンも同じ)。

もう1つ気になることがあって、そのAirでもXcodeのターゲットをDebugにして
動かすとフォントは綺麗に表示されるんだが、Releaseでビルドするとやっぱり汚くなる。
で、そのビルドしたappをMac miniで動かすと綺麗。

Airがおかしいのか? そんな気がしてきた...
647名称未設定:2010/03/08(月) 13:03:43 ID:Q6krGomBP
解像度とか安置エイリアスの強度とか。
648名称未設定:2010/03/08(月) 13:46:55 ID:iXkErliZ0
>>646
きたない状態ときれいな状態のスクリーンショットうpして
649646:2010/03/08(月) 15:20:09 ID:U8BlXR4+0
うpした。
左がAirで、右がmini。フォントは同じLucidaGrandeの22。
影が付いてるけどやってることはほぼ同じ。

http://koideai.com/up/src/up39374.jpg

>>647
thanx.
解像度に依存するようなものでもないので、その線は少し考えにくい。
アンチエリアスの設定は特に何もいじってないんだが...
650名称未設定:2010/03/08(月) 15:36:36 ID:iXkErliZ0
「滑らかな文字のスタイル」が勝手に有効または無効になっちゃうみたいですね
651名称未設定:2010/03/08(月) 17:47:18 ID:IC9LWQWc0
>>649
こりゃ、キタナイっていうか全然別のフォントに見えるな。Weightが違う感じだ。

テキストエディットで同じフォントを表示したときは同じようにみえるの?
こちらでPixelmatorでシミュレートしたところ丁度RegularとBoldぐらいの差に
見える。
http://koideai.com/up/src/up39383.jpg
652646:2010/03/08(月) 18:26:48 ID:U8BlXR4+0
>>650
ありがとう。
Airが今は手元にないのでそっちは確認できないが
miniの方で汚いのが再現できた。

アプリのplistに以下を追加。
AppleFontSmoothing 1

ちなみに、0にすると綺麗。
帰ったらAirの方でも試してみる。

>>651
少なくともXcodeで描画する時以外に影響はない気がする。
FontBookでLucidaGrandeを検証しても問題ないし。

Airの方は10.5からのアップグレードなので
もしかすると10.6をクリーンインストールした方が良いのかも。
まあ、miniもそうなんだけどね...

653名称未設定:2010/03/08(月) 18:59:47 ID:zv7ig+pH0
CocoaBinding に関連して質問です。
NSTreeController で 「Content Array」で Bind するのと、
content アウトレットでモデルを参照するのでは、どのような違いがあるのでしょうか。
KVO の場合もやり方に違いがあるのでしょうか。よろしくお願いします。
654646:2010/03/08(月) 21:55:21 ID:s2OV8h2D0
Airでも綺麗に表示された。AppleFontSmoothingで。
必要な時はこのエントリを追加できるようオプション作って対応しようと思う。
もう少し、他の環境でもどうなるか調べてみるけど。

レスくれた人たち、サンクス。
655名称未設定:2010/03/09(火) 01:27:51 ID:NqRpLFdR0
>>645
ありがとうございます。
ファイルを開くのは知っていたのですが、URLは見落としていました。
656名称未設定:2010/03/09(火) 20:16:40 ID:/MUKwAqR0
PackageMaker 3.0.3を初めて使ってみたんだけど、なぜかアプリケーション(*.app)
が/Applications にインストールされない・・・
app一つだけのシンプルなProjectファイル作ってみてもだめ・・
何か基本的なこと見落としてますかね?
657名称未設定:2010/03/09(火) 20:52:04 ID:hTuUd7LX0
また質問ですみません。
OSの言語環境を取得する方法ってありますでしょうか?
日本語かそれ以外かを判定したいのですが。

よろしくおねがいします。
658名称未設定:2010/03/09(火) 21:11:32 ID:RQiB5hyO0
CFArrayRef languages = CFLocaleCopyPreferredLanguages();
659名称未設定:2010/03/09(火) 22:32:52 ID:hTuUd7LX0
>>658
あ、ありがとうございます。
試してみます。
660名称未設定:2010/03/10(水) 00:01:17 ID:Izmf4LjZ0
>>656
同じバージョンのreceiptが残ってるからとか。
pkgutil --forget 〜 で消せる。
661名称未設定:2010/03/10(水) 15:05:23 ID:xAMZLyc/0
>>656
/var/log/install.log
662名称未設定:2010/03/10(水) 23:20:33 ID:1rMVB7bo0
>>645
withAppBundleIdentifierのパラメタ(NSString *)bundleIdentifierを固定(ex."com.apple.safari")ではなく
アプリに登録したブラウザ(のファイルパスなど)からの取得方法がわからず、調べたのですが見当たりませんでした。
なにか方法をご存知でしたら、お手間でなければお願いいたします。
663名称未設定:2010/03/10(水) 23:35:53 ID:D+4jWnJv0
>>662
ファイルパスから bundle idntifier を得るならたぶんこれで:
[[NSBundle bundleWithPath:@"ここにパス"] bundleIdentifier]
664名称未設定:2010/03/11(木) 01:19:45 ID:7z7uoD4F0
>>663
できました!本当にありがとうございます。
NSBundleのリファレンスも見てたのに、わからないと見えないというか、
自分の精進がまだまだ足りないです。
665名称未設定:2010/03/11(木) 10:07:42 ID:r4Lg/ak00
いや、一読してその場ではなんとなく覚えていても、いざ使う段になって普通に忘れてるもんなんで、
さっくり聞いたほうがいいと思うよ。 プログラマ少ないからgoogle先生でも役立たないこと多し。
666名称未設定:2010/03/12(金) 11:40:12 ID:oHq9sYg50
コマンドライン引数の処理をObjc-C風に処理しようと思って,
下のようなものを作ったのだけど,
warning: passing arg 2 of `count:values:' from incompatible pointer type
が出てしまいます。実行自体には問題ないのだけど,どうすればいいですか?
(配列をメソッドの引数に受け渡す正しいやり方?)

//Foo.h
#import <Cocoa/Cocoa.h>
@interface Foo: NSObject {}
-(void) count:(int) argc values:(int*)argv;
@end
//Foo.m
#import "Foo.h"
@implementation Foo
-(void) count:(int) argc values:(int*)argv{
int i;
for (i = 0; i < argc; i++) printf("argv[%d] = \"%s\"\n", i, argv[i]);
}
@end

//main.m
#import <Cocoa/Cocoa.h>
#include <stdio.h>
#import "Foo.h"
int main(int argc, char *argv[]){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
id foo = [[Foo alloc] init];
[foo count:argc values:argv];
return 0;
}

667名称未設定:2010/03/12(金) 11:43:03 ID:dFLJEwkP0
argvがint*だと?
668名称未設定:2010/03/12(金) 11:46:00 ID:AxJl06SJ0
どうすればいいですかって、型を合わせればいいだろ。
669名称未設定:2010/03/12(金) 17:28:38 ID:te0qrw+T0
obj-c風なのにchar*とかで渡すなよぉ…
670名称未設定:2010/03/13(土) 20:02:11 ID:quhR0/wv0
ヒエガス本第3版の第8章をやってるんだが、こんなログが出力されて画面が出てこない。
一週間ほどソースやIBでみても原因が分からないのだが
誰かヒントを教えてくれ。

[Switching to process 52895]
実行中...
2010-03-13 19:56:33.340 RaiseMan[52895:a0f] [<MyDocument 0x100147fb0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key z.
2010-03-13 19:56:33.352 RaiseMan[52895:a0f] [<MyDocument 0x1001472e0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key z.
671670:2010/03/13(土) 20:10:36 ID:quhR0/wv0
Array controllerをのModel Key Pathを修正したらログが変わった
zからemployeesに直した
ログは変わったのですがまだどこが悪いのかわかりません
どなたか手助けをお願いします

run
[Switching to process 52958]
実行中...
2010-03-13 20:05:45.204 RaiseMan[52958:a0f] Cannot create BOOL from object <_NSControllerObjectProxy: 0x10043f340> of class _NSControllerObjectProxy
2010-03-13 20:05:45.214 RaiseMan[52958:a0f] Cannot create BOOL from object <_NSControllerObjectProxy: 0x100442a50> of class _NSControllerObjectProxy
672名称未設定:2010/03/13(土) 20:15:27 ID:Io/Y33AX0
ソースを上げてみ。
673670:2010/03/13(土) 20:19:48 ID:quhR0/wv0
person.mは↓のようにしています。
#import "Person.h"


@implementation Person

- (id)init
{
[super init];
expectedRaise = 5.0;
personName = @"New Person";
return self;
}

- (void)dealloc
{
[personName release];
[super dealloc];

}
@synthesize personName;
@synthesize expectedRaise;
@end


674670:2010/03/13(土) 20:21:48 ID:quhR0/wv0
MyDocument.mは↓のようにしています。
#import "MyDocument.h"
@implementation MyDocument
- (id)init
{
[super init];
employees = [[NSMutableArray alloc] init];
return self;
}
- (void)dealloc
{
[self setEmployees:nil];
[super dealloc];
}
- (void)setEmployees:(NSMutableArray *)a
{
if (a == employees)
return;
[a retain];
[employees release];
employees = a;
}


次に続きます。
675670:2010/03/13(土) 20:23:21 ID:quhR0/wv0
前の続きです。

- (NSString *)windowNibName
{
return @"MyDocument";
}
- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];
}
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
if ( outError != NULL ) {
*outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
}
return nil;
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
if ( outError != NULL ) {
*outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
}
return YES;
}
@end
676名称未設定:2010/03/13(土) 20:27:50 ID:Io/Y33AX0
……どーせIBの接続で間違ってるだろうから、プロジェクトをロダに上げてみては、という意味だったのだが
677名称未設定:2010/03/13(土) 20:28:28 ID:8jOx/9X40
>>669
obj-c って char * 使ったらあかんの? 無理矢理 id にキャストとか? w

まあこの場合 Cocoa 的には NSProcessInfo か。
678670:2010/03/13(土) 20:37:44 ID:quhR0/wv0
>>676
そういう意味でしたか。
勘違いしてました。ごめんなさい。
ここにうpしました。

http://uproda11.2ch-library.com/11231012.zip.shtml
DLキーはcocoaにしております。
679名称未設定:2010/03/13(土) 21:04:33 ID:Io/Y33AX0
はけーん。

Add New Emp ボタンのEnabled (BOOL)が、ArrayConのselection(id)にバインディングされてる。
それを外せば起動する。
680670:2010/03/13(土) 21:15:18 ID:quhR0/wv0
>>679
ありがとうございます。
こちらでも今試したところ、無事に動きました。

先のログと見比べつつ、どうしてわかったのか試行錯誤してみます。
引っかかって、どうにもならなかったので助かりました。
681名称未設定:2010/03/13(土) 23:24:53 ID:hqfx9L6vP
慣れてくると、だいたいエラーで何がおかしいかわかってきますよ。
682名称未設定:2010/03/14(日) 21:47:18 ID:ouL49MOx0
質問なんですが、あるクラスで
NSString *hoge

というインスタンス変数と、

-(void)setHoge:(NSString *)aString;
-(NSString *)hoge;

みたいなアクセッサがあるとき、そのクラス自身のメソッド中で
hoge を参照したい場合、直接 hoge にアクセスするのか、もしくは
アクセッサを介して

[self hoge]; や [self setHoge:stirng];

のようにアクセスするのはどちらがベターなんでしょうか。
よろしくお願いします。
683名称未設定:2010/03/14(日) 21:48:47 ID:5g6SawUB0
基本はすべてアクセッサ。ピリオドによる変態構文がサポートされたのはそのためだと信じてる。
684名称未設定:2010/03/14(日) 22:03:55 ID:1KD7X1Fr0
うちは直接使う。
アクセサは外の連中のためにあるものだ。
685名称未設定:2010/03/14(日) 22:20:47 ID:M3Qwak3l0
>>682
KVOが絡むと話は違ってくるけど(厳密には無関係という突っ込みは無しの方向でw)、
たとえ [self hoge] でアクセスしても- (id)hoge { return hoge; } となるわけで、
それならそのまま、-(void)piyo { hoge = @"piyo"; } とやっても一緒でしょ。// GC

>>683
ドットシンタックスは静的型チェックをより厳格にするためのモノだと思った。アレ嫌いだ。
686名称未設定:2010/03/14(日) 22:50:02 ID:AEkj4vh40
アクセッサを使った方が俺は好きだな。
a = [self hoge];
a = hoge;
アクセッサの方は self と記述してあるからメンバ変数なんだなってのが
わかりやすい。

ドットシンタックスはヒレガス氏も嫌っているようで、
言語を無駄にややこしくしてしまった。と本に書いてた。
687名称未設定:2010/03/14(日) 22:50:36 ID:0foUuBLC0
僕も>>684と同意見で、直接インスタンス変数にアクセスしていいと思う。

>>685
> ドットシンタックスは静的型チェックをより厳格にするためのモノだと思った。
考え方が逆だと思う。
ドットシンタックスによって、厳格な静的型チェックをするのではなくて、
厳格に静的型チェックをしないと、ドットシンタックスが使えないのだと思う。
688名称未設定:2010/03/14(日) 22:58:14 ID:0foUuBLC0
>>686
たしかに、[self hoge]と書けば、ローカル変数なんかと区別できて見やすい気もするが、
ただ、ObjCのメソッド呼び出しコストを考えると、少々書きづらい感じがします。
ただ単にメンバ変数である事を明記したいだけなら、self->hogeと書くのはどうだろうか?
689名称未設定:2010/03/14(日) 23:05:48 ID:M3Qwak3l0
>>687
あ、確かに逆ですね。
しかし何の為にあの構文を導入したのか…KVC のキーパスとの一貫性を持たせる為?
690名称未設定:2010/03/14(日) 23:11:36 ID:AaWx+mke0
>>682
いろいろと意見があると思いますが、memory management, encapsulationの面からいって
クラス内でもアクセッサを使ったほうがよいと思います。

modern runtimeではクラス変数もsynthesizeできますし、その場合はアクセッサを使うしか
ないわけです。
691名称未設定:2010/03/14(日) 23:16:40 ID:gBF+GNmD0
オブジェクトの内部でアクセスする分にはカプセル化は関係ないんじゃないの。
メモリ管理上の制約って何か合ったっけ。
692名称未設定:2010/03/14(日) 23:21:26 ID:+ZcLBSlRP
いきなりhoge_ = hoge;
ってやって大丈夫なんでしたっけ?
693名称未設定:2010/03/14(日) 23:22:11 ID:gZb82xHv0
resignならな。
694名称未設定:2010/03/14(日) 23:22:48 ID:0foUuBLC0
ドットシンタクス構文が導入された理由は、おそらく他のプログラミング言語を意識しての事だと思う。

ObjC2.0でドットシンタクスと同時に導入されたGCやforeach構文も含めて、最近の言語ならあたりまえのように使えます。
で、「ObjCは時代遅れな言語だ」と言われないために、導入されたのではないかと。
695名称未設定:2010/03/14(日) 23:23:48 ID:gZb82xHv0
俺は何を書いてるんだ……assignのミス。
696名称未設定:2010/03/15(月) 01:09:13 ID:/17kM0T00
Accessor Methodかわいい
697682:2010/03/15(月) 01:10:24 ID:YsnTiZUJ0
レスありがとうございます。

直接派もアクセサ派も説得力があり、結局どっちなんでしょう。
(ドットシンタクスは実質はアクセッサですよね。)

・カプセル化を考えれば、確かに自身のインスタンス変数にアクセッサを
介す必要はない=アクセッサは外の連中のためにある。

は納得できますが、

>アクセッサの方は self と記述してあるからメンバ変数なんだなってのが
わかりやすい。

これもなるほど、と思いました。んー、どうしようw
698名称未設定:2010/03/15(月) 02:09:34 ID:eWwno0n30
>>682
カプセル化を考慮に入れるならば、
「自己カプセル化」でググってみると視野が広がるかも知れない。
699682:2010/03/15(月) 03:01:25 ID:YsnTiZUJ0
>>698
ググってみました。リファクタリングの一つとして自己カプセル化は
有用ということが分かりました。ありがとうございました!

外部に公開したくないインスタンス変数は直接アクセス、
外部にも公開するインスタンスは必要に応じてクラス内でもアクセッサ経由
ということで、必要に応じて使い分けていこうと思います。
700名称未設定:2010/03/18(木) 13:56:08 ID:J+g2oVpr0
Cocoaで自分のアプリケーションの現在のメモリ使用量とか
システムの空きメモリ容量を知るにはどうしたらいいでしょうか?
701名称未設定:2010/03/19(金) 08:34:25 ID:yhfMHABQ0
700です
いろいろ調べてみたんですが結構難しいんですかね?
NSProcessInfoだとphysicalMemoryで物理メモリの合計はわかるけど個々のアプリの使用状況がわかるAPIはないみたい
CarbonのGetProcessInformationだと昔はprocessSizeが使えたけどOS Xでは0しか返ってこない
アクティビティモニタってどうやって各プロセスのメモリの使用状況を得てるんでしょうね?
702名称未設定:2010/03/19(金) 08:41:31 ID:I1RUkJ+V0
>>700
Cocoa の API でその手のがあるかはよく知らないけど、
UNIX レベルの方法なら sysctl() あたりでカーネルからその手の情報を取り出すとか。
Mach のサービスを使う手もあるね。システムの状況は host_statics() とか。
ここらへん、ps とか top とかのコマンドのソースを見れば載ってるはず。

でも、ps とかを走らせて出力を調べるのも楽でよかったりして
703名称未設定:2010/03/19(金) 13:32:10 ID:I1RUkJ+V0
うわ、思いっきり間違ってるなあ、 host_statistics() だね。もうわかってるかもしれないけど。
704名称未設定:2010/03/21(日) 03:21:37 ID:gayGaFKu0
>>701
>各プロセスのメモリの使用状況

もう分かってると思うけど、task_info() で
task_info_t の resident_size を見れば良いよ
705名称未設定:2010/03/22(月) 19:19:50 ID:08t2Qv2+0
初歩的な質問で申し訳ないです。
スレッド経由でNSTextViewを操作した時に処理が返ってこない問題で
悩んでいます。

最初にInterface Builderで、NSTextViewとNSButtonを貼付けて
ボタンを押すと1行文字を表示するというプログラムを
AppController上に書く分には何も問題が起こりません。

そこで、@protocol宣言でNSTextViewに表示するメソッドを
スレッドのヘッダファイルに定義してAppController側で実装。
スレッド作成時にwithObject引数で自身(AppController)を渡しています。
このAppControllerの表示用メソッドをスレッド側から呼び出しています。

スレッドの作成とスレッドの終了をトグル処理にしたボタンに
割り当てたところ、NSTextViewがスクロールされるまでは
スレッド側からAppControllerの表示メソッドが正しく呼び出され
普通に動作します。ところが、NSTextViewの最下行のスクロールイベントが
発生する所でボタンハンドラが処理をつかんだままになります。

同じ問題に遭遇した方はおられますでしょうか?
環境はSnow Leopard / XCode 3.21です。

ようは、スレッドの処理結果をNSLogのNSTextView表示でやりたいのです。
何か手がかりかヒントがありましたら、よろしくお願いします。
706名称未設定:2010/03/22(月) 19:57:09 ID:ja2TQH+x0
CocoaのUI周りってthread safeなの?
performSelectorOnMainThrea
707名称未設定:2010/03/22(月) 20:32:29 ID:EOr3LzR80
ad
708名称未設定:2010/03/22(月) 22:30:50 ID:wxM827Z10
do
709名称未設定:2010/03/23(火) 01:16:27 ID:+RvdcPm70
質問させてください。
a.appからb.appを起動し、このb.appが終了するのを待ってから
a.appの処理を続けたいのだけど、その場合、どのようにしたら
よいのでしょうか?
710名称未設定:2010/03/23(火) 09:32:57 ID:z/CKMG5X0
>>709
workspaceつかえ
711705:2010/03/23(火) 12:08:18 ID:AQUp6yQf0
>>706>>707
色々教えていただきましてありがとうございます。
performSelectorOnMainThreadですんなり動作しました。

ただ、調べる中で気になりましたのがこのメソッドの呼び出しが
NSConnectionを使って取得したAppControllerのproxyオブジェクト
からの例として記載されていました。この例ではdetachNewThreadSelector
のwithObjectでNSPortの配列を渡していました。

私のコードでは、detachNewThreadSelectorのwithObjectで
引数として直接AppControllerを取得したものから呼び出しています。
(作法?的になにかNGな香りがしています・・・。)

>>708
NSPortを使う処理でしょうか。

この辺りの事をより詳しく知りたいのですが、良書はありますでしょうか。
712名称未設定:2010/03/23(火) 12:13:30 ID:U+XqkLwH0
>>711
> 記載されていました

どこに?
713705:2010/03/23(火) 12:58:32 ID:AQUp6yQf0
>>712
参考にさせていただきました人様のサイトなので、ここにリンク貼る
よりは上記メソッド名でぐぐっていただいた方がよいと思います。

サイトに直接記載されていたのではなく、DLできるようになっています
サンプルプロジェクトの圧縮ファイルです。

Advanced Mac OS X Programmingは訳本がまだ出てないのでしょうか?
amazonのなか身検索で詳解Objective-C2.0の索引にperformanceSelectorOnMain..
とありましたので会社帰りにでもみてみようと思います。
714名称未設定:2010/03/23(火) 17:43:34 ID:dYMH3Otn0
>>709
bから再度aを起動する必要がある。
辞書とか3rd party同士で取り決めてるのもあるけどね。
715名称未設定:2010/03/23(火) 18:01:15 ID:yAcBcNZZ0
いや、NSTaskでいいんじゃないの
716名称未設定:2010/03/23(火) 18:08:51 ID:wH5XiJ+V0
NSWorkspace の runningApplications をKVOで監視とか
717名称未設定:2010/03/23(火) 18:08:53 ID:7caZpoKSP
もうQuickTime.frameworkは64bitマシンでは動かないのですか?
718名称未設定:2010/03/23(火) 21:28:35 ID:+jU4OihW0
>>717
アプリが32bitだったら動くんじゃないの。
719名称未設定:2010/03/23(火) 21:29:27 ID:ucbdnbSx0
>>709
1. NSWorkspaceDidTerminateApplicationNotificationをobserver登録。
2. NSWorkspaceのlaunchApp〜のどれかでb.appを起動。
3. 1.のobserverが呼ばれたらuserInfoからb.appでないか調べる。
  終了したのがb.appならa.appの処理を続ける。

NSTaskでb.appのExecutableを実行という方法もあるにはあるけど、
標準的なアプリ起動のさせ方とはチト違うから、
b.appが手前にならないとか既に起動してるともう一個起動しちゃうとかなる。
720名称未設定:2010/03/24(水) 13:21:04 ID:EbHdDMpr0
エレガントじゃないな。
もっといい方法があるような気がするのだが。

System7の頃はAppleEventで同じようなことやってたけどね。
721名称未設定:2010/03/24(水) 13:32:08 ID:ZMl7fQ/u0
>>720
エレガントにしか見えないけどなあ。
722名称未設定:2010/03/24(水) 13:43:36 ID:z8lKXxql0
一番エレガントな方法は、金を出してプログラマを雇う事だと思う。
723名称未設定:2010/03/24(水) 13:50:07 ID:gyA7vgHC0
それはエレファント。
724名称未設定:2010/03/24(水) 16:00:27 ID:yItftSGK0
アプリケーション"xxx"を起動して、処理が終了したら
OKボタンを押してください。
   [OK]

…というダイアログを出す
725名称未設定:2010/03/24(水) 16:02:45 ID:r56tftMw0
>>714
iPhoneスレと間違えた。
726名称未設定:2010/03/24(水) 18:07:35 ID:z8lKXxql0
グデングデンだな
727名称未設定:2010/03/24(水) 19:29:00 ID:b/zDnfwF0
エレクチオンだよな
728名称未設定:2010/03/25(木) 16:48:11 ID:soBr1ngVP
質問です。
アクティブなアプリの状態で、ドックのアイコンをクリックした時に
新規ウィンドウを開くなとのアクションを追加したいのですが、
何のクラスとメソッドを使えばいいのかサッパリです。

よろしくお願いしします。
729名称未設定:2010/03/25(木) 18:01:35 ID:4IIN4lPP0
IBでNSMenuをApplicationのdocMenuに接続するだけ?
730名称未設定:2010/03/25(木) 18:53:20 ID:PKVyZL2c0
applicationOpenUntitledFile:でウインドウを開けばいい。
731名称未設定:2010/03/25(木) 20:03:51 ID:soBr1ngVP
>>729-730
ありがとうございます。
自力で調べてたら>>730の方法があったので出来ました。

ただ、初期設定画面とか開いていると呼ばれない見たい?ですね。
732名称未設定:2010/03/27(土) 00:50:02 ID:wI1xs0q10
ことえりの変換候補ウィンドウを縦書き表示するのって
どうやればいいんでしょうか?
733名称未設定:2010/03/31(水) 00:26:19 ID:Y0U9EtJE0
NSOutlineView のアイテムをクリックすることにより、子項目を開閉させたいんですが、

-(BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item
{

if ([outlineView isItemExpanded:item]) {
[outlineView collapseItem:item];
} else {
[outlineView expandItem:item];
}

return NO;
}

以下略

とやると、どうも expandItem や collapseItem が呼ばれた時点で、再度
shouldSelectItem: のデリゲートが呼ばれてしまい、せっかく開閉したものが
もう一度 元に戻ってしまいます。解決策をご存知の方、よろしくお願いします。
734名称未設定:2010/03/31(水) 01:28:13 ID:uprMTIV80
>>733
手元にMacないから試せないけど、mouseDown をオーバーライドするとか。
735名称未設定:2010/03/31(水) 02:22:05 ID:Y0U9EtJE0
>>734
mouseDown でできました。ありがとうございました。
ダブルクリックで開閉、はよくあるのでクリックで開閉も OutlineView 関連の
メソッドでできるものだと思ってましたが、結局この方法でよかったみたいでした。
736名称未設定:2010/04/01(木) 20:34:02 ID:vKhPfO+U0
コードを書く指針について質問です。
コードをうまく整理したいのですが、以下の3つはどのように使い分けるべきか?どのような違いに気をつけるべきか?
について教えてください。

1つ目
#define kDLFolder @"MyAppDownloadFolder"
#define DLFolder [[NSUserDefaults standardUserDefaults] stringForKey:kDLFolder];

- (void)myMethod {
NSString *path = DLFolder;
//...
}

2つ目
#define kDLFolder @"MyAppDownloadFolder"
- (NSString *)downloadPath {
NSString *path = [[NSUserDefaults standardUserDefaults] stringForKey:kDLFolder];
return path;
}

- (void)myMethod {
NSString *path = [self downloadPath];
//...
}
737名称未設定:2010/04/01(木) 20:35:13 ID:vKhPfO+U0
3つ目
#define kDLFolder @"MyAppDownloadFolder"
NSString * MyMethod() {
NSString *path = [[NSUserDefaults standardUserDefaults] stringForKey:kDLFolder];
return path;
}

- (void)myMethod {
NSString *path = MyMethod();
//...
}

今自分の分かる範囲だと
1つ目
これを定義したヘッダを複数のクラスにインポートして共用することができる。
動的でない。しかし上記の例のように動的な変更がないであろう場合には問題ない(?)
NSString *path = [[NSUserDefaults standardUserDefaults] stringForKey:kDLFolder];
//...
と同義。
738名称未設定:2010/04/01(木) 20:36:05 ID:vKhPfO+U0
2つ目
これが定義されたクラスのインスタンスを知っていなければ呼び出すことができない。
IBでバインドできる。
メソッド化することでサブクラス(またはハック)によってオーバーライドされる。
マルチスレッドを考慮しなければならない時、@syncronized が有用。

3つ目
複数のクラスにインポートして共用することができる。
オーバーヘッドが少なく実行速度が速い。(と以前このスレで見ました)

Appleのサンプルコードを見ていると
文字列や定数の #define は最小限で、後は2つ目の様に書かれていることが多いような気がします。
どのような考え方でこれらのコードの特性、違いを理解すれば良いのかアドバイスお願いします。
739名称未設定:2010/04/01(木) 21:31:18 ID:L7QgPr6sP
カテゴリでデフォルトキーの文字列を引数にして、
常にキーの値を返すメソッドを作る。

パフォーマンスは遅くなるかな?
740名称未設定:2010/04/02(金) 02:00:22 ID:LcjUAFdh0
3つめかなああ。NSHomeDirectory() とかそうだし。
でも define じゃなくて、
extern NSString * const kDLFolder;
使いたい。
741名称未設定:2010/04/03(土) 13:45:21 ID:TKucFTXP0
僕も3つ目に一票。
ただ値を返すだけなら、クラスにする必要ないし。
関数名もプロパティーっぽく、MyMethod()よりも、MyDownloadFolderPath()の方が良い。

>>740
やるなら
extern NSString * const kDLFolder;
じゃなくて
extern NSString* MyMethod();
だよね?
742名称未設定:2010/04/03(土) 17:07:59 ID:tp0Jlbz50
だよねって、なんで?
743名称未設定:2010/04/03(土) 17:32:08 ID:GFdTvQrxP
>>740
define だと書いた分だけ文字列定数が領域を食っちゃうんだっけ?
それともコンパイラかリンカが頑張って最適化して一つにまとめちゃう?
744名称未設定:2010/04/03(土) 18:40:11 ID:jXFzRAQB0
>>740 じゃないけど、Appleのコーディングガイドラインには #define じゃなく
const や enum を使ってねと書いてある。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingIvarsAndTypes.html#//apple_ref/doc/uid/20001284
745名称未設定:2010/04/04(日) 07:44:26 ID:p5MubqU40
>>742
複数のクラスにインポートして共有しようとしているのは、関数の方であって、定数の方ではないよね?

/* file: MyMethod.h */
extern NSString* MyMethod();
//------------------


/* file: MyMythod.m */
#define kDLFolder @"MyAppDownloadFolder"
NSString * MyMethod() {
return [[NSUserDefaults standardUserDefaults] stringForKey:kDLFolder];
}
//-----------------
746名称未設定:2010/04/05(月) 12:42:59 ID:uCQgPbLo0
外からの利用前提なら2番目か3番目をプロジェクトごとに決めるかな。
理由:CとObj-Cがごっちゃになってるとわかりづらい。

プロジェクト全体としてCocoaに関するところだけObj-Cでその他の部分は極力C/C++でいくのか、
ほとんどをObj-Cでいくのか決めたほうがいいと思う。
747名称未設定:2010/04/05(月) 15:19:28 ID:Rhuetv9R0
分かりづらいってw
748名称未設定:2010/04/05(月) 18:16:20 ID:AG/28Ndv0
Obj-CとC++がごっちゃになっているのは、確かに分かりづらいけど。
Obj-CとCが混ざってるのは、わりと普通だと思う。
749名称未設定:2010/04/06(火) 02:03:05 ID:SG5dAZRH0
ObjCがすでにCを内包してるし
750名称未設定:2010/04/06(火) 08:30:46 ID:Uq3SaeH40
>>743
>define だと書いた分だけ文字列定数が領域を食っちゃうんだっけ?
>それともコンパイラかリンカが頑張って最適化して一つにまとめちゃう?

確かにコンパイラやリンカが頑張って一つにまとめてくれたりもする。
しかしそういう挙動に依存していいのかというのはある。

#define の他のデメリットは、定義のスコープがわかりにくいとか、データの型が
わかりにくいとかかなあ。
751名称未設定:2010/04/08(木) 01:09:47 ID:cMovZOpPP
>>750
#if~で偽の部分にリファクタリングが適用されない。
752名称未設定:2010/04/09(金) 09:53:35 ID:4zn523C00
バインディングについて質問です。次のようなモデルがあるとします。
エンティティ:Bumon,プロパティ:name,year,maker,model
エンティティ:Cars,プロパティ:maker,model
関連:Bumon <<->Carsの逆有対多関連(あまり関係なさそうですが)
(Carsのデータは変更削除の可能性があるのでBumonにはmaker,modelのデータを保持させる意図です)

そこで,Bumonのmaker,model項目は,ポップアップボタン(それぞれボタンA,B)で選択できるようにしたいと考えています。そのために,A Array Controller,B Array Controllerを作成。
で,maker(A)を選んだら,model(B)については,抽出(検索)により絞り込まれてから表示されるようにしたいのですが,IBでどのようにすればいいのかが,どうもわかりません。
例えば,Carsのデータは次のようになっているとします。
トヨタ,プリウス
トヨタ,カローラ
トヨタ,クラウン
...
日産,マーチ
日産,フェアレディ
日産,スカイライン
...

maker(A) でトヨタを選んだら,model(B)のポップアップにはプリウス,カローラ,クラウンのみが表示されるようなかんじです。

ボタンAのバインディングにはContent,Content Values,Selected Valueをバインディングするだけでは,すべてのmodelが表示されるだけになってしまいます。
753名称未設定:2010/04/10(土) 00:46:07 ID:gZWaIguU0
NSTreeController を使わずデータソースによる OutlineView で、
あるアイテムがその階層の中で何列目か取得する方法はありますか?

たとえば
-A
--a
--b
--c
-B
--a
--b
--c

みたいなツリー構造のとき、B-c は B階層の中で3列目、というのを
取得したいです。
754名称未設定:2010/04/10(土) 00:54:21 ID:XcTNw2Mm0
>>753
どういうデータソースをどういうふうに使うかわからんからなんとも。
素直に rowForItem: でいいんじゃね?
755753:2010/04/10(土) 05:37:41 ID:gZWaIguU0
説明不足でした。
データソースとなっているモデルは NSArray に NSDictionary をつめた
よくあるタイプで、childキーに下位の Array が入っています。

ここで、項目の並び替えを実装したいのですが、たとえば

-A
--a
--b
--c

の c を a の上に ドラッグして

-A
--c
--a
--b

のような並びにした場合、モデルの Array に index:2 のアイテムを
index:0 に移動という指示を与えなければならないと思い、
>>753のような質問をしました。ドラッグしたアイテムがもともと
何番目のインデックスであったのか知りたいです。

そもそも並び替えをモデルに伝える方法でベターなものがあったら
教えて頂けると幸いです。
よろしくお願いします。

756753:2010/04/10(土) 05:41:16 ID:gZWaIguU0
連投すみません。
同じように、あるアイテムを削除する機能も必要で、

-A
-B
--a
--b
--c

B-c のアイテムを削除するためには、B の下位 Array に
「 index:2 のアイテムを削除する」指示を与える必要がある
と思うので、B の中で何番目かを知りたいです。
757名称未設定:2010/04/10(土) 06:59:08 ID:8gyPLNzR0
selectedHoge 使えば良かろう。
758名称未設定:2010/04/10(土) 17:13:03 ID:UYxhD9Rr0
DashboardのWidgedについてなんだけど、永続化したいデータがある場合、少々なら
ば Preferences で良いのだけど、 plist に収まらない、そこそこ大きなバイナリを
永続化したい場合、 どこに保存する のが よいだろうか?

また、そのパスをいい感じに返してくれるJavaScriptのAPIがあったりしないだろうか
759名称未設定:2010/04/10(土) 17:54:37 ID:h5MduHh50
~/Library/Application Support/
760名称未設定:2010/04/10(土) 18:13:22 ID:a83QaiPD0
>>753
その並び順というのが、モデルにとってどういう意味を持つのかで実装方法が変わってくると思います。

アイテムの順序がモデルにとって意味があるなら、アイテムの中に並び順を示すプロパティを追加することになります。
そして、モデルにアイテムの順序を設定するメソッドを追加してください。

アイテムの順序がモデルにとって意味がなく、ただの画面表示上の問題なら、NSOutlineViewDataSourceを実装してるクラスでアイテムの順序を管理することになります。
どのように順序を管理するのかは自由ですが、いずれにせよ、このクラスにアイテムの順序を設定するメソッドを追加してください。
761名称未設定:2010/04/10(土) 22:56:55 ID:UYxhD9Rr0
>>759
アリガト!
762753:2010/04/11(日) 12:40:09 ID:QeoTO3yY0
>>760
丁寧にありがとうございます。

「モデルにとって意味があるか」ということですが、iTunes のソースリストの
プレイリストのようなものは、「意味がある」とみなしてよいでしょうか。
たとえばソースリストのプレイリストを並び替えて iTunes を終了しても、
次回起動時は並び替えた状態で起動されます。ということはモデルで並び順を
管理し、保存しているという見方でしょうか。
763名称未設定:2010/04/12(月) 00:53:44 ID:JgeFxIQt0
>>753
ITunesのプレイリストのようなものなら、並び順をモデルで管理する方向で良いと思います。
764753:2010/04/12(月) 22:53:07 ID:Hk3TzeGi0
>>763
モデルで並びを管理します。
ありがとうございました。
765名称未設定:2010/04/13(火) 02:40:38 ID:8m+Q/aXf0
ちょっとした事なんですが、メソッドや変数の命名規則で、連語(?)の
つなぎめは大文字にしてますか?

たとえばブックマークリストは
(1)bookmarklist
(2)bookmarkList
(3)bookMarkList

だったらどれが良いでしょうか。個人的には
removeBookmarklist みたいになったときに「ブックマークリスト」のまとまりが
分かって(1)が良いと思ってるんですが、皆さんはどうでしょうか。
766名称未設定:2010/04/13(火) 07:13:35 ID:HIJOpSpR0
bookmarkList一択
767名称未設定:2010/04/13(火) 07:50:59 ID:z7vCdsmo0
だな
bookMarkは論外。PhotoShopとかFireFoxとかIPodとかと同じレベル。
768名称未設定:2010/04/13(火) 11:54:59 ID:tEoX+dUI0
「bookmark」という単語があるが「bookmarklist」という単語はない。
英文的にはlist of bookmarksだからlistOfBookmarksだな
769名称未設定:2010/04/13(火) 12:39:01 ID:HIJOpSpR0
「item」という単語があるが「itemarray」という単語はない。
英文的にはarray of itemsだからarrayOfItemsだな

くらいの妄言。
770765:2010/04/13(火) 13:13:25 ID:8m+Q/aXf0
なるほど、ありがとうございました。

>>769
「英文的には」って前置きしてるのでそこは良いと思いますが。
771名称未設定:2010/04/13(火) 14:57:49 ID:p0/JRzjr0
いや英文的にbookmark listも正しいからbookmarkListでいい
772765:2010/04/13(火) 16:32:02 ID:8m+Q/aXf0
>>771
そうなんですね。安心して bookmarkList を使います。
ありがとうございました。
773名称未設定:2010/04/13(火) 17:47:37 ID:Hlf6SCJ2P
個人的には大文字のLが入ると不格好だから小文字にしてる(笑)

itemList itemlist
774名称未設定:2010/04/13(火) 22:45:49 ID:Lxh0Bz6h0
bookmarks
775名称未設定:2010/04/14(水) 00:29:18 ID:UOK3+ziF0
確かに特に違和感のないものは、Listを付けるよりも単純に複数形にすることも多いな
776名称未設定:2010/04/14(水) 09:36:58 ID:KBIt3J040
bukkuma_ku
777名称未設定:2010/04/14(水) 10:57:43 ID:LHUTyeNq0
shiori
okiniiri
778名称未設定:2010/04/14(水) 16:05:19 ID:etWAdVaY0
theListOfbookMarksThatContainMyFavoriteUrlsAndArticlesOfWebSitesInAllOverTheWorld
779名称未設定:2010/04/14(水) 17:30:58 ID:pssYISXF0
isOfNoUse が抜けてる
780名称未設定:2010/04/14(水) 18:48:52 ID:CoHn3NOqP
URL Url HTML Html XML Xml
781名称未設定:2010/04/15(木) 12:36:07 ID:tf4ZxvI80
782名称未設定:2010/04/15(木) 12:59:26 ID:L66HmAjR0
"ID"は?
783名称未設定:2010/04/15(木) 13:00:34 ID:/OHiUsxO0
エロ
784名称未設定:2010/04/15(木) 14:51:23 ID:KGcsfri40
>>778
The Artist Formerly Known as Princeみたい
785名称未設定:2010/04/16(金) 15:09:34 ID:cd9JrBCQ0
QuickTime Movieのトラックのリソースのパス(QT7 Proでプロパティを見た時のリソースタブのソース)ってどのように変更したら良いのでしょう?
QTMovie、QTTrack、QTMediaをチェックしましたが、それらしいアトリビュートが見つかりませんでした。
QTKitでは編集できないのでしょうか?そうであればLegacyなQuickTime APIの範囲でも良いのですが情報ありませんでしょうか。
786名称未設定:2010/04/16(金) 15:28:27 ID:cd9JrBCQ0
自己レスです。
kQTPropertyClass_DataLocation
かな、、。
787名称未設定:2010/04/16(金) 17:25:29 ID:cd9JrBCQ0
どうやら違ったようなので引き続き情報お待ちしております。
788名称未設定:2010/04/16(金) 17:53:27 ID:70Hsca6O0
チェックてのは全部ダンプしたってこと?
NSLog(@"%@", [track trackAttributes]);
みたいに。
789名称未設定:2010/04/19(月) 11:16:21 ID:evPh+xpj0
>>788
レス遅くなりました。そうですおっしゃる通り、QTMovieとQTTrackとQTMedia全てのアトリビュートをNSLog、そしてAppleのドキュメントでチェックしましたが該当する項目はありませんでした。
調べたところDataHandlerとかを使用してもっと深いところまでパラメータを探らないといけないようですが、使い方が分からず四苦八苦しております。
790名称未設定:2010/04/19(月) 14:26:51 ID:TF4hJMWb0
QTKitってそのあたりぜんぜんないよ。QT7の代わりには当分、というか最終的にもならない気がする。
791名称未設定:2010/04/19(月) 22:38:50 ID:pgHMIAmF0
ホント、QTKitの方向性がさっぱり見えないんだよなぁ。
無理矢理64bit移行させるために、中間レイヤーを半端な
ままに止めてLegacyをDepってしまうつもりなんじゃ
ないかと勘ぐってしまう。
792名称未設定:2010/04/22(木) 09:08:08 ID:TdUhO8Q40
NSView の重なり順(前後関係)を指定するメソッドがリファレンスに
見当たりませんが、どのように指定すれば良いのでしょうか。
793名称未設定:2010/04/22(木) 13:43:16 ID:4WC058pl0
好きに使え。

- (void)addSubview:(NSView *)aView positioned:(NSWindowOrderingMode)place relativeTo:(NSView *)

すでに配置してあるViewの順序もこれで変更する。
やり方はリファレンスに書いてあるぞ。
794名称未設定:2010/04/22(木) 19:42:47 ID:TdUhO8Q40
>>793
すでに追加してあるビューもこのメソッドでいけるとは気づきませんでした。

ありがとうございました。
795名称未設定:2010/04/26(月) 00:48:47 ID:U7QIFd7o0
CoreDataについて質問です。
異なるデータモデルを持つ複数の永続ストアを一つのアプリのなかで同時に
扱うことって当然できますよね?

この際、実装としてはデータモデルのファイルを全部マージして、一つの
コーディネータで取り扱うって理解でいいんでしょうか?
796名称未設定:2010/04/29(木) 19:19:51 ID:p8GwmeytP
>>795
昔Appleが配布してたiClassってサンプルコードでやってたなぁ。
797名称未設定:2010/04/30(金) 01:05:31 ID:4RSy793C0
iTunes のプレイリストのようなものを1つのモデルクラスで管理するとします。
どんなクラス名がいいでしょうか。

PlaylistModel.h
PlaylistStrage.h
Playlist.h
Playlists.h

798名称未設定:2010/04/30(金) 01:31:00 ID:SAJdYvVR0
Playlist.h を PlaylistController.h で管理するんだろ。
799名称未設定:2010/04/30(金) 02:26:14 ID:D9ouSQJNP
>>797
iPhoneのMedia Player Frameworkが参考になる。
中華、クラス名の付け方はム板で聞いた方がいいと思う。
800名称未設定:2010/04/30(金) 04:26:45 ID:4RSy793C0
>>798
ありがとうございます。>>760 を参考に複数のプレイリストを
一つのモデルクラスで管理するという解釈でやりました。
Cocoa の MVC の M と C の定義は未だに良く分かっていません。

>>799
分かりました。ありがとうございます。見てみます。
801名称未設定:2010/04/30(金) 06:08:59 ID:m7aX5XkU0
>>796
ありがとうございます。早速見てみます。
802名称未設定:2010/04/30(金) 09:55:59 ID:SD5ITl/eP
というか、命名まで人に聞かないと何も作れない優柔不断さをなんとかしないと。
803名称未設定:2010/04/30(金) 12:37:01 ID:ioEI5R8B0
MとCの定義を理解するのが先では
804名称未設定:2010/04/30(金) 14:26:09 ID:xFdcnvJ50
M: Marvel
C: Capcom
805名称未設定:2010/04/30(金) 15:00:46 ID:LVhx6k7Z0
M
a
C
806名称未設定:2010/04/30(金) 15:17:09 ID:eEB1UnJ3P
モデルをコントロール
つまり事務所のプロデューサーってことですね
807名称未設定:2010/04/30(金) 16:23:41 ID:PPnPObTz0
ディレクトリ内のファイルを列挙したいんですが
NSFileManagerのdirectoryContainsAtPathと同じようなことができる
CのAPIってあるでしょうか?
808名称未設定:2010/04/30(金) 16:40:44 ID:SAJdYvVR0
809名称未設定:2010/04/30(金) 16:49:08 ID:PPnPObTz0
>>808
ありがとうございました
810名称未設定:2010/04/30(金) 17:44:17 ID:OiW5DJs50
CoreDataについて質問です。
Entity1 Entity2
col1 col3
col2
toEntity2 <-> toEntity1
上の様な属性と関連を前提にして,コード上でデータを入力して行きたいのですが,
関連先のプロパティにデータをセットできません。
具体的には_AppDelegete.mに以下のように追加してます(抜粋)。
NSManagedObject* newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Entity1" inManagedObjectContext:managedObjectContext];
[newManagedObject setValue:data1 forKey:@"col1"];
[newManagedObject setValue:data2 forKey:@"col2"];
[newManagedObject setValue:data3 forKeyPath:@"toEntity2.col3"];
col1, col2は文字列で,col3はバイナリです。
コマンドラインのsqlite3で確認しても,col1,col2のみ保存されていて,col3は何も保存されません。

サンプルコードの所在などアドバイスをお願いします。

811名称未設定:2010/04/30(金) 18:32:33 ID:SD5ITl/eP
まずはcol3をバイナリ以外にしてみては?
今の質問だと関連先がダメなのか、バイナリがダメなのか区別が。
あと、バイナリって直で保存できたっけ?
812名称未設定:2010/04/30(金) 19:07:32 ID:rpxnJbFR0
>>810
エンティティは自動で追加されない気がする

id newManagedObject2 = [NSEntityDescription insertNewObjectForEntityForName:@"Entity2" inManagedObjectContext:managedObjectContext];
[newManagedObject setValue:newManagedObject2 forKeyPath:@"toEntity2"];
が必要では?
813名称未設定:2010/04/30(金) 20:21:02 ID:4RSy793C0
>>802
いや、できるだけ標準的な命名をしたいだけです。
もう完成したアプリケーションをリファクタリングしたいだけです。
814名称未設定:2010/04/30(金) 22:45:50 ID:EpvDuN670
>>804
ManMan
VS
ChinChin
815名称未設定:2010/05/01(土) 12:08:05 ID:lQBmmm3C0
Interface Builderについて詳しい本ってありますか?
詳解Objective-C読んで仕様は大体わかったんですがそっちのことは載ってなくて
816名称未設定:2010/05/01(土) 15:25:11 ID:99qD9gv+0
InterfaceBulderを使いこなすのが目的なら実践で憶えていけばいい。
ヘルプで十分だし、Objective-Cのように詳しく書いた本というのは
見たことない。
817名称未設定:2010/05/01(土) 15:42:45 ID:gZ3ZVh1vP
プロパティ(大きさやサイズ)
バインディング(初期設定など)
オブジェクト同士のやアクション先の接続

覚えるとしてもこれくらいかと。
最初の2つはコードでもかけるし。
ただ、最初に鎮座しているファーストレスポンダとはなんぞや、みたいなのはあるけど。
818名称未設定:2010/05/01(土) 16:35:22 ID:Fym1maki0
819名称未設定:2010/05/02(日) 00:48:39 ID:06v9RA0F0
Xcodeの本読めばIBについても書いてあるよ
820名称未設定:2010/05/02(日) 16:59:49 ID:DwOIfRLr0
>>806
M:モーニング娘。
C:つんく
でおk?
821名称未設定:2010/05/03(月) 12:12:20 ID:i1iuP8vN0
ADC Japan の movie とか(古いけど)、たのココやヒレガス本はイラストがついてる。
822名称未設定:2010/05/03(月) 19:11:57 ID:kJsKC49A0
マウスイベントを取得する場合InterfaceBuilderではどのような設定をすればいいのですか?
823名称未設定:2010/05/03(月) 19:28:55 ID:sdS6uT+C0
別に何も。
824名称未設定:2010/05/03(月) 20:05:00 ID:IAo9ws4D0
カスタムnsviewを配置する
825名称未設定:2010/05/03(月) 20:09:13 ID:kJsKC49A0
マウスイベント取得できました.
ただ,mouseDown関数の中にテキストフィールドに
[field setIntValue:1];
を送っても反応しません.
別にボタンをつけてボタンから受け取ったときには反応するのですが...
マウスイベントを取得するたびにテキストフィールドに値を表示する方法を教えて下さい.
826名称未設定:2010/05/04(火) 03:03:21 ID:0VX941Nx0
>>825
一応聞いておくけどOutletはちゃんと設定してあるよね。
827名称未設定:2010/05/04(火) 05:49:37 ID:ErSh1GVZ0
質問させてください。
Array に myClass オブジェクトを詰めてあるとします。
この Array を Propaty List 形式で保存します。

私は今のところ以下の (1) (2) を理解しています(おかしければご指摘 願います)

(1) Array を writeToFile: で書き出すには、条件として
「Array に NSString* , NSNumber * などプロパティリストに対応したオブジェクト
のみが格納されている」 必要がある。

(2) myClass は自分で作ったカスタムクラスであるため、これを書き出したい場合は、
<NSCoding> プロトコルを実装することで、インスタンスを丸ごと NSData* の
アーカイブとして保存できる。

以下が質問です。

可能であれば、myClass を保存するときに、NSData*型 で書き出すよりも、
myClass が持っているインスタンス変数を NSDictionary ( たとえば infoDict のような)
に詰めて保存し、次回アプリケーションの起動時に、再びその infoDict をもとに
myClass インスタンスを作るという方が良いように感じます。
(この方が、保存されたものを XML 形式で見ることができる、などメリットが多いと思います。NSData 形式は同一のアプリケーションの同一のクラスでないと復号できないなど
応用が効かないと思います)

このような事は一般的に多くの Cocoaアプリケーションで要求されていると思う
のですが、どうでしょうか。そうである場合、どのように実装されているか参考に
なるサンプルコードなどがあれば教えていただきたいと思います。

よろしくお願いします。
828名称未設定:2010/05/05(水) 14:47:53 ID:Zr9eNQOM0
>>827
myClassを暗黙的にNSDictionaryに変換する手段はCocoaには用意されていません。
ただし、myClassがNSDictionaryのサブクラスならば、話は別です。
829名称未設定:2010/05/05(水) 15:59:52 ID:C+YQi73oP
NSDictionaryやNSArrayをplist形式に変換して保存するのが一般的かと。

830名称未設定:2010/05/05(水) 19:10:42 ID:Zr9eNQOM0
>>827

> このような事は一般的に多くの Cocoaアプリケーションで要求されていると思う
特に要求されていないと思う。

> 保存されたものを XML 形式で見ることができる、などメリットが多いと思います。
それは、誰にとってのメリットですか?

> NSData 形式は同一のアプリケーションの同一のクラスでないと復号できないなど 応用が効かないと思います
複数のアプリケーションで保存データを共有したいなら、それ専用のファイル形式を作るのが普通かと。
無関係なアプリケーション同士で保存データを共有するのは、ありえないと思うし。
831名称未設定:2010/05/05(水) 20:41:55 ID:YHE/lLIF0
>>827
>myClass が持っているインスタンス変数を NSDictionary ( たとえば infoDict のような)
>に詰めて保存し、次回アプリケーションの起動時に、再びその infoDict をもとに
>myClass インスタンスを作るという方が良いように感じます。

それって普通の NSCoding プロトコルとか NSKeyedArchiver の話とどう違うの?

>NSData 形式は同一のアプリケーションの同一のクラスでないと復号できないなど

そりゃそのクラスのことを知ってる人(アプリ)じゃないと復号できんだろ。
なんだったらフレームワークにして公開すれば?
832名称未設定:2010/05/06(木) 06:20:56 ID:F2uUAPda0
class definitionがなくてもインスタンスを復元できるのにはメリットは確かにいろいろ感じるけど、
そのclassのコードはどこに保存するんだ?
#smalltalkなら可能そうだなあ・・・
833827:2010/05/06(木) 13:35:39 ID:abCVbrYh0
レスありがとうございます。

いただいたレスにあるように NSDictionary で保存したいというのはあまり
要求されていないようですが...

NSCoding プロトコルとか NSKeyedArchiver というのは NSData* 形式で
保存することですよね。
たとえば自分の作ったアプリがこの後 OSのアップデートにいつまで対応して
いけるかという保証がないですよね。もし将来的にアプリが起動できない状態に
なったとき、自分のアプリが保存したデータも無価値のもになってしまうのを
気にかけています。XML 形式なら誰でも見ることができるので、汎用性のある
データとして残していけると思ったのですが。

とりあえず自分で NSDictionary を作って保存する方向でやってみたいと思います。

834名称未設定:2010/05/06(木) 14:52:13 ID:bODMo7Gi0
些細なことを気にかけて身動きが取れなくなるパターンだな
自作アプリならあとでコンバータ書くなり何なりできるじゃん

まずはアプリを完成させた方がいいですよ
835名称未設定:2010/05/06(木) 15:17:28 ID:2AstI7Nu0
carbonからcocoaへの移行も一気に切り捨てられたわけでもないし。
836名称未設定:2010/05/06(木) 17:24:54 ID:OXxb8Js20
何度か読み返してみたが理解できない点が、、、
myClassがNSDictionaryに詰められるようなデータならばはじめからArrayに
詰めるのはNSDictionaryで良いんじゃない?NSDictionaryならそのまま
writeToFileで書き出せる訳だからmyClassにNSDictionaryに詰め込むメソッド
とNSDictionaryで初期化するメソッドを用意しとけば良いだけな気がする、、
837827:2010/05/06(木) 17:41:45 ID:mCLQsHrz0
>>834
性格が出てしまってます orz

>>836
丁寧に読んでいただいてありがとうございます。
結局、その方法をとることにしました。むしろ最初からそうすべきでした。

ちょっと整理できなくなっていたので、頭を冷やしてやってみます。
皆さんありがとうございました。
838名称未設定:2010/05/06(木) 21:35:43 ID:p49JzwJ9P
>>837
NSKeyedArchiver の archivedDataWithRootObject: で返ってくる
データのアーカイブの形式は、NSPropertyListBinaryFormat_v1_0 だそうだから、
NSPropertyListSerialization の propertyListFromData:mutabilityOption:format:errorDescription:
でプロパティリストに変換して、
dataFromPropertyList:format:errorDescription:
で NSPropertyListXMLFormat_v1_0 形式のデータに変換して
保存するってことできるのかな。
なんか変なこと言ってたらごめん。
839名称未設定:2010/05/07(金) 10:45:52 ID:aX03bfaZ0
-setOutputFormat:
840名称未設定:2010/05/07(金) 12:05:51 ID:4TtQak/N0
Text Field Cell (に限らないですが)BindingのDisplay Patternで質問。
パターンの表示に改行を含めたいのですが,リファレンス等が見つけられなくて
そもそもできるのかできないのかもわかりません。
イメージ的にはこんな感じ
%{value1}@ \n %{value2}@ で

ほげ
ふが

みたいな(もちろんためしてもだめだった)
841840:2010/05/07(金) 12:51:46 ID:4TtQak/N0
自己解決しました
オプション+リターンで改行が直接入りました。
難しく考えすぎてたみたいです
842名称未設定:2010/05/09(日) 04:57:19 ID:4QNWPaMo0
NSWindowでExposé開始と終了をイベントで知ることは可能でしょうか?
exposeで調べたらwindowDidExposeとか出てきちゃうので混乱中
843名称未設定:2010/05/10(月) 12:40:46 ID:lLfVkRx70
NSTableView のヘッダーセルについてお教えください。やりたいことは、Xcodeデバッガで
「スレッドが選べるテーブルビュー」のようなもので、ヘッダーセルをNSPopUpButtonCell
にしてユーザに選択させる、というものです。

NSTableColumn awakeFromNib で、NSPopUpButtonCell を設定、
NSTableViewDelegateプロトコルの tableView:didClickTableColumn: の中で
NSPopUpButtonCell performClickWithFrame:inView を呼んでいます。
カラムを選択したときのカラムハイライト、ポップアップ、選択・ポップアップの終了
まではうまくいくのですが、ヘッダーセルが空白になってしまいます。
その後、別のカラムやセルを選択すると(ハイライトが解除されると)、正しく表示されます。
ポップアップ終了時に正しく表示する方法をお教えください。よろしくお願いします。
844名称未設定:2010/05/10(月) 12:42:42 ID:lLfVkRx70
>843のコードです。
@interface MyTableColumn : NSTableColumn {} @end
@implementation MyTableColumn
- (void) awakeFromNib {
 [super awakeFromNib];
 NSPopUpButtonCell *head = [[NSpopUpButtonCell alloc] init];
 [head setHiglightsBy:NSNoCellMask]; [head setAllowsMixedState:NO];
 [head addItemWithTitle:@"hoge"]; [head addItemWithTitle:@"piyo"];
 [head setBezelStyle:NSSmallSquareBezelStyle];
 [head setArrowPosition:NSPopUpArrowAtBottom];
 [self setHeaderCell:head];
}
@end

@interface TableViewDelegate : NSObject <NSTableViewDelegate> {} @end
@implementation TableViewDelegate
- (void) tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn {
 NSPopUpButtonCell *cell = [tableColumn headerCell];
 NSTableHeaderView *view = [tableView headerView];
 [cell performClickWithFrame:[view headerRectOfColumn:[tableView selectedColumn]]
  inView:view];
 [cell setNeedsDisplay:YES];
}
@end
845名称未設定:2010/05/10(月) 13:02:35 ID:VRfcdg/y0
Safariだとタブでポップアップリストに移動して,上下の矢印で内容を選択することができますが,
NSPopUpButtonでもsafariのようにできませんか?
NSCombo Boxを使うしか方法はないですか?
846名称未設定:2010/05/10(月) 22:33:26 ID:bouaTXbM0
Toll-free bridgeなクラス、例えばCFStringとかをcastして
autoreleaseする、というテクニックをよく使っていたのですが、
これがGCな環境で使えないので困ってしまいました。

gcc 4.2だとリークしますし、llvmだとこれ一発でクラッシュして
しまいます。

オブジェクトが最初どちらで作られたか判定する手法はあるので
しょうか?
847名称未設定:2010/05/10(月) 23:24:40 ID:OYEdmOu50
>>843
ADCのドキュメントによると、ヘッダーセルとしてNSPopUpButtonCellはサポートされていません。

NSTebleHeaderViewのサブクラスを作って、NSPopUpButtonCellをサポートさせるか、
NSTableHeaderCellのサブクラスを作って、ポップアップ機能を追加するか、
だと思います。

ちなみに、通常View系のクラスにawakeFromNibを実装したりしません。無意味です。
>>844の内容なら、MyTableColumnクラスを作らずに、WindowControllerにawakeFromNibを書けば済む話です。
自身を初期化したいなら、init...メソッドをオーバーライドしてください。
848名称未設定:2010/05/10(月) 23:37:04 ID:2/92JxDQ0
>>843
Thousand がそんな NSTableColumn を持っていたような気がするので、
そのソースを調査してみては。

ざっと見た所 THTableHeaderView ってのがあって。
アプローチとしては >>847 のように NSTableHeaderView のサブクラスにしている。
849名称未設定:2010/05/11(火) 00:24:06 ID:dPpXzNs60
>>846
NSMakeCollectable()
850名称未設定:2010/05/11(火) 01:39:35 ID:kh1OM9vZ0
>>842
その手の通知はNSWorkSpaceかNSDistributedNotificationCenterをまず調べてみる。ひたすらnotificationの内容をlogに書き出すだけのアプリケーションとかあったはず。
Exposéではないが、たとえばSpacesなんかはNSWorkspaceDidChange~みたいなnotificationがとんでたよ。

>> 845
- keyDown:をオーバーライドするのは?
851名称未設定:2010/05/11(火) 02:58:13 ID:UkKw8ZKe0
>>850
ありがとうございます。
自分が知らないnotificationをロギングするとっかかりを探してもいました。
bootcampでwin作業中なのですぐコーディングして試せませんがとりあえずお礼を。
852名称未設定:2010/05/11(火) 08:56:46 ID:4W3RsmoM0
>>849
おお!助かります。
・・・かなり難しい話ですね・・・
853名称未設定:2010/05/11(火) 09:25:42 ID:SqeU6vH30
>>847, 848
ありがとうございます。サポートされてなかったんですね、知りませんでした。
Thousand のソースを見てみます。情報ありがとうございます。
854名称未設定:2010/05/12(水) 00:19:21 ID:sj38Ml7L0
Cocoa 楽しい。簡単な事、簡単に出来る。それ、とても良い事。
setTarget: して setAction: する。クリックすると動く。楽しい。
855名称未設定:2010/05/12(水) 00:57:16 ID:sj38Ml7L0
>>845
NSButton、key view なれない。
NSPopUpButton、NSButton の子供。key view なれない。多分。
もしかして無理矢理する方法ある。
856名称未設定:2010/05/12(水) 10:06:46 ID:U8CL3nwQP
このスレもワールドワイドになったなあ。
857名称未設定:2010/05/12(水) 10:31:41 ID:QJUqjvQ90
地球の者ではない希ガス
858名称未設定:2010/05/12(水) 10:53:02 ID:lCAFO73mP
このスレもユニバースワイドになったなあ。
859名称未設定:2010/05/15(土) 17:41:09 ID:tksCovKY0
WebKit 関連のリファレンスがどうも見つからないと思ったら、
Webkit のヘッダファイル自体にコメントが大量にあるのを見つけました。
これって、これをリファレンスとして参照してください、ってことでしょうか。
860859:2010/05/16(日) 21:27:54 ID:a0l+mZde0
自己レス。そういうことのようです。
861名称未設定:2010/05/16(日) 21:31:44 ID:Ct12+KlV0
Cocoa を使いこなせれば巨大UFOが地球に来てもウィルス作って撃退できますか?
862名称未設定:2010/05/16(日) 21:36:44 ID:RrB5CNrn0
>>859-860
「WebKit 関連のリファレンス」が何を指すのか誤解していたらスマソ。
http://developer.apple.com/mac/library/documentation/cocoa/Reference/WebKit/ObjC_classic/index.html
のようなとは違う資料?
863名称未設定:2010/05/17(月) 21:59:45 ID:CJ6xC9TNP
I.Bでアクションやインスタンスつなげるのが面倒臭くなってきて、
notificationで個々のメソッドを呼ぶようになってきたんだけど、
乱発すると遅くなるんですかね。

例えばムービープレイヤーの再生/停止ボタンを押すと、再生開始/停止のnotificationを出して、
個々のインスタンスでメソッド(再生時間の取得など)が呼ばれる、とか。
864名称未設定:2010/05/18(火) 19:19:58 ID:jFnlV+K40
質問です。
runModalForWindowで表示させているダイアログを
別スレッドから閉じる事は可能でしょうか?
865名称未設定:2010/05/19(水) 02:01:20 ID:PYdF6Xat0
調べないで曖昧な記憶で書くけどendModalをperformOnMainThreadで呼ぶとかかな
866名称未設定:2010/05/19(水) 13:16:40 ID:G8hCQh9OP
夜ふくろうの件でアプリ本体にも免責事項を表示せよ、の論調が出てるね。
俺も起動時に毎回300ページ&最後までスクロールしないと閉じられない
ダイアログを表示することにしたよ。
867名称未設定:2010/05/19(水) 13:50:25 ID:XP+zNUv60
夜ふくろうの件って何かとググったら、モンスターユーザーがクレーム付けてたって話しか。
868名称未設定:2010/05/19(水) 20:27:36 ID:sV0Ohxeu0
http://togetter.com/li/21134

これ見る限り作者何の予告も無しに機能削ったみたいね。
で、旧バージョンも一切ダウンロードできないと。

クローズドソースのソフトウェアを使うリスクをまさに具現化した事例だね。
商用ソフトならクローズドでもサポート要求する権利が生じるけど、
無料だからそれも出来ないと。
タダより高いものは無いという典型だな。
869名称未設定:2010/05/19(水) 20:50:06 ID:FhFiIe3G0
その作者が旧バージョンのURLを示すのに短縮URLさえ使わなければ…
870名称未設定:2010/05/19(水) 21:08:44 ID:G8hCQh9OP
ていうか、クレーマーも旧バージョン取っとけよ、みたいな。
取らないような奴だから、執拗にクレームつけるんだろうけどさ(笑)
871名称未設定:2010/05/19(水) 21:09:17 ID:fp4nBxVj0
フリーウェアって言わずにクローズドソースって言う人は
何板に帰ってもらえばいいんだろう
商用ソフトだって無くなるときはあっさり無くなるのに
872名称未設定:2010/05/19(水) 21:32:39 ID:sV0Ohxeu0
> 商用ソフトだって無くなるときはあっさり無くなるのに

だからオープンソースが持て囃されてるんですよ。
AAPL という会社は間逆の存在ですけどね。
いつもの様に調子乗ってくるといきなりズドンとやってくる。
873名称未設定:2010/05/19(水) 21:54:55 ID:itDX0+dY0
乞食が説教していると聞いて
874名称未設定:2010/05/19(水) 21:56:54 ID:sV0Ohxeu0
何か文句ある? 奴隷のみなさん。
875名称未設定:2010/05/19(水) 22:12:53 ID:itDX0+dY0
iPhone開発スレに来てたXperiaマンセーと同一人物?
876名称未設定:2010/05/19(水) 22:16:53 ID:sV0Ohxeu0
iPhone はさすがに奴隷過ぎるだろう。
877名称未設定:2010/05/20(木) 00:18:27 ID:ZeOSkjR30
iphone叩きたいなら他でやってくれ。
cocoaスレでやられると迷惑。こちらはmac主体なので。
878名称未設定:2010/05/20(木) 00:32:50 ID:HObIxsW20
>>872
>AAPL という会社は間逆の存在ですけどね。

君は LLVM を知らんのか。
Nitro とか Squeak とか、オープンソースが好きなら
Apple には足を向けて寝られないんだがなあ。
特に BSDL 派にとっては貴重で有り難い存在だ。
879859:2010/05/20(木) 00:34:59 ID:UHdDmD8V0
>>862
最初はそこかと思ったのですが、そこのリファレンスは
「DOMDocument Additions」のような追加メソッドしか載ってないんですよね。

あとから、HMDT の木下さんの執筆された資料に
「WebKit はリファレンスがないためヘッダファイルを直接覗く」と書いてあるのを
見つけました。
メソッド名から全てを読み取らないといけないのと、クラスの相互関係を
鳥瞰できないのが面倒なところですが。
880名称未設定:2010/05/20(木) 15:34:45 ID:kimIfF/8P
881859:2010/05/22(土) 01:23:15 ID:XGKEPyHU0
>>880
あぁ、あったんですね。ありがとうございます。
882736-738:2010/05/22(土) 11:36:05 ID:agqT7Uap0
延々と規制くらっていて返事が遅れてすみませんでした。
>>739-751の皆様ありがとうございました。
なんでもかんでも #define にするのはやめて文字と数値の定数は取り敢えず #define、
あとは状況によってCとObjective-Cとを使い分ける様にしました。
例えばメソッドをセレクタとして扱いたい場合はObjC、Otoolとかでメソッド名を探られたくない場合はC等。
const や enum はまだ慣れていないのでぼちぼち使って行こうと思います。
遅くなりましたが、ありがとうございました。
883名称未設定:2010/05/22(土) 11:46:44 ID:7WXkC9q60
色々謎だな。というか結局レスの意味なかったのな。
884名称未設定:2010/05/22(土) 11:56:08 ID:agqT7Uap0
>>883
いえいえ、非常に参考にさせていただいてます。
以上に挙げた2つの例は特殊な条件で必然的に選択肢が限定されてしまうものを挙げましたが、
実際にはアドバイスいただいた3つ目のものをメインにコードを整理しています。
885名称未設定:2010/05/24(月) 03:17:48 ID:YaPhaRRn0
「NSView のサブクラス」のサブクラス で、スーパークラスの一部を描画するには
どうしたら良いのでしょうか。

-(void)drawRect:(NSRect)dirtyRect
{
// dirtyRect の一部の領域
NSRect insetDirtyRect = NSInsetRect(dirtyRect, 5.0, 4.0);

[super drawRect: insetDirtyRect];
}

とやってみましたが、スーパークラスのビューの全体が描画されてしまいます。
[super setNeedsDisplayInRect: insetDirtyRect];
でもうまくいきません。よろしくお願いします。
886名称未設定:2010/05/24(月) 10:21:15 ID:O8NFTLXc0
スーパークラスの drawRect: のコードは?
887名称未設定:2010/05/24(月) 12:01:39 ID:rxi4RQmQ0
スーパークラスの実装が不明なら
NSRectClipList()を使うか、後で消すかするしかないんじゃない?
888名称未設定:2010/05/24(月) 17:21:08 ID:MUtQJ7pK0
CoreDataをRubyCocoaでも操作したいのですが,ご教授願います。
Objective-CでCoreDataのアプリがあります。でデータの追加など部分だけを,rubyのスクリプトを使ってやりたいのです。
というのは,データはウェブをクロールして集めてくるのですが,このクローラをrubyのMechanizeを使っているからです(WebKitより自動化しやすいので)。
で,ためしに以下のスクリプトを実行すると
class AppDelegate < OSX::NSObject
...(プロジェクト名AppDelegate.rbからコピー)
end
appDelegate = AppDelegate.new
model = appDelegate.managedObjectModel()
pp model.entities() #--> []
puts OSX::NSBundle.mainBundle.bundlePath #-->/usr/bin
となってしまい,うまくモデルを操作できません。_DataModel.momを読めていないのではないかと。
スクリプト自体は,Resourceにあります。

最悪は,データを標準出力に吐き出して,受け取るしかないと思ってますが,できれば直接データベースに変更を加えたいのです。
よろしく。
889名称未設定:2010/05/24(月) 17:46:34 ID:rxi4RQmQ0
モデルファイルは指定しないとメインバンドル内から探す。
スクリプトにはメインバンドルなんてない。
モデルファイルが見つからない。

「Objective-CでCoreDataのアプリ」←これを
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
で取れたバンドル内からモデルファイルを探すようにすればどうにかなるかも。
890名称未設定:2010/05/24(月) 21:13:26 ID:RB7S2eTT0
>>885
drawRect:の引数のdirtyRectは無効化領域の集合で、個々の無効化領域はgetRectsBeingDrawn:count:で取得できます。
もし、スーパークラスがgetRectsBeingDrawn:count:を使って描画領域を計算してるなら、
[super drawRect: insetDirtyRect];
とやっても無駄ということになります。

[super setNeedsDisplayInRect: insetDirtyRect];
このメソッドを実装してるのはNSViewなので、結局[self setNeedsDisplayInRect: insetDirtyRect];と同じ意味になると思います。
このメソッドを呼び出すとビューの一部の領域を無効化できますので、次回drawRect:が呼ばれた時に、その領域だけが描画対象になります。
ただし、その領域にクリッピングマスクが設定された状態でdrawRect:が呼ばれるので、それより広い領域を描画することはできません。
891885:2010/05/25(火) 17:18:16 ID:Up0uA/yI0
>>886,887,890
レスありがとうございます。
スーパークラスの実装は不明です。

>>890
非常に参考になりました。ありがとうございます。
892名称未設定:2010/05/27(木) 00:02:50 ID:gyfvhKk40
ちょっとした疑問。同じアプリケーションでwebviewから読み込んだリソースと自前でNSURLRequestから読み込んだリソースでキャッシュが共用出来ないのはなぜだろう?
ttp://lists.apple.com/archives/cocoa-dev/2003/Jul/msg00860.htmlには
>Data stored in the NSURLCache is stored by it's canonical URL
ってあるけど。
893名称未設定:2010/05/28(金) 17:38:03 ID:3ed65Vig0
カテゴリを ar でまとめたら unrecognized selector sent to instance ... になって嵌った…

http://developer.apple.com/mac/library/qa/qa2006/qa1490.html

もっとスマートな解決策を用意して欲しいなあ……
894名称未設定:2010/05/29(土) 03:26:52 ID:9/Xaqb0G0
CocoaというかXCodeなのかもしれませんがObject-Cはソースコードを
Javaみたいにパッケージツリー構造になっていないのでしょうか?
サンプルソースとかを見ても同じ階層にソースがごちゃまぜに配置してあり
かなり管理しずらそうなのですが。
895名称未設定:2010/05/29(土) 03:31:06 ID:ItZVsf800
>>894
com/hoge/foo みたいなディレクトリを掘りたければ勝手にやれば良いじゃない。
ObjC 的には好きにやってチョって事なので、管理出来るかどうかは貴方の問題です。
896名称未設定:2010/05/29(土) 03:49:37 ID:9/Xaqb0G0
>>895
Javaの方式に凝り固まってるのかもしれないけど
javaの場合はクラスパス起点にソースをパッケージ階層で見つけるけど
Object-Cってディレクトリを掘ってそこにソースを置いたとして
ソースから他ソースを見るける時にパスは通ってるの?
897名称未設定:2010/05/29(土) 03:54:10 ID:ItZVsf800
>>896
Objective-C には名前空間は無いよ。
自分で使うクラスの情報はヘッダファイルをインクルードして入手します。
898名称未設定:2010/05/29(土) 03:55:38 ID:9/Xaqb0G0
>>897
了解。
899名称未設定:2010/06/01(火) 13:51:22 ID:R40ODMEv0
システム環境設定>アピアランスの環境設定で、アピアランスの色が
「ブルー」なのか「グラファイト」なのか知る方法ってあるでしょうか。
900名称未設定:2010/06/01(火) 14:14:03 ID:/S2y7YBI0
+[NSColor currentControlTint]
901899:2010/06/03(木) 00:57:58 ID:vxaqSKi00
>>900
ありがとうございました。まさか NSColor とは。
902名称未設定:2010/06/03(木) 13:18:50 ID:/L1Xq2BW0
Cocoaアプリ内から,Finder をアクティブにするにはどうすればよいでしょうか?

NSApplescript で
tell application "Finder" to activate
というスクリプトを動的に生成する方法で対処することも可能ですが,その方法だと動作がかなり遅いので,
Objective-Cだけで完結して実行したいのです。
903名称未設定:2010/06/03(木) 14:07:47 ID:2yyiIXDy0
[[NSWorkspace sharedWorkspace] launchApplication:@"Finder"];
904名称未設定:2010/06/03(木) 17:03:36 ID:/L1Xq2BW0
>>903
ありがとうございます。
しかし,その方法では,新しい Finder ウィンドウが開いてしまいます。
Command+Tab で Finder をアクティブにしたときと同様の挙動が出来れば理想的です。
905名称未設定:2010/06/03(木) 17:25:24 ID:jAMLtAvx0
SetFrontProcess()
906名称未設定:2010/06/03(木) 17:34:19 ID:17DMfHrQ0
Apple Event 生出し
907名称未設定:2010/06/03(木) 18:00:57 ID:/L1Xq2BW0
>>905
ありがとうございます。
こんな風にして実現できました。

-(OSErr)getPSN:(ProcessSerialNumber*)psn byType:(OSType)type bySignature:(OSType)signature
{
OSErr err;
ProcessInfoRec info;

psn->highLongOfPSN = 0L;
psn->lowLongOfPSN = kNoProcess;
while (!(err = GetNextProcess(psn))) {
if ((psn->highLongOfPSN == 0L) && (psn->lowLongOfPSN == kNoProcess)) {
err = procNotFound;
break;
}
info.processInfoLength = sizeof(ProcessInfoRec);
info.processName = NULL;
info.processLocation = NULL;
info.processAppSpec = NULL;
if ((err = GetProcessInformation(psn,&info)) != noErr) break;
if ((info.processType == type) && (info.processSignature == signature)) break;
}
return(err);
}

を定義しておいて

ProcessSerialNumber psn;
OSErr err = [self getPSN:&psn byType:'FNDR' bySignature:'MACS'];
if(err == noErr) SetFrontProcess(&psn);
908名称未設定:2010/06/03(木) 19:00:28 ID:2yyiIXDy0
"FNDR" 久々に見たw 古参の人? Cocoaらしい、こういうのもあるよ。
NSArray * running = [[NSWorkspace sharedWorkspace] runningApplications];
NSRunningApplication *finder = nil;
for (NSRunningApplication *app in running) {
 if ([[app bundleIdentifier] isEqual:@"com.apple.finder"]) {finder = app; break;}
}
[finder activateWithOptions:NSApplicationActivateAllWindows]; // 10.6 ~

NSArray * running = [[NSWorkspace sharedWorkspace] launchedApplications]
NSDictionary *finderInfo = nil;
for (NSDictionary * appInfo in running) {
 NSString *identifier = [appInfo objectForKey:@"NSApplicationBundleIdentifier"];
 if ([identifier isEqual:@"com.apple.finder"]) {finderInfo = appInfo;  break;}
}
if (finderInfo) {
 ProcessSerialNumber psn;
 psn.highLongOfPSN = [[finderInfo objectForKey:@"NSApplicationProcessSerialNumberHigh"] unsignedLongValue];
 psn.lowLongOfPSN = [[finderInfo objectForKey:@"NSApplicationProcessSerialNumberLow"] unsignedLongValue];
 SetFrontProcess(&psn);
} // ~ 10.5
909名称未設定:2010/06/03(木) 20:40:01 ID:/L1Xq2BW0
>>908
なるほど!その方法の方がいかにもCocoa的でいいですね。
そちらを使わせて頂きます。

10.6からは,NSRunningApplication という,この目的に便利なクラスができてたんですね…!
勉強になりました。
910名称未設定:2010/06/04(金) 02:13:25 ID:0wrP+Enk0
スクロールビューのスクローラーを不要なときは非表示にさせるには、
setAutohidesScrollers:YES を設定しますが、横スクローラー、縦スクローラー
個別に設定できないんでしょうか。
911名称未設定:2010/06/08(火) 15:01:18 ID:/w92oZdl0
初心者です。お目汚し失礼いたします。
とあるObjective-C入門書のメモリ管理に関するところを読んでいたら、

「autoreleaseされたオブジェクトを長い期間保持しておきたい場合はretainしておいて、
deallocメソッドでreleaseする」
とあって以下のコード例が示されていました。

-(void) doSomthing
{
//someArrayはインスタンス変数
someArray=[NSMutableArray arrayWithCapacity: 17];
// countは1、autorelease済み
[someArray retain]; // countは2 1 autorelease
[someArray retain]; // countは2 うち1はautorelease
}

-(void) dealloc
{
[someArray release]; // countは0
[super dealloc];
}

…doSomethingメソッドの中で2回retainしてますが、これ、ぜったい誤植ですよね。
サポートサイトの正誤表にも載ってないし、
そばに書いてあるコメントもいまいちよくわからないし、
頭を抱えたのですが、何か書き写してたら確信が…。
912名称未設定:2010/06/08(火) 15:41:03 ID:EQJ/GVnk0
誤植じゃない?動作はすると思うけど、2回retainする意味がわからない。
913名称未設定:2010/06/08(火) 16:00:28 ID:mWy8JmKcP
>>911
> 初心者です。お目汚し失礼いたします。

おまえ、気持ち悪い。
914名称未設定:2010/06/08(火) 16:12:56 ID:CaXH8ZUtP
上級者です。
私の質問の意味がわからない人はゴミレスせずに黙ってROMってて下さい。

これくらいのツンデレ度を期待したいね。
915名称未設定:2010/06/08(火) 16:48:37 ID:AohtV/T60
>>911
その本、捨てた方が良いかも…doSomething でretain(1回としても)もう一回doSomething が
呼ばれたらそのコードではリークする。dealloc でリリースするとか…めちゃくちゃ。やるなら
- (void) doSomething {
if (someArray) [someArray release];
someArray = [[NSMutableArray alloc] init...];
}
- (id) retain {
[someArray retain];
return [super retain];
}
- (void) release {
[someArray release];
[super release];
}
でdeallocはオーバーライドしない。
dealloc で解放する必要があるようなのは、mallocで確保した領域とか、通常のオーナーシップで
管理できないようなものに限定した方が良い。ちなみになんて本?
916名称未設定:2010/06/08(火) 17:09:02 ID:2lQMe6an0
俺には >>915 のコレも信じられんのだが。

- (id) retain {
[someArray retain];
return [super retain];
}
- (void) release {
[someArray release];
[super release];
}
917名称未設定:2010/06/08(火) 18:03:34 ID:7qEOckXj0
確かにリークするね。>>915
918名称未設定:2010/06/08(火) 18:19:16 ID:AohtV/T60
うげ!…今まで間違って覚えていたorz deallocで後始末するのが普通なのね…つってきます。
ところであの場合、どういう状況にリークするか、おしえて。
919名称未設定:2010/06/08(火) 18:20:20 ID:46SBRW1I0
この場合のsomeArrayはインスタンス変数だからdeallocで解放で良いだろうよ。
つーか、releaseとretainをオーバライドする必要性をまったく感じないんだが。
920名称未設定:2010/06/08(火) 19:10:11 ID:7qEOckXj0
非GC環境なら、インスタンス変数はdeallocで解放すればOK。


ところで、ObjC2ランタイムになって長いけど、GCって相変わらず
いまいち使われていないような気がするんだけど。

releaseの代わりにdrain使えとか、deallocでなくfinalize使えとか、
CFオブジェクトをNSMakeCorrectable()しなきゃいけないとか、
イマイチりーくバグ埋め込みそうで使いにくいと思うんだよな。
921911:2010/06/08(火) 22:10:16 ID:/w92oZdl0
皆さんありがとうございます。
やはり誤植なのですね。

ちなみに翔泳社の入門Objective-C 2.0の175ページです。
922名称未設定:2010/06/08(火) 22:38:12 ID:B3ErDAtj0
>>911
全く同じやりとりを以前どこかで見た記憶がある
923名称未設定:2010/06/10(木) 11:04:14 ID:qKXpwIxf0
俺は@finallyでreleaseさせる。例外が発生しても、@tryの中でreturnしても
必ず@finallyは通るから。
924名称未設定:2010/06/10(木) 11:27:53 ID:csFMWvDP0
java的だな。
925名称未設定:2010/06/10(木) 14:56:48 ID:ckeKSZ0Q0
後で使いたくなりそうなautoreleaseのオブジェクトは、インスタンス変数の
NSMutableDictionaryに名前を付けて入れておくようにしてます
インスタンス変数を増やさなくてすむし、安全だし
926名称未設定:2010/06/10(木) 23:59:20 ID:y854lLLz0
>>925
それって、オブジェクト・プールっていうパターンだよね
なんか使い方を間違ってる気がする
927名称未設定:2010/06/11(金) 10:22:47 ID:hAedzuWu0
Cocoa-Javaの時はそんなの使ってたな。
参照が弱いから勝手にGCされるのを防ぐために。
928名称未設定:2010/06/11(金) 15:34:56 ID:f0ncYEy50
>>915 >>918
someArrayのretainCountが1だったとして、
[ThisObject retain]; //someArrayのretainCountが2に
[ThisObject doSomething] //someArrayが1に、開放されないまま入れ替え。新someArrayは1
[ThisObject release]; //someArrayが0に。開放されたのにまだ変数に持っている

爆弾抱え込みすぎだろう・・・
929名称未設定:2010/06/11(金) 16:07:30 ID:n867gG3e0
>>915がどうやってあのコードに行き着いたのか、気になる。
930名称未設定:2010/06/11(金) 17:52:07 ID:tWDmH7yZ0
Obj-Cには興味あるけど実際にコード書いたことないって人じゃない?
時々いるんだよ。
931名称未設定:2010/06/11(金) 18:15:53 ID:b2nVnxlg0
俺みたいなヤツの事だな。
932名称未設定:2010/06/11(金) 19:05:13 ID:DMECOKRm0
俺もずっとそうだったわ。
933名称未設定:2010/06/11(金) 21:01:30 ID:dZFX1GBz0
もう勘弁してくれぇー、俺が悪かった、間違って覚えてた。
いわれてみれば、確かにその通り。リークしますね。皆のご指摘、感謝している。
934名称未設定:2010/06/11(金) 21:11:13 ID:5TIGDp/TP
NSDictionaryとかallloc initする時はautoreleaseにすると、
どんどんメモリが増えてくんだけど、適切に解放してくれるんだよね。
935名称未設定:2010/06/12(土) 10:07:35 ID:Ut42CF/O0
Xcode4
http://twitpic.com/1vjcml/full

●Wow. Xcode4 has skins! Never saw that one coming.
●what do you think of the code snippet feature of xcode4? LOVE IT!
●git support in xcode4, WOOOOOT! ^_^
●Xcode4 summary thus far: SDI interface, better intellisense
●The new XCode has a time-machine like time-slider for showing you how your code changed over time.
●xcode4 using new LLVM compiler. 2x compile speed improvement. up to 25% runtime speed improvement. on iphone up to 60%. bye gcc
●New is the lldb debugger, a replacement for gdb
●The new version of the developer tools consolidates the Xcode editing tools and Interface Builder into a single application
And more:

http://www.kostik.de/home/2010/6/10/what-do-we-know-about-xcode-40-a-lot.html
936名称未設定:2010/06/12(土) 10:08:16 ID:Ut42CF/O0
36 名前:名称未設定[sage] 投稿日:2010/06/12(土) 08:23:43 ID:RcVNhlGt0
Appleから事前承認を得れば、インタプリタが使えるようになったらしいね。
http://www.macnn.com/articles/10/06/11/developers.must.get.approval.in.writing/
937名称未設定:2010/06/12(土) 12:00:07 ID:hmhZIyci0
Wow. Xcode4 has skins! Never saw that one coming.

こんな無駄機能つける前に落ちないようにしろよ、カス
938名称未設定:2010/06/12(土) 16:18:18 ID:2LpHwBXS0
ウインドウが表示されようとするときにクラッシュするの直ったのか?
939名称未設定:2010/06/12(土) 16:19:20 ID:h3v73oI10
クラッシュって、やたらと不安定な64bitで起動してるせいでは。
940名称未設定:2010/06/12(土) 16:25:17 ID:2LpHwBXS0
64で起動したことなんて無いし
tigerの頃からずっと残ってる
941名称未設定:2010/06/13(日) 00:33:36 ID:qs7TOEKB0
独立した検索ウィンドウに戻してくれ
942名称未設定:2010/06/13(日) 03:12:23 ID:G1zJnNH90
そうそう。特に置換が不便でしょうがない。
943名称未設定:2010/06/14(月) 14:17:35 ID:7B+nctRi0
Core Dataで統計量を算出したいのだが,キー値コーディングの@avgなどをぐらいしか,それらしいメソッド?(関数?)見つかりません。
例えば,

sqlite3 Person.sqlite 'SELECT ZAGE FROM ZPERSON GROUP BY ZAGE HAVING COUNT(*) >= (SELECT MAX(CNT) FROM (SELECT COUNT(*) AS CNT FROM ZPERSON GROUP BY ZAGE));'

だと,ZAGEの最頻値(モード)を出せるのだけど,同じことをCore Dataを使ってできますか?
NSTaskでSQLiteを直接いじるしかないですか?
もしくは,地道に一つ一つループで計算するとか?

基本的な統計量の分散(標準偏差)や中央値が簡単に求められるメソッドがあるといいのだけど?
944名称未設定:2010/06/16(水) 22:41:25 ID:2tLpBMpu0
>>943

::math::statistics::pstdev data

使った事ないから分からんけど。
945943:2010/06/17(木) 17:18:06 ID:e9OBqky90
>>944
サンキュー でもTCLのライブラリ...
Cよりましだが...iOSには応用できない...
946名称未設定:2010/06/17(木) 18:55:03 ID:ZMzL+U3cP
NSPredicateで細かい記述が出来たような。
947名称未設定:2010/06/21(月) 12:44:41 ID:Oe4h7yVW0
取得要求(executeFetchRequest)の使い方がわからないので教えてください。

ArrayControllerのObject ControllerのmodeがEntityになっていて,アプリが起動されると,まずはCoreDataから全件がフェッチされてビューとバインドされてます。

例えば,下のような流れで条件を指定して絞り込んだデータをフェッチした後,データ(fetchedObjects)がどうやって,Array Controllerに反映されるのかがわかりません。

NSPredicate *predicate;
NSEntityDescription *entity;
NSFetchRequest *request;
[request setEntity:entity];
[request setPredicate:predicate];
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest];

removeObjects:,addObjects:するとデータそのものが変化しそうだし。

どうぞよろしくお願いします。
948名称未設定:2010/06/21(月) 19:51:27 ID:a7Jbed9h0
プログラム板からスレチとのことでここに来ました
amazonの楽しいココアのレヴューにこういう↓のあったんだが、実際のところどう?
あと萩原本以外にいいのないですか?自分はCは中級くらいやれてます


*****************************************
Leopardにアップグレードしてしまった方、
この本は使えません。Xcode Toolに大幅な変更があったからです。
まだTigerを使っている方。この本は貴方のためのものです。
本の通り作業して行けばCocoaのいろはのい位まではモノになるはずです。
***************************************************

949名称未設定:2010/06/21(月) 20:30:13 ID:7hlrhiZ00
>>948
レパード対応版が出てる。
950名称未設定:2010/06/21(月) 20:36:30 ID:a7Jbed9h0
>>949
その通りみたいですね 旧版(Tiger)のレヴューを新版(leopard)のとこに書いた人がいるらしいです
「参考になった」 が40人近くいたのでびっくりしました 
注文済みなんですが新版買ってたので安心です 失礼しました
951名称未設定:2010/06/21(月) 22:11:33 ID:CNu/vEKPP
>>947
それはNSArrayControllerから条件で別のNSArrayに取り出すだけで、
元のNSArrayControllerにフィルターをかけるには、setFilterPredicateかと。
952名称未設定:2010/06/21(月) 22:16:05 ID:CNu/vEKPP
失礼、setFilterPredicateなんてないです(笑)。
確か、それっぽいのが有るかと。
953名称未設定:2010/06/21(月) 23:36:20 ID:gaS4k29e0
954名称未設定:2010/06/22(火) 04:53:39 ID:3yAFH2PX0
いい加減編集ウィンドウをタブ化して欲しいものだが。
955名称未設定:2010/06/22(火) 05:31:21 ID:WnrULnFBP
ドキュメントもタブ化してほしい
いまはわざわざSafariで見たりしてる
956947:2010/06/22(火) 10:30:01 ID:J0RMUSQw0
>>951
回答ありがとうございます。
ただsetFilterPredicateはたぶん「述語フィルタ」(木下誠著のHMDT3rdEditionの用語)のことだと思いますが,それとは別の「受信要求」の使い方を知りたくて...

同書では,述語フィルタと受信要求の使い分けがしっかり書かれていなくて(もしかして著者も無理解?),しかも受信要求の方は,絞り込み条件が静的にコードする方法しか書かれてなく,アプリ起動後の動的に条件設定をするやり方が書かれていないので,悩んでます。

私の浅はかな理解だと,述語フィルタは,ハードディスクのSQliteなりXMLなりから,データをメモリ上にを全部読み込んだ後に,条件でモデルを絞り込む。
受信要求は,ハードディスクのSQliteなりXMLなりから,データをメモリ上に読み込む段階で条件に合うものを絞り込んだ上で,メモリ上にモデルとして構成する。
と,考えているのですが,そもそもそれが間違いなのかな?

詳しい方教えてください。
957名称未設定:2010/06/22(火) 11:36:13 ID:vS2RRT1I0
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest];


[arrayController setContent:fetchedObjects];
とか、結果として↑これが実行されるようにする。bindしてんのならこのままじゃダメだろうね。
958名称未設定:2010/06/22(火) 14:20:33 ID:6/BmtmZ00
Core Dataをしっかり学ぼうと思うのですが、お勧めの本はありませんか?
959名称未設定:2010/06/22(火) 15:07:21 ID:65dbL60T0
>>956
質問の意図がよくわからないけれど、fetchPredicateをIBで設定すればよいのでは?
NSTreeControllerでは parent = nil を設定するでしょう。
960947:2010/06/22(火) 16:34:39 ID:J0RMUSQw0
>>959
説明不足ですみません。
fetchPredicateをIBで設定すると,抽出条件を変更したいときその度にコンパイルし直さなければならないのでは?と思っています。

957のアドバイスによるとbindはあきらめなければならなそうですね。
961名称未設定:2010/06/22(火) 16:57:32 ID:65dbL60T0
>>960
コードでsetFetchPredicateしたら良いです。
fetchは通常ではawakeFromNibが実行された後に行われるので、
awakeFromNibでsetFetchPredicate:をコードすればよいです。
それ以外ならfetchWithRequest:merge:error:を使います。

ただ、fetchにこだわる理由がわからない。
filterPredicateの方が、transient propertyも使えて、小回りが利くのに

managedObjectのfaultとか理解していますか?
core data overviewに沿って勉強したらどうですか?
962名称未設定:2010/06/26(土) 16:11:18 ID:GJNhH98B0
インスタンスを初期化する前に、以前に作成したものが存在していればリリースする…という処理をおこないたい場合、

if (anObj != nil){
[anObj release];
}
anObj=[[aClass alloc]init];


とやればいいのかと思っていたのですが、このanObjがNSTimerのインスタンスで、
anObj=[NSTimer scheduledTimerWithTimeInterval:theInterval…
とやって作成したものの場合、リリースするところでエラーが発生してしまいます。
このやり方は一般的にいって間違ったやり方なのでしょうか。
963名称未設定:2010/06/26(土) 16:12:51 ID:GJNhH98B0
スミマセン補足しますと、repeats:NOとして、一度だけFireするようにしたタイマーです。
964名称未設定:2010/06/26(土) 16:31:44 ID:V49V25q40
Timer Programming Topics
- Using Timers
965名称未設定:2010/06/26(土) 16:57:25 ID:scmDpnTz0
>>962
一旦releaseしたobjectに再度アクセスすれば、クラッシュする
anObj = nil;
が抜けているのでは?
966名称未設定:2010/06/26(土) 16:58:43 ID:GJNhH98B0
>>964
ありがとうございます。ざっと読んだのですが、やはりよく分からないです。
たぶん私はNSTimerの特性というよりは、
anObj=nil;
とすることと、
[anObj release];
することとの違いが分かっていないんだと思います。
967名称未設定:2010/06/26(土) 17:02:07 ID:GJNhH98B0
質問を、
anObj=nil;
とすることと、
[anObj release];
することの違いを教えてください。

に変えてもよいでしょうかm(_ _)m
968名称未設定:2010/06/26(土) 17:36:39 ID:OuFkQNbe0
[anObj invalidate];
するだけで、手動で release する必要なんて無い。
969名称未設定:2010/06/26(土) 17:47:32 ID:SiVrDLfwi
>>967
前者はanObjにnilを代入しているだけ。後者はanObjが指している
オブジェクトに「リリースしろ」というメッセージを送っている。
システムがあるタイミングでそのオブジェクトをdeallocする。
970名称未設定:2010/06/26(土) 18:28:23 ID:V49V25q40
TimerはCarbon RunLoopにインストールされると思っておけばいい。

だから自分でRetainは不要。RunLoopのほうでRetainしてくれる。
invalidateすれば、即Releaseしてくれるから、手でReleaseする必要もない。
971名称未設定:2010/06/26(土) 19:49:51 ID:GJNhH98B0
>>968,970
Timerについての考え方は理解しました。

>>965,969
このへんはもっと勉強して理解を深めます。

どうもありがとうございました。
972名称未設定:2010/06/27(日) 12:35:04 ID:+epNPUJH0

過去にハマったので便乗してメモ。

NSTimerのコンストラクタで作成したオブジェクトは,変数に格納する必要がありません。

NSTimerのコンビニエンスコンストラクタっぽいクラスメソッドを実行すると,その内部で,
通常のコンビニエンスコンストラクタ同様に-autoreleaseされるとともに,
currentRunLoop に対して -addTimer:forMode:が実行されます。
これは実行ループオブジェクト内部の専用の配列にタイマーオブジェクトのポインタを格納(add)するもので,
イベントループから参照されるとともに,NSMutableArrayやNSMutableSetなどと同様の振る舞いをします。
つまり、配列は-addObject:されるオブジェクトをretainし、-removeObject:されるオブジェクトをreleaseします。
NSTimerの-invalidateは、実行ループにあるこの専用の配列から、レシーバーを-removeObject:します。

NSTimerオブジェクトは、repeats:NOの場合,-fireされた後,自分を-invalidateします。
repeats:YESの場合は自動で-invalidateはされませんが、
例えば+scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:の場合,
selector:で指定するメソッドはこの様な書式である必要があります(リファレンス参照):
- (void)timerFireMethod:(NSTimer*)theTimer
このメッソド内で[theTimer invalidate]を実行できます。

以上の理由から,NSTimerオブジェクトは,変数に格納する必要がありません。
973名称未設定:2010/06/30(水) 21:51:57 ID:N1tHOIWu0
こんにちは 質問があります
自身のインスタンス名をNSStringか文字配列で返すメソッドってありませんか?
974名称未設定:2010/06/30(水) 22:41:13 ID:R3x/KgVWP
インスタンス名って何?
975名称未設定:2010/07/01(木) 10:12:57 ID:AJiuAOzBP
あるよ。
クラス名を文字列で返すやつ。
976名称未設定:2010/07/01(木) 13:02:06 ID:1X6eZzYx0
インスタンス名だつってんだろーがっ
977名称未設定:2010/07/01(木) 15:47:11 ID:q/lTsdE+P
で「インスタンス名」って何?w
978名称未設定:2010/07/01(木) 16:22:05 ID:gcBlXOYQ0
@interface NSObject (INSTANCE_NAME)
@property (nonatomic, readonly, assign) NSString *name;
@end

@implementation NSObject (INSTANCE_NAME)
- (NSString *)name
{
return [NSString stringWithFormat:@"%p", self];
}
@end

こんな感じか?
979名称未設定:2010/07/01(木) 18:37:17 ID:ZUd7v/7p0
>>973
クラスのNSStringなら、
NSStringFromClass( [object class] );
980名称未設定:2010/07/01(木) 19:16:39 ID:vOehrScv0
id hoge = [NSObject new];

このとき、「hoge」がインスタンス名。たぶん
ローカル変数でオブジェクトを参照した場合は、変数名がどこにも保持されないので、インスタンス名は取得不能。
あるクラスのインスタンス変数でオブジェクトを参照した場合は、クラス構造体の中にインスタンス名が保持されているので取得可能。
でも、自身のポインタ値から、自身を参照しているオブジェクトのisaフィールドを検索するのは難しく、現実的じゃない。
981名称未設定:2010/07/01(木) 19:53:09 ID:vqQWbwTI0
id hoge, huga, foo, bar;
hoge = huga = foo = bar = [NSObject new];
だとインスタンス名は何だ?
982名称未設定:2010/07/01(木) 19:57:47 ID:tVmlXVUK0
インスタンス名など無い。
983名称未設定:2010/07/01(木) 21:23:45 ID:pi8c6lkr0
俺初心者だけど、descriptionでクラスの概要呼べるって入門書にかいてた
自分で調べてね(ハート
984名称未設定:2010/07/01(木) 21:39:59 ID:QtRmq8a90
初心者だからかお前的外れだな。

マクロで下みたいなことは出来るが、そう言うことでもないだろうな。
id obj;
NSLog(@"%s", ADDQUOTES(obj)); // obj
985名称未設定
Cocoaはさっぱり!!! version.15
http://pc11.2ch.net/test/read.cgi/mac/1277992217/