如何在 iOS 应用程序中保存数据? [英] How to save data , in an iOS application?

查看:21
本文介绍了如何在 iOS 应用程序中保存数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I am developing an application where the user creates an event which has 3 fields:

Category , name , event. After the user gives his entry , i have a save button that will save his data for future reference. Then when he opens the app again the data will be shown in a table View.

How exactly do i "save" data on iOS ? I know about the NSUserDefaults , but i am pretty sure this is not the way for this example.

What i ve done so far :

I created a "Note" class with Category , name , event.

The code for my save button looks like this:

- (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);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    /*
     Here we append a unique filename for this object, in this case, 'Note'
     */

    NSString* filePath = [documentsDirectory stringByAppendingString:@"Note"];

    /*
     Finally, let's write the data to our file
     */

    [data writeToFile:filePath atomically:YES];

    /*
     We're done!
     */
}

Is this the correct way to save an event? How can i retrieve now what i wrote ?

Secondly if i run this code again i ll overwrite data , or create new entry?

I would like to see how i can make a new entry every time.

Also i would like to delete an event from the table that i am presenting them , so i would like to see how the delete would work.

My "Note" object looks like that:

@interface Note : NSObject <NSCoding> {
    NSString *category;
    NSString *name;
    NSString *event;
}

@property (nonatomic, copy) NSString *category;

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *event;

@end

解决方案

Try

//Note.h 

#define kNoteCategory  @"Category"
#define kNoteName      @"Name"
#define kNoteEvent     @"Event"

@interface Note : NSObject

@property (nonatomic, copy) NSString *category;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *event;

- (id)initWithDictionary:(NSDictionary *)dictionary;

+ (NSArray *)savedNotes;
- (void)save;

//Note.m file

- (id)initWithDictionary:(NSDictionary *)dictionary
{
    self = [super init];
    if (self)
    {
        self.category = dictionary[kNoteCategory];
        self.name = dictionary[kNoteName];
        self.event = dictionary[kNoteEvent];
    }

    return self;
}

+ (NSString *)userNotesDocumentPath
{
    NSString *documentsPath  = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"UserNotes.plist"];

    return documentsPath;

}

+ (NSArray *)savedNotes
{
    NSString *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];
    }
    NSString *documentsPath  = [Note userNotesDocumentPath];
    [mutableUserNotes writeToFile:documentsPath atomically:YES];
}

#pragma mark - Save

- (void)save
{
    NSMutableArray *savedNotes = [[Note savedNotes] mutableCopy];
    [savedNotes addObject:self];
    [self saveUserNotesToPlist:savedNotes];
}

Save a note by

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

Source Code

这篇关于如何在 iOS 应用程序中保存数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