NS_可用(10_10,8_0)在构建iOS 7时导致崩溃

NS_可用(10_10,8_0)在构建iOS 7时导致崩溃,ios,objective-c,objective-c-runtime,Ios,Objective C,Objective C Runtime,去年,我开发了一个应用程序,并为iOS 7发布了它,一切都很好。我最近更新了iOS 8的应用程序,并发布了更新,开发目标仍然设置为iOS 7。现在我收到了一些电子邮件,说iOS 7用户的应用程序正在崩溃,但iOS 8用户的应用程序运行良好。调试后,我发现导致崩溃的是我在NSOperation子类上定义的以下属性- @property (copy, nonatomic) NSString *name; 我遇到的崩溃是“无法识别的选择器发送到实例” 在iOS 8中,苹果在NSO操作中添加了以下属性

去年,我开发了一个应用程序,并为iOS 7发布了它,一切都很好。我最近更新了iOS 8的应用程序,并发布了更新,开发目标仍然设置为iOS 7。现在我收到了一些电子邮件,说iOS 7用户的应用程序正在崩溃,但iOS 8用户的应用程序运行良好。调试后,我发现导致崩溃的是我在NSOperation子类上定义的以下属性-

@property (copy, nonatomic) NSString *name;
我遇到的崩溃是“无法识别的选择器发送到实例”

在iOS 8中,苹果在NSO操作中添加了以下属性-

@property (copy) NSString *name NS_AVAILABLE(10_10, 8_0);
那么,当我在子类上定义了属性时,为什么这会导致应用程序在iOS 7上崩溃呢?而且,我怎样才能避免将来发生这种情况,因为Xcode没有给我任何警告


谢谢。

问题出在这里。您正在使用iOS 8的基本SDK构建应用程序。因此,类的
name
属性没有任何作用,因为编译器看到子类(
NSOperation
)已经有一个名为
name
的属性。换句话说,当使用iOS 8的基本SDK构建时,编译器不会在子类中合成setter和getter,因为它与
NSOperation
是冗余的

但是,当应用程序在iOS 7下运行时,
NSOperation
(以及您的子类)没有此
name
属性,因此您在尝试对该属性使用不存在的getter或setter方法时会出现运行时错误

最好的解决方案是重命名您的属性。然后将生成并使用类的属性