Hoe NSMutablearray op te slaan in NSUserDefaults

Ik heb twee NSMutableArray‘s. Ze bestaan ​​uit afbeeldingen of tekst.
De arrays worden weergegeven via een UITableView.
Wanneer ik de app afsluit, gaan de gegevens in de UITableViewverloren.
Hoe een array op te slaan in UITableViewmet behulp van NSUserDefault?


Antwoord 1, autoriteit 100%

Opmerking: NSUserDefaults retourneert altijd een onveranderlijke versie van het object dat u doorgeeft.

Om de informatie op te slaan:

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

Om de informatie op te halen:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSArray *arrayOfImages = [userDefaults objectForKey:@"tableViewDataImage"];
NSArray *arrayOfText = [userDefaults objectForKey:@"tableViewDataText"];
// Use 'yourArray' to repopulate your UITableView

Controleer bij de eerste keer laden of het resultaat dat terugkomt van NSUserDefaultsnilis. Als dat zo is, moet u uw gegevens maken, anders laadt u de gegevens van NSUserDefaultsen uw UITableViewbehouden de status.

Bijwerken

In Swift-3 kan de volgende benadering worden gebruikt:

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")

Antwoord 2, autoriteit 40%

U kunt uw veranderlijke array als volgt opslaan:

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

Later krijg je de veranderlijke array terug van de standaard gebruikersinstellingen. Het is belangrijk dat u de veranderlijke kopie krijgt als u de array later wilt bewerken.

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

Vervolgens stelt u eenvoudig de UITableView-gegevens van uw veranderlijke array in via de UITableView-afgevaardigde

Hopelijk helpt dit!


Antwoord 3, autoriteit 6%

Ik wil alleen aan de andere antwoorden toevoegen dat het object dat u gaat opslaan in de NSUserDefault, zoals vermeld in de Apple-documentatie, hieraan moet voldoen:

“De waardeparameter kan alleen eigenschappenlijstobjecten zijn: NSData, NSString, NSNumber, NSDate, NSArray of NSDictionary. Voor NSArray en NSDictionary-objecten, hun inhoud moet objecten in de lijst met eigenschappen zijn.”

hier de link naar de programmeergids voor de eigenschappenlijst

let dus op wat er in je array staat


Antwoord 4, autoriteit 3%

Opslaan:

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

Ophalen:

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

Antwoord 5, autoriteit 2%

Wilt u echt afbeeldingen opslaan in de eigenschappenlijst? U kunt afbeeldingen in bestanden opslaan en de bestandsnaam als waarde opslaan in NSDictionary.

definieer pad voor winkelbestanden


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

Afbeelding opslaan en laden:


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

En u kunt pad of indexen opslaan in 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;
}

In NSUserDefaultskunt u alleen eenvoudige objecten opslaan zoals NSString, NSDictionary, NSNumber, NSArray.

U kunt ook objecten serialiseren met NSKeyedArchiver/NSKeyedUnarchiverdie voldoen aan het NSCoding-protocol.


Antwoord 6, autoriteit 2%

Als u strings moet toevoegen aan de NSMutableArrayin een mier-specifieke volgorde, of als u de NSMutableArraygebruikt voor een UITableView, kunt u wil dit in plaats daarvan gebruiken:

[NSMutableArray insertObject:string atIndex:0];

Antwoord 7, autoriteit 2%

In Swift 3 moet u voor een NSMutableArray uw array coderen/decoderen om deze op te slaan/op te halen in NSUserDefaults:

Opslaan

//Encoding array
let encodedArray : NSData = NSKeyedArchiver.archivedData(withRootObject: myMutableArray) as NSData
//Saving
let defaults = UserDefaults.standard
defaults.setValue(encodedArray, forKey:"myKey")
defaults.synchronize()

Ophalen

//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]
}

Verwijderen

//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")
}

Antwoord 8, autoriteit 2%

Sla informatie van Array op in NSUserdefaultsmet sleutel.

“MutableArray ontvangen van JSON-reactie”

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

“Haal deze informatie (array) overal in het project op met dezelfde sleutel”

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

Dit heeft me geholpen bij mijn project en ik hoop dat het iemand zal helpen.


Antwoord 9

Snelle versie:

Array opslaan in NSUserDefaults:

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

Bool-array ophalen van NSUserDefaults:

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

Ophalen stringarray van NSUserDefaults:

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

Other episodes