我有多远:
在一个splitview中,我有一个tableview作为它的主,一个UIView作为细节。 tableview有两列:“Days”,然后是“Sessions”。我从Core Data获得了数据,这些实体称为“Sessions”。当我点击“会话”表格视图时,详细视图会更新。
在详细视图中,我在导航栏中添加了“添加”按钮。单击此按钮时,我会向核心数据添加一个名为“NewSession”的新实体。
if ([_sessionData.added isEqualToNumber:[NSNumber numberWithBool:NO]]) {
[_sessionData setValue:[NSNumber numberWithBool:YES] forKey:@"added"];
SessionData *session = (SessionData*) [NSEntityDescription insertNewObjectForEntityForName:@"NewSessions" inManagedObjectContext:[DataSingleton sharedMySingleton].managedObjectContext];
session.startDate = _sessionData.startDate;
session.endDate = _sessionData.endDate;
session.sessionLocation = nil;
session.sessionTitle = _sessionData.sessionTitle;
session.sessionDescription = _sessionData.sessionDescription;
[session setValue: [NSNumber numberWithBool:YES] forKey:@"added"];
_addButton = [[[UIBarButtonItem alloc] initWithTitle:@"Remove" style:UIBarButtonSystemItemAdd target:self action:nil] autorelease];
NSError *error = nil;
if (![[DataSingleton sharedMySingleton].managedObjectContext save:&error]) {
DebugLog(@"Whoops, couldn't save:%@", [error localizedDescription]);
}
}
else {
NSLog(@"SESSION ALREADY ADDED");
}
另一个splitview的tableview获取“NewSession”实体,并获取所有数据并显示它。
问题:
每当我退出应用程序并重新启动它时,其他splitview中的会话仍然存在,但我可以再次添加SAME会话。
在“添加”代码中,我有以下内容:
[_sessionData setValue:[NSNumber numberWithBool:YES] forKey:@"added"];
现在,我的sessionData是一个NSManagedObject;我认为只需设置值就会在核心数据中更新它们。
有人可以帮忙吗?
答案 0 :(得分:1)
我有类似的问题,但类似的并不意味着相同的。我不知道它是否适合你,但你可以尝试一下。 @macbirdie向我描述了这种方法,它对我有用。
首先,导入AppDelegate头文件:
#import "YourAppDelegate.h"
然后,更新您的代码:
if ([_sessionData.added isEqualToNumber:[NSNumber numberWithBool:NO]]) {
[_sessionData setValue:[NSNumber numberWithBool:YES] forKey:@"added"];
NSManagedObjectContext *moc = [[DataSingleton sharedMySingleton] managedObjectContext];
SessionData *session = (SessionData*) [NSEntityDescription insertNewObjectForEntityForName:@"NewSessions" inManagedObjectContext:moc];
session.startDate = _sessionData.startDate;
session.endDate = _sessionData.endDate;
session.sessionLocation = nil;
session.sessionTitle = _sessionData.sessionTitle;
session.sessionDescription = _sessionData.sessionDescription;
session.added = [NSNumber numberWithBool:YES];
_addButton = [[[UIBarButtonItem alloc] initWithTitle:@"Remove" style:UIBarButtonSystemItemAdd target:self action:nil] autorelease];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveMoc:) name:NSManagedObjectContextDidSaveNotification object:moc];
NSError *error = nil;
if (![moc save:&error]) {
DebugLog(@"Whoops, couldn't save:%@", [error localizedDescription]);
}
} else {
NSLog(@"SESSION ALREADY ADDED");
}
在文件的某处添加此方法:
- (void)saveMoc:(NSNotification *)notification {
YourAppDelegate *appDel = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDel.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}