【iOS】小知識點_AND_踩過的坑

weixin_34353714發表於2016-06-13

目錄:

一. 小知識點
  1. 開發中如何丟擲異常
  2. 判斷某個資料的型別(BOOL/int/NSUInteger/void/id等)
  3. 修改.gitignore生效的方法
  4. Xcode中自己新增警告的方法
  5. ios10跳轉到設定介面
  6. 移除專案的cocopods重新安裝
  • Mark
二. 踩過的坑
  1. 證照過期
  2. AFN報錯
  3. Analyze 報clang錯誤
  4. git push報錯
  • Mark

一. 小知識點

  1. **開發中如何丟擲異常 **
  • 建立NSException物件(沒有實現,app掛掉)
NSString *reason = [NSString stringWithFormat:@"-[%@ %@]: unrecognized selector sent to instance %@", NSStringFromClass([self class]), NSStringFromSelector(aSelector), self];
NSException *exception = [[NSException alloc] initWithName:@"方法沒有實現" reason:reason userInfo:nil];
  • 丟擲
@throw exception;
  1. 判斷某個資料的型別(BOOL/int/NSUInteger/void/id等)
  • 下面給出的是C語言比較兩個字串的,字串大小的比較是以ASCII 碼錶上的順序來決定,此順序亦為字元的值。strcmp()首先將s1 第一個字元值減去s2 第一個字元值,若差值為0 則再繼續比較下個字元,若差值不為0 則將差值返回。
strcmp(<#const char *#>, <#const char *#>)
  • Objective-C 的資料型別,甚至自定義型別、函式或方法的元型別,都可以使用 ASCII 編碼。@encode(aType) 可以返回該型別的 C 字串(char *)的表示
@encode(void)
  • 根據上面介紹就可以判斷是否為某一型別
strcmp(returnType, @encode(void)

如果前者屬於後者型別則返回0,否則返回不為0

  1. 修改.gitignore生效的方法
    1168216-34c842a81a8151bd.png
    修改生效說明
git rm -r --cached .
git add .
  1. Xcode中自己新增警告的方法

    1168216-9d70ddfafa5c8f27.png
    新增警告用於標記

    注意:警告後面文字只能識別英文。。。。。。。

  2. ios10跳轉到設定介面

NSString * urlString = @"App-Prefs:root=Privacy";
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:urlString]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString] options:@{} completionHandler:nil];
    }
  1. 移除專案的cocopods重新安裝
  • 開啟終端,執行sudo gem install cocoapods-deintegrate安裝快速解除專案cocopods依賴的庫
  • 安裝成功後,cd到你專案的更目錄執行pod deintegrate解除專案cocopods依賴
  • 執行pod install,重新安裝cocopods
  • Mark

二. 踩過的坑

  1. 證照過期

    1168216-45a3c3510237c8a5.png
    證照過期說明

    下載最新證照地址

  2. AFN報錯

    1168216-bdaa4f287dbb0689.png
    JSON不能從物件選取什麼玩意的

    AFURLResponseSerialization.m中可以修改AFN支援的格式 比如增加text/html
    1168216-629494b3216ec22b.png
    AFN不可接受型別text/html

  3. Analyze 報clang錯誤

    1168216-6d8d10a45d1a6331.png

    解決方法:Apple LLVM compiler 4.2- Language ->c++ Standard Library 修改為 libstdc++ (GNU C++ standard library)
    1168216-9ba37fb4682249dd.png
    解決方法

  4. git push報錯

    1168216-fe964dc1cb64f1e7.png
    報錯截圖

    如上圖所示一共四個錯誤相關的資訊

    1. remote: error: insufficient permission for adding an object to repository database ./objects
    2. remote: fatal: failed to write object
    3. error: unpack failed: unpack-objects abnormal exit
    4. error: failed to push some refs to 'xxxx.git'

google之後發現是伺服器git倉庫許可權問題,驗證方法進入公司git伺服器檢視許可權參考部落格

1. $ ssh username@ip  
      按照提示輸入密碼
2. $ cd /git/xxxx.git
      就是進入伺服器中對應無法push的倉庫(路徑就是你git clone ip地址後面的那個路徑)
3. $ ls -la
    ![](http://upload-images.jianshu.io/upload_images/1168216-8c31bd5336752839.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    列出當前資料夾下檔案引數,如果全是root說明沒有當前資料夾下面檔案許可權是屬於伺服器,你使用git clone git@ip 是無法寫入的
4.  $ chown -R git:git your_git_pod_name.git
    這個命令就是把檔案許可權交給git
  • Mark