delegate

导航

 

 

#import <UIKit/UIKit.h>

 

@interface LYMAppDelegate : UIResponder <UIApplicationDelegate>

 

@property (strong, nonatomic) UIWindow *window;

//增删改查等功能通过managedObjectContext操作

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

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

//绑定CoreData1.xcdatamodeld与CoreData1.sqlite数据库 

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

 

- (void)saveContext;

- (NSURL *)applicationDocumentsDirectory;

 

@end

 #import "LYMAppDelegate.h"
#import "UserInfo.h"
@implementation LYMAppDelegate

@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
   // [self addData];
   [self fetchData];
   // [self updataData];
   // [self deleteData];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
//增加数据
-(void)addData
{
    //获得实体对象
    UserInfo *uInfo=[NSEntityDescription insertNewObjectForEntityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
    //给实体赋值
    uInfo.name=@"zhangsan";
    uInfo.age=[NSNumber numberWithInt:20];
    UIImage *image=[UIImage imageNamed:@"a.png"];
    NSData *data=UIImagePNGRepresentation(image);
    uInfo.headImage=data;
    //保存到数据库
    BOOL b=[self.managedObjectContext save:nil];
    NSLog(@"%i",b);
    
}
//查找数据
-(void)fetchData
{  //创建数据库查询请求对象
    NSFetchRequest *request=[[NSFetchRequest alloc]init];
    //创建数据库中准备查询的实体
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
    //设置请求对象的实体
    [request setEntity:entity];
    //执行数据请求
    NSArray *array=[self.managedObjectContext executeFetchRequest:request error:nil];
    //遍历查询的结果
    for (UserInfo *uInfo in array) {
        NSLog(@"%@",uInfo.name);
        //后面的图片会覆盖前面的图片
        UIImage *image=[[UIImage alloc]initWithData:uInfo.headImage];
        UIImageView *imgView=[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        imgView.image=image;
        [self.window addSubview:imgView];
    }
    
}
//删除数据
-(void)deleteData
{
//查找到准备删除的对象
//删除对象
//保存对象
    NSFetchRequest *request=[[NSFetchRequest alloc]init];
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
    [request setEntity:entity];
    
    NSArray *array=[self.managedObjectContext executeFetchRequest:request error:nil];
    UserInfo *uInfo=[array objectAtIndex:0];
    //删除数据
    [self.managedObjectContext deleteObject:uInfo];
    //保存数据
    [self.managedObjectContext save:nil];
    
    
    
    
}
//更新数据
-(void)updataData
{
  //1,查找到准备修改的对象
  //2,修改
  //3,保存
    
    //创建数据请求对象
    NSFetchRequest *request=[[NSFetchRequest alloc]init];
    //创建准备查找的实体(表)
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
    //设置请求对象的实体,也可以理解为设置请求的是哪张表
    [request setEntity:entity];
    //开始执行请求
    NSArray *array=[self.managedObjectContext executeFetchRequest:request error:nil];
    UserInfo *uInfo=[array objectAtIndex:1];//取出第二个对象
    //修改数据
    uInfo.name=@"xiaoli";
    uInfo.age=[NSNumber numberWithInt:80];
    //保存修改后的结果
    [self.managedObjectContext save:nil];
    
    
}
#import <UIKit/UIKit.h>
@class LYMAppDelegate;
#import "ListViewController.h"
@interface RootViewController : UIViewController<UITextFieldDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
{
    //图片拾取器,声明手机相册
    UIImagePickerController *_pickerController;
    ListViewController *_listController;
}
@property (strong, nonatomic) IBOutlet UITextField *nameTextFiled;
@property (strong, nonatomic) IBOutlet UITextField *pwdTextField;
@property (strong, nonatomic) IBOutlet UITextField *ageTextField;
@property (strong, nonatomic) IBOutlet UIImageView *imgView;
- (IBAction)registBtn:(id)sender;
- (IBAction)loginBtn:(id)sender;

@end

#import "RootViewController.h"
#import "LYMAppDelegate.h"
#import "UserInfo.h"
@interface RootViewController ()

@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    //为头象的UIImageView控件添加点击的手势
    UITapGestureRecognizer *tapClick=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClickPickImage:)];
    self.imgView.userInteractionEnabled=YES;
    [self.imgView addGestureRecognizer:tapClick];
    
    
    
}
//#######################
//访问手机相册
-(void)tapClickPickImage:(UITapGestureRecognizer *)tap
{
    _pickerController=[[UIImagePickerController alloc]init];
    _pickerController.delegate=self;
    //显示手机相册
    [self presentViewController:_pickerController animated:YES completion:^{
        
    }];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//写入数据库
- (IBAction)registBtn:(id)sender {
    //每个应用程序在系统中以单例形式存在,通过单例找到应用程序对象
    UIApplication *app=[UIApplication sharedApplication];
    //因为LYMAppDelegate是UIApplication得代理方所以app.delegate就可以找到LYMAppDelegate对象
    LYMAppDelegate *delegate=app.delegate;
    //插入数据
    UserInfo *uInfo=[NSEntityDescription insertNewObjectForEntityForName:@"UserInfo" inManagedObjectContext:delegate.managedObjectContext];//创建实体类
    uInfo.name=self.nameTextFiled.text;
    uInfo.password=self.pwdTextField.text;
    uInfo.age=[NSNumber numberWithInt:[self.ageTextField.text intValue]];
    UIImage *image=self.imgView.image;
    NSData *data=UIImagePNGRepresentation(image);
    uInfo.imgView=data;
    BOOL b=[delegate.managedObjectContext save:nil];
    NSLog(@"%i",b);
    
    
    
}
//查询数据库
- (IBAction)loginBtn:(id)sender {
    UIApplication *app=[UIApplication sharedApplication];
    LYMAppDelegate *delegate=app.delegate;
    //创建数据库请求对象
    NSFetchRequest *request=[[NSFetchRequest alloc]init];
    //创建数据库准备请求的实体
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:delegate.managedObjectContext];
    //为请求对象设置准备请求的实体
    [request setEntity:entity];
    //开始请求数据
    NSArray *array=[delegate.managedObjectContext executeFetchRequest:request error:nil];
    for (UserInfo *uInfo in array) {
    //判断数据库中有没有和文本框中的姓名相同的名字
        if ([uInfo.name isEqualToString:self.nameTextFiled.text]) {
            //去判断密码是否相同
            if ([uInfo.password isEqualToString:self.pwdTextField.text]) {
                NSLog(@"登陆成功");
                _listController=[[ListViewController alloc]initWithNibName:@"ListViewController" bundle:nil];
                [self presentViewController:_listController animated:YES completion:^{
                    
                }];
            }
        }
    }
    
    
    
}
#pragma -mark UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //设置文本框失去第一响应者
    [textField resignFirstResponder];
    return YES;
}
//#######################
#pragma -mark UIImagePickerControllerDelegate
//选中手机相册的图片是调用该方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
    self.imgView.image=image;
    //隐藏手机相册
    [_pickerController dismissViewControllerAnimated:YES completion:^{
        
    }];
}
@end



