NSURLConnection只能使用一次

时间:2011-10-14 01:31:33

标签: iphone objective-c ios nsurlconnection

我已经在我的第一个应用程序上工作了一段时间,但似乎我在这里遗漏了一些东西。下面的代码最初只在我的app委托中;我刚刚在第一个视图控制器中添加了一个刷新按钮,以刷新应用程序使用的数据,所以我的第一个想法是在视图控制器中再次调用应用程序委托代码,但NSURLConnection委托方法没有触发。现在我已将代码添加到视图控制器(并将其保留在app委托中),并且在按下刷新按钮时触发委托方法,但responseData为空,refreshString为空且{ {1}}在日志中抛出“意外的输入结束”错误(因为没有输入任何内容)(应用程序仍然运行并清除UITableView,这是正确的行为,因为数组现在是空的)。 JSON数据的字符集是UTF-8

这个代码可能有一个更好的地方,它可以保存在一个地方并根据需要运行,如果有任何建议,我也会很感激,但我主要关心的是弄清楚为什么这个代码第一次正常工作,但第二次不起作用。

JSONValue

2 个答案:

答案 0 :(得分:2)

您将在finishLoading中发布NSData responseData成员变量:

[responseData release];

但是,我没有看到任何其他NSData对象要追加。

在此示例代码中:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

当他们再次启动连接时(在你的refreshMethod中),他们会:

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    // Create the NSMutableData to hold the received data.
    // receivedData is an instance variable declared elsewhere.
    receivedData = [[NSMutableData data] retain];
} else {
    // Inform the user that the connection failed.
}

关键是他们获得NSMutabaleData对象并保留它。

receivedData = [[NSMutableData data] retain];

答案 1 :(得分:1)

猜测:尝试检查responseData NSMutableData变量是否已在视图控制器中正确初始化。

即使这解决了眼前的问题,最好将这些代码抽象到自己的类中(也许是“BeerAPIClient”类?)因此它不必存在于两个地方。这样,随着它的增长和变化,它更容易维护,因为只有一个地方可以更新。