【问题标题】:Assigning unarchived object to a different object works, why/how?将未归档的对象分配给不同的对象有效,为什么/如何?
【发布时间】:2015-11-15 04:22:10
【问题描述】:

分配一个存档的字典对象但未存档并分配给一个数组似乎不会产生异常,并且从数组中注销的数据是字典的数据,而不是数组格式,如果可以分配给一个不同的返回类型,有点链接转换,而是您直接取消归档和分配。为什么这行得通?如果有人能更深入地解释它,它将有助于更好地理解取消归档过程及其工作方式。

     NSDictionary *glossary = @{
                               @"Abstract class": @"some class",
                               @"Adopt": @"borrow",
                               @"archiving": @"Storing an object for later use"
                               };
    if([NSKeyedArchiver archiveRootObject:glossary toFile:@"propertyList2.plist"] == YES)
        NSLog(@"Archive success");
     else
        NSLog(@"Archive unsuccessfull");

    NSArray *unArchiving = [NSKeyedUnarchiver unarchiveObjectWithFile:@"propertyList2.plist"];
    NSLog(@"%@", unArchiving); 

       //for (NSString *obj in unArchiving) {
       //  NSLog(@"%@: %@", obj,unArchiving[obj]);
       //   }

【问题讨论】:

    标签: objective-c nskeyedarchiver nskeyedunarchiver


    【解决方案1】:

    欢迎使用 Objective-C!由于语言的动态性,对象引用(AKA 变量)的类型实际上只在编译时很重要。在运行时,对象 是什么 很重要;当你写代码时你认为它不应该是什么。

    您的取消归档代码有效的原因是for (X x in Y) 语法对于数组和字典是相同的。同样,索引语法 (a[x]) 是相同的。所有这些都是在运行时处理的,基于被迭代的集合的类型。只要语义相同,您的代码将毫无错误地运行。显然,当您尝试将该字典视为数组时(例如,请参阅 .lastObject),它会爆炸。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2020-08-08
      • 2017-09-08
      • 2015-12-15
      • 2015-01-22
      • 2019-02-02
      相关资源
      最近更新 更多