zoukankan      html  css  js  c++  java
  • iphone网络编程总结一

    转自 http://www.cnblogs.com/lovecode/articles/2269572.html

    一、确认网络环境3G/WiFi

    1). 要在应用程序中使用Reachability,首先要完成以下两步骤:
    1.1 添加源文件:将Reachability.h和Reachability.m拷贝到你工程中。
    1.2 添加必要框架:将SystemConfiguration.framework添加到工程项目中。 

    2). 检查网络状态

    复制代码
    Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
    switch([r currentReachabilityStatus]) {
    case NotReachable:
    //没有网络连接
    break;
    case ReachableViaWWAN:
    //使用3G网络
    break;
    case ReachableViaWiFi:
    //使用WiFi网络
    break;
    }
    复制代码

    3). 检查当前网络环境

    程序启动时,如果想检测可用的网络环境,可以这样:

    // 是否WiFi
    + (BOOL) IsEnableWIFI {
        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
    }

    // 是否3G
    + (BOOL) IsEnable3G {
        return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);

    复制代码
    - (void)viewWillAppear:(BOOL)animated {
    if(([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) && ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {
    self.navigationItem.hidesBackButton = YES;
    [self.navigationItem setLeftBarButtonItem:nil animated:NO];
    }
    }
    复制代码

    4). 链接状态的实时通知

    网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。
    Reachability 1.5版本

    复制代码
    // My.AppDelegate.h
    #import "Reachability.h"

    @interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    NetworkStatus remoteHostStatus;
    }
    @property NetworkStatus remoteHostStatus;

    @end

    // My.AppDelegate.m
    @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:NSLocalizedStrng(@"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版本

    复制代码
    // MyAppDelegate.h
    @class Reachability;
    @interface MyAppDelegate:NSObject<UIApplicationDelegate> {
    Reachability *hostReach;
    }
    @end

    // MyAppDelegate.m
    - (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];
    //.....
    }
    复制代码


    详细:http://www.cocoachina.com/bbs/read.php?tid=31300

  • 相关阅读:
    BZOJ 1452 Count(二维树状数组)
    BZOJ 1407 Savage(拓展欧几里得)
    BZOJ 1415 聪聪和可可(期望DP)
    BZOJ 1406 密码箱(数论)
    最大流小结
    UVA6531Go up the ultras
    二分图小结
    Codeforces Round #243 (Div. 1)
    图论模板集合
    zoj3416 Balanced Number
  • 原文地址:https://www.cnblogs.com/linyawen/p/2638368.html
Copyright © 2011-2022 走看看