为子视图控制器设置代理
我确信有一个简单的方法来解决这个问题,但我无法弄清楚。为子视图控制器设置代理
我得到了一个TabBarViewController与几个视图。在一些视图中,我使用基于XML的内容加载了Tableviews。
我的XML解析器工作正常,我之前在单独的Projectfile中测试过。 问题是,我的TableViewController,我创建了一个XMLAppDelegate来管理我的xmlfiles的解析,仍然将方法发送到我的项目的主委托文件。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainAppDelegate slices]: unrecognized selector sent to instance 0x6d1fd00'
就像错误信息显示,他试图将它发送到我的MainAppDelegate,而不是XMLAppDelegate。
我实现了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";
}
控制器正在加载到TabBarView作为separa te .xib文件。 在这个nib文件中,我将Delegate和Data Source连接到了我的XMLAppDelegate。
我仍然得到这个错误在日志和应用程序崩溃,因为我试图切换到Tab希望在其中TableViewController。
希望你明白我的问题。也许有人可以告诉我我在做错了,在这里设置委托给我的XMLAppDelegate。
编辑:
为了解释什么,我想做的事:
我有一个XMLParser的类来解析文件,切片类存储元素和XMLAppDelegate。从这些文件我得到我的XML结果存储在一个名为“片”的数组。
要使用数组的元素将其显示为Table或textlabel,我将TableViewController连接到XMLAppDelegate(它使用XMLParser File解析我的XML文档并将数据存储在数组中)。
此数组的项目中的文件之前声明为这样
@property (nonatomic, readwrite) NSInteger sliceID;
@property (nonatomic, retain) NSString *image;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *text;
字符串,但是就像我说的,解析器作品。 我认为我的问题似乎是我请求了appDelegate.slices,但选择器不是我的XMLAppDelgate。错误表示它使用主代表,它没有任何xml委托文件的特性。
TabView加载NewsViewController,它调用XMLAppDelegate中的数组。 我实现了这些文件,将委托连接到TableView作为数据源和委托,但似乎仍需要主委托。
这让我发疯。 该项目是一个伟大的健康汽车旅馆的公司简介。 我从CMS获取内容为XML文件,并需要从XMLAppDelegate访问它们,以传递网站内容。
希望你明白我的坏英文。 ;)
那么,now you've declared the property,但你还没有实现它。除其他外,属性声明声明您将为该属性实现一个或两个访问器方法。所以,声明财产还不够(还不够)。您还必须实现在运行时使该属性为真实的访问器方法。
解决此问题的最简单方法是综合slices
属性的访问器。如果你需要一些自定义的行为,你可以自己实现它们,但它听起来不像它 - 合成不仅是最简单的,但可能是正确的解决方案。
查看the documentation on properties了解更多信息。
也许我不知道该怎么对你XMLappDelegate,但在我看来
[[UIApplication sharedApplication] delegate]
总是给你的主AppDelegate中,不管你是铸造成。 也许你应该参考你的XMLAppDelegate添加到您的主应用程序代表和声明为一个属性,那么你可以通过
AppDelegate.xmlDelegate
访问XMLAppDelegate再说我真的不明白你正在尝试做的.. 反正也许吧;)
他确实有这样的属性;他在他的另一个问题中展示了它:http://stackoverflow.com/q/4125632/30461也就是说,我们都可以同意XML委托和应用程序委托可能不应该是同一个对象。 – 2010-11-09 14:43:02
好的,问题解决了。我在我的主AppDelegate中实现了解析器。之后,调用解析器方法。 ;) – DevZarak 2010-11-16 11:48:56