хорошо, теперь у меня есть правильное решение. Понять это потребовалось некоторое время, но теперь он работает с внедрением зависимостей из делегата приложения в контроллеры представления (listViewController).
Моя проблема заключалась в том, что я не знал, как ссылаться на мои контроллеры представления, поскольку они вложены в выделенные контроллеры navController и один tabBarController.
после прочтения большого количества сообщений здесь я понял, что должен объявить свои контроллеры представления в appDelegate.h и синтезировать их в appDelegate.m, а затем соединить их с соответствующим элементом в IB. это было сделано быстро и легко после понимания: -)
Нет необходимости в rootViewController.
MyAppDelegate.h:
#import <UIKit/UIKit.h>
#import "ListViewController.h"
@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
UIWindow *window;
UITabBarController *tabBarController;
IBOutlet ListViewController *listViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet ListViewController *listViewController;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@end
MyAppDelegate.m:
#import "MyAppDelegate.h"
#import "ListViewController.h"
@implementation MyAppDelegate
@synthesize window=_window;
@synthesize tabBarController=_tabBarController;
@synthesize managedObjectContext=__managedObjectContext;
@synthesize managedObjectModel=__managedObjectModel;
@synthesize persistentStoreCoordinator=__persistentStoreCoordinator;
@synthesize listViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error.
}
// Pass the managed object context to the view controller.
listViewController.managedObjectContext = context;
// Override point for customization after application launch.
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
return YES;
}
...
ListViewController.h
#import <CoreLocation/CoreLocation.h>
@interface ListViewController : UITableViewController <CLLocationManagerDelegate> {
UINavigationController *navController;
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
-(NSManagedObjectContext *)managedObjectContext;
@end
ListViewController.m
#import "MyAppDelegate.h"
#import "ListViewController.h"
@implementation ListViewController
@synthesize navController;
@synthesize managedObjectContext;
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"managedObjectContext: %@",[self managedObjectContext]);
NSError *error = nil;
if (![managedObjectContext save:&error]) {
NSLog(@"error: %@",[self managedObjectContext]);
return;
}
...