No.2ベストアンサー
- 回答日時:
> RootViewControllerの実装ファイルのcellForRowAtIndexPathに
「- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath」の書き間違いですか?
こちらでNavigation Basedのサンプルプロジェクトを作って、私が説明したコードを記述して動かしてみたところ、なにもエラーは出ず、ちゃんと期待どおりの結果が出ました。
私の説明の中で書いたコードは、それらですべてではなく、必要だけど記述していないコードが多数あることは、ご理解ください。おそらくなにかコードが不足しているだとか、記述間違いがあるとかが、あるのではないでしょうか?
とくに、「#import」の無限連鎖には注意してください。クラス「ClassA」のヘッダファイルに、「#import "ClassB.h"」と記述し、クラス「ClassB」のヘッダファイルに「#import "ClassA.h"」と記述すると、ヘッダファイルを永遠にインポートし続ける無限連鎖が発生します。ご存じかもしれませんが、ねんのため説明しておきます。この無限連鎖を防止するには、ヘッダファイル(~.h)ではなく実装ファイル(~.m)に#imoortを記述する、あるいは#importではなく、前方宣言(@class ~)を使うという方法があります。
※UIViewControllerのサブクラス名に「NextView」とつけるのは、感心できません。ViewとView Controllerの区別をちゃんと付けていないと、あとで痛い目に遭うのはプログラマ自身です。こういう区別をあやふやにする傾向は、あなた以外の人にもあって、おそらく長々しいクラス名を打ち込むのがめんどうという気持ちが、だれにも働くからだと思われます。しかしXcodeには自動入力補完の機能があり、長いクラス名もたいして苦痛にはなりませんので、ちゃんとそのクラスの機能に合わせた命名をこころがけましょう。
No.1
- 回答日時:
> detailViewController.子の変数名 = 送りたい値;
じつはこれが重要なヒントになっています。
「子の変数名」を、親ビューコントローラのインスタンス名にすると、どうでしょう?
「detailViewController」のクラス名を仮に「DetailViewController」とすると、DetailViewControllerのヘッダファイルの、プロパティ宣言で、
@property (nonatomic, retain) id myParent;
とでもしておきます。
親ビューコントローラのクラス名を仮に「RootViewController」とし、その中でdetailViewControllerを生成する箇所で、直後に、
detailViewController.myParent = self;
と記述することで、子から親のインスタンスを取得することができます。
子から親に渡したいデータが、仮にNSString *型だとしたら、RootViewControllerの持つプロパティとして、
@property (nonatomic, retain) NSString *birthdayPresent;
とでも宣言しておきます。
DetailViewControllerの実装部の中で、親にデータを渡すコードはこう書きます。
RootViewController *controller = (RootViewController *)self.myParent;
controller.birthdayPresent = @"Happy birthday!";
これでデータが渡せます。
なおこの手法をより緻密に組み立てたものが、Objective-Cの機構のひとつであるDelegateです。
蛇足ですが、親子の関係であれば、互いのインスタンスが開放されていないことが保証されますが、兄弟関係の場合は保証されない(開放されているかもしれない)ので、兄弟の間でのデータ渡しはするべきではありません。
この回答への補足
ありがとうございます 教えていただいた内容を自分なりに解釈してテストしてみました
親:RootViewController 子:NextView
NextView のヘッダファイルに @property (nonatomic, retain) id myParent; を宣言
RootViewControllerのヘッダファイルに
@interface RootViewController : UITableViewController {
NSString *birthdayPresent; //こんな感じで
}
@property (nonatomic, retain) NSString *birthdayPresent; //記述
@end
RootViewControllerの実装ファイルのcellForRowAtIndexPathに
NextView *detailViewController = [[NextView alloc] initWithNibName:@"NextView" bundle:nil];
detailViewController.myParent = self; //ここに記述
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
とこの時点で実行するとアプリが落ちてしまいました....
detailViewController.myParent = self; をコメントアウトすると落ちなくなったので、おそらくこの記述が
間違っているのだと思いますが わかりませんでした
子でIDを作って、それの受け入れ先は自分だと親ファイルで宣言してプロパティを公開した値をやりとりする
みたいなイメージなんですが、間違ってますでしょうか?
ちなみにiosSDKは4.3 xcodeは3.2.6です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- HTML・CSS htmlで画面遷移させたい 1 2022/10/28 18:19
- Android(アンドロイド) Androidスマホのデータ移行が終わらない 1 2023/08/04 17:25
- その他(ソフトウェア) ダウンロードしたファイルの「種類」が「Windowsmediaplayer」に変わってしまい、開くこ 2 2023/07/03 21:45
- 訴訟・裁判 妻が子供を虐待しているときのやり取りや、別日での虐待の証言をこっそり録音しました。 この度、離婚する 3 2022/06/24 16:47
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- ドライブ・ストレージ Seagateの保証について 3 2023/07/27 19:55
- ドライブ・ストレージ USBメモリの転送速度が異常に遅い... 5 2022/05/03 17:49
- 会社・職場 私はせっかちでしょうか? 仕事で取引先に渡す為の上司にしか作れないデータを上司に依頼しているのですが 2 2022/08/19 05:52
- その他(パソコン・スマホ・電化製品) スマホの本体に保存されてる写真をSDカードに移動したいのですが上手くできません。 AQUOS SH- 2 2022/08/14 22:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログクラスのコントロー...
-
ウィンドウの背景に画像を配置する
-
既定のコンストラクタがない?
-
【C++】vectorについて
-
VC++ リストボックスにデータを...
-
MFCアプリのコマンドラインでパ...
-
VB.NETでのEnumの使用について
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
C++ protectedにアクセス不可
-
派生クラスから基本クラスprote...
-
C#で、動的にサブクラスを取得...
-
System.Net.HttpWebRequest、も...
-
Visual C++ 6.0 でクラス表示が...
-
クラスのアドレスを引数として...
-
vba sendKeysを送る相手のソフ...
-
MFCのドラッグ&ドロップについて
-
Delphi6でVB.NETで作成のDLL呼出
-
C++では構造体がメンバ関数をも...
-
継承を重ねた場合のコストはど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
MFCアプリのコマンドラインでパ...
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
【ASP.NET】 独自で作成したク...
-
派生クラスから基本クラスprote...
-
ダイアログクラスのコントロー...
-
C#で通常のbuttonコントロール...
おすすめ情報