开发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下解压使用
【描述】中提到,我们可以对Segment的文字、颜色和图片进行定制,并且特别提示解压环境需在Mac下进行,因为iOS应用的开发通常是在Mac上使用Xcode完成的。 1. **UISegmentedControl的基本使用**: - ...
【标题】"IOS应用源码Demo-iphone-wireless-扫描WiFi信号-毕设学习.zip"涉及的关键知识点主要集中在iOS应用程序开发、无线网络扫描以及毕业设计的实践应用上。这个项目是一个实例,可以帮助iOS开发者或者学生理解...
在iOS开发中,创建一个类似Apple的MobileCal的日历效果是一项常见的需求,这涉及到iOS的事件框架(EventKit)和自定义视图的绘制。"(0071)-iOS/iPhone/iPAD/iPod源代码-日历(Calendar)-KalCalendar" 提供的...
总之,3G手机开发结合WiMAX技术交流,意味着开发者需要深入理解移动通信网络、无线技术以及苹果的iOS开发环境,才能创造出充分利用这些技术优势的应用。这不仅涉及到技术本身,还包括对用户体验、网络性能优化和未来...
4. UI适配:确保TabBar在不同尺寸的设备上(如iPhone和iPad)都能正确显示和扩展。 5. 动画效果:为了提升用户体验,展开和收起TabBar的过程可能会添加平滑的过渡动画。 学习和理解这个示例代码可以帮助开发者掌握...
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
在iOS开发中,滚动视图(UIScrollView)是一个至关重要的组件,它允许用户通过手势滚动查看超过屏幕尺寸的内容。本文将深入探讨"(0024)-iOS/iPhone/iPad/iPod源代码-滚动视图(ScrollView)-Vertical Swipe ...
在iOS开发中,图像处理是不可或缺的一部分,尤其是在创建交互式应用时。本示例"(0119)-iOS/iPhone/iPAD/iPod源代码-图像(Image)-Thumbnail Picker View"主要展示了如何实现一个缩略图选择器视图,用于浏览和...
在iOS应用开发中,选项卡(Tab Bar)是常见的用户界面元素,用于提供多视图间的切换,使得用户可以通过点击底部的图标或文字轻松访问不同的功能区域。本资源"(0102)-iOS/iPhone/iPAD/iPod源代码-选项卡(Tab ...
iPhone 5S-3G版点位图 。
最后,注意资源中提到的“请在Mac下解压使用”,这意味着提供的源代码可能包含了Xcode项目文件,需要在Apple的开发环境中进行编译和运行。开发者可以通过导入这些源代码到自己的项目中,参考其设计思路和实现方式,...
【iPhone开发环境搭建】 搭建iPhone开发环境是iOS应用开发的第一步,主要涉及到在特定的操作系统环境下安装必要的开发工具。由于iPhone应用只能在苹果公司的Mac OS X系统上开发,因此,你需要准备一个运行Mac OS X...
7. **Swift或Objective-C语法**: 该示例代码可能使用Swift或Objective-C编写,两者都是iOS开发的常用语言,需要理解相应的语法和编程技巧。 通过研究和学习这个“TableViewPullRefresh”的源代码,开发者可以深入...
在标题"(0005)-iOS/iPhone/iPAD/iPod源代码-图像(Image)-Image Downloader"中,我们关注的是一个用于异步下载和显示互联网图片的解决方案。这种技术常用于构建高效的移动应用,因为它可以提供流畅的用户体验...
在iOS开发中,按钮(UIButton)是用户界面中不可或缺的元素,用于响应用户的触摸交互。本资源"(0003)-iOS/iPhone/iPAD/iPod源代码-按钮(Button)-iPhone Gradient Buttons"专注于通过代码实现按钮的颜色渐变...
在iOS开发中,滚动视图(ScrollView)是一个非常重要的组件,它允许用户通过滑动查看超过屏幕尺寸的内容。ScrollView通常用于实现长页面滚动、图片轮播、多页切换等效果。在这个项目“(0147)-iOS/iPhone/iPAD/...
"(0157)-iOS/iPhone/iPAD/iPod源代码-列表(Table)-Lazy Table Images"是一个示例项目,专门针对这种场景提供解决方案,即延迟加载或懒加载(Lazy Loading)图片。懒加载是一种优化技术,它避免一次性加载...
在iOS开发中,导航条(Navigation Bar)是用户界面中不可或缺的部分,它为用户提供了一种在应用程序中的导航方式。此项目“(0011)-iOS/iPhone/iPAD/iPod源代码-导航条(Navigation Bar)-Customized Back ...