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

22 篇文章 0 订阅
20 篇文章 0 订阅

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 =[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];

    managedObjectContext每个vc都要有,所以

//使用AppDelegate

    AppDelegate * appDelegate = [[UIApplication sharedApplication] 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.navigationController setNavigationBarHidden:YES animated:TRUE];这个在ViewDidLoad和WillDisappear中起到隐藏导航栏的作用.

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

   detailItem =[NSEntityDescription insertNewObjectForEntityForName:@"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, [error userInfo]);

        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;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值