2、iOS 開發之字典轉模型和 xib,iosxib
一、字典轉模型(plist檔案)
模型的封裝方法:(放到代碼倉庫中)
1.在.h檔案中添加與plist檔案key值對應的屬性名稱
Array --- > NSArrayDictionary --- > NSDictionarystring ---> NSStringnumber ---> NSNumber
注意:屬性名稱和plist中key值一定要一致
2..h檔案檔案中屬性的strong weak copy assign的使用
1> strong : 用於一般的對象或自訂的物件類型2> weak : 用於UI控制項和delegate3> copy : 用於NSString block對象4> assign : 用於基礎資料型別 (Elementary Data Type)
3.在.h中添加可以傳入字典參數的構造方法
- (instancetype)initWithDict:(NSDictionary*)dict;+ (instancetype)xxxWithDict:(NSDictionary*)dict;
4.在.m檔案中實現對應的構造方法
// 在initWithDict:方法中用KVC一句代碼搞定所有屬性
5.instancetype和id的區別
1> 相同點:都可以作為方法的傳回值類型
2> 不同點:instancetype編譯器會檢測出真是類型,id可以用在參數類型上
二、KVC
KVC -索引值編碼,是一種間接修改/讀取對象屬性的一種方法
1.使用注意事項:
1> plist中的索引值名稱必須與模型中的屬性一致2> 模型中的屬性可以不完全出現在plist中,但是如果plist檔案中的屬性不完全出現在屬性中就會出錯。
三、xib的使用
xib檔案用來描述一塊局部的UI介面
在開發階段面向開發人員是xib檔案,裝到手機xib檔案就會轉化為nib檔案
1.xib檔案的載入方法
1> 方法1:建立所有的xib對象,並且將對象按順序放到objs數組中
NSArray * objs = [[NSBundle mainBundle] loadNibNamed:@"appView" owner:nil options:nil];
2> 方法2
UINib *nib = [UINib nibWithNibName:@"appView" bundle:[NSBundle mainBundle]];NSArray* objs = [nib instantiateWithOwner:nil options:nil];
2.xib封裝成view的過程
1> 建立一個整合字UIView的自訂view,假設類名叫做(WBAppView)2> 建立一個WBAppView.xib檔案來描述WBAppView內部結構3> 修改xib的類型為WBAppView的真實類型4> 將內部子控制項跟WBAppView進行屬性連線5> WBAppView提供一個模型屬性6> 重寫模型屬性的set方法,因為在set方法中可以拿到外界傳遞的模型資料7> 把模型資料拆開,分別設定資料到對應的子控制項中8> 補充:提供一個建立WBAppView的類方法,將讀取的xib檔案代碼屏蔽起來
四、懶載入
- 懶載入:用到時才載入,在get方法中實現的,OC中的get方法是去掉底線的屬性名稱首字母小寫
用到時:用到了真實資料or用到了get方法(文檔)
- (NSArray *)apps{ if (_apps == nil) { // 1.獲得plist的全路徑 NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; // 2.載入數組 NSArray *dictArray = [NSArray arrayWithContentsOfFile:path]; // 3.將dictArray裡面的所有字典轉成模型對象,放到新的數組中 NSMutableArray *appArray = [NSMutableArray array]; for (NSDictionary *dict in dictArray) { // 3.1.建立模型對象 MJApp *app = [MJApp appWithDict:dict]; // 3.2.添加模型對象到數組中 [appArray addObject:app]; } // 4.賦值 _apps = appArray; } return _apps;}
補充:不能與控制項進行互動
1> alpha <= 0.012> hidden = YES3> userInteraction = NO(父控制項的userInteraction = NO)4> 位置超過了所在父控制項的尺寸// 父視圖不能互動,子視圖也不能互動方法的命名規範:
命名法則:
1> 單詞首字母小寫,後面的單詞的首字母大寫2> initWithxxx: init 初始化函數With單詞必須大寫,因為OC預設的就是"駝峰法",預設初始化函數就是init單詞開頭的,如果是initwithxxx就是認為是initwith單詞開頭的,造成找不到初始化方法3> 方法,屬性不能以new作為名稱的開頭
“`
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。