-1

我看到了一些这样的代码:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

if(connection) {
    receivedData = [NSMutableData data];
} else {

}

我如何使它进入其他?我尝试禁用连接,但仍然从未进入 else 它通过 didFailWithError ......所以想知道它是否有必要?

4

2 回答 2

1

关于此方法返回值的苹果文档说:

返回值

URL 请求的 URL 连接。如果无法初始化连接,则返回 nil。

这可能会误导那些不熟悉 Cocoa(和 Objective-C)最佳实践的人。

通常一个init方法应该返回一个对象;除非有一些根本原因返回一个对象是危险的。大多数其他语言通过抛出异常来处理这种情况,需要您添加无数的 try/catch 括号。

如果(例如)您将 a作为请求参数传递,该initWithRequest:delegate:方法将返回;并且有充分的理由。为什么创建一个连接对象没有任何用处?nilnil

但是,让我们考虑飞行模式或无效 url 之类的情况。如果initWithRequest:delegate:刚刚返回nil,那么您怎么知道出了什么问题?允许连接调用connection:didFailWithError:使您有机会通过错误参数深入了解特定的失败。

要解决您关于是否有nil必要处理连接事件的问题:这取决于。如果连接初始化失败,它将永远不会调用连接委托方法,因此如果您的代码依赖这些回调来发出后续请求,那么是的,这是必要的。

附注:创建您的NSMutableData此处有点为时过早,因为您还不知道存在有效的连接。我在这里给出的答案给出了一些关于在哪里执行此操作的非常基本的示例代码。

于 2012-10-15T15:15:16.620 回答
0

您可以在代码的其他部分显示“未找到数据”的警报,如 UIAlertView *thealert=[[UIAlertView alloc] initWithTitle:@"Error" message:@"No data found." 委托:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [戏剧表演];[警告发布];

于 2012-10-15T11:41:34.767 回答