-2

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

     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]);
       //   }
4

1 回答 1

0

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

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

于 2015-11-15T07:07:46.930 回答