您的位置:首页 > 移动开发 > IOS开发

蓝懿iOS 技术内容和心得 12.6

2015-12-06 22:57 495 查看
   今天老师给我们讲解了支付功能和极光推送  但是没怎么听明白  我们还是在复习一下前面的东西:

大量数据通过Socket传输:

1、客户端发送时对文件进行处理:

NSString *filePath = @"/Users/ivan/Documents/第二期/视频/day29/3打地鼠续.mp4";      

        NSData *fileData = [NSData dataWithContentsOfFile:filePath];

        //文件名和文件长度拼接到一个字符串中

        NSString *headerString = [NSString stringWithFormat:@"%@&&%ld",[filePathlastPathComponent],fileData.length];

        NSData *headerData = [headerString dataUsingEncoding:NSUTF8StringEncoding];

        NSLog(@"%ld",headerData.length);

        //创建一个100个字节的data

        NSMutableData *allData = [NSMutableDatadataWithLength:100];

        //替换一部分

        [allData replaceBytesInRange:NSMakeRange(0, headerData.length)withBytes:headerData.bytes];

        //把文件数据追加到后面

        [allData appendData:fileData];

// 往端口写数据

 [self.clientSocketwriteData:allData withTimeout:-1tag:0];​

//创建客户端socket

        self.clientSocket = [[AsyncSocketalloc]initWithDelegate:self];

   //建立链接

        [self.clientSocketconnectToHost:self.hostTF.textonPort:8000error:nil];

2、服务器接收到数据时进行处理:

//已经读取到数据​

-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{

    //取出前100个字节的数据

    NSData *headerData = [data subdataWithRange:NSMakeRange(0, 100)];

    NSString *headerString = [[NSStringalloc]initWithData:headerDataencoding:NSUTF8StringEncoding];

    //判断是不是头数据

    if (headerString&&[headerString componentsSeparatedByString:@"&&"].count==2) {//是头数据

        NSArray *headers = [headerString componentsSeparatedByString:@"&&"];

        self.fileName = headers[0];

        self.length = [headers[1] longLongValue];

        //抛去头剩下的文件数据得到

        NSData *subFileData = [data subdataWithRange:NSMakeRange(100, data.length-100)];

        //每次接收到头的话都初始化data避免多个文件da
4000
ta在同一个data中

        self.allData = [NSMutableData data];

        [self.allData appendData:subFileData];

    }else{//不包含头的数据

        [self.allData appendData:data];   

    }

    //判断文件是否传输完成

    if (self.allData.length==self.length) {

        //把传过来的数据储存

        NSString *newPath = [@"/Users/ivan/Desktop/a"stringByAppendingPathComponent:self.fileName];

        //加载到内存中也是二进制数据

        [self.allData writeToFile:newPath atomically:YES];

        

    }

    //把传输过来的二进制数据转成字符串

    NSLog(@"%ld",data.length);

    //调用读取数据的方法  防止一个文件一次没传完

    [self.myNewSocketreadDataWithTimeout:-1tag:0];

网络请求:

一、直接从网络上加载图片:

导入:​#import "UIImageView+AFNetworking.h"

 

    NSString *path = @"http://pic28.nipic.com/20130419/12299514_180213138000_2.jpg";

    UIImageView *iv = [[UIImageViewalloc]initWithFrame:self.view.bounds];

    [iv setImageWithURL:[NSURL URLWithString:path]];

    [iv setImageWithURL:[NSURLURLWithString:path] placeholderImage:[UIImageimageNamed:@"a.png"]];

    [self.view addSubview:iv];

二、纯代码添加UINavigationController

    self.window = [[UIWindowalloc]initWithFrame:[UIScreenmainScreen].bounds];

    ViewController * vc = [[ViewControlleralloc]init];

    UINavigationController * nv = [[UINavigationControlleralloc]initWithRootViewController:vc];

    self.window.rootViewController =nv;

    [self.windowmakeKeyAndVisible];

三、从网络请求数据:有get 和post两种方法

get方法:​

导入:#import "AFNetworking.h"​

//    使用AFNetworking发出http请求

    NSString *webPath = @"http://apis.juhe.cn/cook/query";

//    key=&menu=黄焖鸡&rn=10&pn=3

    NSDictionary *params =@{@"key":@"80996127f667eac43832103850b3b13a",@"menu":@"黄焖鸡",@"rn":@"10"};

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

//   使用manager发出请求的时候需要做一下响应数据的序列化

    [manager setResponseSerializer:[AFHTTPResponseSerializerserializer]];

    //用get请求,若webPath已经包含所有信息,则id后边写nil

    [manager GET:webPath parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:0error:nil];

        NSLog(@"请求成功:%@",dic);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"请求失败");

    }];

学习ios  重要还是要理清楚思路  在做或者看老师代码的时候 自己多想想为什么  不要自己看着就抄       另外还是要推荐一下 蓝懿IOS这个培训机构  和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!

                                                                  写博客第五十七天;

                                                                              QQ:565803433
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息