来自 计算机网络 2019-11-27 23:39 的文章
当前位置: 六合联盟网 > 计算机网络 > 正文

iOS达成轻便备忘录程序,iOS开垦之使用XMPPFramew

iOS实现轻易备忘录程序——TaskList

在事实上生活中,由于作业太多太杂,我们反复会遗忘一些作业。该利用正是基于那样的客商痛点而付出的任务列表。相符iOS自带的备忘录程序。你能够任何时候记录一些音信,并得以实时的进展封存。在程序重新展开时会显示你保存的持有信息。该德姆o作者大器晚成度上传 。

该选拔主要完毕的技术正是iOS控件UITableView的采纳和CoreData实行仓库储存。TableView相似Android中的ListView,可以列表展现音信,并自动增添行数。而CoreData是iOS对SQLite嵌入式数据库的卷入,能够极为有利的拓宽数量的增加和删除改查。大家因此代码来完成一下:

(1卡塔尔由于自家索要利用CoreData来囤积数据,所以在一初步创办项目标时候供给勾选Use CoreData那一个复选框。项目名称叫TaskList.

(2卡塔 尔(阿拉伯语:قطر‎在开创完项目后,展开TaskList.xcdatamodeld文件,进行CoreData的数据布局划虚构计。点击下方的Add Entity开关,增添四个实例——Task。然后在左边扩张多个属性taskname,类型为String.因为在对于每八个任务,大家一时只存款和储蓄它的天职名称就能够。

图片 1

 

(3卡塔 尔(阿拉伯语:قطر‎在分界面中追加二个职务名称输入框,二个日增开关,贰个TableView就可以。在选取segue进行代码绑定后,在ViewController中落成如下:

 

#import ViewController.h
#import AppDelegate.h
#import 


@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextField *inputTextField;
@property (weak, nonatomic) IBOutlet UITableView *taskTableView;

@property(strong,nonatomic) NSMutableArray *taskArray;

@property(strong,nonatomic) NSArray *arr;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  //应用启动的时候加载数据库文件;
  NSManagedObjectContext *context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
  NSFetchRequest *fetchData = [[NSFetchRequest alloc] initWithEntityName:@Task];
  self.arr = [context executeFetchRequest:fetchData error:nil];

  self.taskArray = [[NSMutableArray alloc] initWithArray:[self.arr valueForKey:@taskname]];
}


#pragma mark - UITableViewDataSource
//每一个section有几个cell;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  return self.taskArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@MyCell forIndexPath:indexPath];
  cell.textLabel.text = [self.taskArray objectAtIndex:indexPath.row];

  return cell;
}

#pragma mark - 点击增加按钮
- (IBAction)addTaskButtonClick:(id)sender {

  NSString *inputStr = [[NSMutableString alloc] initWithFormat:@%@,self.inputTextField.text];
  inputStr = [inputStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

  //判断如果输入的为空,则不添加;
  if ([inputStr  isEqual: @]) {

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@提示 message:@输入的内容不能为空 preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@确定 style:UIAlertActionStyleDefault handler:nil]];
    [self presentViewController:alert animated:true completion:nil];
  } else {

    //每点击一次“确定”按钮后,就把该数据存储到CoreData中;
    [self saveToCoreData:inputStr];

    //把一个文本存储到taskArray数组中;
    [self.taskArray insertObject:self.inputTextField.text atIndex:self.taskArray.count];
    [self.taskTableView reloadData];

    //清空输入框;
    self.inputTextField.text = nil;

    //点击确定后消失软键盘;
    [self.inputTextField resignFirstResponder];


  }


}

#pragma mark - 保存数据到CoreData;
- (void) saveToCoreData:(NSString *)taskName{

  NSManagedObjectContext *context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
  NSManagedObject *row = [NSEntityDescription insertNewObjectForEntityForName:@Task inManagedObjectContext:context];

  [row setValue:taskName forKey:@taskname];
  [context save:nil];
  NSLog(@已保存到数据库);
}




#pragma mark - UIScrollViewDelegate
//滚动TableView的时候隐藏软键盘;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

  [self.inputTextField resignFirstResponder];

}




@end

最终的完毕效果与利益如下:

 

图片 2

 

图片 3

 

在实际生活中,由于业务太多太杂,大家每每会遗忘一些事务。该行使正是借助那样的顾客痛点而付出的...

iOS开荒之使用XMPPFramework落成即时通讯(二),iosxmppframework

  上篇的博客iOS开拓之使用XMPPFramework完结即时通讯(生机勃勃)只是本篇的序曲,本篇博客就给前边的Wechat增添即时通信的功力,首纵然对XMPPFramework的使用。本篇博客中用到了Spark做测量试验,当然也少不了Openfire服务器,在此就不详述Openfire的设置进度了(网络的课程依旧蛮多的卡塔 尔(英语:State of Qatar),Openfire的安装仅须求叁个数据库的扶持,本篇是用的MySql数据库。当然那不是本篇的主要。

  废话少说,切入今日的主旨。前日要给前边的Wechat参预登录,获取好朋友列表,谈天(发送文字,表情,图片,声音等职能),近些日子联系人等。在博客的起来依旧先来几张图来介绍一下功用,然后再提交宗旨代码的落到实处。

  生龙活虎、作用模块截图

    1.登陆和获得亲密的朋友列表

      登录的经过正是连连用XMPPFramework连接Openfire的历程,假使客商登入过,就从UserDefault里拿走顾客的JID和密码自动一连,假若客户未有登入过则登入。获取好友列表也是经过XMPPFramework中的Roster来获取的,运营截图如下:

2.好朋友点击去便是娓娓动听页面,闲聊时只借使发送的图形大概声音,先存款和储蓄到服务器上囤积,服务器会回来存储路径然后再把U路虎极光L发送给选择方,选用方再下载

      (1卡塔尔国即使是发送的文字,把文字转成属性字符串,然后再转成NSData,最终转成字符串放在Message的Body中开展发送,上边是用斯Parker做接纳端做得测量试验,截图如下:

图片 4

    (2)发送图片,把图片的储存路线发送给对方,让对方从服务器上下载。截图如下:

图片 5

    (3卡塔 尔(阿拉伯语:قطر‎发送声音和图表肖似都是发送U中华VL,截图如下:

  二、代码完成部分

    下面的有的是允许的功效截图,从截图上是轻松看出成效点的。图就先贴到那吗,下边给出大旨代码的完结。

    1.应用XMPPFramework前的预备,获取XmppStream和激活要用的组件,在AppDelegate加多代码。今后要用xmppStream时,要因而AppDelegate获取。上边包车型客车代码是在AppDelegate.m中开展的连锁组件的最初化,代码如下

      (1)实例化XMPPStream

    //创建xmppstream
    self.xmppStream = [[XMPPStream alloc]init];

 

      (2)创制重连组件,并在xmppStream中激活

1   //创建重写连接组件
2     xmppReconnect= [[XMPPReconnect alloc] init];
3     //使组件生效
4     [xmppReconnect activate:self.xmppStream];

 

      (3)创立message部分的内容,选取的新闻大家保留在地面数据库中,我们要显得的时候是从数据库中拿走的。在最早化音信组件的时候,要钦点保存计策,常常能够选的是CoreData依旧内部存款和储蓄器。钦点完保存战略后实例化Message是要涉及保存计策,之后也是索要在XMPPStream中实行激活的,最终要赢得CoreData的上下文。代码如下:

1     //创建消息保存策略(规则,规定)
2     messageStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
3     //用消息保存策略创建消息保存组件
4     xmppMessageArchiving = [[XMPPMessageArchiving alloc]initWithMessageArchivingStorage:messageStorage];
5     //使组件生效
6     [xmppMessageArchiving activate:self.xmppStream];
7     //提取消息保存组件的coreData上下文
8     self.xmppManagedObjectContext = messageStorage.mainThreadManagedObjectContext;

 

      (4),开始化获取好朋友列表的连锁组件并钦定保存计策,和方面包车型地铁代码步骤极为相像。那也能看出来在XMPPFramework中开展零器件的发轫化步骤是大半的。下边大家设定自动获取花名册,代码如下:

1     xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];
2     xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterStorage];
3     //自动获取用户列表
4     xmppRoster.autoFetchRoster = YES;
5     xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
6     
7     [xmppRoster activate:self.xmppStream];
8     self.xmppRosterManagedObjectContext = xmppRosterStorage.mainThreadManagedObjectContext;

 

    2.登录模块的兑现

      登录时正是客商输入JID和Password,然后连接服务器和认证密码,要是注脚成功则跳转到老铁列表才Controller,同一时间把JID和Password存款和储蓄到UserDefaults中有益下一次机关一连。上边包车型大巴代码正是登入部分的代码(LoginViewController.m):

      (1).通过运用代理获取XMPPStream,并注册回调,代码如下:

 1 -(void) initXmpp
 2 {
 3     //获取应用的xmppSteam(通过Application中的单例获取)
 4     UIApplication *application = [UIApplication sharedApplication];
 5     id delegate = [application delegate];
 6     self.xmppStream = [delegate xmppStream];
 7     
 8     //注册回调
 9     [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
10 }

 

      (2).创立JID连接服务器

 1 //连接服务器
 2 -(void) xmppConnect
 3 {
 4     if (![self.userNameTextFiled.text isEqualToString:@""] && self.userNameTextFiled.text != nil)
 5     {
 6         //1.创建JID
 7         XMPPJID *jid = [XMPPJID jidWithUser:self.userNameTextFiled.text domain:MY_DOMAIN resource:@"iPhone"];
 8         
 9         //2.把JID添加到xmppSteam中
10         [self.xmppStream setMyJID:jid];
11         
12         //连接服务器
13         NSError *error = nil;
14         [self.xmppStream connectWithTimeout:10 error:&error];
15         if (error)
16         {
17             NSLog(@"连接出错:%@",[error localizedDescription]);
18         }
19 
20     }
21     else
22     {
23         UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"用户名不能为空" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
24         [alter show];
25     }
26 }

 

      (3).连接成后要求表达密码,代码如下:

 1 //连接后的回调
 2 -(void)xmppStreamDidConnect:(XMPPStream *)sender
 3 {
 4     if (![self.passwordTextFiled.text isEqualToString:@""] && self.passwordTextFiled.text != nil)
 5     {
 6         //连接成功后认证用户名和密码
 7         NSError *error = nil;
 8         [self.xmppStream authenticateWithPassword:self.passwordTextFiled.text error:&error];
 9         if (error)
10         {
11             NSLog(@"认证错误:%@",[error localizedDescription]);
12         }
13     }
14     else
15     {
16         UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"密码不能为空" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil];
17         [alter show];
18     }
19 }

 

      (4)密码验证成功后的回调

 1 //认证成功后的回调
 2 -(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
 3 {
 4     NSLog(@"登陆成功");
 5     
 6     //密码进入userDefault
 7     NSUserDefaults *userDefult = [NSUserDefaults standardUserDefaults];
 8     [userDefult setObject:self.userNameTextFiled.text forKey:@"username"];
 9     [userDefult setObject:self.passwordTextFiled.text forKey:@"password"];
10     
11     //设置在线状态
12     XMPPPresence * pre = [XMPPPresence presence];
13     [self.xmppStream sendElement:pre];
14     
15     UIStoryboard *storybard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
16     UIViewController *viewController = [storybard instantiateViewControllerWithIdentifier:@"mainController"];
17     [self presentViewController:viewController animated:YES completion:^{
18     }];
19 }

 

      (5)密码验证铩羽后的回调

1 //认证失败的回调
2 -(void)xmppStream:sender didNotAuthenticate:(DDXMLElement *)error
3 {
4     NSLog(@"认证失败");
5 }

 

      (6),二遍登录活动三回九转代码:

 1    // 如果已登录就直接填充密码登陆
 2     NSUserDefaults *userDefult = [NSUserDefaults standardUserDefaults];
 3     
 4     NSString *userName = [userDefult objectForKey:@"username"];
 5     NSString *password = [userDefult objectForKey:@"password"];
 6     NSLog(@"%@,%@",userName,password);
 7     if (userName != nil && password != nil && ![userName isEqualToString:@""] && ![password isEqualToString:@""])
 8     {
 9         self.userNameTextFiled.text = userName;
10         self.passwordTextFiled.text = password;
11         [self xmppConnect];
12     }

    

    3.拿走基友列表的XMPPFramework的代码达成

      在收获顾客列表的代码中就能用到我们事情未发生前注册的Roster的剧情,因为大家在实例化Roster的时候钦命的保存战术是用CoreData举办保存的,並且是机动获取亲密的朋友列表。所以在获取好朋友列表的TableViewController中大家只供给经过CoreData来拿到基友列表就能够。下边将提交获取亲密的朋友列表的中坚代码:

      (1),获取Roster对应的上下文,用于获取存款和储蓄在Roster相应实体中的数据

1     //获取Roster的上下文
2     UIApplication *application = [UIApplication sharedApplication];
3     id delegate = [application delegate];
4     self.xmppRosterManagedObjectContext = [delegate xmppRosterManagedObjectContext];

      

      (2).获取FetchRequst对象,并钦定CoreData实体类,之后加多排序法则,代码如下:

1     //从CoreData中获取数据
2     //通过实体获取FetchRequest实体
3     NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([XMPPUserCoreDataStorageObject class])];
4     //添加排序规则
5     NSSortDescriptor * sortD = [NSSortDescriptor sortDescriptorWithKey:@"jidStr" ascending:YES];
6     [request setSortDescriptors:@[sortD]];

  

      (3).获取FetchedResultController并登记回调,用于机动刷新TableView,代码如下:

1     //获取FRC
2     self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.xmppRosterManagedObjectContext sectionNameKeyPath:nil cacheName:nil];
3     self.fetchedResultsController.delegate = self;

 

      (4)获取存款和储蓄的开始和结果

1     
2     //获取内容
3     NSError * error;
4     ;
5     if (![self.fetchedResultsController performFetch:&error])
6     {
7         NSLog(@"%s  %@",__FUNCTION__,[error localizedDescription]);
8     }

  

  至于如何在TableView上出示FetchedResultController获取的多寡,请参见以前的博客:IOS开采之表视图喜欢上CoreData。

  近年来关系人的代码和野史表情的代码近似,请仿照效法在此之前的博客:iOS开辟之Wechat聊天软件栏的包装

  聊页面包车型客车贯彻请参见以前的博客:iOS开荒之Wechat闲谈页面实现

  

  前几日的XMPPFramework就先到那儿吧,内容也挺多的了,其实XMPPFramework中的组件使用形式都大致,首先第初阶化内部存储器,然后进行有关配置,在后正是在XMPPStream中激活,最终就是怎样行使了。

  转发请评释出处:青玉伏案: 

iOS开拓:怎完成用贰个密码对点名的当众加密?最佳是DES只怕AES的有什Framework

您能够实用ios系统自带的加密方法。援用:
#import <CommonCrypto/CommonDigest.h>
详细:www.cnblogs.com/...4.html

问问轻易,回答精确,且问且选择!  

谁有OC的xmppframework?

没有  

上篇的博客 iOS开采之使用XMPPFramework完结即时通讯(风流倜傥) 只是本篇的序曲,本篇博客就...

本文由六合联盟网发布于计算机网络,转载请注明出处:iOS达成轻便备忘录程序,iOS开垦之使用XMPPFramew

关键词: