我正在尝试访问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;
。
答案 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]