web-dev-qa-db-ja.com

NSUserDefaultsにNSMutablearrayを保存する方法

2つのNSMutableArrayがあります。画像またはテキストで構成されます。配列はUITableViewを介して表示されます。アプリを強制終了すると、UITableView内のデータが失われます。 UITableViewを使用してNSUserDefaultに配列を保存する方法は?

60
user2841148

可変配列は次のように保存できます。

[[NSUserDefaults standardUserDefaults] setObject:yourArray forKey:@"YourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

後で、ユーザーのデフォルトから可変配列を取得します。後で配列を編集する場合は、変更可能なコピーを取得することが重要です。

NSMutableArray *yourArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"YourKey"] mutableCopy];

次に、UITableviewデリゲートを介して、可変配列からUITableViewデータを設定します。

お役に立てれば!

44
Philipp Otto

Appleのドキュメントで報告されているように、保存しようとしているオブジェクトはNSUserDefaultに格納する必要があることを他の回答に追加したいだけです。

「値パラメーターには、プロパティリストオブジェクトのみを使用できます:NSDataNSStringNSNumber、NSDate、NSArray、またはNSDictionary。NSArrayおよびNSDictionaryオブジェクトの場合、その内容はプロパティリストオブジェクトでなければなりません。」

ここにリンク プロパティリストプログラミングガイド

アレイ内にあるものに注意してください

7
Manu

保存:

NSUserDefaults.standardUserDefaults().setObject(PickedArray, forKey: "myArray")
 NSUserDefaults.standardUserDefaults().synchronize()

取得:

if let PickedArray = NSUserDefaults.standardUserDefaults().stringForKey("myArray") {
    print("SUCCCESS:")
    println(PickedArray)
}
3
A.G

NSMutableArrayに特定の順序で文字列を追加する必要がある場合、またはNSMutableArrayUITableViewを使用している場合は、代わりにこれを使用できます。

[NSMutableArray insertObject:string atIndex:0];
2
Lance

プロパティリストに画像を保存しますか?画像をファイルに保存し、NSDictionaryの値としてファイル名を保存できます。

ストアファイルのパスを定義する


NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
self.basePath = [paths firstObject];

画像の保存と読み込み:


- (NSString *)imageWithKey:(NSString)key {
    NSString *fileName = [NSString stringWithFormat:@"%@.png", key]
    return [self.basePath stringByAppendingPathComponent:fileName];
}

- (void)saveImage:(UIImage *)image withKey:(NSString)key {
    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:[self imageWithKey:key] atomically:YES];
}

- (UIImage *)loadImageWithKey:(NSString)key { {
    return [UIImage imageWithContentsOfFile:[self imageWithKey:key]];
}

そして、NSMutableDictionaryにパスまたはインデックスを保存できます


- (void)saveDictionary:(NSDictionary *)dictionary {
    NSMutableDictionary *dictForSave = [@{ } mutableCopy];
    for (NSString *key in [dictionary allKeys]) {
        [self saveImageWithKey:key];
        dictForSave[key] = @{ @"image" : key };
    }
    [[NSUserDefaults standardUserDefaults] setObject:dictForSave forKey:@"MyDict"];
}

- (NSMutableDictionary *)loadDictionary:(NSDictionary *)dictionary {
    NSDictionary *loadedDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyDict"];
    NSMutableDictionary *result = [@{ } mutableCopy];
    for (NSString *key in [loadedDict allKeys]) {
        result[key] = [self imageWithKey:key];
    }
    return result;
}

NSUserDefaultsには、NSStringNSDictionaryNSNumberNSArrayなどのオブジェクトのみを保存できます。

NSCodingプロトコルに準拠するNSKeyedArchiver/NSKeyedUnarchiverでオブジェクトをシリアル化することもできます。

2
aironik

Swift 3では、NSMutableArrayの場合、NSUserDefaultsで保存/取得できるように配列をエンコード/デコードする必要があります。

保存

//Encoding array
let encodedArray : NSData = NSKeyedArchiver.archivedData(withRootObject: myMutableArray) as NSData

//Saving
let defaults = UserDefaults.standard
defaults.setValue(encodedArray, forKey:"myKey")
defaults.synchronize()

取得中

//Getting user defaults
let defaults = UserDefaults.standard

//Checking if the data exists
if defaults.data(forKey: "myKey") != nil {
   //Getting Encoded Array
   let encodedArray = defaults.data(forKey: "myKey")

   //Decoding the Array
   let decodedArray = NSKeyedUnarchiver.unarchiveObject(with: encodedArray!) as! [String]
}

削除

//Getting user defaults
let defaults = UserDefaults.standard

//Checking if the data exists
if defaults.data(forKey: "myKey") != nil {

    //Removing the Data
    defaults.removeObject(forKey: "myKey")

}
2
Ugo Marinelli

配列の情報をNSUserdefaultsにキーで保存します。

「JSON応答から受け取ったMutableArray」

[[NSUserDefaults standardUserDefaults] setObject:statuses forKey:@"arrayListing"];

「同じキーを使用してプロジェクト内の任意の場所でこの情報(配列)を取得する」

NSArray *arrayList = [[NSUserDefaults standardUserDefaults] valueForKey:@"arrayListing"];

これは私のプロジェクトを助け、誰かを助けることを願っています。

2
Dilip Tiwari

迅速なバージョン:

NSUserDefaultsに配列を保存します。

NSUserDefaults.standardUserDefaults().setObject(selection, forKey: "genderFiltersSelection")

NSUserDefaultsからBool配列を取得します。

if NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") != nil{
                selection = NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") as? [Bool] ?? [Bool]()
   }

NSUserDefaultsから文字列配列を取得します。

if NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") != nil{
                selection = NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") as? [String] ?? [String]()
    }
1
Mughees