与此问题非常相似,我正在尝试将使用ASIHTTPRequest&的项目转换ASIFormDataRequest为ARC.
在我的视图控制器类中,我经常request在完成块中引用和使用对象的属性(查看响应代码,响应数据等):
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:SOME_URL]];
[request setCompletionBlock:^{
if([request responseStatusCode] == 200) ....etc
Run Code Online (Sandbox Code Playgroud)
转换为ARC时,我收到警告:
在此块中强烈捕获"请求"可能会导致保留周期
这样做的正确方法是什么?
另一个SO用户在前一个帖子中指出,简单添加__weak可能会导致请求在块完成之前被释放,我认为这是真的.
如何在ARC下的完成/故障块中正确引用这些属性?
iphone objective-c asihttprequest ios automatic-ref-counting
我找不到任何问题的答案,可能是我错过了什么......
当我要求提供网址时,我需要知道响应是来自缓存还是来自网络.
状态代码是304还是200?(但AFNetworking总是回应200)
随着ASIHTTPRequest我用来检查" didUseCachedResponse"从ASIHTTPRequest,这是完美的.
我在我的iOS应用程序中使用ASIHTTPRequest lib来向我的Rails 3 Web应用程序发出RESTful请求.我第一次尝试向我的网络应用程序发出POST请求时看到一个奇怪且有些一致的错误,但是POST请求在第二次尝试时工作正常.确切的错误是......
Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xb513740 {NSUnderlyingError=0xb5135a0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1005.)", NSLocalizedDescription=A connection failure occurred}
Run Code Online (Sandbox Code Playgroud)
这是我的ASIHTTPRequest代码,用于发出POST请求...
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myrails3app.heroku.com/tournaments/%d/register.json", tid]];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request addPostValue:username forKey:@"username"];
[request setCompletionBlock:^
{
NSData *responseData = [request responseData];
NSLog(@"Success!");
}];
// Set the code to be called when the request fails
[request setFailedBlock:^
{
NSError *error = [request error];
NSLog(@"Error: %@", [error localizedDescription]);
}];
// Start …Run Code Online (Sandbox Code Playgroud) 我见过几次使用ASIHTTPRequest下载文件的人.现在我想知道为什么?NSURLConnection的核心优势是什么?
我最近在http://allseeing-i.com上看到ASIHTTP正在停产的消息.我非常尊重图书馆的制作者.但是,我现在正在寻找一种替代品,它也支持iOS上的排队下载(多线程),它还支持具有适当信息的进度条.
是否有任何(希望是轻量级)库,这是一个活跃的开发生命周期?ARC支持也将受到高度赞赏.
非常感谢你的想法.
我只是想问是否可以通过类别添加实例变量.我的特殊问题是,我需要将一个NSIndexPath属性添加到ASIHTTPRequest对象,但我不想将ASIHTTPRequest子类化为原则问题.
我有什么选择吗?
谢谢你的回答,克里斯蒂安
我在这里阅读了很多关于NSManagedObjectContext和多线程应用程序的帖子.我还讨论了CoreDataBooks示例,以了解单独的线程如何需要自己的NSManagedObjectContext,以及保存操作如何与主NSManagedObjectContext合并.我发现这个例子很好,但也是应用程序特定的.我试图概括这一点,并想知道我的方法是否合理.
我的方法是使用通用函数来获取当前线程的NSManagedObjectContext.该函数返回主线程的NSManagedObjectContext,但如果从另一个线程中调用,则会创建一个新线程(或从缓存中获取它).具体如下:
+(NSManagedObjectContext *)managedObjectContext {
MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *moc = delegate.managedObjectContext;
NSThread *thread = [NSThread currentThread];
if ([thread isMainThread]) {
return moc;
}
// a key to cache the context for the given thread
NSString *threadKey = [NSString stringWithFormat:@"%p", thread];
// delegate.managedObjectContexts is a mutable dictionary in the app delegate
NSMutableDictionary *managedObjectContexts = delegate.managedObjectContexts;
if ( [managedObjectContexts objectForKey:threadKey] == nil ) {
// create a context for this thread
NSManagedObjectContext *threadContext = [[[NSManagedObjectContext alloc] init] …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用ASIHTTPRequst并且遇到了一些问题,但仅限于某些设备.在某些情况下,我收到以下错误:
"检测到不正确的NSStringEncoding值0x0000.假设NSASCIIStringEncoding.将在不久的将来停止这种兼容性映射行为"
我得到了有限的测试选项,因为它适用于我的所有内部测试设备,但问题仍然发生在我的一个或多个客户端测试手机上.这也可能是手机连接到蜂窝网络的情况,因为它似乎正在使用wifi.
有谁知道可能导致问题的原因是什么?我看到有类似的问题类型,但我的代码看起来是正确的,从其他问题答案和ASIHTTPRequest网站.
编辑 发生错误时,不会收到服务器的响应,因此用户卡在注册/登录状态.
urlEncodeValue:
- (NSString *)urlEncodeValue:(NSString *)str
{
NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
return [result autorelease];
}
Run Code Online (Sandbox Code Playgroud)
ASIHTTPRequest代码段:
NSString *encodedUrlAdress = [NSString stringWithFormat:@"%@user/register/%@/%@/%@/%d/%@/%@/%@/%@",
kUserServerAddress,
[self urlEncodeValue:_firstName],
[self urlEncodeValue:_lastName],
[self urlEncodeValue:_phoneNumber],
_sex,
[self urlEncodeValue:_birthDate],
[self urlEncodeValue:_address],
[self urlEncodeValue:_postalNumber]];
NSLog(@"encodedUrlAdress: %@", encodedUrlAdress);
NSURL *url = [NSURL URLWithString:encodedUrlAdress];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题.
我ASIHTTPRequest在启用了ARC的iOS 5项目中使用.由于ASIHTTPRequest不支持ARC我已在所有单个ASIHTTPRequest文件上禁用ARC .

但是,当我尝试编译我的项目时,xcode仍然认为这些文件是启用ARC的,它会抱怨.

我做错了什么或是xcode中的错误?不要告诉我ASIHTTPRequest使用重构工具转换为ARC兼容代码.我试图这样做,xcode抱怨项目上启用了ARC(?!?!).
asihttprequest ×10
iphone ×9
ios ×6
objective-c ×3
ipad ×2
afnetworking ×1
core-data ×1
identify ×1
nsindexpath ×1
object ×1
progress-bar ×1
queue ×1
xcode4.2 ×1