[SDK]iPhoneアプリ開発初心者質問箱23[touch][iPad]

このエントリーをはてなブックマークに追加
952945:2012/03/23(金) 18:19:38.10 ID:sTLOuIM20
>>949ご指摘ありがとうございます(^_^;)
そのretainCountは0になっても参照できますか?
953名称未設定:2012/03/23(金) 18:25:12.95 ID:YZVKLcn70
>>948
retainCount をチェックする必要はない。ってか、ARC 使うといいよ。

>>952
retainCount が 0 になったらそのオブジェクトはすでに死んでるから、
アクセスしてはいけない。当然 retainCount も取れない。

>>951
Dev Center からダウンロードしたやつはディスクイメージの中の Xcode を
自分でアプリケーションフォルダにドラッグコピーして使うんだと思うけど、
古いやつをどうするかとかドキュメントがないからよく分からない。

Xcode 4.3 以降は、複数バージョン使い分けるとか考慮してないみたいだし、
Mac App Store からダウンロードしないと差分アップデートの対象にならない
みたいだから、自分は Xcode 4.3.2 から Mac App Store に切り替えたよ。
954名称未設定:2012/03/23(金) 18:27:42.38 ID:nDp21DN00
>>924
なるほど、別ファイルですか!
他のファイルに書いといてそこだけincludeするのを思いつきました!

ありがとうございます!
955945:2012/03/23(金) 18:37:57.46 ID:sTLOuIM20
>>953ありがとうございます!
ちょっとスッキリしました(^_^)
じゃあ、本当は[super dealloc ];する前に、retainCountが0で参照出来なくならないといけないんですかね?
[super dealloc];が何をやっているのかはわかりませんが、少なくとも[super dealloc]以降も参照できるものは、リークしているんですよね(^_^;)?
956名称未設定:2012/03/23(金) 18:42:45.49 ID:WPq3Vw1n0
正規表現始めたいのですけどcで正規表現出来ればNSRegularExpressionも使いこなせますかね?
957951:2012/03/23(金) 18:45:44.65 ID:lUcu4Pxi0
>>953
ありがとうございます。
私もAppStoreからやってみます。
958名称未設定:2012/03/23(金) 19:36:06.62 ID:YZVKLcn70
>>954
#include (#import) したら同じ翻訳単位になるから、意味ないよ。

>>955
dealloc の書き方わかってる?

- (void)dealloc
{
  [player release];
  [playerItem release];
  [playerView release];
  [super dealloc];
}

・release したら player や playerItem などに触ってはいけない。
 (release した player などの retainCount が 0 になるとは限らないけど、
  release するってことは、「自分はもうそれには触りません」ってことだよ。)

・[super dealloc]; は最後に書く。その後は何もしちゃ駄目。

>>956
もちろん。
959名称未設定:2012/03/23(金) 19:51:41.60 ID:JBgDeykb0
質問です。
iOS5から標準で搭載されているリマインダーへのアクセスって出来ますか?
アプリからリマインダーを追加したり、内容を参照したりしたいのです。
960名称未設定:2012/03/23(金) 20:12:29.65 ID:WPq3Vw1n0
>>958
どーもですどーもです
961945:2012/03/23(金) 20:37:21.76 ID:sTLOuIM20
>>958ありがとうございます。確かにいままで解っているつもりだったのかもしれません。(^_^;)
同じprayerItemにプロパティから参照したりしなかったりするのは何故?
ってところが気になって、それによってretainCountも変わる事に気がついて、
もしかして、prayerItem沢山読んでるけど、呼び方によっちゃdeallocでreleaseしても開放されないんじゃ!?
って一日あれこれやってました。
取りあえずガイドどうりに呼んで開放されたかどうかは気にしない事にします!
またARCも検討しようと思います。
962名称未設定:2012/03/24(土) 00:45:23.36 ID:heUOPfxX0
ARCはホント便利。コードはすっきりするし、余計な心配しなくていい。
963名称未設定:2012/03/24(土) 01:34:46.36 ID:sVH8X1OI0
そのARCについてなのですが、
NSString *str = @"a";
str = @"b";
str = @"c";
のように再代入を続けるとオブジェクト@"a"や@"b"がメモリに残り続けますか?
代入する前にnilを代入してやって
NSString *str = @"a";
str = nil;
str = @"b";
str = nil;
str = @"c";
とやらないとまずいのでしょうか。
また、大量のNSStringインスタンスをを結合するときに、
stringByAppending:・・・を使って結合を続けていると途中でエラーになってしまうのですが、
その場合NSMutableStringを用意してからappendString:を使わないとダメなのでしょうか。
また、a = [a stringByAppendingString:b];とやってaにbを加えた新しいNSStringインスタンスが生成されてaから新たに参照されると思いますが、
このとき不要になった元のa(結合前にaから参照されていたインスタンス)もメモリに残り続けているということでしょうか。
964名称未設定:2012/03/24(土) 01:44:30.17 ID:leYaoqfu0
メーラーの本文などで使われている、テキストと絵文字が混ざった文書をユーザーが作成できるようにするのは、UITextViewで出来ますか?

