CoreData 使用小记

· 添加一个Data Model

CoreData 使用小记

CoreData 使用小记

CoreData 使用小记

· 添加 Entity ,  点击 "Add Entity"

CoreData 使用小记

重命名为"User"

添加 Attributes : jid 和 password,类型都为 string

CoreData 使用小记

· 添加 NSManagedObject

CoreData 使用小记

CoreData 使用小记

CoreData 使用小记

CoreData 使用小记

·  接下来可以创建一个help类来帮助我们使用

CoreData 使用小记

userCoreDataHelper.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "User.h"

@interface userCoreDataHelper : NSObject{
    NSManagedObjectContext          *managedObjectContext;
    NSManagedObjectModel            *managedObjectModel;
    NSPersistentStoreCoordinator    *persistentStoreCoordinator;
}

// 保存信息
- (BOOL)saveMessageWithjid:(NSString *)jid password:(NSString *)password;

// 获取信息
- (NSArray *)getAllUsers;

@end

userCoreDataHelper.m

#import "userCoreDataHelper.h"

@implementation userCoreDataHelper



// 保存信息
- (BOOL)saveMessageWithjid:(NSString *)jid password:(NSString *)password{
    BOOL result = NO;
    
    if ([jid length] == 0 || [password length] == 0){
        NSLog(@"fromJID and toJID are mandatory.");
        return NO;
    }
    
    NSManagedObjectContext *moContext = [self managedObjectContext];
    
    User *newUser = [NSEntityDescription
                           insertNewObjectForEntityForName:@"User"
                           inManagedObjectContext:moContext];
    
    if (newUser == nil){
        NSLog(@"Failed to create the new message.");
        return NO;
    }
    
    newUser.jid = jid;
    newUser.password = password;
    
    NSError *savingError = nil;
    
    if ([moContext save:&savingError]){
        return YES;
    }else{
        NSLog(@"Failed to save the new message. Error = %@", savingError);
    }
    
    return result;
}

// 获取信息
- (NSArray *)getAllUsers{
    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSError *error = nil;
    NSArray *fetchObject = [context executeFetchRequest:fetchRequest error:&error];
    
    if(error!=nil){
        return nil;
    }
    
    return fetchObject;
}

#pragma mark - Core Data stack
// Returns the managed object context for the application.
// If the context doesn't already exist, it is created and bound to thepersistent store coordinator for the application.
- (NSManagedObjectContext *)managedObjectContext
{
    if (managedObjectContext !=nil) {
        return managedObjectContext;
    }
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc]init];
        [managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return managedObjectContext;
}
// Returns the managed object model for the application.
// If the model doesn't already exist, it is created from the application'smodel.
- (NSManagedObjectModel *)managedObjectModel
{
    if (managedObjectModel !=nil) {
        return managedObjectModel;
    }
    // 注意,这里的URLForResource要写刚才与使用的NSManagedObject一致的DataModal,否则会报错。
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"XMPPUsersModal_UserCoreData" withExtension:@"momd"];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return managedObjectModel;
}
// Returns the persistent store coordinator for the application.
// If the coordinator doesn't already exist, it is created and theapplication's store added to it.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (persistentStoreCoordinator !=nil) {
        return persistentStoreCoordinator;
    }
    //这里的 .sqlite,也应该与DataModal的名字保持一致。
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"XMPPUsersModal_UserCoreData.sqlite"];
    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolvederror %@, %@", error, [error userInfo]);
        abort();
    }
    return persistentStoreCoordinator;
}
#pragma mark - Application's Documents directory
// Returns the URL to the application's Documents directory.
- (NSURL*)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

@end


使用

在 Appdelegate 中添加:

+ (userCoreDataHelper *)userCoreDataHelper{
    return [[userCoreDataHelper alloc] init];
}

调用:

[[AppDelegate userCoreDataHelper] saveMessageWithjid:@"user1" password:@"pwd1"];


note: 添加了新的 Data Modal 和 NSManagedObject 后, 最好把原先模拟器上的程序移除再安装。








   

你可能感兴趣的:(coredata)