Из -viewDidLoad() класса UIViewController (называемого StageDetailViewController) я вызываю метод экземпляра другого класса (называемого ContentController).
- (void)viewDidLoad {
[super viewDidLoad];
ContentController * instance = nil;
instance = [[ContentController alloc] init];
[instance fetchSectorList];
[instance release];
....other stuff ....
}
Вызываемый метод (fetchSectorList) выглядит так:
- (void)fetchSectorList {
NSLog(@"fetchSectorList method called");
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Sectors" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) {
NSLog(@"aircraft in fetchsectorlist: %@", [info valueForKey:@"aircraft"]);
}
[fetchRequest release];
}
Метод имеет тип void просто потому, что на данном этапе все, что я хочу сделать, это вызвать его и убедиться, что он имеет действительное содержимое.
Вот проблема: когда я вызываю (void)fetchSectorList из StageDetailViewController, файл NSLog подтверждает, что он был вызван:
"вызван метод fetchSectorList"
... но цикл for ничего не возвращает!
ОДНАКО, когда я вызываю (void)fetchSectorList внутри класса ContentController, цикл for возвращает список «самолетов».
- (NSFetchedResultsController *)stageResultsController {
[self fetchSectorList];
return [self resultsControllerForEntity:@"Stage"];
}
Почему же тогда я не могу вызвать этот же метод из другого класса? Пожалуйста помоги. Все вклады очень приветствуются.
Заметки:
1) Я объявляю NSManagedObjectModel, NSManagedObjectContext и NSPersistentStoreCoordinatorin ContentController.h 2) Я унаследовал скелет для основного кода данных из примера в Интернете. Он определяет метод класса, который используется другим классом в примере для инициализации класса.
+ (ContentController *)sharedInstance {
static ContentController * instance = nil;
if (!instance) {
instance = [[ContentController alloc] init];
Однако я выбираю инициализацию из кода инициализатора, показанного выше, в viewdidload() моего вызывающего класса (StageDetailViewController). Может ли это быть частью проблемы?
Спасибо за терпеливость. Я был бы очень признателен за некоторый вклад здесь. Я был бы рад предоставить разъяснения по любому из вышеперечисленных.
Решение!!!
Ребята, спасибо за все советы. Следуя комментариям Маркуса, я немного углубился в синглтоны, и вызов, который дает желаемый результат от StageDetailViewController в -viewdidload(), выглядит просто:
[[Общий экземпляр контроллера содержимого] fetchSectorList];
Синглтон в моем приложении:
- (ContentController *) общий экземпляр
... всегда будет инициализирован к моменту инициализации StageDetailViewController, поэтому, будучи одноэлементным, его нужно инициализировать только один раз во время выполнения приложения. Таким образом, работает простой вызов метода fetchSectorList.
Маркус, извините, что связываю ваше имя с Одиночками... Я обещаю расширить свой арсенал на более позднем этапе.