所以我在我的应用程序中构建了一个隐藏功能。在我的设置菜单中,我有一个UISwitch
,允许用户隐藏自己。我创建了UISwitch
的IBAction,如下所示:
-(IBAction)hideUserToggle:(id)sender {
AppDelegate *newAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [newAppDelegate managedObjectContext];
NSManagedObject *newOwner;
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"LoggedInUser" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSManagedObject *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
newOwner = [NSEntityDescription insertNewObjectForEntityForName:@"LoggedInUser" inManagedObjectContext:context];
if (_hideUser.on) {
if ([objects count] == 0) {
NSLog(@"%@",[error localizedDescription]);
} else {
matches = objects[0];
[newOwner setValue:@"userHidden" forKeyPath:@"isHidden"];
NSLog(@"%@",[matches valueForKeyPath:@"isHidden"]);
}
} else {
if([objects count] == 0) {
NSLog(@"%@",[error localizedDescription]);
} else {
matches = objects[0];
[newOwner setValue:@"userNotHidden" forKeyPath:@"isHidden"];
NSLog(@"%@",[matches valueForKeyPath:@"isHidden"]);
}
}
}
这应该设置我用来确定一个人是否被隐藏的核心数据字符串的值,我稍后在我的代码中将其用作加载数据的条件。但是,当我测试此功能时,当用户翻转开关时,它似乎不会更新持久数据存储(核心数据)。我到处都看了看,我发现这里有一个延迟更新核心数据 - > Why does IOS delay when saving core data via a UIManagedDocument,但它似乎无法解决我的问题。
我希望能够翻转开关并保存该值,以便当用户滑动到另一个视图控制器时,它立即意识到用户已经进入"隐藏"或离线,因此它不会显示某些信息。
答案 0 :(得分:0)
NSManagedObjectContext
是一个暂存器。您在上下文中所做的更改仅存在于上下文中,除非或直到您将它们保存到上下文的父级(持久性存储本身或其他上下文)。
你没有保存它们。因此,我假设您没有在其他地方看到此更改,因为您正在使用不同的上下文。与此同时,这种变化最终会迁移,因为其他人恰好会拯救。
有关保存的详细信息,请参阅-save:
。
(除了:键值编码[newOwner setValue:@"userHidden" forKeyPath:@"isHidden"]
- 样式机制比使用编辑器生成的托管对象子类更加丑陋和效率低;希望它在你调试时就在那里?)