Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iPhoneºÍiPadµÄÆóÒµÓ¦Óÿª·¢Ö®´íÎó´¦Àí
 
×÷ÕߣºÇåͼ À´Ô´£ºCSDN ·¢²¼ÓÚ 2015-01-09
  2703  次浏览      29
 

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇËù½éÉܵÄiPhoneÓëÆäËûϵͳµÄÍøÂç½»»¥¶¼ÊÇ»ùÓÚÒ»ÇÐÕý³£Õâ¸ö¼ÙÉè¡£±¾Õ½«»á·ÅÆúÕâ¸ö¼ÙÉ裬²¢ÉîÈë̽¾¿ÍøÂçµÄÕæÊµÊÀ½ç¡£ÔÚÕæÊµÊÀ½çÖУ¬ÊÂÇéÊÇ»á³ö´íµÄ£¬ÓÐʱ¿ÉÄÜÊǷdz£ÑÏÖØµÄ´íÎó£ºÊÖ»ú½øÈëÓëÀë¿ªÍøÂç¡¢°ü¶ªµô»òÊÇÑÓ³Ù£»ÍøÂç»ù´¡ÉèÊ©³ö´í£»Å¼¶ûÓû§»¹»á³ö´í¡£Èç¹ûÒ»ÇÐÕý³££¬ÄÇô±àдiOSÓ¦Óþͻá¼òµ¥²»ÉÙ£¬²»¹ýÒź¶µÄÊÇÏÖʵ²¢·ÇÈç´Ë¡£±¾Õ½«»á̽ÌÖµ¼ÖÂÍøÂç²Ù×÷ʧ°ÜµÄ¼¸¸öÒòËØ£¬½éÉÜϵͳÈçºÎ½«Ê§°ÜÇé¿ö¸æÖªÓ¦Óã¬Ó¦ÓÃÓÖ¸ÃÈçºÎÓÅÑŵØÍ¨ÖªÓû§¡£´ËÍ⣬±¾Õ»¹½«½éÉÜÈçºÎÔÚ²»ÍùÓ¦ÓÃÂß¼­ÖÐÌí¼Ó´íÎó´¦Àí´úÂëµÄÇé¿öÏ£¬ÒÔÒ»ÖÖÕû½àÇÒÒ»Öµķ½Ê½´¦Àí´íÎóµÄÈí¼þģʽ¡£

5.1 Àí½â´íÎóÔ´

ÔçÆÚµÄiOSÓиöºÜ°ôµÄÌìÆøÔ¤±¨Ó¦Óá£ËüÔÚWi-FiºÍÐźÅÁ¼ºÃµÄ·äÎÑÍøÂçÏÂʹÓÃÕý³££¬²»¹ýµ±ÍøÂçÖÊÁ¿²»ÄÇôºÃʱ£¬Õâ¸öÌìÆøÔ¤±¨Ó¦ÓþÍÏñ¸ÐÃ°ËÆµÄ£¬ÔÚÖ÷ÆÁÄ»ÉϱÀÀ£¡£Óв»ÉÙÓ¦ÓÃÔÚ³öÏÖÍøÂç´íÎóʱ±íÏֺܲ£¬»á·è¿ñµ¯³ö´óÁ¿UIAlertViewÒÔ¸æËßÓû§³öÏÖÁË¡°404 Error on Server X¡±µÈÀàËÆÐÅÏ¢¡£»¹ÓкܶàÓ¦ÓÃÔÚÍøÂç±äÂýʱ½çÃæ»á±äµÃûÓÐÏìÓ¦¡£ÕâЩÇé¿öµÄ³öÏÖ¶¼ÊÇûÓкܺõØÀí½âÍøÂçʧ°ÜģʽÒÔ¼°Ã»ÓÐÔ¤ÆÚµ½¿ÉÄܵÄÍøÂç½µ¼¶»òÊÇʧ°Ü¡£Èç¹ûÏëÒª±ÜÃâÕâÀà´íÎó²¢Äܹ»³ä·ÖµØ´¦ÀíÍøÂç´íÎó£¬ÄÇôÄãÊ×ÏÈÐèÒªÀí½âËüÃÇµÄÆðÔ´¡£

¿¼ÂÇÒ»¸ö×Ö½ÚÊÇÈçºÎ´ÓÉ豸·¢ÍùÔ¶³Ì·þÎñÆ÷ÒÔ¼°ÈçºÎ´ÓÔ¶³Ì·þÎñÆ÷½«Õâ¸ö×Ö½Ú½ÓÊÕµ½É豸£¬Õâ¸ö¹ý³ÌÖ»ÐèÒª¼¸°ÙºÁÃëµÄʱ¼ä£¬²»¹ýÈ´ÒªÇóÍøÂçÉ豸¶¼ÄÜÕý³£¹¤×÷²ÅÐС£Éè±¸ÍøÂçÓëÍøÂ绥ÁªµÄ¸´ÔÓÐÔµ¼ÖÂÁË·Ö²ãÍøÂçµÄ²úÉú¡£·Ö²ãÍøÂ罫ÕâÖÖ¸´ÔÓ»·¾³»®·Ö³ÉÁ˸ü¼ÓÒ×ÓÚ¹ÜÀíµÄÄ£¿é¡£ËäÈ»Õâ¶Ô³ÌÐòÔ±ºÜÓаïÖú£¬²»¹ýµ±Êý¾ÝÔÚ¸÷¸ö²ãÖ®¼äÁ÷¶¯Ê±¿ÉÄÜ»á²úÉú֮ǰÌáµ½µÄÍøÂç´íÎó¡£Í¼5-1չʾÁËInternetЭÒéÕ»µÄ¸÷¸ö²ã´Î¡£

