ios 如何在Objective-C中正确使用getter作为选择器?获取现代Xcode中的弃用警告

m3eecexj  于 2023-03-14  发布在  iOS
关注(0)|答案(1)|浏览(123)

我在一个应用程序中使用了旧版本的AFNetworking,它工作正常,除了我在initWithCoder方法中的这一行中收到了来自Xcode的弃用警告:

self.queryStringSerializationStyle = (AFHTTPRequestQueryStringSerializationStyle)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue];

具体警告为:

***-[NSKeyedUnarchiver解码键的对象:]:键(queryStringSerializationStyle)的值不是对象。这将在将来成为错误。

从代码中我可以看出(ObjectiveC不是我的强项),这是因为@selector(queryStringSerializationStyle)看起来试图将querySerializationStyle的“getter”选择器转换为NSString,但我不明白为什么这是错误的,事实上它适用于前面的行:

self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy];

我该怎么补救呢?

eeq64g8w

eeq64g8w1#

这里的问题与选择器无关,而是序列化的值。很可能编码器使用了-encodeInteger:forKey:,所以实际编码的是一个整数,而不是NSNumber。当您将其解码为NSNumber(一个对象)时,它会抱怨类型不匹配。请确保您的编码和解码逻辑匹配。

相关问题