Objective-C 和 NSURL : where am I supposed to declare receivedData?

标签 objective-c cocoa nsurlconnection

我有两个类,一个名为“AppController”的 Controller 和一个名为“URLDelegate”的类,该类封装了 Apple's URL Loading System Programming Guide 中的示例 NSURL 代码.

指南反复提到在“其他地方”声明 receiveData 实例变量。我认为这意味着在 URLDelagate 类之外,因为如果我在 URLDelegate 类中声明它,我的 Controller 类将无法“查看”已下载的数据。

我知道数据已收到,因为在我的connectionDidFinishLoading函数中,我让NSLog显示结果:

NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
receivedText=[[NSString alloc] initWithData:receivedData encoding: NSASCIIStringEncoding];
NSLog(@"receivedText=%@",receivedText);

所以我对以下问题有点困惑:

  1. 我应该在哪里声明收到的数据?我的 Controller 类?第三类?
  2. 我可以像任何普通的 NSMutableData 变量一样声明它吗?
  3. 如何让我的 URLDelegate 类“访问”此变量?例如,如果我在 AppController 类中声明 receiveData,我是否必须在 URLDelegate 中实例化 AppController?但是,如果 AppController 类首先实例化 URLDelegate 类,这怎么可能呢?

特别是关于最后一个问题,我觉得我一定忽略了一些非常明显和基本的东西。如果有人能指出我正确的方向,我将非常感激。

谢谢!

更新:我将所有 NSURL 函数从 URLDelegate 类中移出,并将它们放入我的 Controller 类中。我现在可以通过 connectionDidFinishLoading 更新 Controller 类中的变量。这对我来说似乎有点老套,但它确实有效。

最佳答案

1. Where should I declare receivedData? My controller class? A third class?

它必须在与该方法相同的类中声明,该方法才能使用它。从你的问题来看,听起来那个类是你的 URLDelegate 类。由于它在注释中明确解释为“实例变量”,因此“elsewhere”必须是该类自己的 header ,位于类的实例变量 block 中。

2. Can I just declare it like any normal NSMutableData variable?

是的。请参阅the relevant chapter of The Objective-C Programming Language .

3. How do I give my URLDelegate class "access" to this variable?

类不能访问其实例中的实例变量,因为它们是实例变量;根据定义,它们是实例的一部分,因此只能由实例访问。

实例访问其实例变量,就像访问任何本地或全局变量一样,如您引用的示例代码所示:

receivedData = [[NSMutableData data] retain];

receivedData 是您在 URLDelegate 类中声明的实例变量。请注意,您只需使用名称“receivedData”本身即可;您不需要使用任何特殊语法来引用实例变量而不是另一个变量。因此,请避免为实例变量和局部变量指定相同的名称。

您可以通过多种方式将数据提供给应用 Controller 。一种简单的方法是公开 URLDelegate 的属性,但这会导致应用程序 Controller 应如何知道检索或重新检索该属性的值的问题。更全面的解决方案列表位于 the “Communicating with Objects” chapter of the Cocoa Fundamentals Guide .

关于Objective-C 和 NSURL : where am I supposed to declare receivedData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3030674/

相关文章:

iphone - 当前位置的注释

ios - MKMapView 不响应触摸事件或手势识别器

ios - collectionView 单元格重叠

cocoa - 使用KVC生成SQL?

ios - AFNetworking错误代码= -1005 “The network connection was lost”

ios - 在录制的视频上合成基于帧的动画贴纸的最佳方法是什么?

macos - 获取显示亮度

cocoa - 如何显示未归档的自定义 NSView 对象

ios - NSURLConnection 内存泄漏

xml - 下载多个文件会将相同的数据写入所有文件