2011-07-28 64 views
1

更新一个managedObject我迄今为止:在核心数据

在一个SPLITVIEW,我有个一个的tableview作为其主,和一个UIView作为细节。该tableview有2列:“天”,然后“会议”。我从核心数据中获取数据,这些实体称为“会话”。当我点击“Session”tableviewcell时,detailview会被更新。

在detailview中,我在导航栏中添加了一个“添加”按钮。当你点击这个时,我将一个名为“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"); 
    } 

ANOTHER SPLITVIEW的tableview中提取的 “newsession的” 实体,并获取所有数据并显示它。

问题:

每当我退出应用程序并重新启动它,在其他SPLITVIEW会议仍然存在,但我可以再次添加同一会话。

中的 “添加” 的代码,我有以下几点:

[_sessionData setValue:[NSNumber numberWithBool:YES] forKey:@"added"]; 

现在,我的sessionData是NSManagedObject;我认为只要设置这些值就可以在核心数据中更新它们。

任何人都可以帮忙吗?

回答

1

我有类似的问题,但是相似并不意味着相同。我不知道它是否适用于您,但您可以尝试。这个方法是由@macbirdie向我描述的,它适用于我。地方

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"); 
} 

并添加此梅索德在文件中

首先,导入您的AppDelegate头文件

#import "YourAppDelegate.h" 

然后,更新你的代码

- (void)saveMoc:(NSNotification *)notification { 
    YourAppDelegate *appDel = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDel.managedObjectContext mergeChangesFromContextDidSaveNotification:notification]; 
} 
+0

谢谢,我会试试这个! – jylee