iOS開發經驗總結(下)

四10、AFNetworking 傳送 form-dataios

 

將JSON的數據,轉化爲NSData, 放入Request的body中。 發送到服務器就是form-data格式。web

 

四11、非空判斷注意windows

 

BOOL hasBccCode = YES;緩存

if ( nil == bccCodeStr服務器

    || [bccCodeStr isKindOfClass:[NSNull class]]微信

    || [bccCodeStr isEqualToString:@""])cookie

{session

    hasBccCode = NO;app

}ide

 

若是進行非空判斷和類型判斷時,須要新進行類型判斷,再進行非空判斷,否則會crash。

 

四12、iOS 8.4 UIAlertView 鍵盤顯示問題

 

能夠在調用UIAlertView 以前進行鍵盤是否已經隱藏的判斷。

 

@property (nonatomic, assign) BOOL hasShowdKeyboard;

 

[[NSNotificationCenter defaultCenter] addObserver:self

                                         selector:@selector(showKeyboard)

                                             name:UIKeyboardWillShowNotification

                                           object:nil];

 

[[NSNotificationCenter defaultCenter] addObserver:self

                                         selector:@selector(dismissKeyboard)

                                             name:UIKeyboardDidHideNotification

                                           object:nil];

 

(void)showKeyboard

{

    self.hasShowdKeyboard = YES;

}

 

(void)dismissKeyboard

{

    self.hasShowdKeyboard = NO;

}

 

while ( self.hasShowdKeyboard )

{

    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

}

 

UIAlertView* alerview = [[UIAlertView alloc] initWithTitle:@"" message:@"取消修改?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles@"肯定", nil];

[alerview show];

 

四十3、模擬器中文輸入法設置

 

模擬器默認的配置種沒有「小地球」,只能輸入英文。加入中文方法以下:

 

選擇Settings—>General–>Keyboard–>International KeyBoards–>Add New Keyboard–>Chinese Simplified(PinYin) 即咱們通常用的簡體中文拼音輸入法,配置好後,再輸入文字時,點擊彈出鍵盤上的「小地球」就能夠輸入中文了。

若是不行,能夠長按「小地球」選擇中文。

 

四十4、iPhone number pad

 

phone 的鍵盤類型:

 

  1. number pad 只能輸入數字,不能切換到其餘輸入

     

     

  2. phone pad 類型: 撥打電話的時候使用,能夠輸入數字和 + * #

 

四十5、UIView 自帶動畫翻轉界面

 

(IBAction)changeImages:(id)sender

{

    CGContextRef context = UIGraphicsGetCurrentContext();

 

    [UIView beginAnimations:nil context:context];

    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    [UIView setAnimationDuration:1.0];

 

    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:_parentView cache:YES];

    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:_parentView cache:YES];

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:_parentView cache:YES];

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:_parentView cache:YES];

 

    NSInteger purple = [[_parentView subviews] indexOfObject:self.image1];

    NSInteger maroon = [[_parentView subviews] indexOfObject:self.image2];

 

    [_parentView exchangeSubviewAtIndex:purple withSubviewAtIndex:maroon];

 

    [UIView setAnimationDelegate:self];

    [UIView commitAnimations];

}

 

四十6、KVO 監聽其餘類的變量

 

[[HXSLocationManager sharedManager] addObserver:self

                                         forKeyPath:@"currentBoxEntry.boxCodeStr"

                                            options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionOld context:nil];

 

在實現的類self中,進行[HXSLocationManager sharedManager]類中的變量@「currentBoxEntry.boxCodeStr」 監聽。

 

四十7、ios9 crash animateWithDuration

 

在iOS9 中,若是進行animateWithDuration 時,view被release 那麼會引發crash。

 

[UIView animateWithDuration:0.25f animations:^{

        self.frame = selfFrame;

    } completion:^(BOOL finished) {

        if (finished) {

            [super removeFromSuperview];

        }

    }];

 

會crash。

 

[UIView animateWithDuration:0.25f

                          delay:0

         usingSpringWithDamping:1.0

          initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear

                     animations:^{

                         self.frame = selfFrame;

                     } completion:^(BOOL finished) {

                         [super removeFromSuperview];

                     }];

 

不會Crash。

 

四十8、對NSString進行URL編碼轉換

 

iPTV項目中在刪除影片時,URL中需傳送用戶名與影片ID兩個參數。當用戶名中帶中文字符時,刪除失敗。

 

