11月2日-4日学习CoreData和storyboard小结

来源:互联网 发布:阿里云 专用网络 ftp 编辑:程序博客网 时间:2024/05/22 06:20

11月2-3日  CoreData 在Iphone上的使用学习

    新建一个CoreData项目, 会在程序开始时初始化CoreData栈对象:被管理的上下文对象MOC,协调者MOD.程序目录, POS呢?

    建模.模型只有三个属性,真是体贴啊.关闭了Optional选项,还有正则表达式对属性的约束(这是需要深入的话题) 不过到注册账号关联的话,要用到关系了.所以设了账号Account和联系人Person,是一对多的关系

    关于模型一对多关系的实现,在引用的情况下实现点选 to-many relationship,在类别会生成一些方法,也就是这个类要生成维护多个对象的方法了.

 

NSFetchedResultsController Class

    FRC使用NSFetchRequest和被管理的对象上下文来取得数据.NSFetchRequest包含一个排序描述符或者一个断言.断言可以决定获取的对象的个数.对本项目来讲NSFecthRequest的按name来排序是有用的.

    FRC使用委托机制来使表格视图和数据改变进行同步.

    新建一个CoreData class是这么建的,orm会自动将其持久化.

detailItem =[NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:managedObjectContext];

    managedObjectContext每个vc都要有,所以

//使用AppDelegate

    AppDelegate * appDelegate = [[UIApplicationsharedApplication] delegate];

    self.managedObjectContext=appDelegate.managedObjectContext;

 

    cathe问题.注意模型改动后用命名不同的缓存就好.

 

 

storyboard的学习

    故事板是主要是为了把控制器之间的切换也能可视化编辑而存在的. scene和segue,分别代表原来的控制器和切换控制.

    添加segue请看tools guide的adding a segue to a Storyboard;

果然,故事版真是个神奇的东西,得按照它的规则来.使用规则:

    为了让IB初始化vc,请不要自己去初始化,除了一开始的rootViewContriller,

    有触发源的- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  很多时候是无法直接设置触发源的.以标识强制执行的performSegueWithIdentifier:sender:

   [controller performSegueWithIdentifier:@"EditDetail"sender:nil];这个可以让我提前把AddController放到栈顶. 这个东西让我好找.主要是不太熟悉故事版,它不可以用nib初始化controller,用故事板时nib消失了!!!

11月3日通讯录账号及其功能的实现

功能一:storybroad登陆界面中的scene和segue实现

segue类型push和modal的区别:push是导航器的入栈出栈操作,

  [super.navigationControllersetNavigationBarHidden:YESanimated:TRUE];这个在ViewDidLoad和WillDisappear中起到隐藏导航栏的作用.

功能二:在CoreData中利用关系抽出关联登陆账号的列表,保存联系人时存进账号的一对多关系数组中

   detailItem =[NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:managedObjectContext];

 

  NSError *error = nil;

    if (![context save:&error]) {

        // Replace this implementation with code to handle theerror appropriately.

        // abort() causes the application to generate a crash logand terminate. You should not use this function in a shipping application,although it may be useful during development.

        NSLog(@"Unresolved error %@, %@", error, [erroruserInfo]);

        abort();

    }

抓取数据: NSFetchRequest

普通抓取

AppDelegate * appDelegate =[[UIApplication sharedApplication] delegate];      NSManagedObjectContext *context =appDelegate.managedObjectContext ;       NSFetchRequest*fetchRequest = [[NSFetchRequest alloc] init];    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account"                                              inManagedObjectContext:context];    [fetchRequest setEntity:entity];       NSError *error = nil;     acountData= [context executeFetchRequest:fetchRequest error:&error];    if (acountData == nil) {        // Handle the error    }

account = "0x6d468b0 <x-coredata://689B1AE9-785D-4CBB-881E-F343C929EA11/Account/p4>";

 

断言抓取以及排序..参考了API的代码.

   

    所有切换用故事板

功能三:登陆账号的保存密码功能.用NSUserDefaults来做

     

     NSString *text1 = [[NSUserDefaults standardUserDefaults] stringForKey:@"userName"];        NSString *text2 = [[NSUserDefaults standardUserDefaults] stringForKey:@"passw"];        if (text1 ) {            username.text = text1;        }        if (text2 ) {            passw.text = text2;        }    }

原创粉丝点击