我正在尝试异步加载表格单元格中的一些图像ASINetworkQueue.我只是想不出来,似乎无法找到一个很好的SIMPLE例子.
我能找到的最好的就是这个,但它对我来说完全矫枉过正,有点太复杂了:http: //kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/
有没有其他人有任何提示/解决方案/代码与ASIHTTPRequest库这样做?
打电话通常是个好主意-[NSRunLoop runUntilDate:]吗?它似乎没有任何问题,但它让我很紧张,告诉运行循环从运行循环内运行.
更多信息:
我现在有一个从REST服务获取数据的项目.需要获得的一个关键信息是具有有效数据的日期范围.它是只需要一次得到的数据非常小一点,所以我决定来处理它的最好办法是让物业下载数据,如果局部变量nil.我正在使用ASIHTTPRequest和一个ASINetworkQueue,所以默认情况下一切都是异步的,为了使这个工作,这个属性在下载和处理数据之前不能返回.这是我的代码的大纲,变量的名称已被更改以保护无辜:
__block BOOL isWorking = YES;
__block ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:/*actual URL*/] autorelease];
[request setCompletionBlock:^{
// set local variable
isWorking = NO;
}];
[request setFailedBlock:^{
// show alert to user
isWorking = NO;
}];
[queue addOperation:request];
while (isWorking) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
Run Code Online (Sandbox Code Playgroud)
再次,这似乎工作正常.使用这种方法有任何潜在的问题吗?
我有一个基于导航的应用程序.按主视图上的按钮,然后我将新视图推送到导航控制器.所有非常基本的东西.
加载新视图时,我执行ASIHTTPRequest来获取一些json数据,这是一个图像URL列表.然后我做一个for循环,创建一堆ASIHTTPRequests,将它们添加到队列然后运行队列.
但是如果我在队列结束前单击后退按钮,应用程序崩溃了,这个应用程序会显示房屋,让我们说你选错了房子,在显示任何照片之前很快点击回来,bumm崩溃.
这个主题http://groups.google.com/group/asihttprequest/browse_thread/thread/3d4815198aa889b9解释了我的问题,除了我确实取消了视图上的所有请求卸载,将委托设置为nil并释放队列.
我还是崩溃了.如果我使用3G,每次都会崩溃,但是在wifi上真的很难让它崩溃,但是非常可行.
在几乎80%的实例中,调试器在ASIHTTPRequest.m中跳转到此行
(void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders {
if ([self error] || [self mainRequest]) { return; }
--> if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {
Run Code Online (Sandbox Code Playgroud)
很多情况下它会跳到:
(void)requestReceivedResponseHeaders:(NSMutableDictionary *)newResponseHeaders {
if ([self error] || [self mainRequest]) { return; }
---> if (delegate && [delegate respondsToSelector:didReceiveResponseHeadersSelector]) {
Run Code Online (Sandbox Code Playgroud)
广告在少数情况下进入我的主循环
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
--> int retVal = UIApplicationMain(argc, argv, nil, nil); with SIGBART error [pool release]; return retVal;
Run Code Online (Sandbox Code Playgroud)
我正在使用MBP和MacPro,最新的OS X,Xcode 4.0.2,我测试除了原始iPhone之外的所有苹果设备.
我真的不想重写我的整个应用程序,但是还有什么比ASIHTTPRequest更好吗?
我有一个使用ASIHTTPRequest的应用程序.
我用iOS 5(sdk:5.0/xcode:4.2 Build 4D199)重新编译了我的应用程序,https连接失败并显示错误消息(与https禁用的同一调用工作正常):
Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xa8e66e0 {NSUnderlyingError=0xa8ac6c0 "The operation couldn’t be completed. (OSStatus error -9844.)", NSLocalizedDescription=A connection failure occurred}
Run Code Online (Sandbox Code Playgroud)
启用调试日志:
[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xd96fc00>
[CONNECTION] Request <ASIFormDataRequest: 0xd96fc00> will not use a persistent connection
[STATUS] Request <ASIFormDataRequest: 0xd96fc00>: Failed
[CONNECTION] Request #(null) failed and will invalidate connection #(null)
Run Code Online (Sandbox Code Playgroud)
我找到了这个相关的帖子:https: //devforums.apple.com/message/537440#537440 这可以解释我的问题.
基于iOS 5更喜欢TLS 1.2的想法,我尝试在AIHTTPRequest.m中更改设置kCFStreamSocketSecurityLevelTLSv1 …
所以我遇到了一个很大的问题.似乎ASIHTTPRequest只是不想在生产版本中工作.
一切都在调试中很好用.但是,一旦我为生产构建,以下代码就不想运行.它既不会阻止块完成也不会失败.我也尝试过使用选择器和委托,但是那些也没有被调用.
__block __weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:URL];
[self performSelectorOnMainThread:@selector(startSpinner) withObject:nil waitUntilDone:NO];
[request setCompletionBlock:^{
[self performSelectorOnMainThread:@selector(stopSpinner) withObject:nil waitUntilDone:NO];
}];
[request setFailedBlock:^{
[self performSelectorOnMainThread:@selector(stopSpinner) withObject:nil waitUntilDone:NO];
}];
[request startAsynchronous];
Run Code Online (Sandbox Code Playgroud)
我知道这是对我的问题的一种不好的描述,但是有没有人有什么可能导致这个问题的最轻微的线索?
我已经开始在我的iOS项目中使用ASIHTTPRequest来执行REST服务器方法调用,到目前为止它已经非常成功.我只有一个奇怪的间歇性问题.偶尔我使用[ASIHTTPRequest startAsynchronous]得到以下响应:
HTTP/0.9 200 OK
发生这种情况时,我的服务器方法不会被调用.通常,每个方法调用都会返回一个以"HTTP/1.1"开头的响应.我正在使用带有GeoTrust/RapidSSL证书的HTTPS来保护连接.有趣的是,如果我尝试连接到SSL端口(443)但指定'http'作为协议,我发现我得到了相同的'HTTP/0.9 200 OK'响应.
只是为了添加更多信息 - 问题主要发生在应用程序闲置一段时间后.例如请求成功完成,然后让应用程序空闲一段时间,然后在下一个请求发生问题然后应用程序继续正常工作.
任何人都可以了解可能发生的事情吗?
非常感谢,乔纳森
更新:当问题发生时,我已经粘贴了ASIHTTPRequest输出的一些调试信息:
2012-07-12 09:35:49.376 mytestapp[3038:18f07] [CONNECTION] Closing connection #13 because it has expired
2012-07-12 09:35:49.377 mytestapp[3038:18f07] [CONNECTION] Closing connection #14 because it has expired
2012-07-12 09:35:49.378 mytestapp[3038:18f07] [CONNECTION] Closing connection #15 because it has expired
2012-07-12 09:35:49.380 mytestapp[3038:18f07] [CONNECTION] Request #39 will use connection #16
2012-07-12 09:35:49.381 mytestapp[3038:18f07] [CONNECTION] Request #40 will use connection #17
2012-07-12 09:35:49.382 mytestapp[3038:18f07] [CONNECTION] Request #41 will use connection #18
2012-07-12 09:35:49.529 mytestapp[3038:18f07] …Run Code Online (Sandbox Code Playgroud) 可能重复:
ASIHTTPRequest; 安装问题
我一步一步地遵循了设置教程,但是我收到了这个错误:'libxml/HTMLparser.h' file not found.我还克隆了libxml库,但它不起作用.任何的想法?谢谢!
只是想知道哪个在性能和可用性方面更快?或者如果那里有更好的东西?
我正在使用ASIHttpRequest库每分钟询问一次Web服务以获取更新.该应用程序接收一个json字符串并解析它.它运作正常.
但我想提高效率..只要有更新,服务器发送到应用信息的最佳方式是什么?而不是不断地轮询网络服务?
我只是想设置一个新的应用程序,我希望利用ASIHTTPRequest框架.但是在他们的文档中, 他们声明你必须链接CFNetwork,SystemConfiguration,MobileCoreServices,CoreGraphics和zlib框架.唯一的问题是没有zlib框架..他们是libz.dylib文件,但他们是其中几个,我不确定哪些是合适的,如果有人可以请让我知道该怎么做这将是真棒!
asihttprequest ×10
ios ×6
iphone ×5
objective-c ×4
https ×2
asynchronous ×1
crash ×1
ios5 ×1
ipad ×1
libxml2 ×1
nsrunloop ×1
rest ×1
ssl ×1
uiimageview ×1
uitableview ×1
zlib ×1