作為IOS開發初級者今天學習了 如何將plist數據字典轉成 數據對象數組中 。有點像C#中解析xml數據 的過程。
apps.plist的xml數據是這樣的
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/><plist version="1.0"><array> <dict> <key>name</key> <string>天天酷跑</string> <key>icon</key> <string>icon_00</string> </dict> <dict> <key>name</key> <string>保衛蘿卜2</string> <key>icon</key> <string>icon_10</string> </dict> <dict> <key>name</key> <string>神偷奶爸</string> <key>icon</key> <string>icon_11</string> </dict></array></plist>
從處理plist中的數據 并返回模型對象的數組
/** * 從處理plist中的數據 并返回模型對象的數組 * * @return NSArray *apps; */-(NSArray *) apps{ if (_apps==nil) { // 過去plist的全路徑 NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil]; //加載數組 NSArray *dicArray=[NSArray arrayWithContentsOfFile:path]; //將dicArray里面的所有字典轉成模型對象,放到新的數組中。 NSMutableArray *appArray=[NSMutableArray array]; for (NSDictionary *dict in dicArray) { //創建模型對象 /* MyApp *app=[[MyApp alloc] initWithDict:dict]; [NSString stringWithFormat:<#(NSString *), ...#>]; [[NSString alloc] initWithFormat:<#(NSString *), ...#>]; [NSArray arrayWithContentsOfFile:<#(NSString *)#>] [[NSArray alloc] initWithContentsOfFile:<#(NSString *)#>; 通過這里 我們需要提取一個appWith 一個命名規范的問題 */ MyApp *app=[MyApp appWithDict:dict]; //添加到對象到數組中 [appArray addObject:app]; } //賦值 _apps=dicArray; } return _apps;}
自定義的MyApp類,和字典中做到一一對應
#import <Foundation/Foundation.h>/** * copy :NSString strong :一般對象 weak:UI控件 assign :基本數據類型 */@interface MyApp : NSObject/** * 圖標 */@property (nonatomic,copy) NSString *icon;/** * 名稱 */@property(nonatomic,copy) NSString *name;/** * 通過字典來初始化模型對象 * * @param dic 字典對象 * * @return 已經初始化完畢的模型對象 *//*instancetype的作用,就是使那些非關聯返回類型的方法返回所在類的類型!好處能夠確定對象的類型,能夠幫助編譯器更好的為我們定位代碼書寫問題
instanchetype和id的對比1、相同點都可以作為方法的返回類型2、不同點①instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型的對象;②instancetype只能作為返回值,不能像id那樣作為參數,比如下面的寫法:*/-(instancetype)initWithDict:(NSDictionary *)dict;+(instancetype) appWithDict:(NSDictionary *)dict;@end
@implementation MyApp-(instancetype)initWithDict:(NSDictionary *)dict{ if (self=[super init]) { self.name=dict[@"name"]; self.icon=dict[@"icon"]; } return self;}+(instancetype) appWithDict:(NSDictionary *)dict{ // 為何使用self,誰調用self方法 self就會指向誰!! return [[self alloc] initWithDict:dict]; }@end
新聞熱點
疑難解答