一、NSBundle
工程中所有的资源文件
编译文件
二、上传图片到服务器
项目:upload0509
1.客户端和服务端以二进制流的形式进行交互
2.上传图片,显然是用POST方式
NSURL *url = [NSURL URLWithString:@"http://192.168.6.227:8080/UploadFileServer/up"];
NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url];
//设置请求方法
[mRequest setHTTPMethod:@"POST"];
//设置请求体body
[mRequest setHTTPBody:imgData];
//发起请求
[NSURLConnection sendAsynchronousRequest:mRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (connectionError == nil)
{
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"ok:%@",str);
}
}];
三、从系统相册获取图片并上传至服务器
(一)从系统相册获取图片
项目:uploadFromPhotoAlbum0509
1.使用UIImagePickerController
当前类要实现如下代理即方法:
方法1:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
或方法2(已废弃):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary *)editingInfo
使用步骤:
//1.创建
UIImagePickerController *imgPickerCtr = [[UIImagePickerController alloc]init];
//2.设置代理
imgPickerCtr.delegate = self;
//3.判断资源支持情况
BOOL isAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];
if (isAvailable)
{
imgPickerCtr.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
tips:
1.UIImagePickerController的资源类型
①图库:UIImagePickerControllerSourceTypePhotoLibrary,
②相机:UIImagePickerControllerSourceTypeCamera,
③相册:UIImagePickerControllerSourceTypeSavedPhotosAlbum
2.使用GCD
处理耗时任务(block就是任务)
防止处理大图片时,造成界面卡顿
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//压缩比例
NSData *imgData = UIImageJPEGRepresentation(img, 0.5);
//上传
dispatch_async(dispatch_get_main_queue(), ^{
//抛回到主线程,刷新UI
});
});
(二)上传至服务器
项目:uploadFromAlbumToServer0509
四、对系统图库的操作
项目:ALAssetsLibraryDemo0509
//ALAssetsLibrary 的结构
//图库 ALAssetsLibrary
//相册 ALAssetsGroup
//照片 ALAssetRepresentation
//1.创建图库对象
ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
//遍历库中的相册
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
//枚举器遍历到最后,group == nil
if (group)
{
//过滤
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
//判断照片的数量是否大于0(相册里可以有O张图片)
if (group.numberOfAssets > 0)
{
//遍历相册中的照片
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
//ALAssetRepresentation:是系统对assets的封装,里面包含了图片的信息
ALAssetRepresentation *representation = result.defaultRepresentation;
//根据CGImage创建UIImage
UIImage *img = [UIImage imageWithCGImage:representation.fullScreenImage];
UIImageView *imgView = [[UIImageView alloc]init];
imgView.image = img;
imgView.frame = CGRectMake(0, i*width, width, width);
i++;
[self.view addSubview:imgView];
}];
}
}
} failureBlock:^(NSError *error) {
NSLog(@"%@",error);
}];
GitHub上的第三方库:
GMImagePicker
五、NSURLSession
项目:NSSession0509
2013年iOS7中,苹果提出了新的网络请求方案NSURLSession
日常的iOS开发中,AFNetWorking算是最常见的网络请求库:
- AF1.0 建立在 NSURLConnection的基础上
- AF2.0 同时使用NSURLConnection和NSURLSession
- AF3.0 全部使用NSURLSession(删除了所有基于NSURLConnection的代码)
NSURLSession有3种task(任务):
NSURLSessionDataTask:主要用于数据的请求json数据
NSURLSessionDownloadTask:主要用于下载文件
NSURLSessionUploadTask:主要用于上传文件
请求步骤:
1.url
2.request
3.获取NSURLSession(session)
4.使用session创建Task(DataTask/DownloadTask/UploadTask)
5.恢复Task(resume)
源码:
//1.url
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
//2.request
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//***************************重点***************************
//3.使用URLSession替换URLConnection
NSURLSession *session = [NSURLSession sharedSession];
//4.使用task发起请求
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error == nil)
{
NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@“成功。数据信息:%@“,strData);
}
else
{
NSLog(@"失败。错误信息:%@",error);
}
}];
//5.恢复task,task才会执行
[dataTask resume];
六、ALNetWorking
项目:AFNetWorking0509
1.网络的实时检测
步骤:
①获取网络检测管理器manager
②使用manager设置任务
③使用manager开始检测
2.使用 AFHTTPSessionManager 向服务器请求数据
步骤:
①获取session管理器manager
②使用manager获取数据
源码:
//一、网络的实时检测
//1.获取网络检测管理器
AFNetworkReachabilityManager *netReachManager = [AFNetworkReachabilityManager sharedManager];
//2.设置任务
[netReachManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知网络");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"断网");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"蜂窝数据");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WiFi网络");
break;
default:
break;
}
}];
//3.开始检测
[netReachManager startMonitoring];
//二、使用 AFHTTPSessionManager 向服务器请求数据
//1.获取session管理器
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.使用管理器获取数据
[manager GET:@"http://api.app.net/stream/0/posts/stream/global" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error:%@",error);
}];
测试:使用ALNetWorking实现上传下载
上传:
1.AFHTTPSessionManager
2.post(url)
下载:
1.AFHTTPSessionManager
2.get(url)