[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 12:16 / Filesize : 248 KB / Number-of Response : 975
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Objective-C [ObjC part:4];



1 名前:デフォルトの名無しさん [2009/04/15(水) 00:11:00 ]
Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
 (Wikipedia:ja.wikipedia.org/wiki/Objective-C より)

Objective-C [ObjC part:3];
ttp://pc12.2ch.net/test/read.cgi/tech/1186543111/

Objective-C
ttp://pc11.2ch.net/test/read.cgi/tech/1106983092/

Objective-C
ttp://pc5.2ch.net/tech/kako/990/990574267.html

284 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:22:29 ]
>>283
えっ、いまはちがいまするか?

285 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:25:23 ]
>>284
Objective-C 2.0 以降しか知らないけど、
obj.prop = hoge は [obj setProp:hoge] と同義。

286 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:48:58 ]
>>285
へー、そうなんだ。
勉強になった。
ただ、知らないと、逆に参照渡ししたいときとかハマったりしそう。。
それとも、プロパティの時に限って、=がアクセッサメソッド呼び出し
で実装してくれるのかな?

287 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:12:06 ]
プロパティでドット構文使った時だけだよ
てかなんでみんなCocoaスレでやらないのw

288 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:14:30 ]
@selector(func_name)って、Cでいう関数ポインタと同じようなもん?
(これもCocoaスレでやる話?w)

289 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:47:07 ]
>>286
いやいやそうじゃなくて、そもそもクラスCにインスタンス変数x があったときに
C* c=...
c.x=
は(xがプロパティでなければ)文法エラーだから。cはポインタだから、やるにしても
c->x=
でしょ。曖昧さはないです。

290 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:54:45 ]
>>289
なるほど。
確かにObjective-Cのクラスのメンバにはc.xみたいにはアクセス
できないよねprivateメンバじゃなくても
c->xになる。

で、ごめん、質問なんだけど、プロパティって何だっけ?w

291 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 09:42:48 ]
>>290
ttp://e-words.jp/w/E38397E383ADE38391E38386E382A3.html

質問の内容が低レベルすぎる

292 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 09:56:37 ]
>>288
ttp://journal.mycom.co.jp/column/objc/018/index.html



293 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 14:53:14 ]
>>288
C でいう関数ポインタは特定の関数の実装を直接指示するでそ(実体はアドレスだし)。
C++ のメンバ関数ポインタは、特定のクラス(とその派生クラス)のオブジェクトの仮想あるいは
そうでない関数を間接的にあるいは直接に指示するでそ(実体はvtbl上のオフセットまたはアドレス)。

Objective-C のセレクタは、どのようなクラスあるいはインスタンスのメソッドでも名前で指示する
ことができる(実体は文字列)。

294 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 20:03:40 ]
>>291
ggrksって感じですまんかった。
んで、プロパティって、つまりはメンバ変数のことだとおもうけど、
そうするとc.xのようにドットで表すのは間違いじゃねって思ったんだけど
それは間違い?
>>289が納得できない

295 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 20:18:25 ]
まちがい。

296 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 20:26:24 ]
>>294
Obj-CのプロパティはC++のメンバ変数じゃないから . で表しても全く問題ない。
最近の言語では当たり前の糖衣構文。C# も同様のシンタックスシュガーを持つ。

とはいえ、foo の bar プロパティが構造体だったとき、foo.bar.baz = 100 で
foo.bar.baz が 100 にならないのはみっともないのは確か。

297 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 21:26:55 ]
>>296
始めたばかりの頃コレでハマったのはいい思い出。

298 名前:デフォルトの名無しさん [2009/09/17(木) 02:58:22 ]
質問です。

NSDate *now = [NSDate date];
self.lbl.text = [now descriptionWithCalendarFormat:@"%H:%M:%S" timeZone:nil locale:nil];

で、時間を表示させているのですが、この2行目の部分で

warning: 'NSDate' may not respond to '-descriptionWithCalendarFormat:timeZone:locale:'
(Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.)

