【发布时间】:2015-06-14 14:12:23
【问题描述】:
在新的 Xcode 6.3 中,我收到此警告:
自动属性合成不会合成属性'homeInt';它将由其超类实现,使用@dynamic 来确认意图
我怎样才能删除它?
【问题讨论】:
在新的 Xcode 6.3 中,我收到此警告:
自动属性合成不会合成属性'homeInt';它将由其超类实现,使用@dynamic 来确认意图
我怎样才能删除它?
【问题讨论】:
如果您有意覆盖超类中的相同属性,则在您的*.m 或*.mm 文件中,添加@dynamic 之类的:
@implementation MyClass
@dynamic homeInt;
// ...
@end
如果没有,请重命名该属性。
【讨论】:
我只是删除了这个属性声明,因为它已经在父类中声明了
【讨论】:
根据@mplace 的评论,在我的例子中,我重写了属性以将属性的类型细化为属性原始类的子类。所以,我确实需要@property 覆盖。
这是我正在使用的:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-property-synthesis"
// superclass type for currentValue was "id"
@property (nonatomic, strong) NSDate *currentValue;
#pragma clang diagnostic pop
注意是“-Wobjc-property-synthesis”而不是“-Wno-objc-property-synthesis”
另见https://github.com/couchbase/couchbase-lite-ios/issues/660
【讨论】:
如果您想避免在每个已覆盖超类属性的地方添加@dynamic <varName>有意,您可以在项目构建设置下将-Wno-objc-property-synthesis 标志添加到“其他警告标志” .这将在整个项目范围内抑制警告。
【讨论】:
这个原因是子类定义了相同的属性名覆盖父类,例如:
1)子类“AFHTTPSessionManager”已经定义:
@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * **responseSerializer**;
2)父类“AFURLSessionManager”已经定义:
@property (nonatomic, strong) id <AFURLResponseSerialization> **responseSerializer**;
3)以上原因,警告来了!如果要删除它,只需重命名冲突属性名称!
4) 或者按照它的建议,在您的实现文件中添加“@dynamic homeInt”;
【讨论】:
如果您更新到 Xcode 6.3,只需将 AFNetworking 更新到 2.5.2 版,这些警告就会消失。
【讨论】:
@implementation 我的类
@synthesize homeInt = _ homeInt; ...
@结束
【讨论】: