Ios 添加多个coredata视图

Ios 添加多个coredata视图,ios,xcode,core-data,Ios,Xcode,Core Data,我有一个基于Tim Roadlys教程的coredata应用程序。该应用程序使用选项卡栏,其中一个加载coredata。我有另一个选项卡,加载一个ui视图,然后通过按钮将其链接到另一个tableView,该视图也将包含coredata 问题是,当您单击按钮时,第二个视图崩溃。我是通过segue传递托管对象上下文,还是必须将其放入appdelegate 谢谢你的帮助:) 这是赛格 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(i

我有一个基于Tim Roadlys教程的coredata应用程序。该应用程序使用选项卡栏,其中一个加载coredata。我有另一个选项卡,加载一个
ui视图
,然后通过按钮将其链接到另一个
tableView
,该视图也将包含coredata

问题是,当您单击按钮时,第二个视图崩溃。我是通过segue传递托管对象上下文,还是必须将其放入
appdelegate

谢谢你的帮助:)

这是赛格

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{


    if ([segue.identifier isEqualToString:@"Load Ancients Segue"]) {
        UITabBarController *tabBarViewController = (UITabBarController *) [segue destinationViewController];
        AncientsInventoryTVC *ancientsInventoryTVC = (AncientsInventoryTVC *) [[[tabBarViewController viewControllers] objectAtIndex:5] topViewController];
        ancientsInventoryTVC.managedObjectContext = self.managedObjectContext;

}

} 
当我点击按钮加载视图时,我在加载以下内容时出错; 这就是我认为我正在用segue解决的问题。 self.fetchedResultsController=[[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:无 cacheName:nil]


错误是-一个
NSFetchedResultsController
的实例需要一个非nil的
fetchRequest
managedObjectContext
这不是很多信息和零代码,但是我会把它放在prepareForSegue调用中,为什么不创建一个单独的singleton类,在这个类中保存MOC并从两个控制器使用它,而不是在控制器中创建MOC?

`谢谢-我想自己尝试代码,但是尽管它在Xcode和loads中看起来不错,我还是有一个错误。这是个好主意——我会试试看。谢谢,我正在考虑这样做,这似乎是一个令人沮丧的做法,有什么想法吗?我通常是这样做的主主主运行中心的事情。如果您正在线程化更新,请确保在线程内创建MOC,然后通过通知同步回主线程。工作起来很有魅力。很抱歉,这完全超出了我的理解力。我对CoreData还是个新手,发现它非常令人困惑。当你在后台进行更新时,你将跨越这座桥。不用担心:)谢谢,我真的很感谢你的帮助,但是现在我在关于转发声明的单例中都遇到了错误。我开始觉得这一切都超出了我的能力范围。我不明白为什么我有一个视图控制器与原始代码工作良好,而不是第二个与相同的代码。我解决了它-非常感谢大家的帮助。最后它是这样的-'-(void)viewDidLoad{id TribezGuidAppDelegate=(id)[UIApplication sharedApplication]delegate];self.managedObjectContext=[TribezGuidAppDelegate managedObjectContext];[super viewDidLoad];}'
@interface DataServer : NSObject

   +(DataServer *) get;

   @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
   @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
   @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator      *persistentStoreCoordinator;

@end



@implementation DataServer

@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

DataServer * _appData;

+(DataServer *) get {
    if (_appData == nil) {
    _appData = [[DataServer alloc] init];
}
return _appData;
}

- (NSManagedObjectContext *)managedObjectContext
{
    if (__managedObjectContext != nil) {
        return __managedObjectContext;
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        __managedObjectContext = [[NSManagedObjectContext alloc] init];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    [__managedObjectContext setMergePolicy: NSOverwriteMergePolicy];
    }
    return __managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
} 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{

    if (__persistentStoreCoordinator != nil) {
        return __persistentStoreCoordinator;
    }

    NSString * dbName = @"MyDbName.sqlite";
    NSURL *storeURL = [[self applicationDocumentsDirectory] 
    URLByAppendingPathComponent: dbName];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] 
    initWithManagedObjectModel: self.managedObjectModel];

     // request automatic migration
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    if (![__persistentStoreCoordinator 
        addPersistentStoreWithType:NSSQLiteStoreType 
        configuration:nil URL:storeURL options: options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        [[[UIAlertView alloc ]
            initWithTitle: @"Internal Error" 
            message: [NSString stringWithFormat: @"%@", [error userInfo]]
            delegate:nil 
            cancelButtonTitle: @"OK" 
            otherButtonTitles: nil] show];
      }    

       return __persistentStoreCoordinator;
    }


- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] 
    URLsForDirectory:NSDocumentDirectory 
    inDomains:NSUserDomainMask] 
    lastObject];
}