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

332:デフォルトの名無しさん
09/09/24 15:59:03
その感覚がおかしい。

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

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

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

336:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/24 20:45:44
>>333
他人のObjCコード一度読んでみるといいよ
みんな平気で使ってるから

338:デフォルトの名無しさん
09/09/24 21:10:20
>>326
すんません、>>282わかりますか?

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

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

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

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

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

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

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

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

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

344:デフォルトの名無しさん
09/09/25 23:36:34
URLリンク(www.remus.dti.ne.jp)
このあたりも凄く参考になるぜ
第10-13回らへん

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

346:338
09/09/26 00:34:43
>>344
おわっ、これはかなりわかりやすそうな予感
勉強してみます
どうもありがとう!

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

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

349:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/09 06:38:19
URLリンク(stackoverflow.com)

351:デフォルトの名無しさん
09/10/09 08:42:00
>>349
retain/release について勉強してください。その辺わかってないと、
プログラム書いてるといずれ意味不明なクラッシュが多発して
どうしようもなくなりますよ。
URLリンク(developer.apple.com)

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

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

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

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

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

353:デフォルトの名無しさん
09/10/09 15:06:58
「一応」じゃなくてちゃんと読め。

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

URLリンク(developer.apple.com)

355:デフォルトの名無しさん
09/10/10 18:22:49
>>282
GNUSTEPのソースを追えば、理解できると思う。


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

NSString *nssUrl = [NSString stringWithFormat:@"URLリンク(%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:デフォルトの名無しさん
09/10/11 18:56:45
そのコピペしたURLを直接NSStringに nssUrl = @"hoge"ってつっこんだ結果はどうなってるのさ?

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

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

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

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

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


364:デフォルトの名無しさん
09/10/12 01:29:23
それポインタだろ。cString のことか?

365:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/12 02:21:12
NSError *err = nil;
ってしてみて

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

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


369:デフォルトの名無しさん
09/10/12 03:26:11
> NSStringに変換してからNSNumberに再変換

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

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

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


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

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

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


373:デフォルトの名無しさん
09/10/12 07:34:32
>>370
べつにそれでいいでしょう。なんでそれじゃいやなの?

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

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

URLリンク(developer.apple.com)

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

375:デフォルトの名無しさん
09/10/12 21:47:17
意味なく無いだろ

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

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

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

379:デフォルトの名無しさん
09/10/14 16:51:04
質問です。

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

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

381:デフォルトの名無しさん
09/10/14 16:59:38
@class

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

383:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/14 17:14:49
しつれい、@class ClassA; ね。";" が抜けた

385:デフォルトの名無しさん
09/10/14 17:59:46
>>383
ぎゃー、すでに変更し始めてました。
ちょっとバックアップファイルから復元して@classでやってみます。

386:デフォルトの名無しさん
09/10/14 18:04:48
>>385
Objective-Cに興味があってこのスレ見てるけど、コードを書いた事が無いのにレスした俺のせいでスマン…

387:デフォルトの名無しさん
09/10/14 18:13:47
@classで一瞬で解決しましたw
ありがとうございました!

>>386
なんという・・・w

388:デフォルトの名無しさん
09/10/14 18:48:20
>>386
>Objective-Cに興味があってこのスレ見てるけど、コードを書いた事が無い
なんだ、俺は他にもいたのか

389:デフォルトの名無しさん
09/10/14 21:15:20
一度くらい書けよw

390:デフォルトの名無しさん
09/10/15 10:51:48
cat > hello.m
#include <stdio.h>
int main(int argc, char*argv[]){printf("Hello world.\n");return 0;}

^D

make hello
./hello

サフックスが.mだからObjCとしてコンパイルされます!
これでObjCプログラマの仲間入りです!


391:デフォルトの名無しさん
09/10/15 11:06:11
それでいいなら俺も書いた事あるぜ!w

392:デフォルトの名無しさん
09/10/16 00:58:07
NSStringの中に文章が入っているのですが、その中にあるURLをリンクに置換したいと考えています。
例えば文章の中に
URLリンク(www.google.co.jp)
のようなアドレスがあれば、
<a href="http;//www.google.co.jp/>http;//www.google.co.jp/</a>
のように置換したいのですが・・・やり方がいまいちわかりません。
とりあえずNSStringのメソッドを見る限りだと無理で、NSMutableStringのメソッドを見る限りだと、
replaceOccurrencesOfString:withString:options:range:のようなメソッドがあったのですが、
正規表現が使えるのか不明です。何かいい方法はないでしょうか?

393:デフォルトの名無しさん
09/10/16 01:04:28
regex(3)

394:デフォルトの名無しさん
09/10/16 01:49:26
>>392
ありがとうございます。
RegexでググったらRegkit liteというのがあったのでそれを使いました。
ただ、URLのマッチングが上手くいかないので見ていただけないでしょうか・・・


NSString *searchString = @"I like URLリンク(www.google.co.jp) yeah!!";
NSString *regexString = @"(URLリンク(|https:)){1}[\\w\\.\\-/:\\#\\?\\=\\&\\;\\%\\~\\+]+";
NSString *replaceWithString = @"<a href=\"$1\">$1</a>";
NSString *replacedString = NULL;
replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];