という警告が出るのですが、これはどういう事なのでしょうか?

299 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 04:05:43 ]
iPhoneでは-descriptionWithCalendarFormat:timeZone:locale: は梨になった。
NSDateFormatterを使いましょう。Mac側でもやめる気満々なことが書いてあるので
できれば移行していった方がよいようだ。

300 名前:デフォルトの名無しさん [2009/09/17(木) 10:57:56 ]
>>299
そうでしたか。ありがとうございます!
おかげさまで警告なしでビルドできるようになりました。

301 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 01:09:24 ]
またもしかするとiPhoneでは無しになったものかもしれないのですが、
NSHost *host = [NSHost hostWithAddress:@"192.168.0.125"];
の部分で、+hostWithAddreassメソッドが見つからないという警告が出てしまいます。
Mac OSX Reference Libraryを参照しながら作ってるので、見つからないはずはないのですが、
iPhoneで実装するとしたら変わりに何を使えばいのでしょうか・・・。

というか、変わりとなるクラスやメソッドってどうやって調べればいいのでしょうか・・・

302 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 09:01:51 ]
alloc] initWithAdress:



303 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:30:44 ]
>>302
それもダメなようです・・・。

304 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:57:40 ]
>>301
綴りミス?
+hostWithAddre[a]ssメソッドが見つからないという警告が出てしまいます

305 名前:デフォルトの名無しさん [2009/09/18(金) 19:03:45 ]
>>304
綴りミスです。ごめんなさい。
プログラムの方はちゃんと書いてあります。

警告あっても、正常に動作はするのですが、警告があるままやるのは気持ち悪いですね・・・

306 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:16:43 ]
メソッド廃止になったのに使うのは間違い
警告に添え

307 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:19:51 ]
>>306
で、deprecatedでない代替メソッドはなんなの?

308 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:24:25 ]
教えてあげないよ!

309 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:25:59 ]
301≠307ですよ

310 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:57:57 ]
>>301
CFHostCreateWithName()

311 名前:デフォルトの名無しさん [2009/09/19(土) 08:50:39 ]
久しぶりにCocoaで遊んじゃお!!わくわく

312 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:52:04 ]
連休だもんな!



313 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:58:08 ]
そうだな!
さて、なに作ろうw

314 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 10:00:00 ]
連休を有意義に過ごすための予定表アプリを作って連休をつぶすのはどうじゃろか

315 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:33:51 ]
来年のGW用ですね。

316 名前:デフォルトの名無しさん [2009/09/20(日) 22:47:54 ]
NSString *message = [NSString stringWithUTF8String:[messageData bytes]];
NSLog(@"%@", message);
[message release];

とある関数の中にこういうコードがあるのですが、
2回目呼び出した時に、メモリ関係のエラーか何かが出てしまいます。
この記述って何か間違ってるのでしょうか?

317 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:50:45 ]
取り敢えずreleaseすんな。

alloc initWith するか NSLog(@"%@", [NSString stringWithUTF8String:[messageData bytes]]); で

318 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:58:01 ]
>>317
ありがとうございます。エラーが消えました!
基本的にreleaseするのはallocした時だけって認識持っといていいんですかね・・・

319 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:09:52 ]
www.google.co.jp/search?q=%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8B%E3%82%A8%E3%83%B3%E3%82%B9%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF

320 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:31:07 ]
なるほど、ありがとうございます。コンビニエンスコンストラクタは
放っておけば勝手にreleaseされるんですね。

321 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:35:53 ]
本当に糞面倒な言語だな

322 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 16:47:43 ]
基本、Cだからな



323 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:42:41 ]
言語関係ねえ

324 名前:デフォルトの名無しさん [2009/09/23(水) 22:42:16 ]
2009-09-23 22:38:40.195 test[4488:5203] *** _NSAutoreleaseNoPool(): Object 0x101d660 of class NSCFNumber autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x2dc4 0x960b0155 0x960b0012)

