字典轉(zhuǎn)單例模型和NSString轉(zhuǎn)Date中的坑

字典轉(zhuǎn)單例Model對(duì)象的問題

今天工作中,遇到一個(gè)坑,項(xiàng)目使用YYModel進(jìn)行字典模型轉(zhuǎn)換的。先看下Demo代碼:

  • 定義一個(gè)模型類:
@interface singleModel : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *sex;
@property (nonatomic, copy) NSString *age;
@property (nonatomic, copy) NSString *address; ```

* 這是正常使用YYmodel 字典轉(zhuǎn)模型的姿勢(shì):
NSDictionary *dic = @{@"name":@"zhangsan",@"sex":@"man",@"age":@"17",@"address":@"jiangsu"};
singleModel *model = [singleModel yy_modelWithDictionary:dic];
NSLog(@"%@",model.name);
從打印結(jié)果來看是很正常的,沒問題,接下來,看下面代碼:

*  先在模型類中添加單例方法:

  • (instancetype)shared{
    static singleModel *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    instance = [[self alloc] init];
    });
    return instance;
    }```

在控制器中代碼如下:

    NSDictionary *dic = @{@"name":@"zhangsan",@"sex":@"man",@"age":@"17",@"address":@"jiangsu"};
    singleModel *model = [singleModel shared];
    model = [singleModel yy_modelWithDictionary:dic];
    NSLog(@"%@",model.name);
    NSLog(@"%@",[singleModel shared].name); 

我們看下控制臺(tái)的打印結(jié)果:


singleDemo.png

不知道你們看到這個(gè)結(jié)果,是什么表情,反應(yīng)由于我學(xué)藝不精,我是醉了,不理解為什么,從打印結(jié)果和左面看內(nèi)存中的值,是已經(jīng)賦值成功了的,為毛,通過單例取值的時(shí)候是nil 呢???

看地址.png

通過指針,應(yīng)該可以看出端倪了,納尼,竟然不是一個(gè)地址,那應(yīng)該就明白了,為什么通過這種方式,單例對(duì)象賦值失敗了。

那有什么辦法,可以解決這個(gè)辦法呢?要是對(duì)象有十幾個(gè)屬性,我要一個(gè)一個(gè)屬性賦值么,這樣太麻煩了,我們可以通過KVC的方式來解決。
看代碼:

    NSDictionary *dic = @{@"name":@"zhangsan",@"sex":@"man",@"age":@"17",@"address":@"jiangsu"};
    singleModel *model = [singleModel shared];
    [model setValuesForKeysWithDictionary:dic];
    NSLog(@"%@",model.name);
    NSLog(@"%@",[singleModel shared].name); 

看結(jié)果:

singleDemo2.png

可以看到 ,這樣的指針是一樣的,通過這種方法,就可以解決這一問題了,有一點(diǎn)要注意,當(dāng)字典里里的key,我們mdel類沒有定義的時(shí)候,會(huì)崩潰,如下:


crash.png

這就是因?yàn)?字典里的key "school" 在model里沒有,這是我們只需要在模型類實(shí)現(xiàn)此方法就好了:

- (void)setValue:(id)value forUndefinedKey:(nonnull NSString *)key{
    NSLog(@"%@",key);
}

string 轉(zhuǎn) Date 的總是相差8小時(shí)的問題

代碼如下:


string 轉(zhuǎn)date.png

從打印臺(tái),看到卻是是相差8小時(shí),原因是因?yàn)槟J(rèn)是GMT格林威治時(shí)間,我們轉(zhuǎn)換成UTC 世界時(shí)間 ,就好了,完整代碼如下:

    NSString *timeStr = @"2016-10-28 10:16";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-HH-dd HH:mm"];
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
    NSDate *date = [[NSDate alloc] init];
    date = [formatter dateFromString:timeStr];
    NSLog(@"%@",date); 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 ? iOS源碼解析—YYModel(YYClassInfo)分析了如何根據(jù)OC的Class對(duì)象構(gòu)建...
    egoCogito_panf閱讀 11,823評(píng)論 4 32
  • “年輕人吶,還是老實(shí)一點(diǎn)比較好啦” 是否那些前輩說的話,句句都是真理? 年輕是否意味著就可以狂妄? 難道成...
    行一Olivia閱讀 529評(píng)論 0 6
  • 有一種生活方式是像個(gè)棧一樣生活。先進(jìn)后出,后進(jìn)先出。重要的事情先入棧了,但是一直呆在了棧底,因?yàn)椴粩嘤鞋嵤潞碗s事入...
    ZenoZeng閱讀 1,793評(píng)論 4 11
  • 實(shí)驗(yàn)內(nèi)容和代碼均修改自《0day安全》第二版 實(shí)驗(yàn)環(huán)境 操作系統(tǒng): Windows XP SP3 DEP關(guān)閉編譯...
    Umiade閱讀 505評(píng)論 0 0

友情鏈接更多精彩內(nèi)容