为子视图控制器设置委托

时间:2010-11-09 11:51:54

标签: ios objective-c uitableview cocoa-touch delegates

我确信有一种简单的方法可以解决这个问题,但我无法弄明白。

我有一个带有多个视图的TabBarViewController。在一些视图中,我使用基于XML的内容加载了Tableviews。

我的XML Parser工作正常,我之前在单独的Projectfile中测试过它。 问题是我的TableViewController,我为其创建了一个XMLAppDelegate来管理我的xmlfiles的解析,仍然将方法发送到我的Project的主委托文件。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainAppDelegate slices]: unrecognized selector sent to instance 0x6d1fd00'

与显示的错误消息一样,他尝试将其发送到我的MainAppDelegate,而不是XMLAppDelegate。

我在Controller Files中实现了XMLAppDelegate并以这种方式初始化委托:

我的控制器的.h文件

#import <UIKit/UIKit.h>

@class XMLAppDelegate, NewsDetailViewController;

@interface NewsViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    IBOutlet UITableView *newsTableView;    
    XMLAppDelegate *appDelegate;
    NewsDetailViewController *ndvController;
}

@end

我的控制器的.m文件

- (void)viewDidLoad {
[super viewDidLoad];
// self.navigationItem.rightBarButtonItem = self.editButtonItem;

appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];

self.title = @"Slices";

}

Controller作为单独的.xib文件加载到TabBarView中。 在这个nib文件中,我将Delegate和Data Source连接到我的XMLAppDelegate。

我仍然在日志和应用程序崩溃时遇到此错误,因为我尝试切换到Tab希望其中有TableViewController。

希望你理解我的问题。也许有人可以告诉我在这里将我的错误设置为我的XMLAppDelegate。

编辑:

解释我想做的事情:

我有一个XMLParser类来解析File,一个Slice类来存储Elements和XMLAppDelegate。从这些文件中我得到的XML结果存储在一个名为“slices”的数组中。

要使用数组元素,将其显示为表格或文本标签,我将TableViewController连接到XMLAppDelegate(使用XMLParser文件解析我的XML文档并将数据存储在数组中)。

此数组的项目先前已在像这样的文件字符串中声明

@property (nonatomic, readwrite) NSInteger sliceID;
@property (nonatomic, retain) NSString *image;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *text;

但就像我说的,解析器有效。 我认为我的问题似乎是我请求appDelegate.slices,但选择器不是我的XMLAppDelgate。 Error表示它使用的是Main Delegate,它没有xml Delegate文件的任何属性。

TabView加载NewsViewController,它调用XMLAppDelegate中的数组。 我实现了文件,将Delegate连接到TableView作为数据源和委托,但它似乎仍然需要主代理。

这让我发疯了。 该项目是一个伟大的健康汽车旅馆的公司简介。 我从CMS获取内容作为XML文件,并且需要从XMLAppDelegate访问它们,它们提供站点内容。

希望你能理解我糟糕的英语。 ;)

2 个答案:

答案 0 :(得分:0)

也许我不知道您的XMLappDelegate怎么样,但在我看来

[[UIApplication sharedApplication] delegate]

始终为您提供主AppDelegate,无论您将其投入到哪个中。 也许您应该将XMLAppDelegate的引用添加到Main App Delegate并将其声明为属性,然后您可以通过

访问XMLAppDelegate
AppDelegate.xmlDelegate

然后,我真的不明白你想要做什么.. 不管怎么说也许它是helos;)

答案 1 :(得分:0)

所以,now you've declared the property,但你还没有实现它。除其他外,属性声明声明您将为该属性实现一个或两个访问器方法。所以,仅仅申报财产还不够(还);您还必须实现在运行时使该属性成为真实的访问器方法。

解决此问题的最简单方法是合成slices属性的访问器。如果你需要一些自定义行为,你可以自己实现它们,但听起来不像它 - 合成不仅最简单,而且可能是正确的解决方案。

有关详细信息,请参阅the documentation on properties

相关问题