ビルドとデバッグをすると、あるところでこういうメッセージが出るのですが、
これって何か問題が起こっているのでしょうか?
その後も特に問題なくアプリは動いているのですが・・・
パッとみた感じだと、NSCFNumberはオートリリースされたってだけで別に問題ない・・・んですかね。。。

325 名前:デフォルトの名無しさん [2009/09/23(水) 23:20:20 ]
ちなみに
NSNumber *num = [NSNumber numberWithInt:iRet];
NSLog(...);
[num release];

こういう場所(NSNumberやNSStringの生成や解放を行う場所)で必ず出てくるっぽいです。

326 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 23:28:10 ]
>>324
問題があるので autorelease pool について勉強してください

327 名前:デフォルトの名無しさん [2009/09/23(水) 23:30:13 ]
>>326
問題ありですか・・・。
わかりました、ヒントをありがとうございます!
知らない言葉なのでちょっと勉強してきます

328 名前:デフォルトの名無しさん [2009/09/23(水) 23:44:52 ]
今度はObjective-Cの質問です!!

クラスを作るまでもない関数ってどういう風に宣言すればいいのでしょうか・・・?
C言語でいう、ふつうの void swapInt(int a, int b); みたいな感じの関数を作りたいと思ってます。
クラスのメソッドだったら

-(void)showMessage:(NSString *)nsstrMsg flag:(BOOL *)flag
{
  ...
}

みたいな感じで作るのは分かっているのですが・・・。
それとも、Objective-CはC言語のような関数は基本的になくて、それでも使いたい場合は
クラスを定義して、クラスメソッドを用意するのが普通なのでしょうか?

329 名前:328 [2009/09/23(水) 23:45:36 ]
すみません、誤爆です。

330 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 13:23:26 ]
>>328
void swapInt(int a, int b);
じゃだめなの?

331 名前:デフォルトの名無しさん [2009/09/24(木) 15:54:11 ]
>>330
今はそのC言語ライクな書き方で対処して正常に動いてるのですが、
なんかObject-Cのソースの中に、Cの記述方法が混ざってるのが気持ち悪くて・・・

332 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 15:59:03 ]
その感覚がおかしい。



333 名前:デフォルトの名無しさん [2009/09/24(木) 16:13:08 ]
いや、Objective-Cの書き方自体も気持ち悪いんだけど、
その書き方で書くならその書き方でソースコードを統一した方が気持ちいいんだもん・・・

334 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 16:25:44 ]
Objective-Cは言語じゃなくて、C言語のライブラリと、それを使いやすくするためのプリプロセッサだと考えるべき。

335 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:16:44 ]
そんなに気持ち悪いならソースファイル自体をわければいいじゃんか。

336 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:22:03 ]
どうしてもというのなら。

@interface NSObject(StaticMethods)
+ (void)showMessage:(NSString *)nsstrMsg flag:(BOOL *)flag;
@end

@implementation NSObject(StaticMethods)
+ (void)showMessage:(NSString *)nsstrMsg flag:(BOOL *)flag
{
...
}
@end

使用例
[NSObject showMessage:@"hoge" flag:NO];

あなた以外誰も得しませんが。

337 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:45:44 ]
>>333
他人のObjCコード一度読んでみるといいよ
みんな平気で使ってるから

338 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:10:20 ]
>>326
すんません、>>282わかりますか?

339 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:10:41 ]
気持ち悪さで言うなら "nsstrMsg" の方がよっぽど気持ち悪いがな。

340 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:37:19 ]
>>338
NSApplicationMain()を実行するとイベントループという名の無限ループが開始される。
各アプリケーションにはイベントキューというキューがある。
イベントループの最初にNSAutoreleasePoolオブジェクトが確保される。
イベントループはイベントキューにイベントがはいってくるまで寝る。
Mac OS Xはイベントが発生すると該当アプリケーションのイベントキューにイベントを放り込む。
またはアプリケーションが自分のイベントキューにイベントを放り込む。
イベントキューにイベントが入るとイベントループは目を覚ます。
アプリケーションはイベントに応じて動作を起こす。
確保されたNSAutoreleasePoolオブジェクトが解放される。
始めの当たりに戻る。
アプリケーションを終了するとなんとexit(3)を呼び無限ループを吹っ飛ばす!!

