2

質問全体を編集しました

次の状況でModelViewControllerを表示することと、モーダルViewControllerを閉じることの違いは何ですか?

  1. HomeView
  2. TableItemSelectionビュー
  3. PickerView

HomeViewで、viewWillAppearTableViewから設定されたNSUserDefaultから値をフェッチする コードを記述しています。以下は、viewDidLoad(初期値用)とviewWillAppear(テーブルビューからの新しい値の場合)のコードです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    actionMinutes = @"0";
    actionSeconds = @"0";
    restMinutes = @"0";
    restSeconds = @"0";
}

- (void) viewWillAppear:(BOOL)animated
{
    actionMin = [actionMinutes intValue];
    actionSec = [actionSeconds intValue];
    restMin = [restMinutes intValue];
    restSec = [restSeconds intValue];
    NSLog(@"acMin:%d acSec:%d reMin:%d reSec:%d",actionMin,actionSec,restMin,restSec);
}

TableItemSelectionビュー で、HomeViewからこのビューを表示しています。次に、テーブルのdidSelectRowAtIndexメソッドに基づいてHomeViewでNSStringの値を設定します。値の設定に使用NSUserDefaultしています。そして、Done Button touchで、HomeViewを表示しています。(実際には、dismissModalViewControllerを実行する必要があります)しかし、dismissを使用すると、HomeViewのNSStringで値を取得できません。PickerViewからテーブルの値を取得しています。(私はそれをするように指示されています)。以下は、DONEボタンタッチでのテーブルビューのコードです

HomeView *homeView = [[HomeView alloc] init];
[homeView.view setBackgroundColor:[UIColor clearColor]];
[homeView.view setFrame:CGRectMake(0 ,40, 320, 460)];
homeView.actionMinutes = [[NSUserDefaults standardUserDefaults] valueForKey:@"actionMinute"];
homeView.actionSeconds = [[NSUserDefaults standardUserDefaults] valueForKey:@"actionSecond"];
homeView.restMinutes = [[NSUserDefaults standardUserDefaults] valueForKey:@"restMinute"];
homeView.restSeconds = [[NSUserDefaults standardUserDefaults] valueForKey:@"restSecond"];
homeView.song = [[NSUserDefaults standardUserDefaults] valueForKey:@"songstring"];
NSLog(@"%@",homeView.actionMinutes);
[self presentModalViewController:homeView animated:YES];

//[self dismissModalViewControllerAnimated:YES];    // if this method is used then no values are passed to HomeView

[homeView release];

PickerViewで、pickerviewから値を取得し、それ をUserDefaultに保存しています。以下はpickerviewの私のコードです

NSUserDefaults *actionTime = [NSUserDefaults standardUserDefaults];
[actionTime setValue:min forKey:@"actionMinute"];
[actionTime setValue:sec forKey:@"actionSecond"];

では、ModelViewを閉じたときにUserDefault値を取得できないのはなぜですか?毎回新しいビューを表示すると、ビューのスタックが作成されますか?

4

3 に答える 3

1

@DShah: はい、間違いなく..!!

すべてのモーダル ビューを閉じる必要があります。

また、使用しているコードを投稿してください。

また、最初に NSUserDefaults 行 (NSString 値を NSUserDefaults に割り当てるために使用する行) を配置し、次に行を where in you に配置する必要があることに注意してくださいdismissModalViewControllerAnimated:

さらにヘルプが必要な場合は、コメントを残してください。

これがお役に立てば幸いです。

于 2011-09-02T04:13:10.977 に答える
0

これが私の問題を解決できる最終的な答えです

完了ボタンのタッチイベントのコードは次のとおりです...

- (IBAction) btnDonePressed:(id)sender {
    aurioTouchAppDelegate *appDelegate = (aurioTouchAppDelegate *) [[UIApplication sharedApplication] delegate];

    appDelegate.homeView.actionMinutes = [[NSUserDefaults standardUserDefaults] valueForKey:@"actionMinute"];
    appDelegate.homeView.actionSeconds = [[NSUserDefaults standardUserDefaults] valueForKey:@"actionSecond"];
    appDelegate.homeView.restMinutes = [[NSUserDefaults standardUserDefaults] valueForKey:@"restMinute"];
    appDelegate.homeView.restSeconds = [[NSUserDefaults standardUserDefaults] valueForKey:@"restSecond"];     
//    [self presentModalViewController:homeView animated:YES];
    [self dismissModalViewControllerAnimated:YES];    // if this method is used then no values are passed to HomeView
}
于 2011-09-09T08:41:16.490 に答える
0

NSUserDefaults整数値を格納しようとしていると思います。

の代わりにsetInteger:forKey:を使用しsetObject:forKey:ます。整数はオブジェクトではなく、プリミティブ型です。

それを取得するには、integerForKey:を使用します。

于 2011-09-02T05:44:26.290 に答える