在委托中访问局部变量的正确方法是什么?

时间:2010-03-03 22:24:27

标签: iphone objective-c cocoa cocoa-touch delegates

我正在尝试访问NSMutableArray,它是我的AppDelegate类的数据成员。它在实现中合成,并且是一个自定义类的数组,它具有“名称”NSString数据成员。

我目前使用它来填充表格视图(SubView),如下所示:

cell.textLabel.text = [[[delegate contentArray] objectAtIndex:indexPath.row] name];

这有效,但我收到警告:

warning: no '-contentArray' method found

它不会编译为:

cell.textLabel.text = [[delegate.contentArray objectAtIndex:indexPath.row] name];

在这种情况下,我得到了这个:

error: request for member 'contentArray' in something not a structure or union

在委托中访问数组的正确方法是什么?

更新 要声明delegate,请在表视图控制器头文件中包含@class MainAppDelegate;,并在@interface中声明数据成员MainAppDelegate *delegate;。在表格视图控制器的@implementation我做@synthesize delegate;

3 个答案:

答案 0 :(得分:1)

我想我解决了。 MainAppDelegate.h头文件未导入表视图控制器的.m文件中。我想主要的AppDelegate.h文件和表视图的ViewController.h文件都互相导入是没有意义的。

答案 1 :(得分:1)

  

要声明delegate,请在表格视图控制器头文件中添加@class MainAppDelegate;,并在@interface中声明[n实例变量] MainAppDelegate *delegate;。在表格视图控制器的@implementation我做@synthesize delegate;

所以你已经向前声明了类名MainAppDelegate并用它来声明一个实例变量。由于你是@synthesizing属性,我假设你也宣布了其中一个属性。

  

我目前使用它来填充表格视图(SubView),如下所示:

cell.textLabel.text = [[[delegate contentArray] objectAtIndex:indexPath.row] name];
     

这有效,但我收到警告:

     
warning: no '-contentArray' method found
  
     

它不会编译为:

cell.textLabel.text = [[delegate.contentArray objectAtIndex:indexPath.row] name];
     

在这种情况下,我得到了这个:

     
error: request for member 'contentArray' in something not a structure or union
  

那是因为编译器不知道delegate有哪些方法或属性。您已声明其类的名称,但编译器对此没有任何其他信息,因为您没有为该类提供@interface

解决方法是将#import委托类的头文件放入表视图控制器类的实现文件中,可能是在#import表视图控制器类自己的头文件后立即执行。

另外,我怀疑该数组更适合于表视图控制器而不是应用程序委托,但我不太了解Cocoa Touch可以肯定地说。

答案 2 :(得分:0)

您必须将委托强制转换为正确的类型。像这样:

cell.textLabel.text = [[[(MyAppDelegate*) delegate contentArray]
    objectAtIndex:indexPath.row] name]