zoukankan      html  css  js  c++  java
  • [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,

    经过昨天下午和今天上午的不懈努力,终于通过了SQLite的学习。


    我们现在这里定义一个有关SQLIte的封装类,便于我在后面的用户注册,用户密码找回,和登录界面的使用

    1.首先我们看看我们建立的userModel,虽然很多属性没有使用,但是作为备用

    LCUserMessageModel.h文件。

    #import <Foundation/Foundation.h>
    
    @interface LCUserMessageModel : NSObject<NSCoding>
    
    
    @property (assign,nonatomic)NSInteger QQ;
    
    @property (copy,nonatomic)NSString *userName;
    @property (copy,nonatomic)NSString *userAddress;
    @property (copy,nonatomic)NSString *userMobilephineNumber;
    @property (copy,nonatomic)NSString *userPassword;
    @property (copy,nonatomic)NSString *userRePassword;
    @property (copy,nonatomic)NSString *userStuID;
    @property (copy,nonatomic)NSString *userSeriousFriendName;
    @property (copy,nonatomic)NSString *userPIDSixNumber;
    
    @end


    LCUserMessageModel.m文件,要说明的是,如果我是用了SQLite进行存储,那么就不需要NSCODing协议了,但是我使用的原因是因为我多次修改,使用了文件存储的方法。

    //
    //  LCUserMessageModel.m
    //  手机QQ客户端
    //
    //  Created by lichan on 13-12-11.
    //  Copyright (c) 2013年 com.lichan. All rights reserved.
    //
    
    #import "LCUserMessageModel.h"
    
    @implementation LCUserMessageModel
    
    @synthesize QQ, userAddress,userMobilephineNumber,userName,userPassword,userPIDSixNumber,userRePassword,userSeriousFriendName,userStuID;
    
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
           [aCoder encodeInteger:QQ forKey:@"QQ"];
           [aCoder encodeObject:userName forKey:@"userName"];
           [aCoder encodeObject:userAddress forKey:@"userAddress"];
           [aCoder encodeObject:userMobilephineNumber forKey:@"userMobilephineNumber"];
           [aCoder encodeObject:userPassword forKey:@"userPassword"];
           [aCoder encodeObject:userRePassword forKey:@"userRePassword"];
           [aCoder encodeObject:userStuID forKey:@"userStuID"];
           [aCoder encodeObject:userSeriousFriendName forKey:@"userSeriousFriendName"];
           [aCoder encodeObject:userPIDSixNumber forKey:@"userPIDSixNumber"];
    
    }
    
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        if (self = [super init]) {
            self.QQ = [aDecoder decodeIntegerForKey:@"QQ"];
            self.userName = [aDecoder decodeObjectForKey:@"userName"];
            self.userAddress = [aDecoder decodeObjectForKey:@"userAddress"];
            self.userMobilephineNumber = [aDecoder decodeObjectForKey:@"userMobilephineNumber"];
            self.userPassword = [aDecoder decodeObjectForKey:@"userPassword"];
            self.userRePassword = [aDecoder decodeObjectForKey:@"userRePassword"];
            self.userStuID = [aDecoder decodeObjectForKey:@"userStuID"];
            self.userSeriousFriendName = [aDecoder decodeObjectForKey:@"userSeriousFriendName"];
            self.userPIDSixNumber = [aDecoder decodeObjectForKey:@"userPIDSixNumber"];
        }
        
        return self;
    
    }
    
    -(NSString *)description
    {
        return [NSString stringWithFormat:@"QQ:%d password:%@",self.QQ,self.userPassword];
    }
    
    
    @end
    


    2.关于SQLite进行属性封装的类。很明显,我继承了NSOBject类型。注释给予说明

    #import <Foundation/Foundation.h>
    #import <sqlite3.h>
    @class LCUserMessageModel;
    @interface LCSQLite3Methods : NSObject
    {
        sqlite3 *database;
        NSError *error;
        NSString *DBFilePath;
    }
    
    - (LCUserMessageModel *)queryFromDB;  //查找所有的QQ注册信息,很多时候用不上
    
    - (NSInteger)insertORUpdateToDB:(LCUserMessageModel *)user;//注册账号的使用调用
    
    - (NSMutableArray *)findUserPasswordByMobilePhoneNumber:(NSString *)phoneNumber;//找回密码界面调用此方法
    
    - (NSMutableArray *)findUserPasswordByQQ:(NSInteger )qq Password:(NSString *)password;//用户登录时候调用此方法
    @end
    


    3.密码找回界面,SQLite接口类的使用

    1)LCFInd.h文件,不再赘述

    #import <UIKit/UIKit.h>
    @class LCSQLite3Methods;
    
    @interface LCFindPSWViewController : UIViewController
    
    @property (weak, nonatomic) IBOutlet UITextField *mobilePhoneNumber;
    
    
    @property (strong,nonatomic)LCSQLite3Methods *SQLiteMethods;
    
    - (IBAction)findPSWButtonPressed:(id)sender;
    
    -(IBAction)textFieldDoneEditing:(id)sender;
    
    @end


    2)实现文件,由于我只能依赖手机号进行找回,除非用户写入了QQ。唯一保险的办法是直接找回所有通过此手机号注册的所有QQ和密码。后续会完善此BUG。

    #import "LCFindPSWViewController.h"
    #import "LCSQLite3Methods.h"
    #import "LCUserMessageModel.h"
    
    @interface LCFindPSWViewController ()
    @property (strong,nonatomic)LCUserMessageModel *userModel;
    @end
    
    @implementation LCFindPSWViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            
            self.title = @"密码找回";
            
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
         self.navigationController.navigationBarHidden = NO;
        self.SQLiteMethods = [[LCSQLite3Methods alloc]init];
        // Do any additional setup after loading the view from its nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)findPSWButtonPressed:(id)sender {
        
         NSString *MPnumber = self.mobilePhoneNumber.text;
        
         NSMutableArray *findArray =[self.SQLiteMethods findUserPasswordByMobilePhoneNumber:MPnumber];
        
           NSString *message = [NSString stringWithFormat:@"此手机号注册的QQ号码:%@",findArray];
           UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"恭喜您,密码找回成功!" message:message delegate:self cancelButtonTitle:@"好的" otherButtonTitles:nil];
        
           [alertView show];
        
    //    self.userModel = [[LCUserMessageModel alloc]init];
    //    
    //    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSAllDomainsMask, YES) objectAtIndex:0];
    //    NSString *userFilePath = [path stringByAppendingPathComponent:self.mobilePhoneNumber.text];
    //    
    //    NSMutableData *data = [NSMutableData dataWithContentsOfFile:userFilePath];
    //    
    //    self.userModel = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    // 
    //    NSString *MPnumber = self.mobilePhoneNumber.text;
    //    
    //    NSString *message = [NSString stringWithFormat:@"已初始化账号为%@的密码为%@,请尽快修改密码。",MPnumber,self.userModel.userPassword];
    //    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"恭喜您,密码找回成功!" message:message delegate:self cancelButtonTitle:@"好的" otherButtonTitles:nil];
    //    
    //    [alertView show];
    }
    
    #pragma mark 取消键盘响应的方法
    -(IBAction)textFieldDoneEditing:(id)sender
    {
        [sender resignFirstResponder];
        
        
    }
    
    @end
    


  • 相关阅读:
    android界面基本属性
    iOS请求webservice
    图片在鼠标经过时变大
    控制字体大小,em与px的区别与应用
    IE的另类CSS hack,条件注释
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    CSS实现文字压在边线上的效果,fieldset与legend
    每个.NET 开发人员应该下载的十个必备工具
    css做出丰富的Tooltips
    .NET牛人应该知道些什么?
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3476539.html
Copyright © 2011-2022 走看看