我有三个课程涉及这个问题:
当我的应用程序启动时,我在我的app委托中使用didFinishLaunchingWithOptions方法来创建数据类的实例,然后调用queryMessagesFromBackend方法来填充我的消息数组。
然后在我的视图控制器中,我创建了我的数据类的另一个实例来访问我刚刚填充的messages数组(dataClass.messages),但它是空的。这没有意义,因为当调用该方法时,它会记录messages数组所具有的所有数据。为什么我的新实例显示messages数组为空?
我会提供代码,但似乎无用
答案 0 :(得分:0)
提示:你可以使用界面(协议)来使事情变得更加清洁:
@protocol XYZDataProvider <NSObject>
- (XYZDataClass *) data;
@end
...
@interface XYZAppDelegate : NSAppDelegate <XYZDataProvider> {
XYZDataClass *data;
}
@end
...
@implementation XYZAppDelegate
// either can init data in didFinishBlahBlahBlah...
- (void) did ... {
self->data = [XYZDataClass new];
...
}
// implement protocol's required method
- (XYZDataClass *) data {
/// and then return on request...
return self->data;
// or do so-caled lazy-loading:
// if (!self->data) {
// $self->data = [... ..];
// ...
// }
// return self->data;
}
@end
...
@implementation XYZViewController
- (void) processData {
NSAppDelegate *appDelegate = [NSApp delegate];
if ([appDelegate conformsToProtocol:@protocol(XYZDataProvider)]) {
XYZDataClass *data = [(id<XYZDataProvider>)appDelegate data];
// do smth with data
...
}
...
}
@end
注意:代码包含错误(直接在浏览器中编写...)