ͼ5-1

ÿһ²ã¶¼»áÖ´ÐÐijÖÖ´íÎó¼ì²â£¬Õâ¿ÉÄÜÊÇÊýѧÒâÒåÉϵġ¢Âß¼­ÒâÒåÉϵ쬻òÊÇÆäËûÀàÐ͵ļì²â¡£±ÈÈ磬µ±ÍøÂç½Ó¿Ú²ã½ÓÊÕµ½Ä³Ò»Ö¡Ê±£¬ËüÊ×ÏÈ»áͨ¹ý´íÎóУÕýÂëÀ´ÑéÖ¤ÄÚÈÝ£¬Èç¹û²»Æ¥Å䣬ÄÇô´íÎó¾Í²úÉúÁË¡£Èç¹ûÕâ¸öÖ¡¸ù±¾¾ÍûÓе½´ï£¬ÄǾͻá²úÉú³¬Ê±»òÊÇÁ¬½ÓÖØÖᣴíÎó¼ì²â³öÏÖÔÚÕ»µÄÿһ²ã£¬×Ô϶øÉÏÖ±µ½Ó¦Óò㣬ӦÓòãÔò»á´ÓÓï·¨ºÍÓïÒåÉϼì²éÏûÏ¢¡£

ÔÚʹÓÃiOSÖеÄURL¼ÓÔØÏµÍ³Ê±£¬ËäÈ»ÊÖ»úÓë·þÎñÆ÷Ö®¼äµÄÁ¬½Ó¿ÉÄÜ»á³öÏÖ¸÷ÖÖ¸÷ÑùµÄÎÊÌ⣬²»¹ý¿ÉÒÔ½«ÕâЩԭÒò·Ö³É3ÖÖ´íÎóÀà±ð£¬·Ö±ðÊDzÙ×÷ϵͳ´íÎó¡¢HTTP´íÎóÓëÓ¦ÓôíÎó¡£ÕâЩ´íÎóÀà±ðÓë´´½¨HTTPÇëÇóµÄ²Ù×÷ÐòÁÐÏà¹Ø¡£Í¼5-2չʾÁËÏòÓ¦Ó÷þÎñÆ÷·¢³öµÄHTTPÇëÇó(ÌṩÀ´×ÔÓÚÆóÒµÍøÂçµÄһЩÊý¾Ý)µÄ¼òµ¥ÐòÁÐͼ¡£Ã¿¿éÒõÓ°ÇøÓò¶¼±íʾÕâ3ÖÖ´íÎóÀàÐ͵ĴíÎóÓò¡£µäÐ͵أ¬²Ù×÷ϵͳ´íÎóÊÇÓÉHTTP·þÎñÆ÷ÎÊÌâµ¼Öµġ£HTTP´íÎóÊÇÓÉHTTP·þÎñÆ÷»òÓ¦Ó÷þÎñÆ÷µ¼Öµġ£Ó¦ÓôíÎóÊÇÓÉÇëÇó´«ÊäµÄÊý¾Ý»òÓ¦Ó÷þÎñÆ÷²éѯµÄÆäËûϵͳµ¼Öµġ£

ͼ5-2

Èç¹ûÇëÇóÊǰ²È«µÄHTTPSÇëÇ󣬻òÊÇHTTP·þÎñÆ÷±»Öض¨Ïò¿Í»§¶Ë£¬ÄÇôÉÏÃæÕâ¸öÐòÁеIJ½Ö轫»á±äµÃ¸ü¼Ó¸´ÔÓ¡£ÉÏÊöºÜ¶à²½Öè¶¼°üº¬×Å´óÁ¿µÄ×Ó²½Ö裬±ÈÈçÔÚ½¨Á¢TCPÁ¬½ÓÊ±Éæ¼°µÄSYNÓëSYN-ACK°üÐòÁеȡ£ÏÂÃæ½«»áÏêϸ½éÉÜÿһÖÖ´íÎóÀà±ð¡£

5.1.1 ²Ù×÷ϵͳ´íÎó

²Ù×÷ϵͳ´íÎóÊÇÓÉÊý¾Ý°üûÓе½´ïÔ¤¶¨Ä¿±êµ¼Öµġ£Êý¾Ý°ü¿ÉÄÜÊǽ¨Á¢Á¬½ÓµÄÒ»²¿·Ö£¬Ò²¿ÉÄÜλÓÚÁ¬½Ó½¨Á¢µÄÖмä½×¶Î¡£OS´íÎó¿ÉÄÜÓÉÈçÏÂÔ­ÒòÔì³É£º

1.ûÓÐÍøÂ硪¡ªÈç¹ûÉ豸ûÓÐÊý¾ÝÍøÂçÁ¬½Ó£¬ÄÇôÁ¬½Ó³¢ÊԺܿì¾Í»á±»¾Ü¾ø»òÊÇʧ°Ü¡£ÕâЩÀàÐ͵ĴíÎó¿ÉÒÔͨ¹ýAppleÌṩµÄReachability¿ò¼Ü¼ì²âµ½£¬±¾½ÚºóÃæ½«»á¶Ô´Ë½øÐнéÉÜ¡£

