选择了具有“保留(或强)”属性的属性进行综合
Posted
技术标签:
【中文标题】选择了具有“保留(或强)”属性的属性进行综合【英文标题】:Property with attribute 'retain (or strong)' was selected for synthesis 【发布时间】:2018-04-12 21:27:57 【问题描述】:选择了具有“保留(或强)”属性的属性进行合成
这是从 xcode 9.2 更新到 xcode 9.3 后出现的新错误。在构建我的测试项目时会发生这种情况,我的一个变量抛出了这个错误:
@property (nonatomic, retain) NSNumber* myVariable;
在这个旧代码库中,这一直是一个“保留”属性,有没有人知道为什么突然出现错误?
附加信息:
整个项目中有几个同名的变量,在各种@protocol 文件中都以相同的方式定义。这些协议都在某个时候#import 到测试项目中,当它尝试构建时会抛出错误。
我可以提供其他信息吗?
编辑
在使此错误可重新创建的过程中,很明显该错误是由于项目中的重复变量名称之一具有“只读”属性,而不是其他变量具有的“保留”属性。我发布娱乐和答案,以防其他人有旧项目或错字引发相同的错误。
这可以重新创建:
创建一个新的单视图 ios 项目 使用目标 C 并包含单元测试 添加一个包含给定“myVariable”的@protocol 头文件 添加与第一个匹配的第二个@protocol 头文件,然后将“保留”更改为“只读” 添加一个新的 NSObject
@interface MyObject : NSObject <MyProtocol, MyProtocol2>
在MyObject的实现中@synthesize myVariable;
运行单元测试 - 应该会出现错误
【问题讨论】:
“我可以提供其他信息吗?”绝对地。提供足够的信息让我们自己看到问题。只需创建一个空项目,看看必须投入什么才能使问题发生。然后告诉我们如何做到这一点。 @matt 我知道如果我有时间重新创建我会解决问题,不幸的是上周没有时间,希望其他人也遇到同样的问题。现在已经添加了这些步骤。 既然您似乎已经回答了自己的问题,您可以发布您的解决方案作为答案。可以在 Stack Overflow 上回答您自己的问题。 【参考方案1】:问题归结为没有意识到具有相同名称的变量之一是只读属性,而其他变量都是保留。似乎 xcode 9.2 和以前的版本也从未遇到过这样的错误,但 xcode 9.3 现在可以了。我的解决方案是更改只读以匹配保留变量。
对其他人来说更好的解决方案可能是重命名只读变量以表示它是唯一的。
【讨论】:
以上是关于选择了具有“保留(或强)”属性的属性进行综合的主要内容,如果未能解决你的问题,请参考以下文章
如何在 jQuery 中选择具有 name 属性的元素? [复制]