当前位置:首页 » 文件管理 » mknetworkkit上传图片

mknetworkkit上传图片

发布时间: 2024-06-10 06:04:27

A. 如何改进iOS App的离线使用体验

打开过的文章、下载过的音频、查看过的图片我们都希望Cache到本地,下次不用再向服务器请求。

首先,我们为了最快让用户看到内容,会在ViewDidLoad加载Cache数据,如:

- (void)viewDidLoad {

[self getArticleList:0 length:SECTION_LENGTH useCacheFirst:YES];
}

然后在viewDidAppear中向服务器请求最新数据,如

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

//...

[self getArticleList:0 length:SECTION_LENGTH useCacheFirst:NO]
}

当然这里的getArticleList接口有useCacheFirst参数,我们需要网络请求模块能够支持这一点,下面就介绍这些库和工具。
(借助一些工具很容易能做到这些,而不用自己造轮子。遵循“凡事都应该最简单,而不过于简陋”的原则,这里整理一下,方便项目中使用)。

1.NSMutableURLRequest

Sample(参考麒麟的文章《iOS开发之缓存(一):内存缓存》来使用NSURLCache):

NSString *paramURLAsString= @"http://www..com/";
if ([paramURLAsString length] == 0){
NSLog(@"Nil or empty URL is given");
return;
}
NSURLCache *urlCache = [NSURLCache sharedURLCache];
/* 设置缓存的大小为1M*/
[urlCache setMemoryCapacity:1*1024*1024];
//创建一个nsurl
NSURL *url = [NSURL URLWithString:paramURLAsString];
//创建一个请求
NSMutableURLRequest *request =
[NSMutableURLRequest
requestWithURL:url
cachePolicy:
timeoutInterval:60.0f];
//从请求中获取缓存输出
NSCachedURLResponse *response =
[urlCache cachedResponseForRequest:request];
//判断是否有缓存
if (response != nil){
NSLog(@"如果有缓存输出,从缓存中获取数据");
[request setCachePolicy:];
}
self.connection = nil;
/* 创建NSURLConnection*/
NSURLConnection *newConnection =
[[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:YES];
self.connection = newConnection;
[newConnection release];

但是NSMutableURLRequest使用起来不够简便,在实际项目中我很少用它,而基本使用ASIHTTPRequest来代替。

2.ASIHTTPRequest

你可以从这里找到它的介绍:http://allseeing-i.com/ASIHTTPRequest/,在5.0/4.0及之前iOS版本,ASIHTTPRequest基本是主力的 HTTP requests library,它本身也是Github中的开源项目,但是从iOS 5.0之后逐渐停止维护了。未来的项目可以使用AFNetworking或者MKNetworkKit代替ASIHTTPRequest。

ASIHTTPRequest的简介如下:

ASIHTTPRequest is an easy to use wrapper around the CFNetwork API
that makes some of the more tedious aspects of communicating with web
servers easier. It is written in Objective-C and works in both Mac OS X
and iPhone applications.

It is suitable performing basic HTTP requests and interacting with
REST-based services (GET / POST / PUT / DELETE). The included
ASIFormDataRequest subclass makes it easy to submit POST data and files
usingmultipart/form-data.

ASIHTTPRequest库API设计的简单易用,并且支持block、queue、gzip等丰富的功能,这是该开源项目如此受欢迎的主要原因。

ASIHTTPRequest库中提供了ASIWebPageRequest组件用于请求网页,并且能把网页中的外部资源一并请求下来,但是我在实际项目中使用后发现有严重Bug,所以不建议使用。

ASIHTTPRequest库的介绍中也提到了它可以支持REST-based service,但是与Restfull API打交道我们往往使用下面介绍的的RestKit。

Sample:

NSMutableString *requestedUrl = [[NSMutableString alloc] initWithString:self.url];

//如果优先使用本地数据
ASICachePolicy policy = _useCacheFirst ?
: ( | );

asiRequest = [ASIHTTPRequest requestWithURL:
[NSURL URLWithString:[requestedUrl :NSUTF8StringEncoding]]];

[asiRequest setDownloadCache:[ASIDownloadCache sharedCache]];
[asiRequest setCachePolicy:policy];
[asiRequest setCacheStoragePolicy:];

// Connection
if (_connectionType == ConnectionTypeAsynchronously) {

[asiRequest setDelegate:self];
[asiRequest startAsynchronous];

// Tell we're receiving.
if (!_canceled && [_delegate respondsToSelector:@selector(downloaderDidStart:)])
[_delegate downloaderDidStart:self];
}
else
{
[asiRequest startSynchronous];

NSError *error = [asiRequest error];

if (!error)
{
[self requestFinished:asiRequest];
}
else
{
[self requestFailed:asiRequest];
}
}

[requestedUrl release];

3.RestKit

官方网站:http://restkit.org/,Github开源项目,与 Restfull API 的 Web服务打交道,这个库非常便捷,它也提供了很完整的Cache机制。

Sample:

+ (void)setCachePolicy:(BOOL)useCacheFirst
{
RKObjectManager* objectManager = [RKObjectManager sharedManager];

if (useCacheFirst) {
objectManager.client.cachePolicy = RKRequestCachePolicyEnabled; //使用本地Cache,如果没有Cache请求服务器
}
else
{
objectManager.client.cachePolicy = |RKRequestCachePolicyTimeout; //离线或者超时时使用本地Cache
}
}

+ (BOOL)getHomeTimeline:(NSInteger)maxId
length:(NSInteger)length
delegate:(id<RKObjectLoaderDelegate>)delegate
useCacheFirst:(BOOL)useCacheFirst
{
if (delegate == nil)
return NO;

[iKnowAPI setCachePolicy:useCacheFirst];

//...
}

Cache请求只是RestKit最基本的功能,RestKit真正强大的地方在于处理与RESTful web services交互时的相关工作非常简便(https://github.com/RestKit/RestKit/wiki),RestKit还可以Cache data model到Core Data中:

Core Data support. Building on top of the object mapping layer,
RestKit provides integration with Apple's Core Data framework. This
support allows RestKit to persist remotely loaded objects directly back
into a local store, either as a fast local cache or a primary data store
that is periodically synced with the cloud. RestKit can populate Core
Data associations for you, allowing natural property based traversal of
your data model. It also provides a nice API on top of the Core Data
primitives that simplifies configuration and querying use cases through
an implementation of the Active Record access pattern.

但实际上RKRequestCachePolicy已经解决了大部分Cache需求。

4.SDWebImage

SDWebImage是Github开源项目:https://github.com/rs/SDWebImage,它用于方便的请求、Cache网络图片,并且请求完毕后交由UIImageView显示。

Asynchronous image downloader with cache support with an UIImageView category.

SDWebImage作为UIImageView的一个Category提供的,所以使用起来非常简单:

// Here we use the new provided setImageWithURL: method to load the web image
[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

AFNetworking也提供了类似功能(UIImageView+AFNetworking):

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];

5.UIWebView中的图片Cache

如果你使用UIWebView来展示内容,在离线情况下如果也想能显示的话需要实现2点:

Cache Html页面
Cache 图片等元素

使用上面介绍的网络组件来Cache Html页面比较便捷,之后使用webView
loadHTMLString即可加载本地Html页面,而Cache图片需要更换NSURLCache公共实例为自定义的
NSURLCache(UIWebView使用的即是+[NSURLCache sharedURLCache]):

//设置使用自定义Cache机制
LocalSubstitutionCache *cache = [[[LocalSubstitutionCache alloc] init] autorelease];
[cache setMemoryCapacity:4 * 1024 * 1024];
[cache setDiskCapacity:10 * 1024 * 1024];
[NSURLCache setSharedURLCache:cache];

自定义NSURLCache:

#import <Foundation/Foundation.h>

@interface LocalSubstitutionCache : NSURLCache
{
NSMutableDictionary *cachedResponses;
}

+ (NSString *)pathForURL:(NSURL*)url;

@end

B. ios afnetworking怎么用post请求追加参数

随着asihttprequest的停止更新,许多人都转向了AFNetworking、 MKNetworkKit.我也是其中一个。于是我从网上找了许多文章作参考,但是结果都是失败告终。研究了好久都搞不透,最后还是请人帮忙搞定了。经常从网上索取免费资料的一员,要有回报的思想,也为了让更多的人少走些弯路,所以下面是代码:(有错误可以指出)

首先:将AFNetworking、UIKit+AFNetworking 加入到工程

然后在要使用的地方

#import "AFHTTPRequestOperationManager.h"

#import "AFHTTPSessionManager.h"

AFHTTPRequestOperationManager的post有两个方法,一个是普通的post,另一个是可以上传图片的

1.上传图片:

AFHTTPRequestOperationManager *manager = [];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters =@{@"参数1":@"value1",@"参数2":@"value2"、、、};

NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);

[manager POST:@"替换成你要访问的地址"parameters::^(id<AFMultipartFormData> formData) {

[formData appendPartWithFileData :imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpeg"];

} success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

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

NSLog(@"Error: %@", error);

}];

这个方法可以上传图片,如果不用上传图片,可以把这句去掉[formData appendPartWithFileData :imageDataname:@"1"fileName:@"1.png"mimeType:@"image/jpeg"]

2.普通的post

AFHTTPRequestOperationManager *manager = [];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters = @{@"参数1":@"value1",@"参数2":@"value2"、、、};

[managerPOST:@"替换成你要访问的地址"parameters:parameters

success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

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

NSLog(@"Error: %@", error);

}];

