【问题标题】:Updating a managedObject in Core Data在 Core Data 中更新 managedObject
【发布时间】:2011-07-28 15:47:25
【问题描述】:

到目前为止我有什么:

在一个拆分视图中,我有一个 tableview 作为它的主视图,一个 UIView 作为细节。 tableview 有 2 列:“Days”,然后是“Sessions”。我从核心数据(称为“会话”的实体)中获取数据。当我单击“会话”tableviewcell 时,详细视图会更新。

在详细视图中,我在导航栏中添加了一个“添加”按钮。当您单击它时,我会在核心数据中添加一个名为“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”实体,并获取所有数据并显示它。

问题:

每当我退出应用程序并重新启动它时,另一个拆分视图中的会话仍然存在,但我可以再次添加相同的会话。

在“添加”代码中,我有以下内容:

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

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

谁能帮忙?

【问题讨论】:

    标签: objective-c core-data entity nsfetchrequest


    【解决方案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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多