提问人:Doug Smith 提问时间:3/12/2023 更新时间:3/13/2023 访问量:34
如何在 Objective-C 中正确使用 getter 作为选择器?在现代 Xcode 中获取弃用警告
How do I properly use a getter as a selector in Objective-C? Getting deprecation warnings in modern Xcode
问:
我在应用程序中使用旧版本的 AFNetworking,它工作正常,除了我在方法中从这一行收到来自 Xcode 的弃用警告:initWithCoder
self.queryStringSerializationStyle = (AFHTTPRequestQueryStringSerializationStyle)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue];
具体警告如下:
-[NSKeyedUnarchiver decodeObjectForKey:]:键 (queryStringSerializationStyle) 的值不是对象。这将在将来成为一个错误。
从我所知道的代码来看(ObjectiveC 不是我的一大优势),因此它看起来是试图将 的“getter”选择器转换为 .但我不明白为什么这是错误的,实际上它适用于之前的行:@selector(queryStringSerializationStyle)
querySerializationStyle
NSString
self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy];
我应该如何解决这个问题?
答:
0赞
Rob Napier
3/13/2023
#1
这里的问题与选择器无关。它是序列化值。很可能是编码器使用的,所以实际编码的东西是一个整数,而不是一个 NSNumber。然后,当您将其解码为 NSNumber(对象)时,它会抱怨类型不匹配。确保您的编码和解码逻辑匹配。-encodeInteger:forKey:
评论