Различия в отладке / выпуске сборки для суперкласса / подкласса - PullRequest
1 голос
/ 05 июля 2011

У меня есть проект 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;
}

Интерфейс подкласса определяется следующим образом: -

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

В подклассе .m я реализую ленивую загрузку для fetchedResultsController

-(NSFetchedResultsController*)fetchedResultsController {

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

Я запутался в основном потому, что не понимаю, почему это будет компилироваться в Debug, а не в Release!

Если бы кто-то мог определить, в чем проблема, я был бы очень признателен

1 Ответ

1 голос
/ 05 июля 2011

Это не ответ на ваш вопрос, но это решит проблему.

В существующем классе Super иметь переменную экземпляра вообще бессмысленно. И вам, вероятно, следует установить свойство readOnly, чтобы люди, использующие его, знали, что установка свойства fetchedResultController недопустима. В сложившейся ситуации люди разумно ожидают, что, если они установят свойство, они получат больше информации, когда прочитают его.

Итак, переместите переменную экземпляра в подкласс. Объявите свойство readOnly в суперклассе и повторно объявите его readWrite в подклассе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...