#import <UIKit/UIKit.h>
#import "MyCell.h"
@interface ListViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
    NSMutableArray *_mutArray;
}
@property (strong, nonatomic) IBOutlet UITableView *tbView;

@end



#import "ListViewController.h"
#import "LYMAppDelegate.h"
#import "UserInfo.h"
@interface ListViewController ()

@end

@implementation ListViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    UINib *nib=[UINib nibWithNibName:@"MyCell" bundle:nil];
    [self.tbView registerNib:nib forCellReuseIdentifier:@"strIdentifier"];
}
//页面即将显示时调用该方法
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    UIApplication *app=[UIApplication sharedApplication];
    LYMAppDelegate *delegate=app.delegate;
    NSFetchRequest *request=[[NSFetchRequest alloc]init];
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:delegate.managedObjectContext];
    [request setEntity:entity];
    NSArray *array=[delegate.managedObjectContext executeFetchRequest:request error:nil];
    //用数据库中的数据初始化数据源数组
    _mutArray=[[NSMutableArray alloc]initWithArray:array];
    [self.tbView reloadData];
    
    
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
#pragma -mark UITableViewDataSources
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _mutArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyCell *cell=[tableView dequeueReusableCellWithIdentifier:@"strIdentifier"];
    UserInfo *uInfo=[_mutArray objectAtIndex:indexPath.row];
    
    cell.nameLabel.text=uInfo.name;
    cell.ageLabel.text=[NSString stringWithFormat:@"%i",[uInfo.age intValue]];
    cell.pwdLabel.text=uInfo.password;
    cell.imgView.image=[UIImage imageWithData:uInfo.imgView];
    return cell;
}
//*******删除
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIApplication *app=[UIApplication sharedApplication];
    LYMAppDelegate *delegate=app.delegate;
    NSFetchRequest *request=[[NSFetchRequest alloc]init];
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:delegate.managedObjectContext];
    [request setEntity:entity];
    //将数据库中查到的信息放到可变数组中
    NSMutableArray *mutArray=[[NSMutableArray alloc]initWithArray:[delegate.managedObjectContext executeFetchRequest:request error:nil]];
    UserInfo *uInfo=[mutArray objectAtIndex:indexPath.row];
    //数据库中删除
    [delegate.managedObjectContext deleteObject:uInfo];
    [delegate.managedObjectContext save:nil];
    //数据源中也要删除对象
    [_mutArray removeObjectAtIndex:indexPath.row];
    //删除页面行的信息
    [self.tbView reloadData];
}
#pragma -mark UITableViewDelegate
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 60;
}
//*******删除
//返回编辑时的样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}
//*******删除
//设置删除按钮上面的文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"删除";
}
@end

 

posted on 2015-05-09 18:24  jsonUserList  阅读(188)  评论(0编辑  收藏  举报