可以参考一下。AFNetworking-2.0.3

C. 鏂颁汉姹傚姪afnetworking post璇锋眰镄刣emo

闅忕潃asihttprequest镄勫仠姝㈡洿鏂帮纴璁稿氢汉閮借浆钖戜简AFNetworking銆 MKNetworkKit.鎴戜篃鏄鍏朵腑涓涓銆备簬鏄鎴戜粠缃戜笂镓句简璁稿氭枃绔犱綔鍙傝冿纴浣嗘槸缁撴灉閮芥槸澶辫触锻婄粓銆傜爷绌朵简濂戒箙閮芥闷涓嶉忥纴链钖庤缮鏄璇蜂汉甯蹇欐闷瀹氢简銆傜粡甯镐粠缃戜笂绱㈠彇鍏嶈垂璧勬枡镄勪竴锻桡纴瑕佹湁锲炴姤镄勬濇兂锛屼篃涓轰简璁╂洿澶氱殑浜哄皯璧颁簺寮璺锛屾墍浠ヤ笅闱㈡槸浠g爜锛氾纸链夐敊璇鍙浠ユ寚鍑猴级

棣栧厛锛氩皢AFNetworking銆乁IKit+AFNetworking 锷犲叆鍒板伐绋

铹跺悗鍦ㄨ佷娇鐢ㄧ殑鍦版柟

#import "AFHTTPRequestOperationManager.h"

#import "AFHTTPSessionManager.h"

AFHTTPRequestOperationManager镄刾ost链変袱涓鏂规硶锛屼竴涓鏄鏅阃氱殑post,鍙︿竴涓鏄鍙浠ヤ笂浼犲浘鐗囩殑

1.涓娄紶锲剧墖锛

AFHTTPRequestOperationManager *manager = [];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters =@{@"鍙傛暟1":@"value1",@"鍙傛暟2":@"value2"銆併併亇;

NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"], 1.0);

[manager POST:@"镟挎崲鎴愪綘瑕佽块梾镄勫湴鍧"parameters::^(id<AFMultipartFormData> formData) {

[formData appendPartWithFileData :imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpeg"];

} success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

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

NSLog(@"Error: %@", error);

}];

杩欎釜鏂规硶鍙浠ヤ笂浼犲浘鐗囷纴濡傛灉涓岖敤涓娄紶锲剧墖锛屽彲浠ユ妸杩椤彞铡绘帀[formData appendPartWithFileData :imageDataname:@"1"fileName:@"1.png"mimeType:@"image/jpeg"]

2.鏅阃氱殑post

AFHTTPRequestOperationManager *manager = [];

manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObject:@"text/html"];

NSDictionary *parameters = @{@"鍙傛暟1":@"value1",@"鍙傛暟2":@"value2"銆併併亇;

[managerPOST:@"镟挎崲鎴愪綘瑕佽块梾镄勫湴鍧"parameters:parameters

success:^(AFHTTPRequestOperation *operation,id responseObject) {

NSLog(@"Success: %@", responseObject);

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

NSLog(@"Error: %@", error);

}];

鍙浠ュ弬钥冧竴涓嬨侫FNetworking-2.0.3

D. iOS开发包含哪些内容

环境:Mac系统自带的OSX系统,黑苹果或者虚拟机也可以。编译环境为Xcode。语言:objective—C语言和Swift语言。学习objective—C还是swift,这要视情况而定。如果你要把学习iOS开发当做一个业余爱好,那么从swift语言开始学起吧。swift是一种现代语言,相对于Objective—C来说,也更加简单好学。你可以直接学习苹果发布的官方的swift文档(中文版)就ok。但是,如果你将从事iOS开发为职业,那最好是选择学习Objective—C。要知道目前的绝大多数应用都是用objective—C开发的。swift语言在2014年才正式发布。目前以swift语言为主要开发语言的公司还不多。完全零基础的小白想系统学习Objective—C,可以学习我赢职场的iOS开发教程,这款教程很经典。其中Objective—C部分是完全免费的。我赢职场iOS实战开发工程师(Swift/Apple Watch/PHP)其实,不管你选择哪一门语言,学到最后你将发现,只要学会iOS SDK,使用哪种语言并不是很重要。学了一种语言之后,对于学习另一门语言也会变得更加容易。工具:iOS开发工具多如牛毛,这里整理了对开发者有帮助的5个iOS编程工具,当然作为新手的话,这些工具完全没有必要接触。能把Xcode玩熟练已经不错了。

1、名称:CodeRunner CodeRunner是一款轻量级,可以编写和运行多种语言的编辑器,它不需要安装额外的语言环境就可以执行多种语言代码。如果开发者想要测试一段代码或者一个API具体的功能,用Xcode未免过于麻烦,而CodeRunner却恰巧弥补了Xcode在这方面的欠缺。开发者只需要在CodeRunner中编写一个短小的代码片段,即可测试代码和API的具体功能。此外,CodeRunner能加快开发者的编程速度,所以开发者可以在很短的时间内完成代码编写工作,通过CodeRunner测试无误后,就可以把它拷贝回Xcode的项目中,极大地提高了开发者的工作效率。

2、名称:AppCode,AppCode是全新的Objective-C的IDE集成开发环境,旨在帮助开发者开发Mac OS X和iOS系统的相关应用程序。

热点内容
python调用外部程序 发布:2025-01-16 20:14:09 浏览:396
缓解压力英语作文 发布:2025-01-16 20:13:31 浏览:64
javaname 发布:2025-01-16 20:13:15 浏览:21
用户访问表空间 发布:2025-01-16 20:07:07 浏览:943
java代码自动编译 发布:2025-01-16 19:58:14 浏览:313
编程很困难 发布:2025-01-16 19:58:09 浏览:673
gg登录源码 发布:2025-01-16 19:58:07 浏览:292
微信收藏表情文件夹 发布:2025-01-16 19:28:57 浏览:15
ra服务器搭建 发布:2025-01-16 19:28:12 浏览:18
javaftp读取 发布:2025-01-16 19:28:02 浏览:185