我有一个使用CoreData数据库的TableViewController。 我有另一个UIviewController,我想从中读取TableViewController的数据库。 我的所作所为如下。
//In UIviewController
-(NSArray *)fetchRecordedDatainsqldatabase
{
// construct a fetch request
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TrackerList" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
//[fetchRequest setFetchBatchSize:20];
// Create the sort descriptors array.
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"descript" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:descriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// return the result of executing the fetch request
return [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];}
我有
的财产@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
But managedObjectContext is always nil, at the line
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TrackerList"
inManagedObjectContext:self.managedObjectContext];
因此程序在到达该行时总是崩溃。 可能是什么问题?
答案 0 :(得分:0)
通常,您可以使用managedObjectContext
中存根代码中提供给您的AppDelegate
。如果是这种情况,你可以使用:
AppDelegate *appD = [[UIApplication sharedApplication] delegate];
然后代替行:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TrackerList"
inManagedObjectContext:self.managedObjectContext];
使用:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TrackerList"
inManagedObjectContext:appD.managedObjectContext];
你应该将return语句替换为:
return [appD.managedObjectContext executeFetchRequest:fetchRequest error:&error];
如果要创建自己的NSManagedObjectContext
对象,那么您应该设置其persistentStoreCoordinator
(它依次需要托管对象模型并设置持久性存储类型)。
如果您在创建项目时选中了“使用核心数据”,则可以在AppDelegate.m
中查看如何执行此操作。
无论如何,在您的情况下,您已经在第一个视图控制器中成功使用了managedObjectContext。所以你只需要在第二个视图控制器中获得相同的对象。
要使您的方法有效,您只需在所提供的代码块顶部添加一行:
self.managedObjectContext = [[[UIApplication sharedApplication] delegate] managedObjectContext];
答案 1 :(得分:0)
托管对象上下文需要使用持久性商店协调员初始化,并且需要托管对象模型。 XCode用于为AppDelegate中的所有这些实现提供锅炉板代码。
作为替代解决方案,您可以尝试使用MagicalRecord
您可以按
设置核心数据 [MagicalRecord setupCoreDataStackWithStoreNamed:@"Database.sqlite"];
您可以通过
获取上下文中的所有跟踪列表值NSManagedObjectContext *context = [NSManagedObjectContext defaultContext];
[TrackerList findAllSortedBy:@"descript" ascending:YES inContext:context];
以下链接可以更好地指导您 How to make programming in Core Data pleasant