我有一个iOS项目,它在调试时按预期构建和执行,但在构建用于发布时会抛出编译错误。该错误与在超类中声明的iVar有关,具体是
'fetchedResultsController_' undeclared (First use in this function).
这是超类.h。
@interface Super : UIViewController <NSFetchedResultsControllerDelegate> {
NSFetchedResultsController* fetchedResultsController_;
NSManagedObjectContext* managedObjectContext_;
}
@property (nonatomic, retain) NSFetchedResultsController* fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext* managedObjectContext;
@end
和超类.m
@implementation Super
@synthesize fetchedResultsController = fetchedResultsController_;
@synthesize managedObjectContext = managedObjectContext_;
#pragma mark -
#pragma mark Properties
-(NSFetchedResultsController*)fetchedResultsController {
return nil;
}
因此定义了Subclass接口: -
@interface Sub : Super <UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
// extra stuff
}
在子类.m中,我为fetchedResultsController实现了延迟加载
-(NSFetchedResultsController*)fetchedResultsController {
if (fetchedResultsController_ == nil) { // undeclared error here....
//stuff
}
return fetchedResultsController_;
我很困惑,主要是因为我不明白为什么这会在Debug中加入,而不是在Release!
如果有人能够确定问题是什么,我会非常感激
答案 0 :(得分:1)
这不是你问题的答案,但它会使问题消失。
就目前而言,在你的Super
课程中,拥有实例变量毫无意义。您应该设置属性readOnly
,以便使用它的人知道不允许设置fetchedResultController属性。事实上,人们有一个合理的期望,如果他们设置了财产,他们在阅读时会得到更多的东西。
因此,将实例变量移动到子类中。在超类中声明属性readOnly
并在子类中重新声明它readWrite
。