十三章Basic Data Persistence-----之四(Core Data存储)

由于时间紧迫,所以把看书的和做例题的事件加紧了些,里面的原理可能不象前面一样了解的很细了,只是看一遍英文,囫囵吞枣的理解下,再看代码,如果基本理解就ok了。

如果在后面的项目开发中有什么问题再回过头来看吧。

看看自己记得如何,重新回放一下该程序制作过程。(重申一下,我的开发环境是xcode5)

1、开个新的项目,用空白模版,但要勾选Core Data

2、在.xcdatamodeld文件里插入一个entity(实体),命名为Line,为这个实体添加两个属性,一个是LineNumber,为整形16,一个是LineText,为string,还涉及到很多关于这些属性的设置,这里没有研究,关键点如果要设置属性,必须选中该属性后点击“inspector”

3、新建class--BIDViewController,在xib里添加控件(四个文本,四个标签),在BIDViewController.h中建一个lineFields的变量,将四个Text控件与之相关联。

4、在BIDViewController.m的头上定定义三个静态变量,分别是:Line实体、Line的数字属性、Line的文本属性。

5、在BIDViewController.m的viewDidLoad方法里添加代码:

BIDAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:kLineEntityName];
    NSError *error;
    NSArray *objects = [context executeFetchRequest:request error:&error];
        if (objects == nil) {
        NSLog(@"There was an error!");
        // Do whatever error handling is appropriate
    }
    for (NSManagedObject *oneObject in objects) {
        int lineNum = [[oneObject valueForKey:kLineNumberKey] intValue];
        NSString *lineText = [oneObject valueForKey:kLineTextKey];
        UITextField *theField = self.lineFields[lineNum];
        theField.text = lineText;
    }
    UIApplication *app = [UIApplication sharedApplication];
    [[NSNotificationCenter defaultCenter]  addObserver:self  selector:@selector(applicationWillResignActive:)  name:UIApplicationWillResignActiveNotification object:app];

简单解释一下:首先定义App委托的变量,因为Core Data的内容基本都是在AppDelegate里完成的,然后完成Core Data里的几个重要变量的定义。其它就和前面一样从Core Data中取出存储的数据并在Text中显示,后面两句就是消息往通知中心放,和前面一样。

6、下面就是在消息事件(当应用不活动时)里添加Core Data存储的代码,将Text中的内容存储到核心数据中。

7、运行,发现界面一片空白,前面画的控件都没有。原来在AppDelegate的显示的那个方法里忘记加这两句了:

BIDViewController *controller = [[BIDViewController alloc] init];
    self.window.rootViewController = controller;

8、运行,ok了,存储正常。


太好了,下面终于进入到了我最感兴趣的东东---icloud





你可能感兴趣的:(十三章Basic Data Persistence-----之四(Core Data存储))