2つのNSMutableArray
があります。画像またはテキストで構成されます。配列はUITableView
を介して表示されます。アプリを強制終了すると、UITableView
内のデータが失われます。 UITableView
を使用してNSUserDefault
に配列を保存する方法は?
可変配列は次のように保存できます。
[[NSUserDefaults standardUserDefaults] setObject:yourArray forKey:@"YourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
後で、ユーザーのデフォルトから可変配列を取得します。後で配列を編集する場合は、変更可能なコピーを取得することが重要です。
NSMutableArray *yourArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"YourKey"] mutableCopy];
次に、UITableview
デリゲートを介して、可変配列からUITableView
データを設定します。
お役に立てれば!
Appleのドキュメントで報告されているように、保存しようとしているオブジェクトはNSUserDefault
に格納する必要があることを他の回答に追加したいだけです。
「値パラメーターには、プロパティリストオブジェクトのみを使用できます:NSData
、NSString
、NSNumber
、NSDate、NSArray、またはNSDictionary。NSArrayおよびNSDictionaryオブジェクトの場合、その内容はプロパティリストオブジェクトでなければなりません。」
ここにリンク プロパティリストプログラミングガイド
アレイ内にあるものに注意してください
保存:
NSUserDefaults.standardUserDefaults().setObject(PickedArray, forKey: "myArray")
NSUserDefaults.standardUserDefaults().synchronize()
取得:
if let PickedArray = NSUserDefaults.standardUserDefaults().stringForKey("myArray") {
print("SUCCCESS:")
println(PickedArray)
}
NSMutableArray
に特定の順序で文字列を追加する必要がある場合、またはNSMutableArray
にUITableView
を使用している場合は、代わりにこれを使用できます。
[NSMutableArray insertObject:string atIndex:0];
プロパティリストに画像を保存しますか?画像をファイルに保存し、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
には、NSString
、NSDictionary
、NSNumber
、NSArray
などのオブジェクトのみを保存できます。
NSCodingプロトコルに準拠するNSKeyedArchiver/NSKeyedUnarchiver
でオブジェクトをシリアル化することもできます。
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")
}
配列の情報をNSUserdefaults
にキーで保存します。
「JSON応答から受け取ったMutableArray」
[[NSUserDefaults standardUserDefaults] setObject:statuses forKey:@"arrayListing"];
「同じキーを使用してプロジェクト内の任意の場所でこの情報(配列)を取得する」
NSArray *arrayList = [[NSUserDefaults standardUserDefaults] valueForKey:@"arrayListing"];
これは私のプロジェクトを助け、誰かを助けることを願っています。
迅速なバージョン:
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]()
}