У меня есть два NSMutableArray
. Они состоят из изображений или текста. Массивы отображаются через UITableView
. Когда я убиваю приложение, данные в пределах UITableView
теряются. Как сохранить массив в UITableView
с помощью NSUserDefault
?Как сохранить NSMutablearray в NSUserDefaults
ответ
Примечания: NSUserDefaults всегда будут возвращать непреложную версию объекта вы передаете в
Для хранения информации:.
// Get the standardUserDefaults object, store your UITableView data array against a key, synchronize the defaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:arrayOfImage forKey:@"tableViewDataImage"];
[userDefaults setObject:arrayOfText forKey:@"tableViewDataText"];
[userDefaults synchronize];
Для извлечения информации:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSArray *arrayOfImages = [userDefaults objectForKey:@"tableViewDataImage"];
NSArray *arrayOfText = [userDefaults objectForKey:@"tableViewDataText"];
// Use 'yourArray' to repopulate your UITableView
При первой загрузке проверьте, возвращается ли результат fr om NSUserDefaults
- nil
, если это необходимо, вам необходимо создать свои данные, в противном случае загрузить данные с NSUserDefaults
, и ваш UITableView
будет поддерживать состояние.
Update
В Свифта-3, следующий подход может быть использован:
let userDefaults = UserDefaults.standard
userDefaults.set(arrayOfImage, forKey:"tableViewDataImage")
userDefaults.set(arrayOfText, forKey:"tableViewDataText")
userDefaults.synchronize()
var arrayOfImages = userDefaults.object(forKey: "tableViewDataImage")
var arrayOfText = userDefaults.object(forKey: "tableViewDataText")
Вы можете сохранить изменяемый массив как это:
[[NSUserDefaults standardUserDefaults] setObject:yourArray forKey:@"YourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
Позже вы получите измененный массив обратно из пользовательских значений по умолчанию. Важно, чтобы вы получили измененную копию, если хотите изменить массив позже.
NSMutableArray *yourArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"YourKey"] mutableCopy];
Тогда вы просто установить UITableview
данные с изменяемым массива с помощью UITableView
делегата
Надежда это помогает!
У меня есть два массива ArrayOfImage и ArrayOfText. Как объявить это. – user2841148
Вы просто объявляете 2 разных изменяемых массива и сохраняете их для разных ключей в настройках по умолчанию. –
Если я использую этот код, массивы не загружаются в UITableview. он показывает значение null в nslog – user2841148
Я хочу только, чтобы добавить другие ответы, что объект, который вы собираетесь хранить магазин в NSUserDefault
, как указано в документации компании Apple должна соответствовать следующим образом:
«Параметр значение может быть только объекты списка объектов: NSData
, NSString
, NSNumber
, NSDate, NSArray или NSDictionary. Для объектов NSArray и NSDictionary их содержимое должно быть объектами списка свойств. "
здесь ссылка на property list programming guide
поэтому обратите внимание о том, что находится внутри вашего массива
Вы действительно хотите сохранять изображения в списке свойств? Вы можете сохранить изображения в файлы и сохранить имя файла как значение в 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
.
Также вы можете сериализовать объекты с помощью NSKeyedArchiver/NSKeyedUnarchiver
, который соответствует протоколу NSCoding.
Если вам нужно добавить строки в NSMutableArray
в муравьиной определенном порядке, или если вы используете NSMutableArray
для UITableView
вы можете использовать вместо этого:
[NSMutableArray insertObject:string atIndex:0];
Сохранить:
NSUserDefaults.standardUserDefaults().setObject(PickedArray, forKey: "myArray")
NSUserDefaults.standardUserDefaults().synchronize()
Получить:
if let PickedArray = NSUserDefaults.standardUserDefaults().stringForKey("myArray") {
print("SUCCCESS:")
println(PickedArray)
}
Swift Версия:
Сохранить массив в NSUserDefaults:
NSUserDefaults.standardUserDefaults().setObject(selection, forKey: "genderFiltersSelection")
Получить Bool массив из NSUserDefaults:
if NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") != nil{
selection = NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") as? [Bool] ?? [Bool]()
}
Retrieve массив строк из NSUserDefaults:
if NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") != nil{
selection = NSUserDefaults.standardUserDefaults().objectForKey("genderFiltersSelection") as? [String] ?? [String]()
}
В 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 с ключом.
«MutableArray получил от JSON ответ»
[[NSUserDefaults standardUserDefaults] setObject:statuses forKey:@"arrayListing"];
«Получить эту информацию (массив) в любом месте в проекте с таким же ключом»
NSArray *arrayList = [[NSUserDefaults standardUserDefaults] valueForKey:@"arrayListing"];
Это помогло мне в моем проекте и надеемся, что поможет кому-то.
- 1. Как сохранить NSMutablearray в NSUserdefaults
- 2. Как хранить NSMutableArray в NSUserDefaults
- 3. Не удалось сохранить NSMutableArray в NSUserDefaults
- 4. Хранение NSMutableArray в NSUserDefaults
- 5. NSMutableArray в NSUserDefaults
- 6. Сохранение NSMutableArray в NSUserDefaults
- 7. Сохраните NSMutableArray в NSUserDefaults
- 8. NSUserDefaults в NSMutableArray
- 9. Как сохранить NSMutableArray в NSUserDefaults и показать результаты в TableView?
- 10. Как сохранить моего клиента NSMutableArray в NSUserDefaults для Objective-C?
- 11. Как сохранить NSMutableArray
- 12. NSMutableArray и NSUserDefaults выпуск iPhone
- 13. Unwrapping NSMutableArray от NSUserDefaults
- 14. Как сохранить данные с NSUserDefaults использованием данных из NSMutableArray
- 15. Сохранить NSMutableArray в iOS
- 16. Перезаписывание NSMutableArray, загруженное из NSUserDefaults
- 17. Как сохранить NSMutableArray в PLIST в Iphone
- 18. Как хранить NSMutableArray UILabel в NSUserDefaults
- 19. невозможно сохранить изображение в NSMutableArray
- 20. Сохранение пользовательских объектов в NSMutableArray в NSUserDefaults
- 21. IOS: сохранить NSMutableArray
- 22. Работа с NSMutableArray и NSUserDefaults
- 23. NSMutableArray добавление/удаление объектов + NSUserDefaults
- 24. Сохранить UITableViewController с NSUserDefaults
- 25. Сохранение пользовательских объектов в NSMutableArray в NSUserDefaults
- 26. Как сохранить NSMutableArrays в NSUserDefaults
- 27. Как сохранить MPMediaItemCollection в NSUSerDefaults?
- 28. Как сохранить plist в NSUserDefaults
- 29. Как сохранить изображение в NSUserDefaults?
- 30. сохранить и загрузить NSMutableArray Fails
У меня есть два массива ArrayOfImage и ArrayOfText. Как объявить это. – user2841148
Точно так же, просто сделайте это дважды с разными ключами. – Tim
Я обновил свой ответ – Tim