大家好,这是我在这里发表的第一篇文章,所以我会尽量保持清醒。
因此,在我的项目中,我需要使用SOAP从webService获取xml文档,然后在NSMutableArray中解析它(已完成)。然后我想在tableview中显示我的表格内容。问题是,在我的委托中,我无法访问viewController的任何内容。
我有3个类,SOAP_TestViewController,SOAP_TestAppDelegate和XMLParser。我将包含解析文件的数组从XMLParser发送到Appdelegate,然后我想更新我的viewController中的数组以使用它来更新我的tableview。
这里有一些代码,可能有助于理解。
#import "SOAP_TestAppDelegate.h"
#import "SOAP_TestViewController.h"
#import "XMLParser.h"
@implementation SOAP_TestAppDelegate
@synthesize window;
@synthesize viewController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:viewController.view];
NSLog(@"%@", viewController.donnees); //Here I can get what I want.
[window makeKeyAndVisible];
}
-(void)afficher{
NSLog(@"%@", viewController.donnees); //But there, it returns (null)...
[viewController reload];
}
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}
@end
我花了好几个小时才找到解决方案。而且,我注意到了一些事情就像我的代码中的评论一样,我可以在applicationDidFinishLaunching
函数中访问我想要的内容,但不能在外部访问。当我没有这个功能时,我正在制作副本或其他东西吗?我该怎么做才能访问我的“donnees”表?
我是可可编码的初学者所以请告诉我,我做错了。
(请放纵我的英语:-)我不是双语了^^')
修改
我的 afficher
功能在开始时看起来像这样。我用XMLParser将解析后的数组作为参数调用它。我是sur它会工作但是......
-(void) afficher:(NSMutableArray *)array
{
NSLog(@"%@", array); //returns the array sent by XMLParser.
[viewController.donnees addObjectsFormArray:array];
NSLog(@"%@", viewController.donnees); //returns null.
}
这很奇怪,就像唐纳甚至没有分配和初始化......
答案 0 :(得分:0)
我建议设置一个断点,以便在viewController
ivar改变时停止程序;这样做:
在appDelegate中设置断点,然后调试程序;
当程序在appDelegate中停止时,在gdb控制台中执行以下命令:
(gdb) watch -location self->viewController
继续调试。
现在,每次viewController
设置一个值,程序就会停止,这样你就可以检查是谁试图将它设置为nil和为什么。
OLD:
问题可能在于您描述为“我将包含解析文件的数组从XMLParser发送到Appdelegate”的步骤。
事实上,似乎当您的应用开始时,即在解析之前,viewController.donnees
已定义;解析后,它为null。你显然在两者之间做错了。
可能是parserDidEndDocument
方法尝试以错误的方式设置donnees
ivar。如果没有更多代码,就无法进一步提供帮助,但我希望这一提示可以指导您朝着正确的方向发展。
答案 1 :(得分:0)
你确定 viewController 不是nil吗?好的,那不太可能。那么你确定 donnees 数组不是nil且它是NSMutableArray,而不是NSArray吗?
而且,顺便说一下,你可以从任何地方访问appDelegate中的属性。我不喜欢这个解决方案,只是为了澄清这个问题。在任何课程中,你都可以这样做:
#include "YourAppDelegate.h"
- (void)someMethod {
YourAppDelegate *yourDelegate = [[UIApplication sharedApplication] delegate];
yourDelegate.donnees = self.anotherArray;
}
当然, donnees 应该是这种情况下的财产。干杯!
答案 2 :(得分:-1)
参考:
-(void) rar:(NSMutableArray *)array
{
NSLog(@"%@", array); //returns the array sent by XMLParser.
[viewController.donnees addObjectsFormArray:array];
NSLog(@"%@", viewController.donnees); //returns null.
}