2011-07-05 67 views
1

我有一個iOS項目,它在調試時按預期構建和執行,但在構建發佈時會引發編譯錯誤。該錯誤是其在父類的一個實例變量做,它專門爲超類/子類的調試/發佈構建差異

'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; 
} 

子類接口被這樣定義: -

@interface Sub : Super <UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> { 
    // extra stuff 
} 

在子類的.m我實現延遲加載fetchedResultsController

-(NSFetchedResultsController*)fetchedResultsController { 

    if (fetchedResultsController_ == nil) { // undeclared error here.... 
    //stuff 
    } 
    return fetchedResultsController_; 

我很困惑mai因爲我不明白爲什麼這會在調試中可用,但不能在Release中使用!

如果有人能確定是什麼問題我會非常

回答

1

感激這不是回答你的問題,但它會讓問題消失。

就像現在這樣,在你的Super類中,擁有實例變量是毫無意義的。你應該設置屬性readOnly,以便使用它的人知道設置fetchedResultController屬性是不允許的。就目前而言,人們有一個合理的期望,即如果他們設置了財產,他們在閱讀時會獲得更多的回報。

因此,將實例變量移動到子類中。在超類中聲明屬性readOnly,並在子類中重新聲明它爲readWrite

+0

我拿着那個板子,做了修改後,確實讓問題消失了。然而,我然後想'我需要這個超類是什麼?'並從項目中擺脫出來! – Damo

+0

@Damo::-) .... – JeremyP