2.ÎÞ·¨Â·Óɵ½Ä¿±êÖ÷»ú¡ª¡ªÉ豸¿ÉÄÜÓÐÍøÂçÁ¬½Ó£¬²»¹ýÁ¬½ÓµÄÄ¿±ê¿ÉÄÜλÓÚ¸ôÀëµÄÍøÂçÖлòÊÇ´¦ÓÚÀëÏß״̬¡£ÕâЩ´íÎóÓÐʱ¿ÉÒÔÓɲÙ×÷ϵͳѸËÙ¼ì²âµ½£¬²»¹ýÒ²ÓпÉÄܵ¼ÖÂÁ¬½Ó³¬Ê±¡£

3.ûÓÐÓ¦ÓüàÌýÄ¿±ê¶Ë¿Ú¡ª¡ªÔÚÇëÇóµ½´ïÄ¿±êÖ÷»úºó£¬Êý¾Ý°ü»á±»·¢Ë͵½ÇëÇóÖ¸¶¨µÄ¶Ë¿ÚºÅ¡£Èç¹ûûÓзþÎñÆ÷¼àÌýÕâ¸ö¶Ë¿Ú»òÊÇÓÐÌ«¶àµÄÁ¬½ÓÇëÇóÔÚÅŶӣ¬ÄÇôÁ¬½ÓÇëÇó¾Í»á±»¾Ü¾ø¡£

4.ÎÞ·¨½âÎöÄ¿±êÖ÷»úÃû¡ª¡ªÈç¹ûÎÞ·¨½âÎöÄ¿±êÖ÷»úÃû£¬ÄÇôURL¼ÓÔØÏµÍ³¾Í»á·µ»Ø´íÎó¡£Í¨³£Çé¿öÏ£¬ÕâЩ´íÎóÊÇÓÉÅäÖôíÎó»òÊdz¢ÊÔ·ÃÎÊûÓÐÍⲿÃû×Ö½âÎöÇÒ´¦ÓÚ¸ôÀëÍøÂçÖеÄÖ÷»úÔì³ÉµÄ¡£

ÔÚiOSµÄURL¼ÓÔØÏµÍ³ÖУ¬²Ù×÷ϵͳ´íÎó»áÒÔNSError¶ÔÏóµÄÐÎʽ·¢Ë͸øÓ¦Óá£iOSͨ¹ýNSErrorÔÚÈí¼þ×é¼þ¼ä´«µÝ´íÎóÐÅÏ¢¡£Ïà±È¼òµ¥µÄ´íÎó´úÂëÀ´Ëµ£¬Ê¹ÓÃNSErrorµÄÖ÷ÒªÓÅÊÆÔÚÓÚNSError¶ÔÏó°üº¬ÁË´íÎóÓòÊôÐÔ¡£

²»¹ý£¬NSError¶ÔÏóµÄʹÓò¢²»ÏÞÓÚ²Ù×÷ϵͳ¡£Ó¦ÓÿÉÒÔ´´½¨×Ô¼ºµÄNSError¶ÔÏó£¬Ê¹ÓÃËüÃÇÔÚÓ¦ÓÃÄÚ´«µÝ´íÎóÏûÏ¢¡£ÈçÏ´úÂëÆ¬¶ÎչʾµÄÓ¦Ó÷½·¨Ê¹ÓÃNSErrorÏòµ÷ÓõÄÊÓͼ¿ØÖÆÆ÷´«µÝ»ØÊ§°ÜÐÅÏ¢£º

-(id)fetchMyStuff:(NSURL*)url error:(NSError**)error  
{
BOOL errorOccurred = NO;

// some code that makes a call and may fail

if(errorOccurred) //some kind of error
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDictsetValue:@"Failed to fetch my stuff"
forKey:NSLocalizedDescriptionKey];
*error = [NSErrorerrorWithDomain:@"myDomain"
code:kSomeErrorCode
userInfo:errorDict];
return nil;
} else {
return stuff
}

}

ÓòÊôÐÔ¸ù¾Ý²úÉú´íÎó´úÂëµÄ¿â»ò¿ò¼Ü¶ÔÕâЩ´íÎó´úÂë½øÐиôÀë¡£½èÖúÓò£¬¿ò¼Ü¿ª·¢ÕßÎÞÐëµ£Ðĸ²¸Ç´íÎó´úÂ룬ÒòΪÓòÊôÐÔ¶¨ÒåÁ˲úÉú´íÎóµÄ¿ò¼Ü¡£±ÈÈ磬¿ò¼ÜA ÓëB ¶¼»á²úÉú´íÎó´úÂë1£¬²»¹ýÕâÁ½¸ö´íÎó´úÂë»á±»Ã¿¸ö¿ò¼ÜÌṩµÄΨһÓòÖµ½øÐÐÇø·Ö¡£Òò´Ë£¬Èç¹û´úÂëÐè񻂿·ÖNSError Öµ£¬¾Í±ØÐë¶ÔNSError ¶ÔÏóµÄcode Óëdomain ÊôÐÔ½øÐбȽϡ£

NSError ¶ÔÏóÓÐÈçÏÂ3 ¸öÖ÷ÒªÊôÐÔ£º

1.code¡ª¡ª±êʶ´íÎóµÄNSInteger Öµ¡£¶ÔÓÚ²úÉú¸Ã´íÎóµÄ´íÎóÓòÀ´Ëµ£¬Õâ¸öÖµÊÇΨһµÄ¡£

2.domain ¡ª¡ª Ö¸¶¨´íÎóÓòµÄNSString Ö¸Õ룬 ±ÈÈçNSPOSIXErrorDomain ¡¢NSOSStatusErrorDomain ¼°NSMachErrorDomain¡£

