Comment save des données dans une application iOS?

Je développe une application où l'user crée un événement qui a 3 champs:

Catégorie, nom, événement Après que l'user donne son input, j'ai un button de sauvegarde qui permettra d'save ses données pour reference future. Puis, quand il ouvre à nouveau l'application, datatables seront affichées dans un tableau.

Comment puis-je "sauvegarder" datatables sur iOS? Je connais le NSUserDefaults, mais je suis assez sûr que ce n'est pas le cas pour cet exemple.

Ce que j'ai fait jusqu'ici:

J'ai créé une class "Note" avec Category, name, event.

Le code de mon button de sauvegarde ressemble à ceci:

- (IBAction)save:(id)sender { //creating a new "note" object Note *newNote = [[Note alloc]init]; newNote.category = categoryField.text; newNote.name = nameField.text; newNote.event = eventField.text; // do whatever you do to fill the object with data NSData* data = [NSKeyedArchiver archivedDataWithRootObject:newNote]; /* Now we create the path to the documents directory for your app */ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *documentsDirectory = [paths objectAtIndex:0]; /* Here we append a unique filename for this object, in this case, 'Note' */ NSSsortingng* filePath = [documentsDirectory ssortingngByAppendingSsortingng:@"Note"]; /* Finally, let's write the data to our file */ [data writeToFile:filePath atomically:YES]; /* We're done! */ } 

Est-ce la bonne façon de sauvegarder un événement? Comment puis-je récupérer maintenant ce que j'ai écrit?

Deuxièmement, si je réexécute ce code, je vais écraser datatables ou créer une nouvelle input?

Je voudrais voir comment je peux faire une nouvelle input à chaque fois.

Aussi, je voudrais supprimer un événement de la table que je leur présente, donc je voudrais voir comment la suppression fonctionnerait.

Mon object "Note" ressemble à ça:

 @interface Note : NSObject <NSCoding> { NSSsortingng *category; NSSsortingng *name; NSSsortingng *event; } @property (nonatomic, copy) NSSsortingng *category; @property (nonatomic, copy) NSSsortingng *name; @property (nonatomic, copy) NSSsortingng *event; @end 

Essayer

 //Note.h #define kNoteCategory @"Category" #define kNoteName @"Name" #define kNoteEvent @"Event" @interface Note : NSObject @property (nonatomic, copy) NSSsortingng *category; @property (nonatomic, copy) NSSsortingng *name; @property (nonatomic, copy) NSSsortingng *event; - (id)initWithDictionary:(NSDictionary *)dictionary; + (NSArray *)savedNotes; - (void)save; 

Fichier //Note.m

 - (id)initWithDictionary:(NSDictionary *)dictionary { self = [super init]; if (self) { self.category = dictionary[kNoteCategory]; self.name = dictionary[kNoteName]; self.event = dictionary[kNoteEvent]; } return self; } + (NSSsortingng *)userNotesDocumentPath { NSSsortingng *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] ssortingngByAppendingPathComponent:@"UserNotes.plist"]; return documentsPath; } + (NSArray *)savedNotes { NSSsortingng *documentsPath = [self userNotesDocumentPath]; NSArray *savedNotes = [NSArray arrayWithContentsOfFile:documentsPath]; NSMutableArray *savedUserNotes = [@[] mutableCopy]; for (NSDictionary *dict in savedNotes) { Note *note = [[Note alloc]initWithDictionary:dict]; [savedUserNotes addObject:note]; } return savedUserNotes; } - (NSDictionary *)userNoteDictionary { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; if (self.category) { dict[kNoteCategory] = self.category; } if (self.name) { dict[kNoteName] = self.name; } if (self.event) { dict[kNoteEvent] = self.event; } return dict; } - (void)saveUserNotesToPlist:(NSArray *)userNotes { NSMutableArray *mutableUserNotes = [@[] mutableCopy]; for (Note *note in userNotes) { NSDictionary *dict = [note userNoteDictionary]; [mutableUserNotes addObject:dict]; } NSSsortingng *documentsPath = [Note userNotesDocumentPath]; [mutableUserNotes writeToFile:documentsPath atomically:YES]; } #pragma mark - Save - (void)save { NSMutableArray *savedNotes = [[Note savedNotes] mutableCopy]; [savedNotes addObject:self]; [self saveUserNotesToPlist:savedNotes]; } 

Enregistrer une note par

 - (IBAction)save:(id)sender { //creating a new "note" object Note *newNote = [[Note alloc]init]; newNote.category = categoryField.text; newNote.name = nameField.text; newNote.event = eventField.text; //Saves the note to plist [newNote save]; //To get all saved notes NSArray *savedNotes = [Note savedNotes]; } 

Code source

Vous pouvez utiliser NSKeyedUnArchiver pour récupérer datatables. Il écrase si vous essayez d'écrire dans le même path d'access

Vous pouvez utiliser datatables de base pour save toutes vos données et les supprimer quand vous le souhaitez. Le code ci-dessus crée toujours un nouvel object de class Note donc chaque fois que vous avez de nouveldatatables, mais quand vous essayez d'écrire avec le même nom "Note". Il remplace toujours les anciennes données.

Tous sont corrects en outre que vous pouvez utiliser Sqlite pour save datatables localement avec votre application.

Ceci est juste un file mais accepte toutes les instructions sql standard.

C'est également un moyen de sauvegarder datatables localement.

Pour save des données via NSUserDefaults, j'utilise GVUserDefaults

Usage

Créez une catégorie sur GVUserDefaults, ajoutez des propriétés dans le file .h et créez-les @dynamic dans le file .m.

 // .h @interface GVUserDefaults (Properties) @property (nonatomic, weak) NSSsortingng *userName; @property (nonatomic, weak) NSNumber *userId; @property (nonatomic) NSInteger integerValue; @property (nonatomic) BOOL boolValue; @property (nonatomic) float floatValue; @end 

 // .m @implementation GVUserDefaults (Properties) @dynamic userName; @dynamic userId; @dynamic integerValue; @dynamic boolValue; @dynamic floatValue; @end 

Maintenant, au lieu d'utiliser [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"] , vous pouvez simplement utiliser [GVUserDefaults standardUserDefaults].userName .

Vous pouvez même save les valeurs par défaut en définissant la propriété:

 [GVUserDefaults standardUserDefaults].userName = @"myusername"; 

Regardez, je vous donne l'idée générale, vous pouvez utiliser ce code en fonction de vos besoins.

1) Obtenez le "Chemin" du file yourPlist.plist :

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *documentsDirectory = [paths objectAtIndex:0]; NSSsortingng *path = [documentsDirectory ssortingngByAppendingPathComponent:@"yourPlist.plist"]; 

2) Insérer des données dans la yourPlist:

 NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setValue:categoryField.text forKey:@"Category"]; [dict setValue:nameField.text forKey:@"Name"]; [dict setValue:eventField.text forKey:@"Event"]; NSMutableArray *arr = [[NSMutableArray alloc] init]; [arr addObject:dict]; [arr writeToFile: path atomically:YES]; 

3) Récupérer des données de yourPlist:

 NSMutableArray *savedStock = [[NSMutableArray alloc] initWithContentsOfFile: path]; for (NSDictionary *dict in savedStock) { NSLog(@"my Note : %@",dict); }