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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ダイアログクラスのコントロー...
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
このコンパイルエラーの意味に...
-
MFC モードレスDlgについて
-
C#のクラス設計について教えて...
-
クラスのメンバになってくれま...
-
DLLからEXEのクラスを呼び出す...
-
質問です!とても基本的なこと...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
visual C++ の外部クラスからの...
-
VC++ 7.1 で メインウィンドウ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールでEnter...
-
【C++】相互参照
-
WindowsAPIのリストビューの...
-
C#で通常のbuttonコントロール...
-
OnInitDialog()の関数の組み込み方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
エディットコントロールでEnter...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
DebugクラスとTraceクラスの違い
-
MFCのCListCtrlでスクロールを検出
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
継承したクラスを、継承元のク...
-
OnInitDialog()の関数の組み込み方
-
ダイアログクラスのコントロー...
-
MessageBoxを継承したい
-
DataGridViewのセルに斜線を引...
-
このコンパイルエラーの意味に...
-
MFCアプリのコマンドラインでパ...
-
C#のクラス設計について教えて...
おすすめ情報