Objective c 目标C和NSURL:我应该在哪里申报接收数据?

Objective c 目标C和NSURL:我应该在哪里申报接收数据?,objective-c,cocoa,nsurlconnection,Objective C,Cocoa,Nsurlconnection,我有两个类,一个名为“AppController”的控制器和一个名为“URLDelegate”的类,用于封装来自的示例NSURL代码 指南反复提到将receivedData实例变量声明为“别处”。我假设这意味着在URLDelagate类之外,因为如果我在URLDelegate类中声明它,我的控制器类就无法“看到”已下载的数据 我知道收到了数据,因为在我的ConnectionIDFinishLoading函数中,我让NSLog显示结果: NSLog(@"Succeeded! Received %d

我有两个类,一个名为“AppController”的控制器和一个名为“URLDelegate”的类,用于封装来自的示例NSURL代码

指南反复提到将receivedData实例变量声明为“别处”。我假设这意味着在URLDelagate类之外,因为如果我在URLDelegate类中声明它,我的控制器类就无法“看到”已下载的数据

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

NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
receivedText=[[NSString alloc] initWithData:receivedData encoding: NSASCIIStringEncoding];
NSLog(@"receivedText=%@",receivedText);
所以我有点被以下问题难住了:

  • 我应该在哪里申报接收数据?我的控制器类?三等舱
  • 我可以像任何普通的NSMutableData变量一样声明它吗
  • 如何让我的URLDegate类“访问”此变量?例如,如果我在AppController类中声明receivedData,我是否必须在URLDelegate中实例化AppController?但是,如果首先是AppController类实例化URLDegate类,这怎么可能呢
  • 特别是关于最后一个问题,我觉得我必须忽略一些非常明显和基本的东西。如果有人能给我指出正确的方向,我会非常感激

    谢谢大家!

    更新:我将所有NSURL函数移出它们的URLDegate类,并将它们放在我的控制器类中。我现在可以从ConnectiondFinishLoading更新控制器类中的变量。这对我来说似乎有点老套,但它很管用

    一,。我应该在哪里申报接收数据?我的控制器类?三等舱

    它必须在与该方法相同的类中声明,该方法才能使用它。从你的问题来看,这个类听起来像是你的URLDegate类。由于它在注释中被明确解释为“实例变量”,“别处”必须是该类自己的头,在该类的实例变量块中

    二,。我可以像任何普通的NSMutableData变量一样声明它吗

    对。看

    三,。如何让我的URLDegate类“访问”此变量

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

    实例访问其实例变量的方式与访问任何局部或全局变量的方式相同,如您提到的示例代码所示:

    receivedData = [[NSMutableData data] retain];
    
    receivedData
    是要在URLDegate类中声明的实例变量。请注意,您只需单独使用名称“receivedData”;您不需要使用任何特殊语法来引用实例变量而不是另一个变量。因此,请避免为实例变量和局部变量指定相同的名称


    您可以通过多种方式将数据提供给应用程序控制器。一个简单的方法是公开URLDelegate的属性,但这会导致一个问题,即应用程序控制器应该如何知道如何检索或重新检索该属性的值。一个更全面的解决方案列表在这里。

    非常感谢,Peter。这消除了许多困惑。如果我理解正确,听起来我需要弄清楚两件事:1)如何提醒控制器检查数据,2)如何保存数据直到控制器访问数据。或者,如何最好地将数据直接传递给控制器。事实上,最好不要使用urldegate类;最好将应用程序控制器设置为连接的代理。