开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的。
Reachability
Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:
然后将 SystemConfiguration.framework 添加进工程:
Reachability 中定义了3种网络状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
typedef enum {
NotReachable = 0,
ReachableViaCarrierDataNetwork,
ReachableViaWiFiNetwork
} NetworkStatus;
typedef enum {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
|
- NotReachable
无连接
- ReachableViaCarrierDataNetwork (ReachableViaWWAN)
使用3G/GPRS网络
- ReachableViaWiFiNetwork (ReachableViaWiFi)
使用WiFi网络
比如检测某一特定站点的接续状况,可以使用下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch ([r currentReachabilityStatus]) {
case NotReachable:
break;
case ReachableViaWWAN:
break;
case ReachableViaWiFi:
break;
}
|
检测当前网络环境
程序启动时,如果想检测可用的网络环境,可以像这样。
1
2
3
4
5
6
7
8
9
|
+ (BOOL) IsEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
+ (BOOL) IsEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
|
连接状态实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。
Reachability 1.5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#import "Reachability.h"
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
NetworkStatus remoteHostStatus;
}
@property NetworkStatus remoteHostStatus;
@end
#import "MyAppDelegate.h"
@implementation MyAppDelegate
@synthesize remoteHostStatus;
- (void)updateStatus {
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
}
- (void)reachabilityChanged:(NSNotification *)note {
[self updateStatus];
if (self.remoteHostStatus == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil) message:NSLocalizedString(@"NotReachable", nil)
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];
}
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[[Reachability sharedReachability] setHostName:@"www.apple.com"];
[[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
name:@"kNetworkReachabilityChangedNotification" object:nil];
[self updateStatus];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[window release];
[super dealloc];
}
|
Reachability 2.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
@class Reachability;
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
Reachability *hostReach;
}
@end
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
NetworkStatus status = [curReach currentReachabilityStatus];
if (status == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AppName""
message:@"NotReachable"
delegate:nil
cancelButtonTitle:@"YES" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// ...
// 监测网络情况
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];
hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
[hostReach startNotifer];
// ...
}
|
分享到:
相关推荐
iPhone开发系列之二---Objective-C入门知识,是一本很好的书,值得一看
给UILabel的文字加上各种各样的艺术字体效果,包括阴影(内阴影和外阴影)、渐变色彩、彩虹、浮雕效果等等,而且使用十分简单,能够完全代替UILabel。是一个功能十分强大又简单易用的类库。 注意:请在Mac下解压使用
iphone开发技巧UI篇之自定义TabBar iphone开发技巧UI篇之自定义TabBar iphone开发技巧UI篇之自定义TabBar
iphone开发秘籍完整源代码8-10iphone开发秘籍完整源代码8-10iphone开发秘籍完整源代码8-10iphone开发秘籍完整源代码8-10iphone开发秘籍完整源代码8-10
iOS网络高级编程 iPhone和iPad的企业应用开发--高清版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
iphone 越狱工具 DESCRIPTION: - Absinthe 2.0 is an untethered jailbreak for iOS 5.1.1 devices SYSTEM REQUIREMENTS: ...- iPhone 4 (GSM), iPhone 4 (CDMA) - iPhone 3GS - iPod 4G - iPod 3G
NULL 博文链接:https://android-zhang.iteye.com/blog/1759395
iphone开发学习笔记(1)--NSLog
iPhone 5S-3G版点位图 。
2011斯坦福大学 iphone/ipad 开发课程 slide1-18
实现特殊效果的按钮。按钮的形状类似物理键盘按钮,按钮未点击时是凸起状态,用户点击按钮,按钮会呈现压下去的效果,用户松开按钮,按钮又会凸起。 注意:请在Mac下解压使用
iphone开发秘籍中文第二版,pdf'高清版,好不容易找到的。欢迎下载
3分钟就可以让你的应用增加声波通讯功能 抗干扰性强,基本上无论外界怎么干扰,信号都是准确的 可自己任意调整通信频段,支持低频有声频段,也支持高频无声频段,无声频段可混音任意效果声音,如咻咻咻之类的。...
3G手机开发-WiMAX技术交流-iPhone开发英文资
由浅入深地向读者介绍SDK和Object-C的基础知识,以及如何构建并测试简单的应用模型,并提供如何利用iPhone/iPad的相机、GPS和重力感应器进行工作的方法和技巧,最终介绍了如何优化、测试并发布已开发的应用程序。...
苹果iOS开发中文电子书推荐:4--iPhone开发基础中文教程.part1
AndroidS开发环境搭建---在myeclipse里面开发android环境的大件,包括安装android开发包,和模拟器。 --IPHONE开发环境搭建 OBject-c开发环境的搭建,Xcode和ios sdk和模拟器的安装,还有我使用的是Vmware里面安装...
netdisk_iPhone-2022-07-29-042850.ips
高通版iPhonex 电路图820-00863-09 820-00864-06.pdf
苹果iOS开发中文电子书推荐:4--iPhone开发基础中文教程PART2