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

How do I properly use a getter as a selector in Objective-C? Getting deprecation warnings in modern Xcode

提问人:Doug Smith 提问时间:3/12/2023 更新时间:3/13/2023 访问量:34

问:

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

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

具体警告如下:

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

从我所知道的代码来看(ObjectiveC 不是我的一大优势),因此它看起来是试图将 的“getter”选择器转换为 .但我不明白为什么这是错误的,实际上它适用于之前的行:@selector(queryStringSerializationStyle)querySerializationStyleNSString

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

我应该如何解决这个问题?

iOS Objective-C afnetworking nskeyedunarchiver nscoder

评论


答:

0赞 Rob Napier 3/13/2023 #1

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