2010-12-25 8 views
0

私は、ユーザーがaddViewControllerから情報を追加できるようにするアプリケーションを作成しました。このアプリケーションは、rootViewControllerのUITableViewに表示されます。ユーザーがtableViewCellをタップすると、入力したユーザー情報に関するdetailViewControllerの詳細が表示されます。私が達成しようとしているのは、ユーザーがすでに投稿した情報を編集できるようにするeditViewControllerをセットアップすることです。デフォルトのアップデートdetailViewController

現在、ユーザーが以前に送信した情報でeditViewControllerを自動入力しようとしています(その後、情報の保存と更新を押すことができます)。しかし、私はこの自動入力を実行しようとしているつもりだと私はこれを達成するための最善のルートであるとは確信していません。

これは、detailViewControllerからeditViewControllerをロードするために呼び出される編集メソッドです。

-(IBAction)editDetails:(id)sender { 

editViewController *evc = [[editViewController alloc] initWithNibName:@"editViewController" bundle:nil]; 
rootViewController *rvc = [[rootViewController alloc] init]; 

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:evc]; 

    [[self navigationController] presentModalViewController:navigationController animated:YES]; 
///For Style 
NSInteger styleCount = [[rvc scoreTypeArray] count]; 

NSInteger styleRows = [rvc.scoreTypeArray objectAtIndex:indexPath.row]; ///HERE I GET AN ERROR MESSAGE SAYING THAT indexPath IS NOT DEFINED 

///For Date 
NSInteger count = [[rvc dateArray] count]; 
NSInteger rows = [[rvc indexPath] row]; ///AND HERE I GET A WARNING MESSAGE SAYING rootViewController MAY NOT RESPOND TO INDEX PATH, AND OF COURSE IT DOESN'T WORK 

[[evc dateField] setText:[NSString stringWithFormat:@"%@", [[evc dateArray] objectAtIndex:(count-1-rows)]]]; 


[[evc styleField] setText:[NSString stringWithFormat:@"%@", [[rvc scoresArray] objectAtIndex:(styleCount-1-styleRows)]]]; 

    [navigationController release]; 

[evc release]; 
[rvc release];} 

ここで、私はrootViewControllerで宣言された保存された配列から情報をロードしようとしています。

どのような考えですか?

答えて

0

編集ビューのプロパティをretainとしてから、値を編集します。元のオブジェクトへの参照と保持のみを保持します。テキストフィールドのsetTextは、文字列の新しいコピーを作成するだけです。 このアタッチを行う場合は、編集ビューで代理プロトコルを作成し、編集ビューを表示する現在のナビゲーションコントローラをyor編集ビューの代理人に設定することができます。そして編集ビューでは、彼が消散するときにデリゲートメソッドを呼び出します。

委任ドキュメントhere

宣言されたプロパティドキュメントhere

幸運。

0

も...

NSInteger styleRows = [rvc.scoreTypeArray objectAtIndex:indexPath.row]; 

あなたは、このメソッド内で定義されていないindexPath.rowにアクセスしようとしている、これは間違っています。 IndexPath.rowは通常、あなたがeditDetailsメソッドのパラメータとしてのtableViewのdelegatemethodsから値indexPath.rowを渡す必要があります

(tableView*)didSelectRowAt:(NSIndexPath*)indexPath 

ようにtableViewのメソッド内で使用されます。

いますが、実際にこれを必要といけない...代わりにこれを行う:あなたのルートのViewControllerのdidSelectRowAtIndexPath、ユーザーが行をタップすると、

で今、 detailViewControllereditViewController

NSString *dateObjectを作成し、@property(nonatomic,assign). のそれを作ります

[dvc setDateObject:self.dateArray objectAtindex:indexPath.row]; 

ここでdetailViewControllerには、dateObjectの元の日付への参照が含まれています。ここで行った変更は、rootViewControllerのdateArrayの日付も変更します。使用は編集ボタンをタップしたときに

だから、今、あなたは再びeditViewController元のDateオブジェクトに渡されました

-(IBAction)editDetails:(id)sender { 

    editViewController *evc = [[editViewController alloc] initWithNibName:@"editViewController" bundle:nil]; 

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:evc]; 
    [evc setDateObject:self.dateObject]; 
    [[self navigationController] presentModalViewController:navigationController animated:YES]; 

    [navigationController release]; 
    [evc release]; 

} 

を呼び出します。 viewDidLoadでtextFieldを設定し、ユーザーが編集してヒットしたら、editViewControllerのdateObjectを変更したdateObjectに置き換えます。これは、rootViewControllerから参照として渡された元のdateObjectです。 rootViewControllerのdateArrayにも置き換えられました。今度は、detailViewControllerからrootViewControllerに戻ったときを知り、[table reloadData]を実行するだけです。

tadan !!!

+0

ビルドすると、この警告が表示されます。物事は走りますが、何も見えなくなり、最終的にはクラッシュします。警告:「detailViewController」は「-setDataObject:objectAtindex: ' に応答しない可能性があります(一致するメソッドシグネチャのないメッセージは' id 'を返し、引数として' ... 'を受け入れると見なされます)。 – DrBeak1

+0

私はちょうどこれで幸運を持っていません。同じクラスで宣言されていない文字列から元の配列オブジェクトを追加および置換する方法を理解できません。私は更新するために文字列を取得することができます(私の理解は、各クラスはそれ自身の文字列を持っている)が、決して配列のオブジェクトに影響しません。あなたや誰かがこのことがもっとうまく説明できますか?ありがとう:) – DrBeak1

+0

さて、ヘッダーファイルにdateObjectという変数を定義していますか?とその関連プロパティ?プロパティを@property(非アトミック、代入)xxx dateObjectに設定する必要があります。 .mファイルに@synthesize dateObjectもあります。 –

関連する問題