Objective-C [ObjC part:4];
表明するのは大事だよ
通常アクセスならエラーが出るし、
迂闊に触ってしまうことへの注意喚起も出来るから
それで慣れている人は続ける方がいいよ
Appleのやり方も色々だよね。
昔から有るクラスはコメントで「privateだ」って書いてあったり
idな型不明のオブジェクトに隠蔽したり
@privateで宣言したり。
>>943 なるほど、ありがとうございます。
書いている方が安心できるので、書く事にします。
少しでも単純なバグを減らせるなら、これを書くぐらいなんとことないですしね。
id型で思い出しましたが、参考書はかなりid型を使っていますが、Objective-Cは動的型結合があるのでid型で書いた方が、何かと都合が良いのでしょうか。
「ここは絶対hoge型でしょう」みたいな箇所でid型を使うのは、Javaのような静的型付け言語に慣れ親しんでいた私の身には抵抗がありまして…。
「ごちゃごちゃ言う前に慣れろ」と言われれば、それまでなんですけど、ハイ…。
荻原本持ってるなら64ページに静的な型について書いてあるよ。
「明確な指針はないので好きにすれば良い」みたいなことが書いてある。
俺はクラス型を指定すると、コンパイル時に警告を出してくれるメリットがある
のでどんどん使っていけば良いと思うよ。
ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
id型になっているということがJavaとは違うので注意。
id型の代わりにクラス型を指定したせいでデメリットが生まれることはあまり
ないと思われる。
>>945 ありがとうございます。書いてました。申し訳無いです。
>ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
>id型になっているということがJavaとは違うので注意。
この違いは大きいですね。注意します。ありがとうございました。
>>943 WebViewはちょっと面白いよね。
@privateでWebViewPrivateクラスのインスタンス変数を持ってるだけだし、
WebViewPrivateクラスの実装とかはなぜかWebViewDataにある。
948 :
デフォルトの名無しさん:2010/06/11(金) 16:03:43
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
NSLog("%O", index);
としましたが、ポインタコンパチブルなんたらと怒られました。
何が間違っているのでしょうか?と質問しようとして、
よく見たら、1つ目の引数のポインタが型違うやんみたいなことを言われました。
NSLog(@"%O", index);
としたら、うまく行きました。自己解決しました。ありがとうございました。
以前にもこういうミスがありまして、こういうミス起きないようにするには
どうすればよいでしょうか。変な質問ですがよろしくお願いします。
文字列の前には@を付けると頭に叩き込むしかないんじゃないかな。
>>948 一度遭遇したエラーや警告を、その原因、対処方法とともに意識して憶えていく努力をする。
次に948は、
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
printf(@"%O\n", index);
としましたが(ry
952 :
948:2010/06/12(土) 14:48:06
みなさんアドバイスありがとうございます。
>>949 「あっと驚くNSString」これで頭に叩き込もうと思います。
頭に叩き込んでいたら怪我をしてしまいまして、これから病院に行ってきます。
>>950 そうですよね。がんばります。
>>951 次は無いようにしたいですね。
そこで新たな質問ですが、
NSLog(@@"%O", index);
のところでエラーが出ます。
原因はなんでしょうか?
バカかお前は。
バカの相手するのもなんなんだが、log って打って補完すれば NSLog(@""); って補完してくれて "" の中にキャレット動かしてくれるぞ
>log って打って補完すれば NSLog(@"");
俺、べつのバカだけど、そうなんだ!べんりだなー
スレチ。というか Mac も持ってないのにコード書いても意味ないだろ。
>>957 そうなんですか 初級過ぎてすみません><
アップル公式のSDKもよく見たらMAC限定みたいですね 出直してきます
ちょっとわらった
>>960 サイドバーの
「ターゲット」を展開→アプリ名になってる項目を右クリック→「追加」→「新規ビルドフェーズ」→「新規コピーファイル」
開いたパネルの「デスティネーション」を「フレームワーク」に設定
アプリ名の項目を展開→「ファイルをコピー」の上に JSON.framework をドロップ
JSON.framework は実際のファイルではなくて
サイドバーの <プロジェクト名>/Frameworks 項目の中に入ってるやつ
>>961-962 ありがとうございます。前進できました。
ビルドすると、JSON Frameworkのいくつかのファイルが見つからないというエラーが出ましたので、
私の設定のどこかがまずいのでしょう。
頑張って潰したいと思います。
楽しいココアのレヴューにこういう↓のあったんだが、実際のところどう?
あと萩原本以外にいいのないですか?自分はCは中級くらいやれてます
*********************
Leopardにアップグレードしてしまった方、
この本は使えません。Xcode Toolに大幅な変更があったからです。
まだTigerを使っている方。この本は貴方のためのものです。
本の通り作業して行けばCocoaのいろはのい位まではモノになるはずです。
スレチ。
966 :
964:2010/06/21(月) 20:09:39
すみませんでした 新macのcocoaスレ行ってきます
967 :
デフォルトの名無しさん:2010/06/24(木) 03:59:04
969 :
968:2010/06/28(月) 17:59:49
Appleで聞いてくる
970 :
デフォルトの名無しさん:2010/06/29(火) 18:10:59
V V
(´・ω・`) うさちゃんピース
971 :
デフォルトの名無しさん:2010/07/02(金) 05:44:56
すみません。
1ヶ月未満の初心者なんですが、初歩的なことでつまずいています。
ヘッダファイルで
@interface PListReadViewController : UIViewController {
NSArray* persons;
}
@property(nonatomic,retain) NSArray* persons;
で、ソースファイルで
@synthesize persons;
-(void)hogehage{
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle pathForResource:@"test" ofType:@"plist"];
NSArray* persons = [NSArray arrayWithContentsOfFile:path];
}
としてるんですが、hogehageのpersonsはローカル変数として扱われてしまうみたいですね。
interfaceで定義してるpersonsに、パッケージにバンドルされてるplistを配列として展開して、
別の関数内でpersonsを使いたいんですけど、どうしたらいいんでしょうか?
972 :
971:2010/07/02(金) 06:11:49
[NSHoge hoge~~] ってのは自動で autorelease に登録されてると覚えよう。
とは限らないけどね
[NSHoge new~~] ってのは release されていないってのも併せて覚えよう。
976 :
名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:46:20
スレチ。
978 :
名無しさん@そうだ選挙に行こう:2010/07/10(土) 17:17:49
JAVAスクリプトのライブラリを参照する事てできますか?
JavaScript ?
HTMLかXMLで実装した後、NSWebViewで参照すればイイんじゃない?
980 :
名無しさん@そうだ選挙に行こう:2010/07/11(日) 12:32:02
ありがとうございました
複数の入門書で勉強をし始めてるんだけど、参考書によって、
NSString* str = @"hoge";
と、
NSString *str = @"hoge";
て感じで、クラス名の後ろに*が付いてるのと、変数名の前に*が付いてるので書き方が分かれてて混乱中。
どっちの方が一般的な表記なんですかね?
一応、どっちもコンパイルは通るんだけど…
NSString* str1,* str2;
NSString *str1, *str2;
あとはわかるな?
「NSStringへのポインタ」という型だと考えるなら NSString* str
>>982のように変数を複数宣言したときとの整合性を取るなら NSString *str
どっちも一般的だから好きなほうで
984 :
981:2010/07/14(水) 01:29:03
ありがとうございます。
クラスのインスタンスはポインタ型の変数と思えば良いのかな。
Objective-Cに慣れるのに、時間掛かりそうだ…
クラスって、単にポインタだから。
Cで関数形式マクロを使ってポインタを隠蔽したような感覚で考えれば簡単。
>>981 C ファミリは区切り部分に空白がいくつ入ってもいい。改行でもいい。
> どっちの方が一般的な表記なんですかね?
{ 前後の改行の仕方に複数の流儀があるのと同じこと。
>>984 > クラスのインスタンスはポインタ型の変数と思えば良いのかな。
C はできるの?
malloc() するときはポインタで受け取るでしょ?
[[NSString alloc] init] の alloc はそういうこと。
>>981 t* v; ってのは c++ で一般的な書き方です。
合理性はともかく c++ のコードの大半はこのスタイル。
Blocksって一体なんなんすか?
無名関数
qsort(3)の第4引数に関数ポインタを渡す代わりに比較用関数を直接書ける
みたいな
990 :
デフォルトの名無しさん:2010/07/14(水) 21:37:44
テーブルビューのセル削除時にデリゲートメソッド(tableView:commitEditingStyle:forRowAtIndexPath:)が呼ばれてスワイプ消去の機能が自動的にアクティブになりますが、スワイプ消去の機能を非アクティブにさせる方法はありますか?
スワイプで編集されたくないときは
canEditRowAtIndex だか何だかで NO 返せば良いんだった様な
>>990 あとそれスレ違いだ。
そういうのは新Mac板のiPhoneのプログラミングスレで。