余分な情報も混ぜてみました。必要な所だけお読みください。

341 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:44:43 ]
>>338
イベントループ内での autorelease pool は NSPortDelegate の handlePortMessage:
呼び出し前に autorelease pool が作られ、呼び出し後に drain される、と思えばok。
(メインスレッドではこれを勝手にやってくれているのであまり気にしなくてよい)

NSThread 等でワーカスレッドを立ち上げただけでは作ってくれないので、そのときは
ちゃんと自前で作ってやらないとautorelease されるインスタンスが登場する処理
(明示的に使うもの、内部処理で使うもの、のいずれも)が>>324の様にエラーになる。

NSThread NSAutoreleasePool でググればたぶん誰かが何か書いてると思う

御指名の 326 じゃないので嫌なら無視してくれ

342 名前:338 mailto:sage [2009/09/24(木) 22:45:40 ]
>>340
すばらしい。。。
いままで、いろんな人に訊いてきたけど、ここまで明快に
わかりやすく答えてくれた方はいませんでした。
これで、安心して[obj autorelease];を使えます。
どうもありがとうございました。



343 名前:338 mailto:sage [2009/09/24(木) 22:50:07 ]
>>341
おお、更なる詳しい説明!
しかしながら、>>340さんの説明までは理解できましたが、
>>341さんの説明は自分の知識不足でちょっと難解です。。。
はぁ。。
せいぜいがんばります。
どうもありがとうございます。

344 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:36:34 ]
www.remus.dti.ne.jp/~yoshiki/cocoa/ed1/index.html
このあたりも凄く参考になるぜ
第10-13回らへん

345 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:59:48 ]
MOSAの人は早くテクニカルドキュメント要約ライブラリの作成の仕事に戻るんだ

346 名前:338 mailto:sage [2009/09/26(土) 00:34:43 ]
>>344
おわっ、これはかなりわかりやすそうな予感
勉強してみます
どうもありがとう!

347 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 18:33:50 ]
UIButtonのRounded Rectタイプのボタンで,画像を使わず手軽にボタンの色を変える事は出来ないでしょうか?

348 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:42:58 ]
>>347
無理です
あと、ここではなくiPhoneアプリ開発のスレに書きこんだ方がいいかと

349 名前:デフォルトの名無しさん [2009/10/09(金) 06:08:24 ]
もの凄い初歩的な質問かもしれないのですが、
とあるサイトに↓のようなコードがありました。

NSMutableArray *anArray = [[NSMutableArray alloc] init];
NSString *str = [[NSString alloc] initWithString:@"文字列"];
[anArray addObject:str];
[str release];

NSStringのstrをNSMutableArrayに追加しているのですが、その直後にstrをreleaseしています。
NSMutableArrayに追加するということは、クラスのインスタンスをコピーして追加するという事なのでしょうか?
addObjectした後は、元のオブジェクトは必要なくなるって認識でいいのでしょうか?

350 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:38:19 ]
stackoverflow.com/questions/696417/nsmutablearray-add-object-as-pointer-only

351 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:42:00 ]
>>349
retain/release について勉強してください。その辺わかってないと、
プログラム書いてるといずれ意味不明なクラッシュが多発して
どうしようもなくなりますよ。
developer.apple.com/iphone/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html

release は C++ でいう delete とは違って、即座にオブジェクトを
破壊するわけではないです。retain カウントを減らすだけです。
retain カウントがゼロになれば、自動的に dealloc が呼ばれてオブジェクトが
なくなります。

