自己创建CoreData所需要的相应类

以前使用CoreData都是选择附带有CoreData选项的模板,自己并不知道具体怎么创建。虽然,这样可以节省自己写代码的时间,但是,有些模板是没有附带使用CoreData的选项的,这就不得不要自己去创建了。

创建一个工程,命名为CoreDataDemo,选择Single View Application模板。接下来需要导入CoreData.framework框架,然后在CoreDataDemo-Prefix.pch文件中加上#import <CoreData/CoreData.h>。完成后的效果如下:

#import <Availability.h>

#ifndef __IPHONE_4_0

#warning "This project uses features only available in iOS SDK 4.0 and later."

#endif


#ifdef __OBJC__

    #import <UIKit/UIKit.h>

    #import <Foundation/Foundation.h>

    #import <CoreData/CoreData.h>

#endif


选中工程中的Supporting Files,右键 -> New File ->CoreData ->Data Model,名字为DormitoryData



创建一个实体,名字为Member,两个性质:memberAge,memberName,都是String类型的。



右键DormitoryData.xcdatamodeld文件, CoreData -> NSManagedObject subclass



打开AppDelegate.h文件,需要加3个属性和一个方法。

 

#import <UIKit/UIKit.h>

@class ViewController;


@interface AppDelegate : UIResponder <UIApplicationDelegate>


@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;


@property (strong, nonatomic, readonly) NSManagedObjectContext *managedObjectContext;

@property (strong, nonatomic, readonly) NSManagedObjectModel *managedObjectModel;

@property (strong, nonatomic, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;


-(NSURL*)applicationDocumentsDirectory;

@end


AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

self.viewController.managedObjectContext = self.managedObjectContext;

    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];

    return YES;

}


- (NSURL*)applicationDocumentsDirectory {

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

}


- (NSManagedObjectContext *)managedObjectContext {

    

    if (_managedObjectContext != nil) {

        return _managedObjectContext;

    }

    

    

    _managedObjectContext = [[NSManagedObjectContext alloc] init];

    _managedObjectContext.persistentStoreCoordinator = [self persistentStoreCoordinator];

    

    return _managedObjectContext;

}


- (NSManagedObjectModel *)managedObjectModel {

    

    if (_managedObjectModel != nil) {

        return _managedObjectModel;

    }

    

    

    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

    

    return _managedObjectModel;

}


- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    

    if (_persistentStoreCoordinator != nil) {

        return _persistentStoreCoordinator;

    }

    

    

    NSError *error = nil; 

    NSURL *url = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Dormitory.sqlite"];

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]) {

        NSLog(@"%s error = %@", __FUNCTION__, [error localizedDescription]);

    }

    

    return _persistentStoreCoordinator;

}


界面样式如下图所示,创建相应的IBOutle和IBAction并链接:



ViewController.h中的代码如下(其余省略)

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;

@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;


@property (strong, nonatomic) IBOutlet UITextField *memberNameTextField;

@property (strong, nonatomic) IBOutlet UITextField *memberAgeTextField;



- (IBAction)saveMemberInformation:(id)sender;


ViewController.m

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Member" inManagedObjectContext:self.managedObjectContext];

    [fetchRequest setEntity:entity];

    NSSortDescriptor *nameSort = [[NSSortDescriptor alloc] initWithKey:@"memberName" ascending:YES];

    NSArray *sorts = [NSArray arrayWithObjects:nameSort, nil];

    [fetchRequest setSortDescriptors:sorts];

    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"MyDorimitory"];

     

}


- (IBAction)saveMemberInformation:(id)sender {

    

    NSError *error = nil;

    if (self.memberNameTextField.text != nil) {

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"memberName contains[cd] %@", self.memberNameTextField.text];

        self.fetchedResultsController.fetchRequest.predicate = predicate;

    }

    

    

    if (![self.fetchedResultsController performFetch:&error]) {

        NSLog(@"%s error = %@", __FUNCTION__, [error localizedDescription]);

        exit(-1);

    }

    

    

    if ([self.fetchedResultsController.fetchedObjects count] < 1){

        

        Member *member = [NSEntityDescription insertNewObjectForEntityForName:@"Member" inManagedObjectContext:self.managedObjectContext];

        member.memberName = self.memberNameTextField.text;

        member.memberAge = self.memberAgeTextField.text;

        

        if (![self.managedObjectContext save:&error]) {

            NSLog(@"%s error = %@", __FUNCTION__, [error localizedDescription]);

        }

    } else {

        

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示"

                                                            message:@"该成员已经加入"

                                                           delegate:self

                                                  cancelButtonTitle:@"确定"

                                                  otherButtonTitles:nil, nil];

        [alertView show];

    }

    

    

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Member" inManagedObjectContext:self.managedObjectContext];

    [fetchRequest setEntity:entity];

    NSArray *members = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

    for (Member *member in members) {

 NSLog(@"name = %@", [member valueForKey:@"memberName"]);

        NSLog(@"age = %@", [member valueForKey:@"memberAge"]);

    }

NSLog(@"--------------------------------------------");

}



其余代码不做修改,只是添加上述代码。运行一下,嗯...好像保存按钮被键盘遮挡了。稍作修改一下,在ViewController.xib中选中原先已有的View控件,将其Class修改为UIControl并关联放发-(void)backgroundTapped:(id)sender;

- (IBAction)backgoundTapped:(id)sender {

    [self.memberAgeTextField resignFirstResponder];

    [self.memberNameTextField resignFirstResponder];

}


运行效果:



程序代码:CoreDataDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值