これで置換した結果が、
I like <a href="http://">URLリンク(<) yeah!!
になります。www.google.co.jp/が消えてしまってるのですが、何が間違ってるのでしょうか?



395:デフォルトの名無しさん
09/10/16 02:01:15
謎ですね。http://しかマッチしていないなら
I like <a href="http://">URLリンク(<) yeah!!
になりそうなんですけどね・・・

396:デフォルトの名無しさん
09/10/16 02:05:04
そのライブラリは知らないけど、普通はカッコで囲ってるところしかキャプチャされないのでは?

397:デフォルトの名無しさん
09/10/16 02:25:22
NSString *regexString = @"(https?://[a-zA-Z\.\-\#\?\=\&\;\%\~\+]+)";

でいいんじゃないの

398:デフォルトの名無しさん
09/10/16 02:44:41
括弧で囲ってるところしかキャプチャされないんですか・・・
無事マッチできました。ありがとうございました!

399:デフォルトの名無しさん
09/10/17 05:37:25
次のようなプログラムを動かすと配列0番目を参照してるはずなのに
200が返されます。何故なんでしょうか?

int main(int argc, char *argv[]) {
array = [[NSMutableArray alloc] init];

[self bindInt:0 value:100];
[self bindInt:0 value:200];

Element *h = [array objectAtIndex:0];
printf("value:%d¥n", *(int*)h.p);
}

- (void)bindInt:(int)holderId value:(int)value
{
// Elementクラスにはvoid *p変数のみ定義されてる
Element *holder = [[[Element alloc] init] autorelease];
holder.p = &value;

[array addObject:holder];
}

ちなみにbindIntのhoderId引数自体を外すと0が返されます。
これもよく理由がわかりません。。


400:デフォルトの名無しさん
09/10/17 06:31:06
なんでintのポインタ渡すの? それスグ死ぬやん。

401:デフォルトの名無しさん
09/10/17 06:50:20
>>400
へ、死ぬんですか。
変数pはvoid*にして、様々な型を格納できるようにしたかったのです。

まだあまり理解できていないのかも。
この辺りは何をキーワードに調べれば良いのでしょうか。

402:デフォルトの名無しさん
09/10/17 10:15:22
void * に格納できるのはポインタだけで、「様々な型を格納」できたりはしないぞ。

403:デフォルトの名無しさん
09/10/17 11:45:32
その前に self って誰?

404:デフォルトの名無しさん
09/10/17 14:11:23
プールもないのに autorelease ?

405:デフォルトの名無しさん
09/10/17 14:29:59
>>399
>holder.p = &value;
ここでスタック上に一時的に作られたローカル変数のアドレス取ってるから
ゴミを拾って当たり前
Cの初歩で「ローカル変数のアドレス返しちゃダメ」みたいなトピックあると
思うからその辺から読む事

406:デフォルトの名無しさん
09/10/17 14:54:20
NSImage *backBlock = [[NSImage alloc]
 initWithContentsOfFile:@"./images/Block_0.png"];
のところで、
initializer element is not constant
というエラーが出て途方に暮れています。
何が悪いのか、教えてください。

407:デフォルトの名無しさん
09/10/17 15:13:57
それを
NSImage *backBlock = [[NSImage alloc] initWithData:[NSData dataWithContentsOfFile:@"./images/Block_0.png"]];

とかに変えてもエラーが出るのなら、他の部分が問題。

408:デフォルトの名無しさん
09/10/17 18:26:43
というか、突っ込みどころが多すぎてどこから突っ込んだらいいのやら。

409:デフォルトの名無しさん
09/10/18 05:31:50
とりあえず俺のケツから突っ込んでこいよ

410:デフォルトの名無しさん
09/10/19 07:59:06
次のようなコードでmyNotePadオブジェクトのプロパティの値を変えようと試みているのですが、//Diagnosticsの部分でNSLogの結果が 0 や (null)と表示されてしまいます。

// プロパティnoteTextにコンテントの内容をセット
myNotePad.noteText = tvContent.text;

// プロパティsavedDateに日付をセット
myNotePad.savedDate = [NSDate date];

