Ios 添加多个coredata视图
我有一个基于Tim Roadlys教程的coredata应用程序。该应用程序使用选项卡栏,其中一个加载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
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];
}