从背景回来时,IBOutlets都是零

时间:2014-01-28 15:54:40

标签: ios objective-c background null iboutlet

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    NSString *storyName;
    if (isIPAD)
        storyName = @"Main_iPad";
    else
        storyName = @"Main";

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyName bundle:nil];
    RMViewController *controller = (RMViewController *)[storyboard instantiateInitialViewController];

    NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
    if (url != nil && [url isFileURL]) {
        [controller handleOpenURL:url];
    }

    return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    NSString *storyName;
    if (isIPAD)
        storyName = @"Main_iPad";
    else
        storyName = @"Main";

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyName bundle:nil];
    RMViewController *controller = (RMViewController *)[storyboard instantiateInitialViewController];
    if (url != nil && [url isFileURL]) {
        [controller handleOpenURL:url];
    }
    return YES;
}

这就是我在AppDelegate中所拥有的。这有助于我用新的方法覆盖旧的iPhone数据,如下所述:http://www.raywenderlich.com/1980/email-tutorial-for-ios-how-to-import-and-export-app-data-via-email-in-your-ios-app#comments

现在当我调用函数handleOpenURL数据保存得很好但是当我尝试根据新数据设置我的IBOutlets时,我的所有出口实际上都是零(用断点测试)。

我很困惑,因为我得到的新数据实际上是正确的,但当我尝试将其分配给IBOutlet(文本字段或标签)时,它没有响应。

我认为这与去背景有关,因为如果我杀了应用程序并稍后启动它,应用程序就会加载新数据。

任何帮助??

1 个答案:

答案 0 :(得分:2)

此:

RMViewController *controller = (RMViewController *)[storyboard instantiateInitialViewController];

创建一个全新的视图控制器,它根本不与应用UI相关联。它执行的基于数据的操作很可能运行良好,但无法更改应用程序UI。

您应该做的是在现有的UI设置中找到现有的RMViewController实例,可能是通过应用window及其与根视图控制器的链接。

如果失败,尽管这可能是正确的解决方案,至少会显示RMViewController实例,以便加载其视图。同样,演示文稿将来自根视图控制器。


来自你的评论:

RMViewController *controller = (RMViewController *)self.window.rootViewController;