如何在[self dismissModalViewControllerAnimated:YES]之后上传uiviewcontroller;

时间:2011-11-06 14:01:44

标签: objective-c uiviewcontroller nsuserdefaults viewdidappear

我有一个uiviewcontroller,可以在NSUserDefault中保存一些NSString。当我以这种方式回去时

-(IBAction)goBack:(id)sender{
    [self dismissModalViewControllerAnimated:YES];
    [self viewWillAppear:YES];
}

到另一个必须使用NSUserDefault中保存的NSString的uiviewcontroller。 在viewWillApper中,它加载此nsstring。当我第一次正确加载数据时启动应用程序,如果我从另一个视图转回来没有。我该怎么办?

1 个答案:

答案 0 :(得分:0)

注册视图控制器,该视图控制器关注来自默认值的值,作为NSUserDefaultsDidChangeNotification的观察者。收到通知后,从默认值中获取值并使用它执行任何操作。

如果您只是呈现一个模式视图控制器,您在其中设置字符串,并且它是需要知道新值的父视图控制器,那么您可以在父视图控制器上拥有一个属性并将其设置为因为你的模态视图控制器被解雇了。

你假设的示例代码来自你的模态视图控制器 - 这对于呈现视图控制器没有影响(你在模态控制器上调用viewWillAppear,因为你解雇它,一个坏主意)和viewWillAppear是当它取消了模态视图控制器时,没有在视图控制器上调用它。

要在父视图控制器的标题中执行我的第二个建议:

@property (nonatomic,copy) NSString *stringFromDefaults;

在.m文件中:

@synthesize stringFromDefaults;

在viewWillAppear中,您当前获取值,请改为指定属性:

self.stringFromDefaults = [[NSUserDefaults standardUserDefaults] stringForKey:@"stringValue"];

从您的模态视图控制器:

-(IBAction)goBack:(id)sender
{
    [(ParentViewController*)self.parentViewController setStringFromDefaults:newStringValue];
    [self dismissModalViewControllerAnimated:YES];
}

其中newStringValue是您在默认情况下也存储的更新字符串值。