我试图获取一些我从JSON解析的对象,我不想保存它们,直到用户完成某些操作,但我想获取它们。 不保存它们意味着我无法在应用程序的不同运行中获取它们,但这没关系。 所以我像这样创建NSManagedObject。
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:[self managedObjectContext]];
NSManagedObject *event = [[NSManagedObject alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:[self managedObjectContext]];
然后我试图像这样获取它。
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Event" inManagedObjectContext:[self managedObjectContext]];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"id_server == %@", aIdServer];
[fetchRequest setPredicate:testForTrue];
NSArray *arrayEvents = [[NSArray alloc]initWithArray:[[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]];
id_server是一个唯一值,它永远不会返回一个实际存在的事件,因为如果我打印所有事件'在CoreData中,它使用id_server显示事件。
如果我保存上下文:
NSError *error;
if (![[appDelegate managedObjectContext] save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
它可以找到事件,但是我可以在不保存上下文的情况下获取事件吗?
由于
[编辑]
我访问managedContext的方式如下:
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
答案 0 :(得分:0)
您创建的NSManagedObject
类实例将仅与用于创建它们的NSManagedObjectContext
保持关联,除非您将它们提交到持久存储。
因此,如果要获取相同的对象(不保存到持久存储),则需要引用用于创建它们的同一NSManagedObjectContext
实例。
在您的代码中,[self managedObjectContext]
每次调用时都会创建一个新的managedObjectContext,还是只返回相同的上下文?
如果它每次都创建一个新的managedObjectContext,那么您将获得NSManagedObjectContext
的新实例,因此您将无法获取那些NSManagedObject
个实例。
但是,如果它返回相同的NSManagedObjectContext实例,那么您可以使用
[myFetchRequest setIncludesPendingChanges:YES];
这与托管对象上下文中当前未保存的更改相匹配。
答案 1 :(得分:0)
即使所有属性都设置正确,因为我打印了所有值并且它们是正确的,我做了一些奇怪的事情,设置为NSString最初(来自服务器)是一个int。 当我保存上下文时,提取工作正常,但是当我没有这样做时,不知怎的,成了一个问题。 更改该属性的类型(我正在研究的那个)解决了这个问题。