Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何触发NSURLConnection委托方法?_Iphone_Ios_Objective C - Fatal编程技术网

Iphone 如何触发NSURLConnection委托方法?

Iphone 如何触发NSURLConnection委托方法?,iphone,ios,objective-c,Iphone,Ios,Objective C,加载与此类关联的视图时,我似乎无法调用委托方法。。没有人开枪。我肯定这是我忽略了的事情,但我一辈子都不知道为什么 下载更新.h #import <UIKit/UIKit.h> @interface DownloadUpdates : UIViewController @property (strong, nonatomic) NSMutableData *responseData; @property (strong, nonatomic) NSURLConnec

加载与此类关联的视图时,我似乎无法调用委托方法。。没有人开枪。我肯定这是我忽略了的事情,但我一辈子都不知道为什么

下载更新.h

#import <UIKit/UIKit.h>

@interface DownloadUpdates : UIViewController

    @property (strong, nonatomic) NSMutableData *responseData;
    @property (strong, nonatomic) NSURLConnection *connection;

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;

- (void)connectionDidFinishLoading:(NSURLConnection *)connection;

@end

如果您能提供任何帮助/建议,我将不胜感激。

使用属性应用强修饰符:

self.responsedata = [[NSMutableData alloc] init];
(.....)
self.connection = [[NSURLConnection alloc] initWithRequest: ....etc...

我建议在
viewdiload
中放置一个
NSLog
或断点,以确保调用它。例如,如果您忽略将
DownloadUpdates
指定为故事板场景的类,则可能会发生这种情况。

虽然不是必需的,但您从未声明您的类符合
NSURLConnection
的任何协议。这听起来可能很明显,但在这方面我看到了一些奇怪的事情。您是否已将此类的对象设置为连接的委托?这是我第一次使用NSURLConnection。我不知道你的意思。(我做这件事的时间不长)。另外,仅供参考。NSURLConnection提供了一种单衬套替代方案。如果您只想发出请求并检查结果,则可以替换NSURLConnection+(void)sendAsynchronousRequest:(NSURLRequest)请求队列:(NSOperationQueue*)队列完成处理程序:(void(^)(NSURLResponse,NSData*,NSError*)处理程序。请发布问题的答案并将其标记为正确(或者@Rob想这么做)这样下一个找到这个的人就可以看到正确的解决方案。现在,只有一个投票结果(意图良好,但不正确)回答已发布,对以后访问这里的任何人都没有用处。这是一种更好的形式,但我不知道它如何解决问题。@danh:
viewDidLoad
一结束,连接方法就超出了范围,正在被解除分配。通过牢牢抓住它,它将留在这里并调用委托方法。你说得对,pre-ARC,但是属性被声明为强。虽然使用合成setter是更好的形式,但ARC将在您直接访问该属性的任何位置插入一个retain。几年前您的答案是好的,但现在不是了。@Scott这通常是正确的,但对于
NSURLConnection
,它在连接过程中会保留自己。我的不要为连接维护任何属性。它不是必需的。
self.responsedata = [[NSMutableData alloc] init];
(.....)
self.connection = [[NSURLConnection alloc] initWithRequest: ....etc...