0

NSStrings のリストを含む NSMutableArray のローカル ストレージにデータを永続化する際に問題があります。アプリの実行中に save メソッドと get メソッドの両方が機能しているように見えます。ただし、アプリを閉じて再起動すると、配列内のアイテムはなくなります。

NSMutableArray*ImageTags;

データを取得

-(NSMutableArray*)GetDataNSMutableArray:(NSString*)ItemName
{
    NSMutableArray *GetData = [[NSMutableArray alloc] init];
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:ItemName];
    if (dataRepresentingSavedArray != nil)
    {
        NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
        if (oldSavedArray != nil)
            GetData = [[NSMutableArray alloc] initWithArray:oldSavedArray];
        else
            GetData = [[NSMutableArray alloc] init];
    }
    return GetData;
}

セーブデータ

-(void)SaveDataNSMutableArray:(NSString*)ItemName:(NSMutableArray*)Data
{
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:Data] forKey:ItemName];

}

アイテムの追加方法

[ImageTags addObject:Control.titleLabel.text]

配列の保存方法

[super SaveDataNSMutableArray:CVC_ImageURL:ImageTags];

配列の取得方法

ImageTags = [super GetDataNSMutableArray:CVC_ImageURL];
4

4 に答える 4

1

NSUserDefaults は常に不変のインスタンスを返します。

無関係: (慣習では、methodNames は常に小文字で始まる必要があります)。

于 2013-01-15T08:55:37.800 に答える
1
[[NSUserDefaults standardUserDefaults] synchronize]

NSUserDefaults のすべてのコンテンツを永続ストアにダンプするには

于 2013-01-15T08:56:41.253 に答える
1

変更可能な配列をユーザーのデフォルトに保存することはできません。不変のコピーを保存して取得し、次の起動時にアクセスできるように変更可能なコピーに変換します。

于 2013-01-15T08:57:22.543 に答える
0

保存中に同期を行うことができます:

-(void)SaveDataNSMutableArray:(NSString*)ItemName:(NSMutableArray*)Data
{
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:Data] forKey:ItemName];

[[NSUserDefaults standardUserDefaults] synchronize] //add this code of a line.

}
于 2013-01-15T09:41:52.943 に答える