2014-10-16 46 views
2

去年我开发了一个应用程序并发布了iOS 7,并且都很好。我最近更新了iOS 8的应用程序,并发布了更新,其开发目标仍然设置为iOS 7.现在我收到的电子邮件表明,该应用程序对iOS 7用户而言是崩溃的,但对于iOS 8用户来说工作正常。调试后,我发现,是什么原因导致的崩溃是我上的NSOperation子类中定义的下列财产 -NS_AVAILABLE(10_10,8_0)在iOS 7上编译时导致崩溃

@property (copy, nonatomic) NSString *name; 

我得到的崩溃是“无法识别的选择发送到实例”。

在iOS系统中8,苹果已经增加了以下属性的NSOperation -

@property (copy) NSString *name NS_AVAILABLE(10_10, 8_0); 

那么,为什么这会导致应用程序在iOS 7崩溃时,我已经定义了在子类的属性?另外,如何避免将来发生这种情况,因为Xcode不会给我任何警告?

谢谢。

回答

3

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

但是,当应用程序被搭载iOS 7,NSOperation(和子类)下运行没​​有这个name属性让您获得运行时错误尝试使用该属性的不存在的getter和setter方法。

最好的解决办法是重命名你的财产。然后你的班级的财产将被生成和使用。