我想创建一个解析XML文件的程序,然后更新2个不同标签栏视图上的标签。在这两个视图中,我都有一个刷新按钮来更新结果。我想要做的是从任一视图更新两个视图标签。我认为AppDelegate可能是一个很好的选择,但我尝试创建AppDelegate可以访问的类,但由于它们是类的实例,因此它们不包含任何值。我没有错误,但即使数据发生变化,标签也不会更新。这是我的AppDelegate中解析XML后调用的方法:
-(void)callUpdateValues {
NSLog(@"Calling Update from AppDelegate");
home *homeController;
data *dataController;
[homeController updateValues];
[dataController updateValues];
}
其中一种更新方法如下:
- (void)updateValues {
NSLog(@"Call Home");
[label1 setText: [[[[totalData objectAtIndex:0] objectForKey:@"nodeChildArray"] objectAtIndex:7] valueForKey:@"nodeContent"]];
[label2 setText:[[[[totalData objectAtIndex:0] objectForKey:@"nodeChildArray"] objectAtIndex:1] valueForKey:@"nodeContent"]];
}
因此视图调用AppDelegate方法“callUpdateValues”,然后该方法应在每个视图中调用单独的“updateValues”方法。我无论如何都不是这方面的专家,我真的只是想知道iPhone上的编程是如何工作的。我可能只是在这里不了解一些东西,如果有人能给我某种答案,我会很感激。
答案 0 :(得分:1)
Cocoa有许多课程可用于通知感兴趣的各方变更。直接调用你描述的方法可以使事情与你需要的联系更紧密。
在生成更新的方法中:
[[NSNotificationCenter defaultCenter] postNotificationName:@"IGotSomeNewData"
object:newData
userInfo:nil];
在想要了解更新的课程中,您需要注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newStuff:)
name:@"IGotSomeNewData" object:nil];
然后实现在发生某事时调用的方法:
- (void) newStuff: (NSNotification *)notification {
id newData = [notification object];
// Do stuff
}
答案 1 :(得分:0)
Apple在iPhone上为XML做了一些非常棒的事情:XML Reading Material
第一个代码段不合适。我认为您缺少的是您需要在AppDelegate.h中创建实例,使用属性公开它们(并在.m中合成它们)。那么你的更新结构应该更合适。
如果您只是选择iPhone编程,请开始深入了解苹果提供的指南,即使您不参与,也要开始每天至少下拉5个示例代码项目。它们的美妙之处在于你可以构建它们(甚至是你的iphone),如果你喜欢它的功能,你可以看到它是如何完成的。或者,从APRESS获取葡萄柚书。 Beginning iPhone。 希望这有帮助。
答案 2 :(得分:0)
在您提供的示例中,homeController
和dataController
未正确初始化。如果我正确理解了您的项目,您将在主XIB文件中创建homeController
和dataController
类的实例,并将它们连接到相应的视图(label1
和{{1 }})。那么你的AppDelegate应该是这样的:
label2
有了这个,您可以添加(在您的应用程序XIB文件中)从...
@class homeController;
@class dataController;
@interface AppDelegate
{
IBOutlet homeController * home;
IBOutlet dataController * data;
}
...
@end
和homeController
个实例到相应插座的链接(标记为dataController
和{{1} })在您的应用程序委托中。
然后,您只需在home
方法中按名称引用它们:
data
另外,Cocoa编码标准通常指定类名称是大写的。当然,这取决于您的个人品味,但如果您刚刚开始使用Cocoa,那么此时可能还需要再喝一杯kool-aid,这样您的代码就会“适应”什么大多数其他开发人员正在做再一次,完全取决于你!