あるオブジェクトを持っておきたい人は、
retain して retain カウントを増やします。
いらなくなったら、 release して retain カウントを減らします。
誰からもオブジェクトがいらなくなったら、自動的に dealloc されます。

NSMutableArray に addObject すると、NSMutableArray は
そのオブジェクトを保持していたいので、 retain されます。
一方で、>>349 のコードを書いているあなた自身は
もうそのオブジェクトは直接はいらなくなるので、release しちゃっていいです。

インスタンスがコピーされているわけじゃなくて、
NSMutableArray がこのオブジェクトを保持するぜ!と言っているので、
あなたはもうこのオブジェクトを保持している必要がなくなるわけです。

352 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:54:17 ]
>>351
ありがとうございます。もんのすごく分かりやすいです。
一応リンク先の方も読んでおこうと思います。
結構既にメモリまわりのエラーが時々出たりしているので・・・



353 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:06:58 ]
「一応」じゃなくてちゃんと読め。

354 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:11:02 ]
>>353
そうですね、ちゃんと読みます。
リンク先が英語で焦ったのですが、メモリに関する日本語リファレンス探したらあったのでそっちを読みます。

https://developer.apple.com/jp/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt

355 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 18:22:49 ]
>>282
GNUSTEPのソースを追えば、理解できると思う。


356 名前:デフォルトの名無しさん [2009/10/11(日) 18:49:15 ]
以下のコードで指定のURLからファイルを取得しようとしているのですが、
bad URLというエラーが返されてしまいます。
NSLogでnssUrlを表示させ、そのURLをコピペしてブラウザから閲覧したら確かに見る事ができるのでURLは間違っていないはずです。

NSString *nssUrl = [NSString stringWithFormat:@"%s/%s/%@/%s", SERVER_ADDR, DIR_AREA, [semanticList objectAtIndex:i], FILE_SUBJECT];
NSURL *url = [NSURL URLWithString:nssUrl];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSURLResponse *resp;
NSError *err;

NSData *result = [NSURLConnection sendSynchronousRequest:req returningResponse:&resp error:&err];
NSLog([err localizedDescription]); //←bad URLと表示される

NSString *subjectData = [[NSString alloc] initWithData:result encoding:NSShiftJISStringEncoding];
[subjectData release];

このコードに何か問題がありますでしょうか?

357 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:56:45 ]
そのコピペしたURLを直接NSStringに nssUrl = @"hoge"ってつっこんだ結果はどうなってるのさ?

358 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:59:50 ]
>>357
あれ?それだとエラーが出てこなくてちゃんと動きます。
謎なんですけど・・・

359 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:03:50 ]
nssUrl を characterAtIndex で unichar 出して中身見ると、変なモンが混ざってると思うぞ。

360 名前:デフォルトの名無しさん [2009/10/11(日) 19:09:17 ]
NSLog(@"url=%@",[url absoluteString]);
で url の方にちゃんと入ってるかどうか確認したところ
url = (null)
と表示されました。>>357さんのようにNSStringに直接ぶちこんだ時はちゃんとurlが表示されました。
でも、NSLog(@"nssUrl = %@", nssUrl);でnssUrlの中身を確かめたら、
stringWithFormat:で生成したときもちゃんとURLが表示されます。

NSURL *url = [NSURL URLWithString:nssUrl];
に何か問題があるのでしょうかね・・・

361 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:13:54 ]
>>359
おぉ、ありがとうございます。1文字ずつ表示させていったら
[semanticList objectAtIndex:i]のあとに空白?みたいなのが1つ入ってました。
なんでだろう・・・とりあえず後は自分で原因探してみます。ありがとうございました!

362 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:27:03 ]
あまりスマートじゃないですが、固定長のデータなのでsubstringToIndexで対処しました。
ありがとうございました。



363 名前:デフォルトの名無しさん [2009/10/12(月) 00:13:57 ]
char*をNSNumber型に変更するスマートな書き方はありますか?


364 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:29:23 ]
それポインタだろ。cString のことか?

