2011-07-28 122 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