2

プッシュ スタイルの UITable ビュー コントローラー リンクが 2 つあります。1 つ目は静的なテーブル ビューで、タップするとスタイルが詳細に設定されます。値を編​​集するために、詳細から 2 番目の UITable ビュー コントローラーにデータを渡します。一度編集を終了します。戻るボタンをタブで押すと、値が最初の UITable ビュー コントローラーに戻されます。

最初のテーブルビューコントローラーをタップするときにこれを使用しています

 NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:myString forKey:@"amount"];
[myDefaults synchronize];

2番目のUItableビューコントローラーの (void)viewdidload から取得します

NSString *recoveredString = [[NSUserDefaults standardUserDefaults] objectForKey:@"amount"];

しかし、最初のテーブル ビューに戻ると機能しません。2 番目のテーブル ビューから渡された新しい値では更新されません。

2 つのテーブル ビュー間でデータを渡す正しい方法を使用していますか? 間違っている場合、あなたの提案は何ですか?

4

2 に答える 2

0

デリゲートを使用して、値がナビゲーション コントローラー経由でプッシュされたか、モーダルに表示されたかに関係なく、ビュー コントローラーから値を返す必要があります。何かのようなもの:

MyEditController.h:

@class MyEditController;

@protocol MyEditControllerDelegate <NSObject>

@optional
- (void)myEditController:(MyEditController *)myEditController
            updatedThing:(Thing *)thing;
- (void)myEditController:(MyEditController *)myEditController
            deletedThing:(Thing *)thing;
@end

@interface MyEditController : UITableViewController
{
    id<MyEditControllerDelegate> _delegate;
    Thing *_thing;
    ...
}

@property (assign, nonatomic, readwrite) id<MyEditControllerDelegate> delegate;
@property (retain, nonatomic, readwrite) Thing *thing;
...

@end

MyEditController.m:

...

- (void)updateThing
{
    ...
    if ([_delegate respondsToSelector:@selector(myEditController:updatedThing:)])
    {
        [_delegate myEditController:self updatedThing:self.thing];
    }
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)deleteThing
{
    ...
    if ([_delegate respondsToSelector:@selector(myEditController:deletedThing:)])
    {
        [_delegate myEditController:self deletedThing:self.thing];
    }
    [self.navigationController popViewControllerAnimated:YES];
}

...
@end

View Controllerで次のことを行います。

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     MyEditController *myEditController = [[[MyEditController alloc] initWithNibName:@"EditView" bundle:nil] autorelease];
     myEditController.delegate = self;
     myEditController.thing = [self.thingList objectAtIndex:[indexPath row]];
     [self.navigationController pushViewController:myEditController animated:YES];
}
- (void)myEditController:(MyEditController *)myEditController
            updatedThing:(Thing *)thing
{
    // Update thing in self.thingList
    // Reload table view row
}

- (void)myEditController:(MyEditController *)myEditController
            deletedThing:(Thing *)thing
{
    // Delete thing from self.thingList
    // Delete table view row
}
于 2012-08-20T13:17:48.990 に答える
0

個人的には、通知を使用してデータをプッシュします。私がしているのは、両方の UITableView がアクセスできる共有シングルトン クラスを作成することです。次に、1 つの UITableView が他のビューに通知を送信して、シングルトン クラスから読み取るように指示できます。私はいつもそれを行う他の方法を聞くのが好きです。

于 2012-08-20T12:44:50.620 に答える