Из - 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, список "aircraft" возвращается циклом 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). Может ли это быть частью проблемы?
Спасибо за ваше терпение. Я был бы очень признателен за помощь. Я был бы рад предоставить разъяснения по любому из вышеперечисленных вопросов.
Решение !!!
Ребята, спасибо за все советы. Следуя комментариям Маркуса, я углубился в Singletons, и вызов, который дает желаемый результат от StageDetailViewController в -viewdidload (), просто:
[[ContentController sharedInstance] fetchSectorList];
Синглтон в моем приложении:
- (ContentController *) sharedInstance
... всегда будет инициализироваться к моменту инициализации StageDetailViewController, поэтому, будучи одиночным, его нужно инициализировать только один раз во время выполнения приложения. Так что простой вызов метода fetchSectorList работает.
Маркус, извините, что связал ваше имя с Синглетонами ... Я клянусь расширить свой арсенал на более позднем этапе.