3.userInfo¡ª¡ªNSDictionary Ö¸Õ룬ÆäÖаüº¬Ìض¨ÓÚ´íÎóµÄÖµ¡£

URL ¼ÓÔØÏµÍ³ÖвúÉúµÄºÜ¶à´íÎó¶¼À´×ÔÓÚNSURLErrorDomain Óò£¬´úÂëÖµ»ù±¾É϶¼À´×ÔÓÚCFNetworkErrors.h Öж¨ÒåµÄ´íÎó´úÂë¡£ÓëiOS ÌṩµÄÆäËû³£Á¿ÖµÒ»Ñù£¬´úÂëÓ¦¸ÃʹÓÃÕë¶Ô´íÎó¶¨ÒåºÃµÄ³£Á¿Ãû¶ø²»ÊÇʵ¼ÊµÄ´íÎó´úÂëÖµ¡£±ÈÈ磬Èç¹û¿Í»§¶ËÎÞ·¨Á¬½Óµ½Ö÷»ú£¬ÄÇô´íÎó´úÂëÊÇ1004£¬²¢ÇÒÓж¨ÒåºÃµÄ³£Á¿kCFURLErrorCannotConnectToHost¡£´úÂë¾ø²»Ó¦¸ÃÖ±½ÓÒýÓÃ1004£¬ÒòΪÕâ¸öÖµ¿ÉÄÜ»áÔÚ²Ù×÷ϵͳδÀ´µÄÐÞ¶©°æÖз¢Éú±ä»¯£»Ïà·´£¬Ó¦¸ÃʹÓÃÌṩµÄö¾ÙÃûkCFURLError¡£

ÈçÏÂÊÇʹÓÃURL ¼ÓÔØÏµÍ³´´½¨HTTP ÇëÇóµÄ´úÂëʾÀý£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">NSHTTPURLResponse *response=nil;  
NSError *error=nil;
NSData *myData=[NSURLConnectionsendSynchronousRequest:request
returningResponse:&response
error:&error];
if (!error) {
// No OS Errors, keep going in the process
...
} else {
// Something low level broke
}</span></span>

×¢Ò⣬NSError ¶ÔÏó±»ÉùÃ÷ΪָÏònil µÄÖ¸Õë¡£Èç¹û³öÏÖ´íÎó£¬ÄÇôNSURLConnection¶ÔÏóÖ»»áʵÀý»¯NSError ¶ÔÏó¡£URL ¼ÓÔØÏµÍ³ÓµÓÐNSError ¶ÔÏó£»Èç¹ûÉÔºó´úÂë»áÓõ½Ëü£¬ÄÇôӦ¸Ã±£³ÖÕâ¸ö¶ÔÏó¡£Èç¹ûÔÚͬ²½ÇëÇóÍê³ÉºóNSError Ö¸ÕëÒÀȻָÏònil£¬ÄǾÍ˵Ã÷ûÓвúÉúµ×²ãµÄOS ´íÎó¡£Õâʱ£¬´úÂë¾ÍÖªµÀûÓвúÉúOS ¼¶±ðµÄ´íÎ󣬲»¹ý´íÎó¿ÉÄܳöÏÖÔÚЭÒéÕ»µÄij¸ö¸ß²ã¡£

Èç¹ûÓ¦Óô´½¨µÄÊÇÒì²½ÇëÇó£¬ÄÇôNSError ¶ÔÏó¾Í»á·µ»Øµ½Î¯ÍÐÀàµÄÏÂÃæÕâ¸ö·½·¨£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void)connection:(NSURLConnection *)connection  
didFailWithError:(NSError *)error</span></span>

ÕâÊÇ´«µÝ¸øÇëÇóίÍеÄ×îÖÕÏûÏ¢£¬Î¯ÍбØÐëÄÜʶ±ð³ö´íÎóµÄÔ­Òò²¢×÷³öÇ¡µ±µÄ·´Ó¦¡£ÔÚÈçÏÂʾÀýÖУ¬Î¯ÍлáÏòÓû§Õ¹UIAlertView£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void) connection:conndidFailWithError:error {  
UIAlertView *alert = [UIAlertViewalloc] initWithTitle:@"Network Error"
message:[error description]
delegate:self
cancelButtonTitle:@"Oh Well"
otherButtonTitles:nil];
[alert show];
[alert release];
}</span></span>

ÉÏÊö´úÂëÒÔÒ»ÖÖÉúÓ²ÇÒ²»ÓѺõķ½Ê½½«´íÎóÕ¹ÏÖ¸øÁËÓû§¡£ÔÚiOS ÈË»ú½çÃæÖ¸ÄÏ(HiG)ÖУ¬Apple ½¨Òé²»Òª¹ý¶ÈʹÓÃUIAlertViews£¬ÒòΪÕâ»áÆÆ»µÉ豸µÄʹÓøÐÊÜ¡£5.3 ½Ú¡°ÓÅÑŵش¦ÀíÍøÂç´íÎó¡±ÖнéÉÜÁËÈçºÎͨ¹ýÁ¼ºÃµÄÓû§½çÃæÒÔÒ»Öָɾ»ÇÒÒ»Öµķ½Ê½´¦Àí´íÎóµÄģʽ¡£

