CoreData 使用小记

· 添加一个Data Model

· 添加 Entity ,  点击 "Add Entity"

重命名为"User"

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

· 添加 NSManagedObject

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

 

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 后, 最好把原先模拟器上的程序移除再安装。

  

posted on 2015-08-10 12:34  pTrack  阅读(143)  评论(0)    收藏  举报