【发布时间】:2013-09-25 22:15:24
【问题描述】:
我在 iOS 中创建了一个单一视图应用程序,它还包含核心数据。我将我的 .xcdatamodel 文件从另一个应用程序移到了我现在正在处理的应用程序中,但我遇到了问题。我所做的是从之前的应用程序中剪切并粘贴代码并将其放在我的 AppDelegate.h/m 文件中:
@interface DBAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
@end
还有我的 .m 文件:
@implementation DBAppDelegate
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
//the line below is what is causing an error
DBViewController *controller = (DBViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
return YES;
}
在我的 .m 文件中,我还包含了 Core Data 的样板代码,该代码也在我之前的应用程序中,但我没有发布。在我的新应用程序中,我正在做的是创建了一个访问层,它还提供了一个 Singleton 实例来访问该层。我在这个类中进行 CRUD 操作,并在 .h 文件中声明了以下属性:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;
目前,我收到以下错误:
“在“DBViewController”类型的对象上找不到属性“managedObjectContext”。我想做的是在我的方法中初始化 managedObjectContext,以允许创建单例实例:
static DB *sharedSingleton = nil;
+ (DB *) sharedInstance {
if (sharedSingleton == nil) {
sharedSingleton = [[super alloc] init];
}
return sharedSingleton;
}
我做错了什么?我意识到我没有在我的 DBViewController 中声明 managedObjectContext 对象,但是我应该用什么来代替这一行?我认为这与我的 Singleton 课程有关,但老实说,我对此一无所知。
【问题讨论】:
-
syedfa,在决定采用单例方法之前,请考虑阅读这篇文章Core Data singleton manager?。决定内存使用和线程的指标
标签: ios objective-c core-data nsmanagedobject nsmanagedobjectcontext