iOS É豸ͨÐÅ´íÎóµÄÁíÒ»Ö÷ÒªÔ­Òò¾ÍÊÇÓÉÓÚûÓÐÍøÂçÁ¬½Ó¶øµ¼ÖÂÉ豸ÎÞ·¨·ÃÎÊÄ¿±ê·þÎñÆ÷¡£¿ÉÒÔÔÚ³¢ÊÔ·¢ÆðÍøÂçÁ¬½Óǰ¼ì²éÒ»ÏÂÍøÂç״̬£¬ÕâÑù¿ÉÒÔ±ÜÃâºÜ¶àOS ´íÎó¡£Çë¼Çס£¬ÕâЩÉ豸¿ÉÄÜ»áºÜ¿ìµØ½øÈë»òÊÇÀë¿ªÍøÂç¡£Òò´Ë£¬ÔÚÿ´Îµ÷ÓÃǰ¼ì²éÍøÂçµÄ¿É´ïÐÔÊǷdz£ºÏÇéºÏÀíµÄÊÂÇé¡£

iOS µÄSystemConfiguration ¿ò¼ÜÌṩÁ˶àÖÖ·½Ê½À´È·¶¨É豸µÄÍøÂçÁ¬½Ó״̬¡£¿ÉÒÔÔÚSCNetworkReachability ²Î¿¼ÎĵµÖÐÕÒµ½¹ØÓڵײãAPI µÄÏ꾡ÐÅÏ¢¡£Õâ¸öAPI ·Ç³£Ç¿´ó£¬²»¹ýÒ²ÓеãÒþÃØ¡£ÐҺã¬Apple ÌṩÁËÒ»¸öÃûΪReachability µÄʾÀý³ÌÐò£¬ËüΪSCNetworkReachabilityʵÏÖÁËÒ»¸ö¼ò»¯¡¢¸ß²ã´ÎµÄ·â×°Æ÷¡£Reachability λÓÚiOS ¿ª·¢Õß¿âÖС£

Reachability ·â×°Æ÷ÌṩÈçÏÂ4 ¸öÖ÷Òª¹¦ÄÜ£º

1.±êʶÉ豸ÊÇ·ñ¾ß±¸¿ÉÓõÄÍøÂçÁ¬½Ó

2.±êʶµ±Ç°µÄÍøÂçÁ¬½ÓÊÇ·ñ¿ÉÒÔµ½´ïij¸öÌØ¶¨µÄÖ÷»ú

3.±êʶµ±Ç°Ê¹ÓõÄÊÇÄÄÖÖÍøÂç¼¼Êõ£ºWi-Fi¡¢WWAN »¹ÊÇʲô¼¼Êõ¶¼Ã»ÓÃ

4.ÔÚÍøÂç״̬·¢Éú±ä»¯Ê±·¢³ö֪ͨҪÏëʹÓÃReachability API£¬Çë´ÓiOS ¿ª·¢Õß¿âÖÐÏÂÔØÊ¾Àý³ÌÐò£¬µØÖ·ÊÇhttp://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html£¬È»ºó½«Reachability.hÓëReachability.m Ìí¼Óµ½Ó¦ÓõÄXcode ÏîÄ¿ÖС£´ËÍ⣬»¹ÐèÒª½«SystemConfiguration ¿ò¼ÜÌí¼Óµ½Xcode ÏîÄ¿ÖС£½«SystemConfiguration ¿ò¼ÜÌí¼Óµ½Xcode ÏîÄ¿ÖÐÐèÒª±à¼­ÏîÄ¿ÅäÖá£Í¼5-3 չʾÁ˽«SystemConfiguration ¿ò¼ÜÌíµ½Xcode ÏîÄ¿ÖÐËùÐèµÄ²½Öè¡£

(3) Ñ¡ÔñSystemConfiguration.framework

Ñ¡¶¨ºÃÏîĿĿ±êºó£¬ÕÒµ½ÉèÖÃÖеÄLinked Frameworks and Libraries£¬µ¥»÷+°´Å¥Ìí¼Ó¿ò¼Ü£¬Õâʱ»á³öÏÖ¿ò¼ÜÑ¡Ôñ½çÃæ¡£Ñ¡ÔñSystemConfiguration ¿ò¼Ü£¬µ¥»÷add °´Å¥½«ÆäÌí¼Óµ½ÏîÄ¿ÖС£

ÈçÏ´úÂëÆ¬¶Î»á¼ì²éÊÇ·ñ´æÔÚÍøÂçÁ¬½Ó¡£²»±£Ö¤ÈκÎÌØ¶¨µÄÖ÷»ú»òIP µØÖ·ÊǿɴïµÄ£¬Ö»ÊDZêʶÊÇ·ñ´æÔÚÍøÂçÁ¬½Ó¡£

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">#import "Reachability.h"  
...
if([[Reachability reachabilityForInternetConnection]
currentReachabilityStatus] == NotReachable) {
// handle the lack of a network
}</span></span>

ÔÚijЩÇé¿öÏ£¬Äã¿ÉÄÜÏëÒªÐÞ¸ÄijЩ¶¯×÷¡¢½ûÓÃUI ÔªËØ»òÊǵ±É豸´¦ÓÚÓÐÏÞÖÆµÄÍøÂçÖÐʱÐ޸ij¬Ê±Öµ¡£Èç¹ûÓ¦ÓÃÐèÒªÖªµÀµ±Ç°ÕýÔÚʹÓõÄÁ¬½ÓÀàÐÍ£¬ÄÇôÇëʹÓÃÈçÏ´úÂ룺

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">#import "Reachability.h"  
...
NetworkStatus reach = [[Reachability reachabilityForInternetConnection]
currentReachabilityStatus];
if(reach == ReachableViaWWAN) {
// Network Is reachable via WWAN (aka. carrier network)
} else if(reach == ReachableViaWiFi) {
// Network is reachable via WiFi
}</span></span>

