- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
自升级到 Xcode 5.1 后,我开始在我的项目使用的某些代码中看到以下警告。我想弄清楚这意味着什么。
警告:自动属性合成不会合成属性“responseHeader”,因为它是“readwrite”,但它将通过另一个属性“readonly”合成
它发生的代码,在 .m 文件中:
@interface S3Response ()
@property (nonatomic, readwrite, retain) NSDictionary *responseHeader;
@end
属性的先前声明,在 .h 文件中:
@property (nonatomic, readonly) NSDictionary *responseHeader;
该属性没有@synthesize
语句,responseHeader
或setResponseHeader
也没有定义为方法。然而,有一个名为 responseHeader
的 ivar 的明确定义。
对我来说似乎非常简单:属性被声明为对类的用户只读,但在本地可读写,以便类可以设置它。
这个警告是什么意思,我应该怎么做?
最佳答案
该代码似乎来自 AWS SDK for iOS ,S3Response
是 AmazonServiceResponse
的子类。
公共(public) AmazonServiceResponse
接口(interface)定义了一个只读属性
@interface AmazonServiceResponse:NSObject
// ...
@property (nonatomic, readonly) NSDictionary *responseHeader;
@end
在实现文件的类扩展中重新定义为读写:
@interface AmazonServiceResponse ()
@property (nonatomic, readwrite, retain) NSDictionary *responseHeader;
@end
现在 子类 S3Response
也想要对该属性进行读写访问,因此也在其实现文件的类扩展中定义:
@interface S3Response ()
@property (nonatomic, readwrite, retain) NSDictionary *responseHeader;
@end
编译器提示是因为——在编译“S3Response.m”时——它不知道该属性的 setter 存在于父类(super class)中(它不读取那时父类(super class)的实现文件)。编译器也不能简单地在子类中合成一个setter,因为它不可能不知道属性由父类(super class)中的实例变量支持。
但是你知道会生成一个setter,所以你可以删除警告添加一个 @dynamic
声明到子类实现:
@implementation S3Response
@dynamic responseHeader;
...
@dynamic
是对编译器的“ promise ”,所有必要的访问器方法都将在运行时可用。
关于objective-c - 这个 objective-c 属性综合警告是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22443593/
这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: ?
我收到警告: One or more signals are missing in the sensitivity list of always block. always@(Address)begi
我正在寻找一个完整的 java 日期管理库,它可以让我理解像这样的字符串: 明天中午 => 2011-10-20 12:00 今天下午 4 点 => 2011-10-20 16:00 等... 但如果
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
下学期我可能会成为我大学网络编程类(class)教学团队的一员,我想知道要给学生布置什么样的 Javascript 作业。从编程的 Angular 来看,本类(class)不是入门类(class)。
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说
我将我的 Gitlab 迁移到了新域。我想将所有 HTTP 请求从旧 URL 重定向到新 URL。两个域当前都指向同一服务器(使用 A DNS 记录)。 我使用 Gitlab Omnibus 包,并捆
只需在新配置的 CentOS 6.5 VM 上使用 omnibus 安装程序设置新的 Gitlab 安装。我有点 Linux 菜鸟,但我一直在尝试设置 Gitlab 安装,并且能够通过主机访问安装。
我试图更好地了解合成如何在没有指定其他条件的过程中工作。 我认为这不是编码方式,因为我没有考虑其他选项,但我的问题是如何解释这段代码? process(clock) begin if (clock'e
创建以下内容时: create view v (a, b) as select 1, 2 from dual; create or replace package p as type t is t
我是一名优秀的程序员,十分优秀!