我需要一些关于开发iOS应用程序设计的最佳实践的建议
这就是我正在处理的问题:当iOS设备丢失互联网连接(或者没有互联网连接)时,我希望我的应用程序进入某种离线模式,即触发某些事件,发送一些NSNotifications ,mb显示某种警报等。因此,当iOS设备获得它的连接时我想要相反的东西 - 将我的应用程序移动到某种在线模式。
所以,我想要的是能够从我的一些ViewControllers中访问应用程序模式(即检查应用程序是在线还是离线)。我正在考虑两种存储应用程序状态的方法:
1)拥有一些AppDelegate的属性,并通过我的AppDelegate从任何地方访问它。 AFAIK,这是一种错误的方法,因为AppDelegate不应该用作应用程序的全局对象,而是用于启动初始化和控制应用程序的状态更改。
2)将此信息存储在模型级别。但我不知道为了这个目的我应该在Model级别上使用什么。我不认为使用Core Data或NSUserDefaults是一个好主意,因为我不希望这个属性是持久的,我只在当前的应用程序运行期间需要它。除了Core Data和NSUserDefaults之外,我实际上并不了解任何其他模型级技术。
我没有包含任何代码示例,因为它主要是一个理论问题。
答案 0 :(得分:6)
您可以使用单例模式并将变量存储为属性
例如
@interface GlobalData : NSObject
@property BOOL connectionAvailable;
+ (GlobalData *)sharedInstance;
@end
@implementation
+ (GlobalData *)sharedInstance {
static GlobalData *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[GlobalData alloc] init];
});
return sharedInstance;
}
@end
// --- in some method
[GlobalData sharedInstance].connectionAvailable = /* connection state */;
// --- in some other method
BOOL connectionAvailable = [GlobalData sharedInstance].connectionAvailable;
答案 1 :(得分:1)
第二种方法效果最好。您肯定不需要任何持久性指示互联网连接的属性。一个好处是让你的Model成为一个单独的类,它为Internet连接公开了一个只读BOOL
属性,你的视图控制器可以通过键值观察来订阅它的变化。您的模型还可以在内部实现Reachability
类来更新Internet连接状态。
答案 2 :(得分:1)
我假设你正在使用Apple的Reachability类。 http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html
我在Reachability类上创建了一个类别来添加一个sharedInstance单例,它允许您检查Internet连接的状态。我在我的所有应用中使用它。
以下是你做单身人士的方式:
How do I implement an Objective-C singleton that is compatible with ARC?