iOS 15 警告:NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:

swiftIOS

1个回答

写回答

IOS
IOS

IOS 15 警告:NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:

在最新的IOS 15系统中,苹果引入了一个新的警告,即NSKeyedUnarchiver的_warnAboutPlistType:missingInAllowedClasses:。这个警告通常出现在使用NSKeyedUnarchiver解档对象时,如果解档的数据类型在allowedClasses中没有定义,就会触发该警告。

NSKeyedUnarchiver是IOS中用于反序列化对象的类,它可以将已序列化的数据转换回原始对象。allowedClasses是一个数组,用于定义可以被解档的对象类型。如果解档的数据类型不在allowedClasses中,就会出现警告。

这个警告的目的是为了防止潜在的安全问题。如果我们不定义allowedClasses,就意味着可以解档任何类型的对象。这可能导致恶意代码的注入或其他安全漏洞。所以苹果为了增强应用的安全性,在IOS 15中引入了这个警告。

为了解决这个警告,我们需要在使用NSKeyedUnarchiver解档对象之前,明确地定义allowedClasses。可以通过设置NSKeyedUnarchiver的类方法setclass:forClassName:来实现。这样,我们就可以告诉NSKeyedUnarchiver可以解档哪些类型的对象。

以下是一个案例代码来说明如何解决这个警告:

Swift

// 定义一个自定义类Person

class Person: NSObject, NSCoding {

var name: String

var age: Int

init(name: String, age: Int) {

self.name = name

self.age = age

}

required init(coder aDecoder: NSCoder) {

self.name = aDecoder.decodeObject(forKey: "name") as? String ?? ""

self.age = aDecoder.decodeInteger(forKey: "age")

}

func encode(with aCoder: NSCoder) {

aCoder.encode(name, forKey: "name")

aCoder.encode(age, forKey: "age")

}

}

// 设置allowedClasses

NSKeyedUnarchiver.setclass(Person.self, forClassName: "Person")

// 解档对象

let data = UserDefaults.standard.data(forKey: "person")

if let data = data {

if let person = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? Person {

print(person.name)

print(person.age)

}

}

在上面的代码中,我们定义了一个自定义类Person,它遵循了NSCoding协议,实现了编码和解码方法。然后我们通过NSKeyedUnarchiver的setclass:forClassName:方法,告诉它可以解档Person类型的对象。

接下来,我们从UserDefaults中获取存储的数据,并使用NSKeyedUnarchiver进行解档。如果解档成功,我们就可以访问解档后的Person对象的属性。

如何解决NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:警告

为了解决NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:警告,我们需要明确地定义allowedClasses。可以按照以下步骤操作:

1. 找到使用NSKeyedUnarchiver解档对象的代码。

2. 在解档之前,使用NSKeyedUnarchiver的setclass:forClassName:方法,为要解档的对象类型设置allowedClasses。确保所有需要解档的自定义类都被包含在allowedClasses中。

3. 重新编译并运行应用程序,警告应该不再出现。

通过这种方式,我们可以避免因为缺少allowedClasses而触发警告,并加强应用的安全性。

IOS 15引入的NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:警告提醒我们在使用NSKeyedUnarchiver解档对象时需要注意安全性。通过明确定义allowedClasses,我们可以避免恶意代码的注入和其他安全漏洞。在开发过程中,我们应该及时解决这个警告,以提高应用的安全性和稳定性。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号