【问题标题】:How to Persist Application State in cocoa如何在可可中保持应用程序状态
【发布时间】:2013-08-26 07:48:15
【问题描述】:

我需要在应用程序终止时存储应用程序的状态,以便当用户重新运行应用程序时,应用程序从上次关闭的状态运行。这是某种恢复应用程序,但是当应用程序意外关闭时会调用恢复方法。但是每次用户意外关闭时我都需要恢复应用程序手动关闭它。 我只需要存储 App UI 而不是应用程序的数据。 任何想法都会对我有所帮助。 谢谢

【问题讨论】:

    标签: objective-c cocoa persistent nswindowrestoration


    【解决方案1】:

    您可以使用任何可用的方法保持状态,例如:

    我。 NSUserDefaults

    例子:

    //saving
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"testBool"];
    //retrieving
    [defaults boolForKey:@"testBool"];
    

    二。序列化状态对象。

    三。保存为 plist 文件

    例子:

    NSMutableDictionary *stateDictionary = [NSMutableDictionary dictionary];
    //set state
    ...
    
    //saving
    [stateDictionary writeToFile:<filePath> atomically:YES];
    
    //retrieve
    stateDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:<filePath>]
    

    四。使用 sqlite 或 Core-Data

    (很可能不需要,除非 您的应用程序的状态处于某种对象关系模型中)

    更新:
    为了保留窗口的 UI 状态, 检查此link 并在用户界面保留标题下。

    【讨论】:

    • 你能解释一下如何使用这些来存储添加到 NSWindow 上的控件框架。并且请不要告诉存储每个控件的框架,因为我在窗口上有很多控件并且存储每个控件框架是一项非常大的任务。
    • 不幸的是 NSWindow 不能直接序列化或写入文件。您可以让子类 NSWindow 覆盖编码方法(请参阅列表项 ii 的链接),或者您可以检查我在更新答案中提供的链接。
    【解决方案2】:
    - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
    {
        //saveData
        return NSTerminateNow;
    }
    

    如果要保存 NSWindow 位置,可以使用[window saveFrameUsingName:@"myWindow"];
    并使用
    [window setFrameAutosaveName:@"myWindow"];@应用启动。

    【讨论】:

    • 我知道这个方法,它是在应用程序终止时调用的。我的问题是,如何存储应用程序状态(UI 控件的位置)。
    • 在 NSUserDefaults 中显示 UI 控件的位置
    • 可以使用 saveFrameUsingName: 保存 NSWindow 位置 setFrameAutosaveName:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多