項(xiàng)目數(shù)據(jù)模型基本處理

? 項(xiàng)目中創(chuàng)建數(shù)據(jù)模型有時(shí)候是必不可少的,而有時(shí)候或因?yàn)楹笈_(tái)返回?cái)?shù)據(jù)沒(méi)有相對(duì)應(yīng)的值,并且在后期如果使用該模型中屬性會(huì)使程序崩潰。

?我的習(xí)慣是創(chuàng)建模型時(shí)就倆種屬性舉個(gè)例子這就是UserModel

@property(nonatomic,strong)NSNumber *userId;

@property(nonatomic,copy)NSString *userNickName;

如何在某個(gè)網(wǎng)絡(luò)請(qǐng)求用到了UserModel來(lái)接受網(wǎng)絡(luò)請(qǐng)求下來(lái)的數(shù)據(jù),而請(qǐng)求下來(lái)的數(shù)據(jù)并沒(méi)有返回userId,但你卻在項(xiàng)目中使用了這個(gè)屬性,就會(huì)引起行么奔潰所以要對(duì)模型進(jìn)行一下處理,使他們?cè)诔跏蓟脮r(shí)候就有了初始值,這樣不會(huì)引發(fā)程序崩潰,解決辦法為寫一個(gè)BaseModel根模型類,讓所有的模型類繼承于它,我們?cè)谶@個(gè)BaseModel中用runTime機(jī)制來(lái)處理初始值問(wèn)題,在.m中重寫init方法


- (instancetype)init

{

self = [super init];

if (self) {

Class tempClass = [self class];

while (tempClass != [NSObject class]) {

//計(jì)數(shù)變量

unsigned int count = 0 ;

//獲取類的屬性列表 后面方法倆個(gè)參數(shù),一個(gè)是類型變量,一個(gè)是計(jì)數(shù)變量地址

objc_property_t *propertyList = class_copyPropertyList(tempClass, &count);

//遍歷屬性列表

for (int i = 0; i < count; i ++) {

objc_property_t property = propertyList[i];

//獲取每個(gè)屬性的名稱

NSString *propertyName = [NSString stringWithUTF8String: property_getName(property)];

//獲取屬性的類型

const char * type = property_getAttributes(property);

//轉(zhuǎn)碼成oc字符串格式

NSString *attr = [NSString stringWithCString:type encoding:NSUTF8StringEncoding];

//打印attr就會(huì)發(fā)現(xiàn)里面包含的字符串規(guī)律

if ([attr hasPrefix:@"T@"] && [attr length] > 1) {

NSString * typeClassName = [attr substringWithRange:NSMakeRange(3, [attr length]-4)];

//處理NSString類型 付初值@""

if ([typeClassName containsString:@"NSString"]) {

[self setValue:@"" forKey:propertyName];

}

//處理NSNumber類型 付初值@(0)

if ([typeClassName containsString:@"NSNumber"]) {

[self setValue:@(0) forKey:propertyName];

}

Class typeClass = NSClassFromString(typeClassName);

if (typeClass != nil) {

// Here is the corresponding class even for nil values

}

}

}

free(propertyList);

tempClass = [tempClass superclass];

}

}

return self;

}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,757評(píng)論 0 9
  • 對(duì)于從事 iOS 開(kāi)發(fā)人員來(lái)說(shuō),所有的人都會(huì)答出【runtime 是運(yùn)行時(shí)】什么情況下用runtime?大部分人能...
    夢(mèng)夜繁星閱讀 3,732評(píng)論 7 64
  • 情人,其實(shí)是個(gè)非常羅曼蒂克的詞,天生自帶一層朦朧的美感。 但是,總有人膚淺的把它與情婦、姘頭、奸夫、小三這些帶有性...
    不等于閱讀 1,210評(píng)論 0 1
  • 1
    占卜大世界閱讀 62評(píng)論 0 0
  • 本文參加#未完待續(xù),就要表白#活動(dòng),本人承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺(tái)發(fā)表過(guò)。 陪伴是最長(zhǎng)...
    穆念安閱讀 572評(píng)論 5 2