365 名前:デフォルトの名無しさん [2009/10/12(月) 02:01:49 ]
ファイルの削除に関する質問です。

NSError *err;
if([[NSFileManager defaultManager] isDeletableFileAtPath:filePath]){
  NSLog(@"消すことが可能");
  [[NSFileManager defaultManager] removeItemAtPath:filePath error:&err];
  NSLog([err localizedDescription]);
}

上のコードを実行すると、NSLogの部分でEXC_BAD_ACCESSが出ます。
そもそものNSErrorの使い方が間違ってるのでしょうか?

366 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:21:12 ]
NSError *err = nil;
ってしてみて

367 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:51:14 ]
>>366
ありがとうございます!
無事エラーが出ないようになりました。
なんかよくわかりませんが、allocもinitもせずに宣言するときはとりあえずnilをぶち込んでおく癖をつけておきます。

368 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:06:32 ]
>>364
そうです。Cの関数から返されたポインタのcharをNSNumberにしたいです。
今はNSStringに変換してからNSNumberに再変換してます。。


369 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:26:11 ]
> NSStringに変換してからNSNumberに再変換

何したいのか分からないから、この処理の部分を書いてみて

370 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:10:56 ]
>>369
char *c = (Cの関数);
NSString *str = [NSString stringWithCString:c];
NSNumber *num = [NSNumber alloc] initWithInt:[str intValue]];

NSStringを介さずNSNumberにしたいです。


371 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:23:25 ]
[NSNumber numberWithInt : atoi(c)];

ってことか。NSString かませる必要ないね。

372 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:41:21 ]
>>371
そんな関数があるんですね、ありがとうございました!




373 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 07:34:32 ]
>>370
べつにそれでいいでしょう。なんでそれじゃいやなの?

あと、strintWithCString は deprecated なので使わないこと!
文字コードの問題でいずれハマりますよ。
かならず UTF8String か encoding: つきのメソッドをつかってください

374 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:07:42 ]
>>367
「とりあえずnilをぶち込んでおく」とかいう意味のない癖をつけるよりも、
NSErrorに触る前にその処理が成功したのか失敗したのか判断する癖をつけましょう。

developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2

処理が成功した場合、NSErrorにobjectが代入されていることは保証されていません。

375 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:47:17 ]
意味なく無いだろ

376 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:54:27 ]
>>375
いや、訳も分からずとりあえずnilを入れるのは良くないよ、て言いたいんじゃないの?

377 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:58:25 ]
値が未定義な自動変数がクラッシュの
温床になるって書いて置けばまだ
分かりやすいかな。

378 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:04:19 ]
萩原本にはNSErrorにほ取り敢えずnil入れとく癖を付けろと書いてあったよ。

379 名前:デフォルトの名無しさん [2009/10/14(水) 16:51:04 ]
質問です。

クラスAの中でクラスBのオブジェクトを保持したくて、
クラスBの中でクラスAのオブジェクトを保持したいのですが、
それぞれのヘッダファイルの中でimportしようとすると入れ後状態?みたいになって
コンパイルが通りません。こういう場合はどうすればいいのでしょうか。

380 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:58:48 ]
>>379
循環参照が発生してるのかな?
スーパークラスかインターフェイスを作成して、それを保持させるとどうかな?

381 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:59:38 ]
@class

382 名前:デフォルトの名無しさん [2009/10/14(水) 17:00:05 ]
>>380
あーなるほど、そういう方法があるんですね。
ありがとうございました!



383 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:13:55 ]
>>380, 382
まてまてまてw
>381 の言う通り、@class をつかえ。
ClassA.h; @class ClassB @interface ClassA : Hoge {ClassB *clsB} @end
ClassA.m; #import "ClassA" #import "ClassB"

ClassB.h; @class ClassA @interface ClassB : Piyo {ClassA *clsA} @end
ClassB.m; #imprt "ClassB" #import "ClassA"

384 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:14:49 ]
しつれい、@class ClassA; ね。";" が抜けた






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef