所以我有一个连接到内部IP地址的应用程序。所以我想实现代码,以确保NSSURLConnections(即连接到无线网络),因为如果我不在无线网络上,我将无法连接到服务器。问题出现之前我可以检查它并且卡住了。我实施了
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
但它永远不会被调用。关于如何进行的任何想法?
这是我创建连接的代码
NSURL *url = [NSURL URLWithString:@"http://192.168.192.4/file.php"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
在最后一行之后,它在狂野的蓝色边缘消失了!
的 的 ** 更新的 * **
这是按下按钮时调用的方法。
NSURL *url = [NSURL URLWithString:@"http://192.168.192.4/file.php"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];
[connection release];
我也实现了这些方法:
didFailWithError:(NSError *)
didFinishLoading
didRecieveData
我刚刚将连接更改为(nonatomic,retain)...没有强大的自动完成选项。任何指针?
答案 0 :(得分:2)
在这种情况下,您没有使用ARC,但您有类似的问题。您在分配/初始化后立即释放connection
,因此连接永远不会启动。删除[connection release]
并通过两个委托方法中的属性释放它以完成连接,如下所示。
供参考:
如果你的项目使用ARC,connection
将在运行循环结束后立即释放,因为没有任何东西保留它。尝试创建(非原子,强)属性以保留连接。连接完成时没有属性。
在MyClass.h中
@property (nonatomic, strong) NSURLConnection * connection;
MyClass.m中的
@implementation MyClass
@synthesize connection;
- (void)requestData
{
// create request
self.connection = [NSURLConnection connectionWithRequest:...];
// in connection delegate method for successful completion or error set self.connection = nil;
}
编辑:澄清ARC信息
编辑#2:在顶部添加非弧形答案
答案 1 :(得分:0)
返回的连接是否为非零?你是在主线程或配备运行循环的线程上做这个吗?