iOS小計3

提示:因爲水平有限,如發現有疑問或錯誤的地方請絕不客氣的提出、討論,我會在第一時間回覆,感謝在先ios

在A_ViewController中對使用Xib建立的B_ViewController中IBOUT拉出來的控件賦值爲空的問題;形成這種結果的緣由是:當咱們對B_ViewController 拉出來的控件賦值的時候,控件的初始化尚未完成.解決方法:數組

  • B_ViewController中添加一個用於臨時保存值的屬性.在B_ViewController 初始化完成後給B_ViewController IBOut的控件賦值
  • 若是是iOS9之後的版本 能夠調用[B_ViewController loadViewIfNeeded]方法,iOS9 以前最好不要調用[B_ViewController loadView];在添加ViewController的時候最好設置其frame 而後再addChildViewController操做.

注意系統API返回容器是否可變xcode

  • 也許你聲明的時候與寫getter方法的時候返回的是NSMutArray;可是在編碼過程當中誤操做把它設置爲不可變的 NSArray,而後調用可變數據的方法就會崩潰.eg:以前定義的是可變的數組,可是通過對NSMuArray內容的篩選後返回的是不可變的數組,返回時不可變的數組.

關於數組一些問題:app

  • [__NSArrayI removeObject:]:unrecognized selector sent to instance 0xa391640:出現這種崩潰信息說明數組已是NSArray;而再也不是NSMutArray;其次可變容器是不能一邊遍歷,一邊進行刪除操做的

SVN一些常見設置框架

  • UI切圖放在360雲盤裏了,下載的時候自動從壓縮包裏面解壓了,結果是用SVN提交的時候出錯,說有些圖片的前綴有不可打印的字符,不能提交,圖片前面會出現?號。解決方法:蘋果電腦上面解壓應用對帶有漢字的壓縮支持不太好,把網盤上面的壓縮包的中文名字改爲英文.
  • svn默認會忽略一些文件. 好比.a文件是不能提交到svn;
    選擇Versions的菜單View-->Show Ignored Items,這樣就會顯示出ignored的文件,找到你要上傳的.a文件,右鍵「Add」就行.

LanchScreen在iOS7.0以及以前的版本是不支持的iphone

Xcode中lib、frme搜索路徑設置編輯器

  • 在設置工程的library search path 或者 framework search path 的時候 , 必定要先配置好搜索的路徑 ,通常都是相對路徑. <使用絕對路徑容易出現問題,好比使用代碼管控工具,會找不到庫>
    $(SRCROOT)宏和$(PROJECT_DIR)宏都指xxx.xcodeproj所在的父目錄;$(inherited) 表示繼承關係.

必定要避免本身寫的類、方法與系統提供的API不能重名,儘可能少重寫系統提供的方法.當使用別人提供的第三方庫、或者本身以前寫過的爲已知類添加的分類,有可能從寫了系統的方法,這個時候首先執行的是第三方或者是本身添加到類目中方法,排查這種錯誤時候能夠打斷點跟蹤一下代碼執行或者經過搜索文件方式去查找是否存在重寫系統方法的分類.ide

關於證書的一些問題svn

  • our build settings specify a provisioning profile with the UUID 「XXXXXX」,however, no such provisioning profile was found 引發這種狀況有兩種緣由:工具

    1. provision 文件與證書不匹配;要從新設置一下.
    2. provision文件丟失.也就是找不到. 檢查你的provision文件是否被刪除, 若是被刪除從新下載安裝.
      若是仍是不行能夠進行以下操做:

      1. 找到項目中的**.xcodeproj文件,點擊右鍵,show package contents(打開包內容).
      2. 打開後找到project.pbxproj文件,用文本編輯器打開。其實就是右鍵,點擊open就行了.
      3. 打開這個文件後,按command+F,在這個文件中查找「PROVISIONING_PROFILE",找到和這個PROVISIONING_PROFILE="487F3EAC05FB4A2A9EA031F1F35760EB";"PROVISIONING_PROFILE[sdk=iphoneos*]" = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";」相似的都刪除.
  • The certificate used to sign 「XXXXX" has either expired or has been revoked. An updated certificate is required to sign and install the application;證書已過時或者被revoked須要更新證書)解決方法:

    1. 在打開Xcode Meun菜單下的Preference
    2. 選擇Account>Team>ViewDetails
    3. 在Profileslist中選中任意一個Provisionfile
    4. 右擊選中的ProvisionFile > Show in Finder ,而後把全部Provision刪除
    5. 點擊DownLoadAll從新下載ProvisionFile

