4

我正在使用图书应用程序,我想使用页面标记来帮助用户记住他停止阅读的位置。所以我添加了一个带有图像的栏按钮(“mark.png”)。标记视图将在被点击时添加到章节视图中,如果再次被点击,标记将从 中删除superView。我正在使用这段代码:

- (void)showMark {
    if (![markView superView]) {
       [chapterOne addSubView:markView];
    }
    else {
       [markView removeFromSuperView];
    }
}

它工作正常,但每当我退出应用程序并再次重新运行时,标记视图就消失了,那么我该如何保留它呢?我发现一些论坛谈论NSUserDefaults保存操作,但我真的不知道如何在我的代码中使用它。任何帮助将不胜感激。

4

3 回答 3

3

您不能使用 NSUserDefaults 保存整个视图,但您可以保存有助于确定应在何处设置书签的参数。

例如,如果您将书签基于页码,您可以在用户离开视图控制器时将页面保存到 NSUserDefaults。

例子:

[[NSUserDefaults standardUserDefaults] setInteger:23 forKey:@"bookMarkPage"];
[[NSUserDefaults standardUserDefaults] synchronize];

当用户返回视图控制器时,您可以检查是否有书签:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"bookMarkPage"] != nil) {
    int pageNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"bookMarkPage"];
    [self setBookmarkForPage:pageNumber];
}

可能的书签构造方法:

- (void) setBookmarkForPage:(Int)pageNumber {
    // run through the logic of placing the bookmark on the correct page
}

您可以使用所需的任何参数来确定放置书签的位置。当用户最初放置书签时,您使用哪些参数来确定放置书签的位置?尝试在用户第一次放置书签时使用相同的逻辑。

于 2012-12-19T16:17:08.860 回答
2

我不确切知道您要保存什么,但是您可以使用 几乎任何类型的数据NSUserDefaults,如下所示:

[[NSUserDefaults standardUserDefaults] setInteger:123 forKey:@"CurrentPageNumber"];

设置好所有需要的值后,保存它们:

[[NSUserDefaults standardUserDefaults] synchronize];

然后当应用程序打开时,检查该值是否已设置。如果是画你的标记。

if ([defaults valueForKey:@"CurrentPageNumber"] != nil) {
    int pageNumber = [defaults valueForKey:@"CurrentPageNumber"]

    if (pageNumber == 1) {
        [chapterOne addSubView:markView];
    }
    else {
        [markView removeFromSuperView];
    }
}
于 2012-12-19T16:12:03.637 回答
0

其他答案说明了解决该问题的好方法。澄清一下,不支持 UIView 或任何派生类NSUserDefaultsNSUserDefaults只允许原始对象类型 ( NSString, NSNumber, NSArray, and NSDictionary)。我可能错过了一两个。但是UIVieworUIViewController对象类型不能保存在NSUserDefaults.

于 2012-12-19T16:21:57.670 回答