機種依存絵文字などは変換でいけると思うんですが、WebViewかと思って調べたのですがそれでも実装ができなくて・・。
965名称未設定:2012/03/24(土) 02:26:46.61 ID:BlfAOBXb0
>>963
代入すれば元の値は release されるから、わざわざ nil を代入する必要はない。
stringByAppending: でエラーになるとしたら autorelease pool に溜まりすぎかな。
大量に結合するなら NSMutableString の appendString: を使った方が効率がいい。
a = [a stringByAppendingString:b]; の場合も古い a はそのうち消える。

ってか、こうやって個別に質問を続けるつもり? ちゃんと基本を理解してくれよ。

>>964
iOS 標準の絵文字キーボードで入力できるやつとかはあくまで「文字」だから、
UITextView で普通に扱える筈。WebView とか難しく考え過ぎじゃない?
966名称未設定:2012/03/24(土) 02:36:07.75 ID:0wMyx0cJ0
未だにナビゲーションでビューを行き来するのにviewDidLoadでallocしてしまう。。
967名称未設定:2012/03/24(土) 04:54:08.10 ID:wbLEyE7J0
UIimageに
CGAffineTransformMakeRotation(M_PI * 300.0f / 180.0f)で回転させると
画像が引き延ばされてしまいます。
CGAffineTransformMakeRotation(M_PI * 270.0f / 180.0f)だと
画像は引き延ばされないのですが・・・
不思議です。どなたか原因が分かる方いますか?
968名称未設定:2012/03/24(土) 05:20:00.44 ID:leYaoqfu0
>>965 画像イメージを絵文字のようにテキストと混ぜて扱いたいんです。

iPhoneの絵文字とかの機種依存の絵文字の取り扱いは見つけれたけど違った。
って書きたかったんですけどうまく伝えれなくてすみません。
969名称未設定:2012/03/24(土) 08:01:05.20 ID:sVH8X1OI0
>>965
ありがとうございます。
autoreleasepoolがよく分かってないまま使ってました。
レファレンスカウンタについてちゃんと調べてみます。。。
970白井 ◆kuroko/Ufo :2012/03/24(土) 08:23:21.73 ID:AHF16m3o0
>>913
俺、どうしたら良いの?まで読んだ
971名称未設定:2012/03/24(土) 08:43:10.81 ID:k/ne3PK90
>>968

>テキストと絵文字が混ざった文書をユーザーが作成できるようにする

>画像イメージを絵文字のようにテキストと混ぜて扱いたい

全然意味が違うよね。
972名称未設定:2012/03/24(土) 09:22:40.40 ID:+Vvu7hoL0
popoverファイルにdatepickerとtoolbarとそのボタンを表示させたいのですが、
datepickerとtoolbarは表示出来ても、ボタンが表示できません。
UIViewに◯◯は入れれないといいようなエラーが出ます。
datepickerの上のtoolbarにボタンを配置させるには、どこを変えればいいでしょうか?

UIBarButtonItem *sendButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Send", nil) style:UIBarButtonItemStyleBordered target:self action:@selector(send:)];

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

toolBar = [[UIToolbar alloc] init];
toolBar.barStyle = UIBarStyleBlackTranslucent;
toolBar.backgroundColor = [UIColor clearColor];
toolBar.autoresizingMask = UIViewAutoresizingFlexibleHeight;
UIBarButtonItem *toolbarBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolBar];
[toolBar release];

toolBar.items = [NSArray arrayWithObjects:space, sendButton, nil];
[space release];

