我们是否总是需要解雇我们提供的ModelModelViewController?

时间:2011-09-01 16:06:56

标签: iphone objective-c nsuserdefaults presentmodalviewcontroller dismiss

我编辑了整个问题

在以下情况下呈现ModelView控制器和解除模态视图控制器之间的区别是什么?

  1. HomeView
  2. TableItemSelection View
  3. PickerView
  4. HomeView 中 我在viewWillAppear中编写代码以从TableView中设置NSUserDefault中获取值。下面是我的viewDidLoad(初始值)和viewWillAppear(来自tableview的新值)的代码

    - (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呈现此视图。现在我想根据Table的didSelectRowAtIndex方法在HomeView中设置NSString的值。我正在使用NSUserDefault来设置值。 通过Done Button touch我正在呈现HomeView。 (实际上我必须解雇ModalViewController)但是当我使用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值。???每次呈现一个新视图会产生一堆视图???

3 个答案:

答案 0 :(得分:1)

@DShah:是的,绝对是.. !!

您需要关闭每个模态视图。

另请发布您正在使用的代码。

另请注意,您需要先放置NSUserDefaults行(您使用的行将NSString值指定给NSUserDefaults),然后将行放在dismissModalViewControllerAnimated:中。

如果您需要更多帮助,请给我留言。

希望这会对你有所帮助。

答案 1 :(得分:0)

我认为你试图在NSUserDefaults中存储整数值,然后你必须

使用setInteger:forKey:代替setObject:forKey:。整数不是对象,它是基本类型。

要检索它,请使用integerForKey:

答案 2 :(得分: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
}