gpt4 book ai didi

iphone - NSURLConnection 只工作一次

转载 作者:行者123 更新时间:2023-11-28 20:42:45 26 4
gpt4 key购买 nike

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

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

- (void) refreshData{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://beersandears.net/beer-list-json.php?native=yes"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
NSLog(@"loadData complete");
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
NSLog(@"Response received");
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
NSLog(@"Data received");
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[connection release];
//label.text = [NSString stringWithFormat:@"Connection failed %@", [error description]];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
connection = nil;
NSString *refreshString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

[responseData release];

NSDictionary *results = [refreshString JSONValue];

BeerListAppDataObject* theDataObject = [self beerListAppDataObject];

[theDataObject.beerList removeAllObjects];
[theDataObject.mapList removeAllObjects];
[theDataObject.blogList removeAllObjects];

theDataObject.beerList = [results objectForKey:@"beer"];
theDataObject.mapList = [results objectForKey:@"map"];
theDataObject.blogList = [results objectForKey:@"blog"];

NSLog(@"Data Loaded");

[self.tableView reloadData];
}

最佳答案

你正在释放 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];

关于iphone - NSURLConnection 只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com