1、登录后,下次登录保存其用户名。

* 官方的登录实现
     
     * 1.把用户名和密码放在沙盒

NSString *user = self.userField.text;
    NSString *pwd = self.pwdField.text;
    
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:user forKey:@"user"];
    [defaults setObject:pwd forKey:@"pwd"];

//从沙盒获取出用户名

NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey@"user"];

self.userLabel.text = user;

2、使用蒙版的时候兼容ipad和iPhone

使用多一个toView、

如:

[MBPraogressHUD showError:@“正在加载” toView:self.view];

3、使用自己创建的Block函数,需要自己添加__weak转换

__weak typeof(self) selfVc = self; //这句要添加

[app xmppUserRegister:^(XMPPResultType type){

··········

}];

4、注册完后设置登录页面用户名,使用代理

a.注册界面添加代理

.h

#import <UIKit/UIKit.h>

@protocol WCRegisgerViewControllerDelegate <NSObject>

/**
 *  完成注册
 */
-(void)regisgerViewControllerDidFinishRegister;

@end
@interface WCRegisgerViewController : UIViewController

@property (nonatomic, weak) id<WCRegisgerViewControllerDelegate> delegate;

@end

.m

case XMPPResultTypeRegisterSuccess:
                [MBProgressHUD showError:@"注册成功" toView:self.view];
                // 回到上个控制器
                [self dismissViewControllerAnimated:YES completion:nil];

                if ([self.delegate respondsToSelector:@selector(regisgerViewControllerDidFinishRegister)]) {
                    [self.delegate regisgerViewControllerDidFinishRegister];
                }
                break;

b、登录界面通知代理

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    // 获取注册控制器
    id destVc = segue.destinationViewController;

    if ([destVc isKindOfClass:[WCNavigationController class]]) {
        WCNavigationController *nav = destVc;
        //获取根控制器
        WCRegisgerViewController *registerVc =  (WCRegisgerViewController *)nav.topViewController;
        // 设置注册控制器的代理
        registerVc.delegate = self;
    }

}

#pragma mark regisgerViewController的代理
-(void)regisgerViewControllerDidFinishRegister{
    WCLog(@"完成注册");
    // 完成注册 userLabel显示注册的用户名
    self.userLabel.text = [WCUserInfo sharedWCUserInfo].registerUser;

    // 提示
    [MBProgressHUD showSuccess:@"请重新输入密码进行登录" toView:self.view];

}

5.个人信息
点击cell出现三种情况
一种没反应
一种显示对话框(选择图片)
一种进入另一个控制器
通过给每一个cell设置tag,来分辨点击的情况
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{}  //点击反馈

6.xmpp模块添加步骤

例如:自动连接模块

a。在XMPPFramework.h中添加模块头文件

b。在工具类中添加模块变量

c。在工具类初始化XMPPStream中添加模块并激活

d。在dealloc中调用teardownXmpp

e。在teardownXmpp中,停止模块,并清除变量

 7、通讯录
a。好友列表
n1. 要使用花名册首先需要在XMPPFramework.h中启用电子名片的扩展头文件:
n#import "XMPPRoster.h"
n#import "XMPPRosterCoreDataStorage.h"
n
n2. 定义属性及成员变量
n3. 为XMPPSteam添加花名册扩展
n4. 设置花名册代理
n5. 在需要时使用花名册
 

//使用CoreData获取数据
    // 1.上下文【关联到数据库XMPPRoster.sqlite】
    NSManagedObjectContext *context = [WCXMPPTool sharedWCXMPPTool].rosterStorage.mainThreadManagedObjectContext;

    // 2.FetchRequest【查哪张表】
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];

    // 3.设置过滤和排序
    // 过滤当前登录用户的好友
    NSString *jid = [WCUserInfo sharedWCUserInfo].jid;
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"streamBareJidStr = %@",jid];
    request.predicate = pre;

    //排序
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];
    request.sortDescriptors = @[sort];

    // 4.执行请求获取数据
    _resultsContrl = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

    _resultsContrl.delegate = self;

    NSError *err = nil;
    [_resultsContrl performFetch:&err];
    if (err) {
        WCLog(@"%@",err);
    }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _resultsContrl.fetchedObjects.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"ContactCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    // 获取对应好友
    //XMPPUserCoreDataStorageObject *friend =self.friends[indexPath.row];
    XMPPUserCoreDataStorageObject *friend = _resultsContrl.fetchedObjects[indexPath.row];
    //    sectionNum
    //    “0”- 在线
    //    “1”- 离开
    //    “2”- 离线
    switch ([friend.sectionNum intValue]) {//好友状态
        :
            cell.detailTextLabel.text = @"在线";
            break;
        :
            cell.detailTextLabel.text = @"离开";
            break;
        :
            cell.detailTextLabel.text = @"离线";
            break;
        default:
            break;
    }
    cell.textLabel.text = friend.jidStr;

    return cell;
}
#pragma mark 当数据的内容发生改变后,会调用 这个方法
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
    WCLog(@"数据发生改变");
    //刷新表格
    [self.tableView reloadData];
}
//实现这个方法,cell往左滑就会有个delete
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        WCLog(@"删除好友");
        XMPPUserCoreDataStorageObject *friend = _resultsContrl.fetchedObjects[indexPath.row];

        XMPPJID *freindJid = friend.jid;
        [[WCXMPPTool sharedWCXMPPTool].roster removeUser:freindJid];
    }
}