// プロパティsaveCyclesをインクリメント
myNotePad.saveCycles++;

//////// Diagnostics
NSLog(@"in saveData - tvContent.text - %@", tvContent.text);
// これはちゃんと表示される

NSLog(@"in saveData - noteText - %@", myNotePad.noteText);
// nullと表示される

NSLog(@"in saveData - savedDate - %@", myNotePad.savedDate);
// nullと表示される

NSLog(@"in saveData - saveCycles - %d", myNotePad.saveCycles);
// 0と表示される


初歩的な質問で申し訳ないのですが、どなたか教えていただけますか?
マジで困ってます・・・


411:デフォルトの名無しさん
09/10/19 08:23:33
すみません自己解決しました

412:デフォルトの名無しさん
09/10/19 11:03:58
>>411
自己解決したのはいいとして、何が原因だったかくらい書いたらどうかな?
それを読んで役に立つ人もいるはずだし。

ここでいろいろ助けてもらっても、結果は独り占めして誰にも教えたく無い、
っていう性格なら、まあ強制はしないけどね。

413:デフォルトの名無しさん
09/10/19 12:33:12
変数に入った文字列を=で代入なんてできない。初歩的すぎる。

414:デフォルトの名無しさん
09/10/19 12:47:57
「myNotePadがnilでした」に 3 retainCount かける。

>>413
なんの話をしているの?

415:デフォルトの名無しさん
09/10/19 13:54:51
>>412
そうですね。すみません。
実はメモリをallocしてなかったのが原因でした

>>413
初心者は帰れ!!!!

>>414
そうです。nilでした

416:デフォルトの名無しさん
09/10/19 13:57:45
余計なことを言ったばかりに一気に印象が悪くなる。

417:デフォルトの名無しさん
09/10/19 19:17:41
馬鹿は死ななきゃ治らないから415の罪じゃないさ。

418:デフォルトの名無しさん
09/10/19 21:55:11
malloc: *** error for object 0x4c52320: pointer being reallocated was not allocated
これは一体どういう意味なのでしょうか?
メモリを再確保されたポインタはメモリ確保されませんでした?
いまいちよく分からないのですが、具体的にどういう時に出るエラーなのでしょうか?

419:デフォルトの名無しさん
09/10/19 22:13:15
>>418
/usr/lib/libSystem.B.dylib の szone_realloc() 関数の中で
szone_size() 関数が 0 を返すと発生するエラーだよ。

URLリンク(www.opensource.apple.com)

420:デフォルトの名無しさん
09/10/19 22:13:24
>>418
#include <stdlib.h>

int main(int argc, char **argv)
{
char *foo = "abc";
foo = (char *)realloc(foo, sizeof(char) * 4);
return 0;
}
みたいなことをしたときとか。

421:デフォルトの名無しさん
09/10/19 22:14:15
再確保しようとしたポインタは確保されませんでした?

422:418
09/10/19 22:44:28
んー明示的にメモリの再確保してる場所はないんですけどね・・・
NSMutableStringのappendStringあたりで変なことになってるんですかね。
とりあえずどういうエラーなのかは分かったので、地道に問題箇所探していきます。
ありがとうございました!

423:デフォルトの名無しさん
09/10/19 22:46:34
>>414
413 は、OpenStep API が出る前で NSString* が無かった頃の人なんだよ。
というかここは Obj-C スレなので、Foundation があることを
仮定しないのが自然じゃないかな。

あ、でも、property 使う時点で Obj-C 2 か ...

424:デフォルトの名無しさん
09/10/19 23:01:33
NSStringが登場する前だってNXStringとかあったじゃん

425:デフォルトの名無しさん
09/10/19 23:40:46
疑問です。

NSLog(@"%.f", 0.5);
NSLog(@"%.f", 1.5);
NSLog(@"%.f", 2.5);
NSLog(@"%.f", 3.5);
NSLog(@"%.f", 4.5);
NSLog(@"%.f", 5.5);

とした時、四捨五入されて出力結果は
1 2 3 4 5 6
になると思いきや実際には
0 2 2 4 4 6
となりました。偶数時は5以下は切り捨て。奇数時は5以上を繰り上げているようです。
printfでも同様でした。
なぜこうなるのでしょうか?
10.5、10.6、Cocoaアプリケーション、Standard Tool、C89、C99 等いくつか状況を変えて試しましたがいずれも同じ結果でした。

426:デフォルトの名無しさん
09/10/19 23:55:31
>>425
偶数丸め


427:デフォルトの名無しさん
09/10/19 23:56:05
NSURLConnectionを使ってHTTPでデータの差分取得をしたいのですが

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
[request addValue:@"Wed, 30 Jul 2008 12:12:12 GMT" forHTTPHeaderField:@"If-Modified-Since"];
[request addValue:@"445-" forHTTPHeaderField:@"Range"];

NSData *data;
NSURLResponse *response;
NSError *error = nil;
data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

とりあえずリファレンスとか見ながら頑張って↑のコード書いたのですが、
結局差分取得はせずに全部ダウンロードしてしまいます。
どうすればいいのでしょうか・・・

428:デフォルトの名無しさん
09/10/20 00:02:33
>>426
ググってみました。ありがとうございます。

429:デフォルトの名無しさん
09/10/20 00:06:39
あー、アホだー
bytes=が抜けてました。死んできます。

430:デフォルトの名無しさん
09/10/20 00:15:00
この様はiPhoneさまさまなのかな。

431:デフォルトの名無しさん
09/10/20 00:59:23
サマーはもう終わりました

432:デフォルトの名無しさん
09/10/20 11:33:53
次のスレのはじめには、ここはあくまで言語仕様のスレで、
Mac / iPhone Cocoa プログラムはそれぞれのスレにいくよう
強調したほうがよいかも

433:デフォルトの名無しさん
09/10/20 16:28:20
別にいいんじゃん?暇だし。

434:デフォルトの名無しさん
09/10/20 16:52:33
まぁね
暇だし
仕事ないし

435:デフォルトの名無しさん
09/10/20 16:53:48
>>434
暇なら仕事みつけろよwww

436:デフォルトの名無しさん
09/10/20 17:01:38
働いたらそこで試合終了だって安西先生が言ってた

437:デフォルトの名無しさん
09/10/20 17:22:02
俺は、親父が残してくれた財産で、
働かずに住んでいるよ。
結局、人生は親の財産次第。

馬鹿な親の子に生まれた子は、一生馬鹿。

438:デフォルトの名無しさん
09/10/20 19:01:23
奇遇だな。俺も2chではそうなんだよ。
相続税のこととか考えると、まったく頭が痛いよ。

439:デフォルトの名無しさん
09/10/20 20:44:08
>>437,438
働かず、暇があるなら税法をやれば良い。
それで今の税法の穴を見つけてこっそり使えばいいんじゃね。

440:デフォルトの名無しさん
09/10/20 21:17:46
スレ違いうざい。

441:デフォルトの名無しさん
09/10/20 22:10:19
そういうスレ違いは許さないんだなw
まぁ当たり前っちゃ当たり前か。スレ違いというか、板すら違うからなw

442:デフォルトの名無しさん
09/10/20 22:42:31
国内のMac信者ってなんでこう雑魚ばっかりなんだろう

443:デフォルトの名無しさん
09/10/20 23:04:20
まぁ荒れる前にこの話題は終わらせちゃおうぜ!!
releaseだ!release!!

