我确信有一种简单的方法可以解决这个问题,但我无法弄明白。
我有一个带有多个视图的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访问它们,它们提供站点内容。
希望你能理解我糟糕的英语。 ;)
答案 0 :(得分:0)
也许我不知道您的XMLappDelegate怎么样,但在我看来
[[UIApplication sharedApplication] delegate]
始终为您提供主AppDelegate,无论您将其投入到哪个中。 也许您应该将XMLAppDelegate的引用添加到Main App Delegate并将其声明为属性,然后您可以通过
访问XMLAppDelegateAppDelegate.xmlDelegate
然后,我真的不明白你想要做什么.. 不管怎么说也许它是helos;)
答案 1 :(得分:0)
所以,now you've declared the property,但你还没有实现它。除其他外,属性声明声明您将为该属性实现一个或两个访问器方法。所以,仅仅申报财产还不够(还);您还必须实现在运行时使该属性成为真实的访问器方法。
解决此问题的最简单方法是合成slices
属性的访问器。如果你需要一些自定义行为,你可以自己实现它们,但听起来不像它 - 合成不仅最简单,而且可能是正确的解决方案。
有关详细信息,请参阅the documentation on properties。