Property && Synthesize && Dynamic

property:是封裝數據的地方: 除了根據(readwrite/readonly)生成對應的setter、getter方法之外,還會生成一個帶有下劃線與屬性名相同的實例變量.
synthesize:用來指定屬性對應成員變量的名稱.
dynamic:告訴編譯器不要生成getter、setter 方法.

@interface SteStudent : NSObject
@property (copy, nonatomic) NSString* name;
@property (assign, nonatomic) int score;
@end
  
@implementation SteStudent
//生成一個name實例變量.
@synthesize name; 
//生成一個_score的實例變量.
@synthesize score = _score; 
  
- (void)testSynthesize{

    self.name = @"name"; 

/*
Important: If you use @synthesize without specifying an instance variable name, like this:
@synthesize firstName;
the instance variable will bear the same name as the property.
In this example, the instance variable will also be called firstName, without an underscore.
若是沒有指定要生成的實例變量,那麼就會生成一個和屬性名相同的實例變量.
 */
 
_name = @"yourName"; //報錯

/***synthesize小結
若是指定了成員變量的名稱,會生成一個指定的名稱的實例變量.
例如:@synthesize customPro = _customPoy;設置屬性變量能夠經過_customPoy來設置.
若是這個實例已經存在了就再也不生成了,例如:
@implementation SteStu {
 //已經存在一個_customPoy實例變量就不會再生成.
 id _customPoy ; 
}
若是是@synthesize customPoy;則會生成一個名稱爲customPoy的實例變 量-沒有下劃線.
若是是@synthesize property = _foo;生成一個帶下劃線的_foo實例變量
*/

}

什麼狀況下不會自動合成屬性變量.

  • 同時重寫setter 和 getter時(能夠在implemention裏面單獨實現或者利用synthesize指定)
  • 重寫只讀屬性的 getter 時
  • 使用@dynamic property 時
    (對於上面三種狀況,可理解爲編譯器認爲咱們本身須要根據readwrite或者readonly 來手動實現對應的getter、setter方法,因此不必合成一個實例變量)
  • 在@protocol 中定義的全部屬性
  • 在category 中定義的全部屬性
  • 子類重載父類的屬性;在子類中訪問父類_property報錯;

iOS添加其餘字體
項目中用到了PingFangSC字體,可是在iOS8中並不支持這裏給出兩種解決方法:

  • 下載PingFangSC字體而且添加到工程中,由於字體庫通常很大,這樣會增大包的大小

    1. 根據須要找到所需字體的PostScript而後下載並拖進本身的工程中.
    2. 在Plist文件中添加 Fonts Provided By application 描述.
    3. 根據須要建立本身所需字體.
      具體細節參考:https://codewithchris.com/com...
  • 動態下載下載到iOS系統中;包大小不會增大.

    1. 找到所需字體的PostScript而後添加到下載列中;若是已經下載就不用再次下載.
    2. 根據須要用UIFont建立所需字體.
      具體細節參考:http://blog.devtang.com/2013/...

AttributedString屬性設置時使用CoreTextApi設置下劃線顏色沒有效果.
設置UILabel.attributedString下劃線時使用CoreTextAPI沒有效果;設置的時候儘可能使用Foundation框架裏對應的key去設置

NSMutableAttributedString* mutAttString =  
   [[NSMutableAttributedString alloc]initWithString:@"Do     what you wanna do!"];

    //這樣設置沒有效果.
    [
    mutAttString 
        addAttribute:(id)kCTUnderlineColorAttributeName  
               value:(id)[UIColor redColor].CGColor  
               range:NSMakeRange(0, 4)
    ];
    
    //使用Foundation中對應的key進行設置.
    [
    mutAttString  
         addAttribute:NSUnderlineColorAttributeName  
                value:[UIColor redColor]   
                range:NSMakeRange(0,4)
    ];
相關文章
相關標籤/搜索