444:デフォルトの名無しさん
09/10/20 23:17:59
Cocoa でドットを描くのは NSRectFill(NSMakeRect(x,y,1,1) するのが一般的なの?
難しいな…

445:デフォルトの名無しさん
09/10/21 22:31:28
せっかくだからOpenGL使ったら?

446:デフォルトの名無しさん
09/10/21 22:39:22
なるほど。GL_POINTS を使って点を描く訳ですね。
お絵描きソフトを作ろうと思っているのですが、NSBezierPath 等 Cocoa の API を
使うのと比べてメリットはどんなところがあるでしょうか。

447:デフォルトの名無しさん
09/10/22 09:44:53
他機種向けのソフトを作る時も、流用しやすい


448:デフォルトの名無しさん
09/10/22 19:26:34
クロスプラットフォームなのは嬉しいですね。
ただ今回はプラットフォーム固有の機能をガンガン使って
コーディングするつもりなので、他機種の事は考えていません。

449:デフォルトの名無しさん
09/10/22 19:35:39
>>444みたいな面白いこと言い出す奴にそれは無理だと思うの

450:デフォルトの名無しさん
09/10/22 19:43:08
ん、どうしてそう思ったの?

451:デフォルトの名無しさん
09/10/22 21:46:06
何だ、冷やかしか

452:デフォルトの名無しさん
09/10/22 23:49:37
前々から言おうと思ってたけど、iPhoneアプリ開発スレ行けよ
こっちとマルチすんな

453:デフォルトの名無しさん
09/10/22 23:53:20
前々?マルチ?iPhone?
いったい誰に向かって言ってるんだ?

454:デフォルトの名無しさん
09/10/22 23:59:16
普通の人には見えない何かが見えちゃうと大変だな…

455:デフォルトの名無しさん
09/10/23 00:10:45
>>450-451,453-454
www

456:デフォルトの名無しさん
09/10/23 00:13:51
何がしたいのか全く分からん…
お大事にね

457:デフォルトの名無しさん
09/10/23 00:25:50
で、結局 >>449 は何だったの?

458:デフォルトの名無しさん
09/10/23 00:26:49
君らもうMac板に帰ったら

459:デフォルトの名無しさん
09/10/23 02:43:38
おちつけぢょwww

460:デフォルトの名無しさん
09/10/23 03:14:57
何だ、冷やかしか

461:デフォルトの名無しさん
09/10/23 04:27:21
ひややっこおいしいです

462:デフォルトの名無しさん
09/10/23 16:02:24
NSStringに0123918201とか023384722とかの数字文字が入っているのですが、
それらのNSStringを

if([numString1 intValue] < [numString2 intValue]){ }
else if([numString1 intValue] == [numString2 intValue]){ }
else{ }

のように数値で比較した時、なぜか絶対にイコールのところに入ってしまいます。
NSLogでそれぞれに入っている数字は違う事を確認してるのですが、
それでも==の条件式に当てはまってしまいます。
どういう原因が考えられますか?

463:デフォルトの名無しさん
09/10/23 16:17:41
すみません、調べてみたら、NSStringに入ってる数字は違うのですが、
intValueにしたら全然違う数値になっている事がわかりました。

NSStringに031424045645って入ってるのに
intValueの値は2147483647になってます。
これは何でなんでしょうか・・・?

464:デフォルトの名無しさん
09/10/23 16:27:38
31424045645 → 7 5104 E24D
2147483647 → 7FFF FFFF


465:デフォルトの名無しさん
09/10/23 16:28:45
signed int の最大値 INT_MAX が 2^31-1 = 2147483647 って知らないの?
doubleでも使え

466:デフォルトの名無しさん
09/10/23 16:39:38
あーなるほど・・・。intは4バイトなのでオーバーフローしちゃってるわけですね。
unsigned型でも全然桁がたりませんね。基本的に12桁以下の数値の文字なのですが、
これを数値的に比較するのにいい方法はないでしょうか?

467:デフォルトの名無しさん
09/10/23 16:41:29
long longか__int64

468:デフォルトの名無しさん
09/10/23 16:48:28
>>465
doubleValueだと==を検出できなくなる可能性がありますね。
roundとかで切り捨てれば解決なのかな・・・
ちょっとやってきます。

469:デフォルトの名無しさん
09/10/23 17:15:02
NSLog(@"%ll", [numString1 longlongValue]);
でlong long型が表示出来なかったので、数値が確認できず若干不安ではありますが、
期待通りの動作をしているようなので大丈夫なようです。

ありがとうございました。

470:デフォルトの名無しさん
09/10/23 17:55:21
%qi です。
ここ参照。
URLリンク(developer.apple.com)

471:デフォルトの名無しさん
09/10/23 18:01:50
>>470
わぁ、ありがとうございますw
大丈夫だと言い聞かせながらも、もの凄く不安でしたw
念のためちゃんとなってるか調べてきます。

472:デフォルトの名無しさん
09/10/23 18:17:40
NSLog(@"%@ %qi", numStringX, [numStringX longlongValue]);
文字とそれをlonglong型に変換したものの対応表ですが・・・

031423045645 5833744870023364608
031423045646 5833744874318331905
031424045644 5838039833024397314
031424045644 5838039833024397315
031424045645 5838039837319364611
031424045646 5838039841614331908
031425045644 5842334800320397317
031425045644 5842334800320397318
031425045645 5842334804615364614
031425045646 5842334808910331911

全然大丈夫じゃなかったです。一応文字数値が大きいものほど、
longlongの値も大きくなっているので正常に動作はしているのですが、
んー何でこう思った通りに動かないんだろうか(´・ω・`)
どこも間違ってるようには見えないんですけど・・・

473:デフォルトの名無しさん
09/10/23 18:34:11
031423045645      → 7 50F5 A00D
5833744870023364608 →  50F5 A00D 0000 0000

何が起こってるんだろ?

474:デフォルトの名無しさん
09/10/23 18:56:22
031423045646      → 7 50F5 A00E
5833744874318331905 →  50F5 A00E 0000 0001

二つ目に関してはLSBが1になってますね。
んー・・・元のNSStringに何か問題があるんですかね・・・

475:デフォルトの名無しさん
09/10/23 19:53:27
試しに↓をやってみたら
NSString *testString = [NSString stringWithString:@"012345012345"];
NSLog(@"test: %@ - %qi", testString, [testString longLongValue]);

出力が
test: 012345012345 - 12345012345

になってるので、基本的な使い方としては間違ってない感じですね。
numStringの中に入ってるデータに何か罠がありそうな感じですが、
普通にNSLog(numString)で表示させても、特に変な様子は見られないんですけどね・・・

476:デフォルトの名無しさん
09/10/23 20:01:16
ここはお前のメモ帳だ。いいぞもっとやれ。

477:デフォルトの名無しさん
09/10/23 20:02:33
何かついてるんでしょうね。とりあえず、NSScanner で読んでみたら?
NSString *str = [NSString stringWithUTF8String:"031425045646"];
NSScanner *scan = [NSScanner scannerWithString:str];
NSLog(@"%@, %qu", str, [str longLongValue]);
NSLog(@"%qu", value);
//031425045646(, 31425045646
//31425045646

478:デフォルトの名無しさん
09/10/23 20:06:18
あ、ごめん、スキャン部分が抜けてた。
uint64_t value;
[scan scanLongLong:(long long*)&value];

479:デフォルトの名無しさん
09/10/23 20:09:01
NSLog(@"%@ %qi", numStringX, [numStringX longlongValue]);

longlongValue なんて method はないよ。
ほんとうにこのコードで出した対応表なの?

480:デフォルトの名無しさん
09/10/23 20:10:37
ちょっとNSScannerでやってみます

>>479
その部分は手打ちなのでタイプミスしました。
ソースの方はちゃんとlongLongValueになってます

481:デフォルトの名無しさん
09/10/23 20:28:52
NSScannerで確かめて見たら正常に表示されました。
これに関連して、比較用のNSStringを新しくつくって、そこに元のNSStringをぶちこんで
表示させてみたら同様に正常に表示されました。何なんだろう・・・
とりあえず比較用のNSStringを作る事で対処しました。
これで比較部分がようやく安心の動きになるはず・・・
とりあえずありがとうございました!

482:デフォルトの名無しさん
09/10/25 01:24:31
おまえらメソッド定義の開き括弧って別の行にする派?
- (id)fucknglyLongMethodNameContainingThousandsOfCharacters:bar
{
それともメソッド名の行にまとめる派?
- (id)fucknglyLongMethodNameContainingThousandsOfCharacters:bar {

あと、メソッドチェインで右の方まで来ちゃったときって、新しい行でメソッド名始めたりする?
[[omgThisIsTooLongSoThatTheNextMethedHangsAtFarRightPositionWTF foo]
thisIsTheSecondMethodSTFU:bar
multipleArgsAnotherPain:poo];
それとも同じ行に置く?
[[omgThisIsTooLongSoThatTheNextMethedHangsAtFarRightPositionWTF foo] thisIsTheSecondMethodSTFU:bar
multipleArgsAnotherPain:poo];

483:デフォルトの名無しさん
09/10/25 02:17:55
-(void)括弧は同じ行にする {
[[そんなに長いメソッド名 付けたりはしないけど] 基本的には同じ行かな];
id hoge = [コード見やすい方が気分がいいので あんまりにも右に長くなっちゃう場合は];
[hoge コードを分けちゃいますね];
}

484:デフォルトの名無しさん
09/10/25 12:50:09
WikipediaでCの例文見ると
関数宣言は改行で
void a
{
}
条件式は
if () {
}
while () {
}
改行してるみたい。

485:デフォルトの名無しさん
09/10/25 13:09:58
>>484
Wikipediaは例として好ましくありません。
例として引用する場合は、Wikipediaが参照・参考にしている一次情報を引用しましょう。

括弧を次の行におくのはGNUコーディング規約で推奨されています。
同じ行に置く形もどこか有名な団体/企業での採用が元だったと思いますが忘れました(Sunだったかな)。

GNUコーディング規約
URLリンク(www.gnu.org)
URLリンク(www.sra.co.jp)

ちなみに私は括弧は同じ行、メソッドチェインは>>483と同様に分割を検討します。
状況によっては新しい行で開始します。同じ行には置かないでしょうね。

486:デフォルトの名無しさん
09/10/25 20:14:08
GNUスタイルは参考にするな、やっちゃダメな例だ
Linuxコーディングスタイルがルールも少なく誰でも従いやすい
でも、objc的にはAppleのコーディングスタイルをまねるのが一番いいのでは
Appleなりの理由があってあのスタイルに落ち着いたんだろうから
あと、Perlベストプラクティスのコーディングスタイルも学ぶところが多かった


487:デフォルトの名無しさん
09/10/25 20:24:09
コーディングスタイルなんて、プロジェクト内で一貫してればなんでもいいべ。

488:デフォルトの名無しさん
09/10/25 20:27:54
いきなりタブ・インデントは8文字とか書いてあるけど……

489:デフォルトの名無しさん
09/10/25 20:35:52
これか。

URLリンク(lxr.linux.no)

490:デフォルトの名無しさん
09/10/25 20:41:17
基本Appleのサンプルコードを真似する形で。

491:デフォルトの名無しさん
09/10/26 04:47:35
ここで質問すべき事なのかよく分からないのですが、
Macのシステム終了、再起動、をするプログラムを作ろうと思ってます。
で、実装についてなんですが、よく分からないのでsystem関数で
再起動、システム終了のコマンドでも送ってみようかと思います。
shutdown -h now
ですね!でもこれってrootじゃないアカウントからでも効くんでしょうか?
あと、保存していないファイルとかは保存されないまま強制終了しちゃうのでしょうか?

492:491
09/10/26 04:51:26
自分で試す気は無いのでよろしくお願いします。

493:デフォルトの名無しさん
09/10/26 06:39:57
>>492
自分で試せヴォケ

494:デフォルトの名無しさん
09/10/26 06:57:41
>>491
rootじゃなくてもだいじょうぶ

495:デフォルトの名無しさん
09/10/26 10:10:03
>>491
ここで質問すべきことじゃないですが、shutdown -h now だと
かなり強制的に終了するのでよくないです。ファイル保存しますか?
とかのダイアログも出ません。Apple おすすめの方法は
URLリンク(developer.apple.com)
です。

496:デフォルトの名無しさん
09/10/27 07:55:44
既出かもしれんが、
foo.cppにあるint exec()って関数をbar.mのmain()から呼び出すのってなんか宣言必要なの?
ldでexec()のシンボルが見つからないと言われる・・・

497:デフォルトの名無しさん
09/10/27 09:28:44
>>496
foo.cpp 側で extern "C" しとかんと Obj-C からは呼べないだろ、JK

498:デフォルトの名無しさん
09/10/27 21:55:28
>>497
Thx。やってたんだが、どうやらヘッダーファイルで宣言してたのがダメだったらしく、cppファイルに直接externしたら動いた。感謝。

原因まではおってないが‥

499:デフォルトの名無しさん
09/10/29 13:23:39
メインスレッドから実行したスレッドAの処理が終わるまで
メインスレッドを待機させるにはどう書けば良いのでしょうか。

500:491
09/10/29 13:33:31
[self performSelectorOnMainThread:<#(SEL)aSelector#> withObject:<#(id)arg#> waitUntilDone:<#(BOOL)wait#>];

じゃねーの。

501:デフォルトの名無しさん
09/10/29 13:34:15
名前消し忘れてたヨ

502:499
09/10/29 13:36:38
やっぱりperformSelectorOnMainThread使わないといけないんですね。
あまりメソッド増やしたくなかっただけなんですが、どうもです。

503:デフォルトの名無しさん
09/10/29 13:54:21
>>502
「使わないといけない」わけじゃねーよ。
>>500は 物知らずでも使える一番簡単な方法を提示してくれただけだろ。
文句あるなら pthread の関数とか NSCondition でも使ってろ

504:デフォルトの名無しさん
09/11/08 15:04:31
 簡単なxmlを解析するクラスを作ってます。char型のメンバ変数を持たせたいと思ったのですが、うまくいきません。
@interface SimpleXml : NSOperation {
const char *elementName;
}
オブジェクトの初期化のところで
- (id)initWithRequest: (NSURLRequest*)request name: (NSString *)name
{
self = [super init];
if (self) {
elementName = [name UTF8String];
}
return self;
}
こんな風にしてみた。代入直後でNSLogするとちゃんと代入されてるのですが、実際に使いたいメソッドの中では文字化け?のようなおかしなデータになってます。
比較対象がchar*なので最終的にはchar*が欲しいです。メンバ変数をNSStringにして比較するところでUTF8Stringで変換して比較するとうまくいきます。
ただ、xmlの要素分繰り返し呼ばれる部分なので、毎回UTF8Stringを呼び出すくらいならcharで持たせちゃえと思いました。
それほどおかしなことはしてないつもりなのですが、やっぱりポインタの理解が足りてない感じでしょうか?アドバイスお願いします。

505:デフォルトの名無しさん
09/11/08 16:40:23
>>504
-[NSString UTF8String] のドキュメントを読みなさい。
ちゃんと注意が書いてあります。

506:デフォルトの名無しさん
09/11/08 22:17:39
>>504
NSXMLDocument つかえば?

507:504
09/11/09 02:02:48
>>505
ありがとうございます。
もとのNSStringがreleaseされた時点でfreeされちゃうんですね。
うまくできました。

ドキュメントよく読みます。

508:デフォルトの名無しさん
09/11/09 20:32:01
iPhoneの開発で初めてObjective-Cを使ったが、良いねこれ。
最初はメソッド呼び出しの[]がきめぇwwwwって感じだったんだが、
デフォでリフレクションできるのは良い。
C++よりこっちが普及していれば自分のプログラマ人生も幸せだったのかもしれない、
と思う今日この頃。

509:デフォルトの名無しさん
09/11/10 13:06:25
リフレクションって何?

510:デフォルトの名無しさん
09/11/10 13:52:19
RTTIのすげぇやつ

511:508
09/11/10 15:25:49
つくづく思うのがC++のvirtualってナンセンス。
id型に何でもぶちこめるのもイイ。まさかCでこんな風に扱えるとはね。
メソッドのprivate/publicの定義ができなかったり不満もあるけど。

512:デフォルトの名無しさん
09/11/10 15:31:08
それ、Cやない、Objective-Cや

513:デフォルトの名無しさん
09/11/10 15:45:31
C拡張で、ってことでは。

514:デフォルトの名無しさん
09/11/10 16:06:01
virtualがナンセンスだなんて思ったことないわ

515:508
09/11/10 16:40:25
スクリプト言語になれると、基本、親のメソッドはなんでも置き換えられてあたりまえという考えに。
基本クラスが違ってもメソッドの名前と引数の型が一緒なら呼べてしまうのも何気にすごい。
それに甘えて使いまくると死ぬけど。

516:デフォルトの名無しさん
09/11/10 16:58:33
どれもが同じ実装だったら、何も楽しくないじゃん

517:デフォルトの名無しさん
09/11/10 19:21:36
既に C++ が存在しているって事は良い事だよね。
ああいうのが好きな人が楽しめる場所が別にあるから、
お互い邪魔せずに、こっちはこっちで自由にできる。
彼らはどう転んでも Smalltalk 風のオブジェクト指向を
消化できないだろうし、C++0x を見ていると、
対岸の火事で良かったなあと心から思う。

518:デフォルトの名無しさん
09/11/10 20:08:39
無理して語ってる感がすごい

519:デフォルトの名無しさん
09/11/10 20:14:35
ん、そうか?
前世紀から何度も繰り返し語られてる話だけどな。

520:デフォルトの名無しさん
09/11/10 20:17:29
C++のメソッドをCの関数ポインタみたいに実行時バインドしようとすると
virtualのダメさが際立つな。あれはナンセンスと思う
Qtのシグナルスロットとかみたいに言語外の飛び道具が必要になるし


521:デフォルトの名無しさん
09/11/10 20:18:48
いろんなことを混ぜ込めて、結局は何も言ってないみたいな

522:デフォルトの名無しさん
09/11/10 20:22:27
伝わる人に伝われば良いんだよ。別に説得するつもりも無いし。

523:デフォルトの名無しさん
09/11/10 20:26:00
いろんな言語使う人からすると実装の違いがおもしろいんだけどねえ
何か他の言語を否定しがちなのはもったいない感じがする

524:デフォルトの名無しさん
09/11/10 20:26:50
ObjC 一本槍な人間が居るとでも?

525:デフォルトの名無しさん
09/11/10 21:18:48
どんな言語にも欠点はあるし、多少叩かれてもカリカリしなくていいんじゃね

526:508
09/11/11 16:00:50
そもそもobjCってmac、iphone開発くらいにしか使わないし、
WEBプログラミングでrubyかPHPかjava、どれでやるかって話にはならないよね。
で、自分はC++に10年以上お世話になってるが、
歴3ヶ月のobjCのが言語として優れてる気がしている。
なにげに[nil method1]でぬるぽにならないのもいいな。

527:デフォルトの名無しさん
09/11/11 16:08:31
はいはい、もういいから。

528:デフォルトの名無しさん
09/11/11 17:47:21
冷たいな(´・ω・`)
ObjCスレなんだから、もっと激しく愛を語ってもいいじゃないか。

529:デフォルトの名無しさん
09/11/11 18:58:09
今更30年前に Smalltalk で実現されていたものについてだけ語られても反応に困る
.mm で boost:python と混ぜて使うのが最強ですよとかモダンな話をしようよ

530:デフォルトの名無しさん
09/11/11 19:30:20
じゃあ追加して欲しい言語仕様の話でも

531:デフォルトの名無しさん
09/11/11 22:00:46
[hoge method1] でマルチスレッドになりますか?

532:デフォルトの名無しさん
09/11/11 22:01:49
最近 object_getInstanceVariable とかを知って悶絶しそうな程展望が開いて小躍りしてます。

533:デフォルトの名無しさん
09/11/11 22:50:59
>>531
なりません


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5398日前に更新/248 KB
担当:undef