ÖªµÀÉ豸¿É´ïÐÔ״̬µÄ±ä»¯Ò²ÊǺÜÓбØÒªµÄ£¬ÕâÑù¾Í¿ÉÒÔÖ÷¶¯ÐÞ¸ÄÓ¦ÓÃÐÐΪ¡£ÈçÏ´úÂëÆ¬¶ÎÆô¶¯¶ÔÍøÂç״̬µÄ¼à¿Ø£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">#import "Reachability.h"  
...
[[NSNotificationCenterdefaultCenter]
addObserver:self
selector:@selector(networkChanged:)
name:kReachabilityChangedNotification
object:nil];
Reachability *reachability;
reachability = [[Reachability reachabilityForInternetConnection] retain];
[reachability startNotifier];</span></span>

ÉÏÊö´úÂ뽫µ±Ç°¶ÔÏó×¢²áΪ֪ͨ¹Û²ìÕߣ¬ÃûΪkReachabilityChangedNotification¡£

NSNotificationCenter »áµ÷Óõ±Ç°¶ÔÏóµÄÃûΪnetworkChanged:µÄ·½·¨¡£µ±¿É´ïÐÔ״̬·¢Éú±ä»¯Ê±£¬¾ÍÏò¸Ã¶ÔÏó´«µÝNSNotification ¼°ÐµĿɴïÐÔ״̬¡£ÈçÏÂʾÀýչʾÁË֪ͨ¼àÌýÕߣº

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void) networkChanged: (NSNotification* )notification  
{
Reachability* reachability = [notification object];
µÚ¢ò²¿·Ö HTTP ÇëÇó£ºiOS ÍøÂ繦ÄÜ
98
if(reachability == ReachableViaWWAN) {
// Network Is reachable via WWAN (a.k.a. carrier network)
} else if(reachability == ReachableViaWiFi) {
// Network is reachable via WiFi
} else if(reachability == NotReachable) {
// No Network available
}
}</span></span>

¿É´ïÐÔ»¹¿ÉÒÔÈ·¶¨µ±Ç°ÍøÂçÉÏij¸öÌØ¶¨µÄÖ÷»úÊÇ·ñÊǿɴïµÄ¡£¿ÉÒÔͨ¹ý¸ÃÌØÐÔ¸ù¾ÝÓ¦ÓÃÊÇ´¦ÓÚÄÚ²¿¸ôÀëµÄÍøÂçÉÏ»¹Êǹ«¿ªµÄInternet Éϵ÷ÕûÆóÒµÓ¦ÓõÄÐÐΪ¡£ÈçÏ´úÂëʾÀýչʾÁ˸ÃÌØÐÔ£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">Reachability *reach = [Reachability  
reachabilityWithHostName:@"www.captechconsulting.com"];
if(reachability == NotReachable) {
// The target host is not reachable available
}</span></span>

Çë¼Çס£¬¸ÃÌØÐÔ¶ÔÄ¿±êÖ÷»úµÄ·ÃÎÊÓиöÀ´»Ø¡£Èç¹ûÿ¸öÇëÇó¶¼Ê¹ÓøÃÌØÐÔ£¬ÄǾͻἫ´óÔö¼ÓÓ¦ÓõÄÍøÂç¸ºÔØÓëÑÓ³Ù¡£Apple ½¨Òé²»ÒªÔÚÖ÷Ïß³ÌÉϼì²âÖ÷»úµÄ¿É´ïÐÔ£¬ÒòΪ³¢ÊÔ·ÃÎÊÖ÷»ú¿ÉÄÜ»á×èÈûÖ÷Ị̈߳¬Õâ»áµ¼ÖÂUI ±»¶³½á¡£

OS ´íÎóÊ×ÏȾͱíÃ÷ÇëÇó³öÏÖÁËÎÊÌâ¡£Ó¦Óÿª·¢ÕßÓÐʱ»áºöÂÔµôËüÃÇ£¬²»¹ýÕâÑù×öÊÇÓзçÏյġ£ÒòΪHTTP ʹÓÃÁË·Ö²ãÍøÂ磬ÕâʱHTTP ²ã»òÊÇÓ¦Óòã¿ÉÄÜ»á³öÏÖÆäËûÀàÐ͵ÄDZÔÚʧ°ÜÇé¿ö¡£

5.1.2 HTTP ´íÎó

HTTP ´íÎóÊÇÓÉHTTP ÇëÇó¡¢HTTP ·þÎñÆ÷»òÓ¦Ó÷þÎñÆ÷µÄÎÊÌâÔì³ÉµÄ¡£HTTP ´íÎóͨ¹ýHTTP ÏìÓ¦µÄ״̬Âë·¢Ë͸øÇëÇó¿Í»§¶Ë¡£

404 ״̬Êdz£¼ûµÄÒ»ÖÖHTTP ´íÎ󣬱íʾÕÒ²»µ½URL Ö¸¶¨µÄ×ÊÔ´¡£ÏÂÊö´úÂëÆ¬¶ÎÖеÄHTTP Í·¾ÍÊǵ±HTTP ·þÎñÆ÷ÕÒ²»µ½ÇëÇó×ÊԴʱ¸ø³öµÄԭʼÊä³ö£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">HTTP/1.1 404 Not Found  
Date: Sat, 04 Feb 2012 18:32:25 GMT
Server: Apache/2.2.14 (Ubuntu)
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 248
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1</span></span>

