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];

ユーザーがView Controllerに戻ってきたら、ブックマークがあるかどうかを確認できます:

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) のみを許可します。私が見逃したのは1つか2つかもしれません。ただしUIViewUIViewControllerオブジェクト タイプは に保存できませんNSUserDefaults

于 2012-12-19T16:21:57.670 に答える