以前測試時,手機號綁定的用戶名是英文或數字。換了手機號測試時才發現這個問題。

 

對於URL中有中文字符的狀況,需對URL進行編碼轉換。

 

urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 

 

四十9、Xcode iOS加載圖片只能用PNG

 

雖然在Xcode能夠看到jpg的圖片,可是在加載的時候會失敗。

錯誤爲 Could not load the 「ReversalImage1」 image referenced from a nib in the bun

 

必須使用PNG的圖片。

 

 


 

若是須要使用JPG 須要添加後綴

 

[UIImage imageNamed:@"myImage.jpg"];

 

五10、保存全屏爲image

 

CGSize imageSize = [[UIScreen mainScreen] bounds].size;

UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);

CGContextRef context = UIGraphicsGetCurrentContext();

 

for (UIWindow * window in [[UIApplication sharedApplication] windows]) {

    if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) {

        CGContextSaveGState(context);

        CGContextTranslateCTM(context, [window center].x, [window center].y);

        CGContextConcatCTM(context, [window transform]);

        CGContextTranslateCTM(context, -[window bounds].size.width*[[window layer] anchorPoint].x, -[window bounds].size.height*[[window layer] anchorPoint].y);

        [[window layer] renderInContext:context];

 

        CGContextRestoreGState(context);

    }

}

 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

 

五11、判判定位狀態 locationServicesEnabled

 

這個[CLLocationManager locationServicesEnabled]檢測的是整個iOS系統的位置服務開關,沒法檢測當前應用是否被關閉。經過

 

CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

    if (kCLAuthorizationStatusDenied == status || kCLAuthorizationStatusRestricted == status) {

        [self locationManager:self.locationManager didUpdateLocations:nil];

    } else { // the user has closed this function

        [self.locationManager startUpdatingLocation];

    }

 

CLAuthorizationStatus來判斷是否能夠訪問GPS

 

五12、微信分享的時候注意大小

 

text 的大小必須 大於0 小於 10k

 

image 必須 小於 64k

 

url 必須 大於 0k

 

五十3、圖片緩存的清空

 

通常使用SDWebImage 進行圖片的顯示和緩存,通常緩存的內容比較多了就須要進行清空緩存

 

清除SDWebImage的內存和硬盤時,能夠同時清除session 和 cookie的緩存。

 

// 清理內存

[[SDImageCache sharedImageCache] clearMemory];

 

// 清理webview 緩存

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

for (NSHTTPCookie *cookie in [storage cookies]) {

    [storage deleteCookie:cookie];

}

 

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

[config.URLCache removeAllCachedResponses];

[[NSURLCache sharedURLCache] removeAllCachedResponses];

 

// 清理硬盤

[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{

    [MBProgressHUD hideAllHUDsForView:self.view animated:YES];

 

    [self.tableView reloadData];

}];

 

五十4、TableView Header View 跟隨Tableview 滾動

 

當tableview的類型爲 plain的時候,header View 就會停留在最上面。

 

當類型爲 group的時候,header view 就會跟隨tableview 一塊兒滾動了。

 

五十5、TabBar的title 設置

 

在xib 或 storyboard 中能夠進行tabBar的設置

 

 

其中badge 是自帶的在圖標上添加一個角標。

 

1. self.navigationItem.title 設置navigation的title 須要用這個進行設置。

 

2. self.title 在tab bar的主VC 中,進行設置self.title 會致使navigation 的title 和 tab bar的title一塊兒被修改。

 

五十6、UITabBar,移除頂部的陰影

 

添加這兩行代碼:

 

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];

 

頂部的陰影是在UIWindow上的,因此不能簡單的設置就去除。

 

五十7、當一行中,多個UIKit 都是動態的寬度設置

 

 

設置horizontal的值,表示出現內容很長的時候,優先壓縮這個UIKit。

 

五十8、JSON的「」 轉換爲nil

 

使用AFNetworking 時, 使用

 

AFJSONResponseSerializer *response = [[AFJSONResponseSerializer alloc] init];

response.removesKeysWithNullValues = YES;

 

_sharedClient.responseSerializer = response;

 

這個參數 removesKeysWithNullValues 能夠將null的值刪除,那麼就Value爲nil了

 

 END

 

寫吐了,那麼長應該是沒人會看完的,看完了算你狠。

相關文章
相關標籤/搜索