ÏìÓ¦µÄµÚÒ»ÐÐÓÐ״̬Âë¡£HTTP ÏìÓ¦¿ÉÒÔ´øÓÐÏûÏ¢Ì壬ÆäÖаüº¬ÓѺá¢Óû§¿É¶ÁµÄÐÅÏ¢£¬ÓÃÓÚÃèÊö·¢ÉúµÄÊÂÇé¡£Äã²»Ó¦¸Ã½«ÊÇ·ñÓÐÏìÓ¦Ìå×÷ΪÅжÏHTTP ÇëÇó³É¹¦Óë·ñµÄ±êÖ¾¡£

Ò»¹²ÓÐ5 ÀàHTTP ´íÎó£º

1.ÐÅÏ¢ÐÔÖʵÄ100 ¼¶±ð¡ª¡ªÀ´×ÔÓÚHTTP ·þÎñÆ÷µÄÐÅÏ¢£¬±íʾÇëÇóµÄ´¦Àí½«»á¼ÌÐø£¬²»¹ý´øÓо¯¸æ¡£

2.³É¹¦µÄ200 ¼¶±ð¡ª¡ª·þÎñÆ÷´¦ÀíÁËÇëÇó¡£Ã¿¸ö200 ¼¶±ðµÄ״̬¶¼±íʾ³É¹¦ÇëÇóµÄ²»Í¬½á¹û¡£±ÈÈ磬204 ±íʾÇëÇó³É¹¦£¬²»¹ýûÓÐÏò¿Í»§¶Ë·µ»Ø¸ºÔØ¡£

3.ÖØ¶¨ÏòÐèÒªµÄ300 ¼¶±ð¡ª¡ª±íʾ¿Í»§¶Ë±ØÐëÖ´ÐÐij¸ö¶¯×÷²ÅÄܼÌÐøÇëÇó£¬ÒòΪËùÐèµÄ×ÊÔ´ÒѾ­Òƶ¯ÁË¡£URL ¼ÓÔØÏµÍ³µÄͬ²½ÇëÇó·½·¨»á×Ô¶¯´¦ÀíÖØ¶¨Ïò¶øÎÞÐë֪ͨ´úÂë¡£Èç¹ûÓ¦ÓÃÐèÒª¶ÔÖØ¶¨Ïò½øÐÐ×Ô¶¨Òå´¦Àí£¬ÄÇôӦ¸ÃʹÓÃÒì²½ÇëÇó¡£

4.¿Í»§¶Ë´íÎó400 ¼¶±ð¡ª¡ª±íʾ¿Í»§¶Ë·¢³öÁË·þÎñÆ÷ÎÞ·¨ÕýÈ·´¦ÀíµÄ´íÎóÊý¾Ý¡£±ÈÈ磬δ֪µÄURL »òÊDz»ÕýÈ·µÄHTTP Í·»áµ¼ÖÂÕâ¸ö·¶Î§ÄڵĴíÎó¡£

5.ÏÂÓδíÎó500 ¼¶±ð¡ª¡ª±íʾHTTP ·þÎñÆ÷ÓëÏÂÓÎÓ¦Ó÷þÎñÆ÷Ö®¼ä³öÏÖÁË´íÎó¡£±ÈÈ磬Èç¹ûWeb ·þÎñÆ÷µ÷ÓÃÁËJavaEE Ó¦Ó÷þÎñÆ÷£¬Servlet ³öÏÖÁËNullPointerException£¬ÄÇô¿Í»§¶Ë¾Í»áÊÕµ½500 ¼¶±ðµÄ´íÎó¡£

iOS ÖеÄURL ¼ÓÔØÏµÍ³»á´¦ÀíHTTP Í·µÄ½âÎö£¬²¢¿ÉÒÔÇáËÉ»ñÈ¡µ½HTTP ״̬¡£Èç¹û´úÂëͨ¹ýHTTP »òHTTPS URL ·¢³öÁËͬ²½µ÷Óã¬ÄÇô·µ»ØµÄÏìÓ¦¶ÔÏó¾ÍÊÇÒ»¸öNSHTTPURLResponse ʵÀý¡£NSHTTPURLResponse ¶ÔÏóµÄstatusCode ÊôÐԻ᷵»ØÊýÖµÐÎʽµÄÇëÇóµÄHTTP ״̬¡£ÈçÏ´úÂëÑÝʾÁ˶ÔNSError ¶ÔÏóÒÔ¼°´ÓHTTP ·þÎñÆ÷·µ»ØµÄ³É¹¦×´Ì¬µÄÑéÖ¤£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">NSHTTPURLResponse *response=nil;  
NSError *error=nil;
NSData *myData = [NSURLConnectionsendSynchronousRequest:request
returningResponse:&response
error:&error];
//Check the return
if((!error) && ([response statusCode] == 200)) {
// looks like things worked
} else {
// things broke, again.
}</span></span>

Èç¹ûÇëÇóµÄURL²»ÊÇHTTP£¬ÄÇôӦÓþÍÓ¦¸ÃÑéÖ¤ÏìÓ¦¶ÔÏóÊÇ·ñÊÇNSHTTPURLResponse¶ÔÏó¡£ÑéÖ¤¶ÔÏóÀàÐ͵ÄÊ×Ñ¡·½·¨ÊÇʹÓ÷µ»Ø¶ÔÏóµÄisKindOfClass:·½·¨£¬ÈçÏÂËùʾ£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">if([response isKindOfClass:[NSHTTPURLResponse class]]) {  
// It is a HTTP response, so we can check the status code
...</span></span>

ÒªÏëÁË½â¹ØÓÚHTTP ״̬ÂëµÄȨÍþÐÅÏ¢£¬Çë²Î¿¼W3 RFC 2616£¬ÍøÖ·ÊÇhttp://www.w3.org/Protocols/rfc2616/rfc2616.html¡£

5.1.3 Ó¦ÓôíÎó

±¾½Ú½«»á½éÉÜÍøÂçЭÒéÕ»µÄÏÂÒ»²ã(Ó¦Óòã)²úÉúµÄ´íÎó¡£Ó¦ÓôíÎó²»Í¬ÓÚOS ´íÎó»òHTTP ´íÎó£¬ÒòΪ²¢Ã»ÓÐÕë¶ÔÕâЩ´íÎóµÄ±ê×¼Öµ»òÊÇÔ­ÒòµÄ¼¯ºÏ¡£ÕâЩ´íÎóÊÇÓÉÔËÐÐÔÚ·þÎñ²ãÖ®ÉϵÄÒµÎñÂß¼­ºÍÓ¦ÓÃÔì³ÉµÄ¡£ÔÚijЩÇé¿öÏ£¬´íÎó¿ÉÄÜÊÇ´úÂëÎÊÌ⣬±ÈÈçÒì³££¬²»¹ýÔÚÆäËûһЩÇé¿öÏ£¬´íÎó¿ÉÄÜÊÇÓïÒå´íÎ󣬱ÈÈçÏò·þÎñÌṩÁËÎÞЧµÄÕ˺ŵȡ£¶ÔÓÚǰÕßÀ´Ëµ£¬½¨ÒéÉú³ÉHTTP 500 ¼¶±ðµÄ´íÎó£»¶ÔÓÚºóÕßÀ´Ëµ£¬Ó¦¸ÃÔÚÓ¦ÓøºÔØÖзµ»Ø´íÎóÂë¡£

±ÈÈ磬Èç¹ûÓû§³¢ÊÔ´ÓÕË»§ÖÐתÕ˵Ľð¶î³¬³öÁËÕË»§µÄ¿ÉÓÃÓà¶î£¬ÄÇôÊÖ»úÒøÐоÍÓ¦¸Ã±¨¸æÓ¦ÓôíÎó¡£Èç¹û·¢³öÁËÕâÑùµÄÇëÇó£¬ÄÇôOS »á˵ÇëÇó³É¹¦·¢ËͲ¢½ÓÊÕµ½ÁËÏìÓ¦¡£HTTP ·þÎñÆ÷»á±¨¸æ½ÓÊÕµ½ÁËÇëÇó²¢·¢³öÁËÏìÓ¦£¬²»¹ýÓ¦ÓÃ²ã±ØÐ뱨¸æÕâ±Ê½»Ò×ʧ°Ü¡£±¨¸æÓ¦ÓôíÎóµÄ×î¼Ñʵ¼ùÊǽ«Ó¦ÓõĸºÔØÊý¾Ý·â×°ÔÚ±ê×¼ÐÅ·âÖУ¬ÐÅ·âÖк¬ÓÐÒ»ÖµÄÓ¦ÓôíÎóλÖÃÐÅÏ¢¡£ÔÚÉÏÊö×ʽðתÕËʾÀýÖУ¬³É¹¦µÄתÕËÏìÓ¦µÄÒµÎñ¸ºÔØÓ¦¸ÃÈçÏÂËùʾ£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">{ "transferResponse":{  
"fromAccount":1,
"toAccount":5,
"amount":500.00,
"confirmation":232348844
}
}</span></span>

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">  
</span></span>

ÏìÓ¦°üº¬ÁËÔ´Õ˺ÅÓëÄ¿±êÕ˺š¢×ªÕ˵Ä×ʽðÊý¶î¼°È·ÈϺš£Ö±½Ó½«´íÎóÂëÓë´íÎóÏûÏ¢·Åµ½transferResponse ¶ÔÏóÖлᵼÖ´íÎóÂëÓë´íÎóÏûÏ¢µÄ¶¨Î»±äµÃÀ§ÄÑ¡£Èç¹ûÿ¸ö¶¯×÷¶¼½«´íÎóÐÅÏ¢·Åµ½×Ô¼ºµÄÏìÓ¦¶ÔÏóÖУ¬¾ÍÎÞ·¨ÔÚÓ¦ÓüäÖØÓôíÎ󱨸æÂß¼­ÁË¡£Ê¹ÓÃÈçÏ´úÂëÖеÄÊý¾Ý°ü½á¹¹¿ÉÒÔÈÃÓ¦ÓÿìËÙÈ·¶¨ÊÇ·ñ³öÏÖÁË´íÎ󣬷½Ê½ÊǼì²éÏìÓ¦µÄJSON¸ºÔØÖÐÊÇ·ñ´æÔÚ¡°error¡±¶ÔÏó£º

<span style="font-family:Microsoft YaHei;font-size:14px;">
<span style="font-family:Microsoft YaHei;font-size:14px;">{"error":{  
"code":900005,
"messages":"Insufficient Funds to Complete Transfer"
},
"data":{
"fromAccount":1,
"toAccount":5,
"amount":500.00
}
}</span></span>
   
2703 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