Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 更新核心数据中的managedObject_Objective C_Core Data_Entity_Nsfetchrequest - Fatal编程技术网

Objective c 更新核心数据中的managedObject

Objective c 更新核心数据中的managedObject,objective-c,core-data,entity,nsfetchrequest,Objective C,Core Data,Entity,Nsfetchrequest,到目前为止我拥有的: if ([_sessionData.added isEqualToNumber:[NSNumber numberWithBool:NO]]) { [_sessionData setValue:[NSNumber numberWithBool:YES] forKey:@"added"]; NSManagedObjectContext *moc = [[DataSingleton sharedMySingleton] managedObjectContext

到目前为止我拥有的:

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");
}
在一个splitview中,我有一个tableview作为其主视图,一个UIView作为详细视图。tableview有两列:“天”和“会话”。我从核心数据中获取数据,这些数据被称为“会话”。当我单击“会话”tableviewcell时,detailview会更新

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

问题:

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");
}
每当我退出应用程序并重新启动它时,另一个splitview中的会话仍然存在,但我可以再次添加相同的会话

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

[_sessionData setValue:[NSNumber numberWithBool:YES] forKey:@"added"];
现在,我的sessionData是一个NSManagedObject;我认为只要设置这些值,就会在核心数据中更新它们

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

有人能帮忙吗?

我也有类似的问题,但相似并不意味着相同。我不知道这对你是否有效,但你可以试试。@macbirdie向我描述了这种方法,它对我很有效

首先,导入AppDelegate头文件

#import "YourAppDelegate.h"
- (void)saveMoc:(NSNotification *)notification {
    YourAppDelegate *appDel = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDel.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}
然后,更新您的代码:

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");
}
并将此方法添加到文件中的某个位置

#import "YourAppDelegate.h"
- (void)saveMoc:(NSNotification *)notification {
    YourAppDelegate *appDel = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDel.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}

我也有类似的问题,但相似并不意味着相同。我不知道这对你是否有效,但你可以试试。@macbirdie向我描述了这种方法,它对我很有效

首先,导入AppDelegate头文件

#import "YourAppDelegate.h"
- (void)saveMoc:(NSNotification *)notification {
    YourAppDelegate *appDel = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDel.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}
然后,更新您的代码:

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");
}
并将此方法添加到文件中的某个位置

#import "YourAppDelegate.h"
- (void)saveMoc:(NSNotification *)notification {
    YourAppDelegate *appDel = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDel.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}