b。添加好友

#import "WCAddContactViewController.h"

@interface WCAddContactViewController()<UITextFieldDelegate>

@end

@implementation WCAddContactViewController

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    // 添加好友

    // 1.获取好友账号
    NSString *user = textField.text;
    WCLog(@"%@",user);

    // 判断这个账号是否为手机号码
    if(![textField isTelphoneNum]){
        //提示
        [self showAlert:@"请输入正确的手机号码"];
        return YES;
    }

    //判断是否添加自己
    if([user isEqualToString:[WCUserInfo sharedWCUserInfo].user]){

        [self showAlert:@"不能添加自己为好友"];
        return YES;
    }
    NSString *jidStr = [NSString stringWithFormat:@"%@@%@",user,domain];
    XMPPJID *friendJid = [XMPPJID jidWithString:jidStr];

    //判断好友是否已经存在
    if([[WCXMPPTool sharedWCXMPPTool].rosterStorage userExistsWithJID:friendJid xmppStream:[WCXMPPTool sharedWCXMPPTool].xmppStream]){
        [self showAlert:@"当前好友已经存在"];
        return YES;
    }

    // 2.发送好友添加的请求
    // 添加好友,xmpp有个叫订阅

    [[WCXMPPTool sharedWCXMPPTool].roster subscribePresenceToUser:friendJid];

    return YES;
}

-(void)showAlert:(NSString *)msg{

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:msg delegate:nil cancelButtonTitle:@"谢谢" otherButtonTitles:nil, nil];
    [alert show];
}
@end
 
 
 
 

ios 微信细节的更多相关文章

  1. html5音频audio对象处理以及ios微信端自动播放和息屏后唤醒的判断---可供参考(功能都完整实现了,只是细节还没处理的很好)

    // html模版中的 此处结合了weui样式整合的微信手机端片段代码(不可直接粘贴复制进行使用)里面含有一些php的写法,可直接略过..###重点参考js代码### <div> < ...

  2. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  3. HTML实现点击时的阴影(:active)(已解决iOS微信上无法使用)

    一般是用这个委类:active 参考:http://www.w3school.com.cn/cssref/selector_active.asp 但是业界上实现的效果中,今日头条的手机端网页却不是这样 ...

  4. 苹果微信下载 iOS微信各版本列表

    微信在不断地更新迭代,ios微信下载点击这里立即开始(手机电脑都可以,电脑端要安装iTunes),每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.(这里有Android微 ...

  5. 改进:js修改iOS微信浏览器的title

    问题简介 前端入门没多久,可能连入门也不算,最近网上流行各自书籍改名,什么<前端开发,从入门到放弃>,<Android开发,从入门到改行>之类的,程序员真是个爱自嘲的群体,但我 ...

  6. iOS 微信 音频 视频自动播放

    iOS 微信 音频 视频自动播放 http://www.w3ctech.com/topic/1165

  7. 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题

    前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios ...

  8. 在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. iOS微信运动 刷分

    修改 iOS微信运动的数据  很简单,这里记录下实现步骤. 首先要安装Theos,具体安装步骤就不说了.网上很多. 大体安装步骤: sudo brew install dpkg sudo brew i ...

随机推荐

  1. Ubuntu 12.04 中安装和配置 Java JDK

    先去 Oracle下载Linux下的JDK压缩包,我下载的是jdk-7u4-linux-i586.tar.gz文件,下好后直接解压 sudo mv ./jdk1.7.0_55 /usr/lib/jdk ...

  2. 【转】python的内存管理机制

    http://developer.51cto.com/art/201007/213585.htm 内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执 ...

  3. thinkphp中的HTTP类实现下载

    public function test(){ import('ORG.Net.Http'); $filename="Uploads/v1.2.doc"; //exit($file ...

  4. easyui textarea IE8中无法换行

    经查 原代码textarea 应用了"textbox"css样式. 默认 white-space:nowrap; 修改为 "nornal",问题解决.

  5. 文本编辑器Nano实用快捷键

    一.复制.剪切和粘贴文本 1.行复制.剪切和粘贴 Alt+6:复制光标所在行. Ctrl+K:剪切光标所在行. Ctrl+U:粘贴. 2.自由复制.剪切和粘贴 自由复制: Ctrl+6:设置复制文本的 ...

  6. 基于PHP的对接电子面单接口平台案例

    电子面单接口目前有三种对接方式,快递电子面单接口.菜鸟电子面单接口和快递鸟电子面单接口.这三种接口各有特点. 一.电子面单接口定义 1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必 ...

  7. Ubuntu中useradd和adduser的区别

    在Ubuntu中创建新用户,通常会用到两个命令:useradd和adduser,虽然作用一样,但用法却不尽相同.本文接下来便为读者带来具体的解释. AD:51CTO学院:IT精品课程在线看! 在Ubu ...

  8. Sorting It All Out

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

  9. 一个开源音乐播放器,低仿QQ音乐!

    有暇,弄了个音乐播放器,页面效果整体上参考了QQ音乐,相关API使用了易源数据提供的相关接口(https://www.showapi.com/api/lookPoint/213),在此表示感谢.先来看 ...

  10. C语言预处理操作符

    在看<深入剖析Nginx>时看见一个非常少见的C语言知识点:预处理操作符. #define conn(x,y) x##y //将子串x和y连接形成新的串 #define tochar(x) ...