[sendButton release];

self.navigationItem.rightBarButtonItem = toolbarBarButtonItem;
[toolbarBarButtonItem release];
[self.view addSubview:toolBar];
973名称未設定:2012/03/24(土) 09:26:28.80 ID:+Vvu7hoL0
>>972はtoolbarの部分です。上にdatepickerのコードが書かれています。
popover用の宣言ファイルと実装ファイルを用意してあります。
974名称未設定:2012/03/24(土) 09:26:55.30 ID:+Vvu7hoL0
>>970
もう解決しています。
975名称未設定:2012/03/24(土) 09:27:29.78 ID:+Vvu7hoL0
>>972
>[self.view addSubview:toolBar];
最後のこの行を変えればいいのでしょうか?
976名称未設定:2012/03/24(土) 09:31:34.16 ID:+Vvu7hoL0
>>972
訂正ですが、
このコードだと
datepickerしか表示されませんでした。
両方同時に表示させるにはどうすればいいでしょうか?
977名称未設定:2012/03/24(土) 09:47:16.40 ID:k/ne3PK90

>UIBarButtonItem *toolbarBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolBar];

ツールバーをツールバーボタンの中に入れたいんだね!

978名称未設定:2012/03/24(土) 10:14:58.71 ID:+Vvu7hoL0
>>972はちょっと変わったやりかたでした。
979名称未設定:2012/03/24(土) 10:18:30.77 ID:+Vvu7hoL0
>>977
訂正後はこうです。
ボタンが入ったツールバーとデイトピッカーを同時に表示させたいのですが、
どこを改変すればいいでしょうか?

// toolbarの表示をONにする
[self.navigationController setToolbarHidden:NO animated:NO];
// toolbarを黒色にする
self.navigationController.toolbar.tintColor = [UIColor blackColor];
// スペーサを生成する
UIBarButtonItem *spacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil];
// ボタン「Hoge」を生成する
UIBarButtonItem *button = [[UIBarButtonItem alloc]
initWithTitle:@"Hoge" style:UIBarButtonItemStyleBordered
target:self action:@selector(hoge)];
980名称未設定:2012/03/24(土) 10:18:59.41 ID:+Vvu7hoL0
// ラベル「(・ω・)」を生成する
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,30)];
lbl.backgroundColor = [UIColor clearColor];
lbl.textColor = [UIColor yellowColor];
lbl.text = @"(・ω・)";
UIBarButtonItem *lblbtn = [[UIBarButtonItem alloc] initWithCustomView:lbl];
lblbtn.width = 100.0;
// toolbarにボタンとラベルをセットする
NSArray *items =
[NSArray arrayWithObjects:spacer, button, spacer, lblbtn, spacer, nil];
self.toolbarItems = items;
toolBar = [[UIToolbar alloc]init];
toolBar.barStyle = UIBarStyleBlackTranslucent;
[toolBar setFrame:CGRectMake(0, 0, self.view.bounds.size.width, 40)];
[self.view addSubview:toolBar];
[toolBar release];
981名称未設定:2012/03/24(土) 10:20:19.89 ID:+Vvu7hoL0
ラベルは出ました。
982名称未設定:2012/03/24(土) 10:21:36.32 ID:k/ne3PK90
何を聞きたいのか整理してから書き込めよ
983名称未設定:2012/03/24(土) 10:26:09.22 ID:+Vvu7hoL0
popoverファイルにdatepickerとtoolbarとそのボタンを表示させたいのですが、
datepickerとtoolbarは表示出来ても、ボタンが表示できません。
UIViewにNSArrayは入れられないというようなエラーが出ます。
datepickerの上のtoolbarにボタンを配置させるには、どこを変えればいいでしょうか?
984名称未設定:2012/03/24(土) 10:33:58.02 ID:k/ne3PK90
「というようなエラー」
じゃなくて、具体的に書け。
985名称未設定:2012/03/24(土) 10:38:57.84 ID:k/ne3PK90
>>980
ビューコントローラの上側にボタンを追加したいのなら、ボタン追加の場所はナビゲーションバー。
ビューコントローラの下側にボタンを追加したいのなら、ボタン追加の場所はツールバー。

上にツールバーを追加するのはイレギュラー。

>toolBar = [[UIToolbar alloc]init];
>toolBar.barStyle = UIBarStyleBlackTranslucent;
>[toolBar setFrame:CGRectMake(0, 0, self.view.bounds.size.width, 40)];
>[self.view addSubview:toolBar];
>[toolBar release];

この行全部不要。
986名称未設定:2012/03/24(土) 10:39:19.91 ID:+Vvu7hoL0
>>984
「Incompatible pointer types sending 'UIBarButtonItem *' to paramater of type'UIView*'」
です。
987名称未設定:2012/03/24(土) 10:40:29.29 ID:+Vvu7hoL0
>>985
ありがとうございます!
早速やってみます!!
すぐあとでまた来ます!!
988名称未設定:2012/03/24(土) 10:44:33.85 ID:k/ne3PK90
>>986
UIView に UIBarButtonItem をaddSubviewしてるんじゃないか?
989名称未設定:2012/03/24(土) 10:54:20.70 ID:+Vvu7hoL0
>>988
はい。してます。階層が違うからエラーが出るんですよね。
ポップオーバーで表示させるので、Viewに追加したいのですが。
何か別の方法でも、うまく表示されて機能出来ればそれでいいです。
m(_ _)m どうかご教示お願いします!
990名称未設定:2012/03/24(土) 11:00:49.38 ID:k/ne3PK90
>>989
UIView に UIBarButtonItem をaddSubview ←これは原理的に不可能だからエラーが出るんだよ。
階層なんて関係ないよ。

ツールバーを使った簡単なサンプルを読んでちゃんと勉強しろよ
991名称未設定:2012/03/24(土) 11:20:02.69 ID:BlfAOBXb0
次スレ、なんか気が進まないけど、一応立てといた。
http://anago.2ch.net/test/read.cgi/mac/1332555504/l50
992名称未設定:2012/03/24(土) 11:22:43.99 ID:+Vvu7hoL0
>>991
お疲れ様です。
993名称未設定:2012/03/24(土) 11:34:15.76 ID:mrYDIG1p0
>>987
もう来るなよ
お前専用のスレになってるぞ
994名称未設定:2012/03/24(土) 11:45:01.85 ID:sVH8X1OI0
もう一点質問させてくだい。
アプリをシミュレータで走らせると、アクティビティモニタで確認すると一気にメモリを1.3GBくらい食うのですが、これは実機で動かそうとしてもメモリ足りないですよね?
テーブルビューに100個くらいセルを作り、ラベルなどをアッドサブビューしているのですが、表示領域外の部分は解放しておいて
スクロールに応じて適宜セルを生成・解放・配置するなど工夫しないとダメでしょうか。
995名称未設定:2012/03/24(土) 11:45:58.54 ID:+Vvu7hoL0
>>990
よさそうなサンプルコード見つけたので、
これで頑張ってみます!!
みなさんありがとうございました!!
996名称未設定:2012/03/24(土) 12:30:49.81 ID:BlfAOBXb0
>>994
まさに「スクロールに応じて適宜セルを生成」および再利用するための仕組みが
もともと UITableViewController には備わってる訳だが、ちゃんと使ってる?

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"Cell"];  // 再利用できるセルがあれば、それを使う。
  if (cell == nil) {  // ない場合だけ、新規生成。
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@"Cell"];
    // addSubview: とかはここでする。
    // 再利用のことを考慮して、tag などを設定しておくといい。
  }
  // ここで、セルの表示内容を設定。
  // 再利用の場合、プロパティに古い値が残ってるので、きちんと設定し直すこと。
  return cell;
}

ってパターンに従って書けば、スクロールして画面の外に出たセルは再利用されるよ。
997名称未設定:2012/03/24(土) 13:09:51.52 ID:8lheS+el0
新スレ気違いが湧いてるけど。
998名称未設定:2012/03/24(土) 13:37:57.39 ID:oHGYs3jyi
急にあったかくなったからね
999名称未設定:2012/03/24(土) 13:43:43.22 ID:sVH8X1OI0
>>996
ありがとうございます。
UITableViewControllerで制御するんですね。
UITableViewしか使ってませんでした・・・。調べてみます。
1000名称未設定:2012/03/24(土) 13:51:58.00 ID:BlfAOBXb0
埋め。

いくら春休みとはいえ、UITableViewController 知らないとか…。
お願いだからまともな本とドキュメント読んで欲しいよ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。